日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

机器学习模型可解释性的6种Python工具包,总有一款适合你!

發(fā)布時(shí)間:2025/3/12 python 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习模型可解释性的6种Python工具包,总有一款适合你! 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

開(kāi)發(fā)一個(gè)機(jī)器學(xué)習(xí)模型是任何數(shù)據(jù)科學(xué)家都期待的事情。我遇到過(guò)許多數(shù)據(jù)科學(xué)研究,只關(guān)注建模方面和評(píng)估,而沒(méi)有解釋。

然而,許多人還沒(méi)有意識(shí)到機(jī)器學(xué)習(xí)可解釋性在業(yè)務(wù)過(guò)程中的重要性。以我的經(jīng)驗(yàn),商業(yè)人士希望知道模型是如何工作的,而不是度量評(píng)估本身。

這就是為什么在這篇文章中,我想向大家介紹我的一些頂級(jí)機(jī)器學(xué)習(xí)可解釋性 Python 工具包,有所收獲,歡迎點(diǎn)贊分享。

我們開(kāi)始吧!

1、Yellowbrick

Yellowbrick 是一個(gè)開(kāi)源的 Python 包,它通過(guò)可視化分析和診斷工具擴(kuò)展了 scikit-learn API。對(duì)數(shù)據(jù)科學(xué)家而言,Yellowbrick 用于評(píng)估模型性能和可視化模型行為。

Yellowbrick 是一個(gè)多用途軟件包,你可以在日常建模工作中使用。盡管來(lái)自 Yellowbrick 的大多數(shù)解釋API都處于基本級(jí)別,但它對(duì)于我們的第一個(gè)建模步驟仍然有用。

讓我們用一個(gè)數(shù)據(jù)集示例來(lái)嘗試 Yellowbrick 包。對(duì)于初學(xué)者,讓我們安裝軟件包。

pip?install?yellowbrick

安裝完成后,我們可以使用 Yellowbrick 的 dataset 示例來(lái)測(cè)試包。

#Pearson?Correlation from?yellowbrick.features?import?rank2d from?yellowbrick.datasets?import?load_credit X,?_?=?load_credit() visualizer?=?rank2d(X)

通過(guò)一條直線,我們可以使用 Pearson 相關(guān)方法來(lái)可視化特征之間的相關(guān)性。它是可定制的,因此你可以使用另一個(gè)相關(guān)函數(shù)。

讓我們嘗試開(kāi)發(fā)模型來(lái)評(píng)估模型性能并解釋模型。我將使用 Yellowbrick 用戶指南中的示例數(shù)據(jù)集,并生成一個(gè)判別閾值圖,以找到分隔二進(jìn)制類的最佳閾值。

from?yellowbrick.classifier?import?discrimination_threshold from?sklearn.linear_model?import?LogisticRegression from?yellowbrick.datasets?import?load_spam X,?y?=?load_spam() visualizer?=?discrimination_threshold(LogisticRegression(multi_class="auto",?solver="liblinear"),?X,y)

使用 Yellowbrick 閾值圖,我們可以解釋模型在0.4概率閾值下表現(xiàn)最好。

如果你想知道 Yellowbrick 能做什么,請(qǐng)?jiān)L問(wèn)主頁(yè)了解更多信息。

https://www.scikit-yb.org/en/latest/about.html

2、ELI5

ELI5 是一個(gè) Python 包,有助于機(jī)器學(xué)習(xí)的可解釋性。取自Eli5軟件包,此軟件包的基本用法是:

  • 檢查模型參數(shù),試圖弄清楚模型是如何全局工作的

  • 檢查模型的單個(gè)預(yù)測(cè),并找出模型做出決策的原因

如果 Yellowbrick 側(cè)重于特征和模型性能解釋,ELI5 側(cè)重于模型參數(shù)和預(yù)測(cè)結(jié)果。就我個(gè)人而言,我更喜歡 ELI5,因?yàn)樗慕忉尫浅:?jiǎn)單,商業(yè)人士可以理解它。

讓我們用一個(gè)示例數(shù)據(jù)集和隨機(jī)森林模型分類器來(lái)嘗試 ELI5 包。我將使用 seaborn 包中的數(shù)據(jù)集,因?yàn)樗亲詈?jiǎn)單的數(shù)據(jù)集。

#Preparing?the?model?and?the?dataset from?sklearn.ensemble?import?RandomForestClassifier from?sklearn.model_selection?import?train_test_split mpg?=?sns.load_dataset('mpg').dropna() mpg.drop('name',?axis?=1?,?inplace?=?True) #Data?splitting X_train,?X_test,?y_train,?y_test?=?train_test_split(mpg.drop('origin',?axis?=?1),?mpg['origin'],?test_size?=?0.2,?random_state?=?121) #Model?Training clf?=?RandomForestClassifier() clf.fit(X_train,?y_train)

最基本的 ELI5 函數(shù)是表示分類器權(quán)重和分類器預(yù)測(cè)結(jié)果。讓我們嘗試這兩個(gè)函數(shù)來(lái)理解解釋是如何產(chǎn)生的。

import?eli5 eli5.show_weights(clf,?feature_names?=?list(X_test.columns))

從上圖中,可以看到分類器顯示了分類器特征的重要性及其偏差。你可以看到'displacement'特征是最重要的特征,但是它們有很高的偏差,這表明模型中存在偏差。讓我們?cè)囍故疽幌骂A(yù)測(cè)結(jié)果的可解釋性。

eli5.show_prediction(clf,?X_train.iloc[0])

利用 ELI5 的 show_prediction 函數(shù),得到特征貢獻(xiàn)信息。哪些特征對(duì)某些預(yù)測(cè)結(jié)果有貢獻(xiàn)?這些特征對(duì)概率的影響有多大。這是一個(gè)很好的函數(shù),你可以輕松地向業(yè)務(wù)人員解釋模型預(yù)測(cè)。

但是,最好記住上面的函數(shù)是基于樹(shù)的解釋(因?yàn)槲覀兪褂秒S機(jī)森林模型)。它可能足夠好給你一個(gè)商業(yè)人士的解釋;然而,由于模型的原因,它可能是有偏差的。這就是為什么 ELI5 提供了另一種基于模型度量來(lái)解釋黑盒模型的方法——它被稱為置換重要性(Permutation Importance)。

讓我們先試試置換重要性函數(shù)。

#Permutation?Importance perm?=?PermutationImportance(clf,?scoring?=?'accuracy',random_state=101).fit(X_test,?y_test) show_weights(perm,?feature_names?=?list(X_test.columns))

置換重要性背后的思想是評(píng)分(準(zhǔn)確度、精確度、召回等)如何隨特征的存在或不存在而變化。從以上結(jié)果可以看出,displacement 的得分最高,為0.3013。當(dāng)置換位移特征時(shí),模型的精度會(huì)有0.3013的變化。正負(fù)號(hào)后面的值就是不確定值。置換重要性法的本質(zhì)上是一個(gè)隨機(jī)過(guò)程;這就是為什么我們有不確定值。

位置越高,影響得分的特征就越關(guān)鍵。底部的一些特征顯示一個(gè)負(fù)值,這很有趣,因?yàn)檫@意味著當(dāng)我們排列特征時(shí),該特征會(huì)增加得分。就我個(gè)人而言,ELI5 為我提供了足夠的機(jī)器學(xué)習(xí)解釋能力。如果你想了解更多,可以參考如下鏈接:

https://github.com/TeamHG-Memex/eli5

3、SHAP

我之前文章中已多次提及了,如果我們?cè)谟懻摍C(jī)器學(xué)習(xí)的解釋性,SHAP 是繞不開(kāi)的。對(duì)于從未聽(tīng)說(shuō)過(guò)的人,SHAP或(SHapley Additive exPlanations)是一種博弈論方法,用來(lái)解釋任何機(jī)器學(xué)習(xí)模型的輸出。簡(jiǎn)單地說(shuō),SHAP 是使用 SHAP 值來(lái)解釋每個(gè)特性的重要性。

讓我們嘗試使用示例數(shù)據(jù)集和模型來(lái)更詳細(xì)地解釋SHAP。首先,我們需要安裝SHAP包。

#Installation?via?pip pip?install?shap? #Installation?via?conda-forge? conda?install?-c?conda-forge?shap

在這個(gè)示例中,我將使用泰坦尼克號(hào)示例數(shù)據(jù)集。

#Preparing?the?model?and?the?dataset? from?sklearn.ensemble?import?RandomForestClassifier from?sklearn.model_selection?import?train_test_split?? titanic?=?sns.load_dataset('titanic').dropna()? titanic?=?titanic[['survived',?'age',?'sibsp',?'parch']]?? #Data?splitting?for?rfc? X_train,?X_test,?y_train,?y_test?=?train_test_split(titanic.drop('survived',?axis?=?1),?titanic['survived'],?test_size?=?0.2,?random_state?=?121)?? #Model?Training? clf?=?RandomForestClassifier()?clf.fit(X_train,?y_train)

我們已經(jīng)用泰坦尼克號(hào)的數(shù)據(jù)訓(xùn)練了我們的數(shù)據(jù),現(xiàn)在我們可以試著用SHAP來(lái)解釋數(shù)據(jù)。讓我們使用模型的全局可解釋性來(lái)理解SHAP是如何工作的。

import?shap? shap_values?=?shap.TreeExplainer(clf).shap_values(X_train)?shap.summary_plot(shap_values,?X_train)

從預(yù)測(cè)結(jié)果可以看出,年齡特征對(duì)預(yù)測(cè)結(jié)果的貢獻(xiàn)最大。如果你想查看特定的類對(duì)預(yù)測(cè)的貢獻(xiàn),我們只需要稍微調(diào)整一下代碼。假設(shè)我們想看看類0,這意味著我們使用以下代碼。

shap.summary_plot(shap_values[0],?X_train)

從上圖中,我們可以看到每個(gè)數(shù)據(jù)對(duì)預(yù)測(cè)概率的貢獻(xiàn)。顏色越紅,值越高,反之亦然。此外,當(dāng)值為正時(shí),它有助于0級(jí)預(yù)測(cè)結(jié)果概率。

SHAP不局限于全局可解釋性;它還提供了解釋單個(gè)數(shù)據(jù)集的函數(shù)。讓我們?cè)囍忉尩谝恍械念A(yù)測(cè)結(jié)果。

explainer?=?shap.TreeExplainer(clf) shap_value_single?=?explainer.shap_values(X?=?X_train.iloc[0,:]) shap.force_plot(base_value?=?explainer.expected_value[1],shap_values?=?shap_value_single[1],features?=?X_train.iloc[0,:])

從上圖中可以看出,預(yù)測(cè)更接近于類0,因?yàn)樗怯赡挲g和 sibsp 特征推送的,而parch特征只提供了一點(diǎn)貢獻(xiàn)。

4、Mlxtend

Mlxtend 是一個(gè)用于數(shù)據(jù)科學(xué)日常工作的 Python 包。包中的api不僅限于可解釋性,還擴(kuò)展到各種功能,如統(tǒng)計(jì)評(píng)估、數(shù)據(jù)模式、圖像提取等。但是,我們將討論我們當(dāng)前文章的可解釋性API—決策區(qū)域。

Decision Regions plot API 將生成一個(gè) Decision region plot,以可視化特征如何決定分類模型預(yù)測(cè)。讓我們嘗試使用示例數(shù)據(jù)和Mlxtend的指南。

首先,我們需要安裝 Mlxtend 包。

pip?install?Mlxtend

然后,我們使用示例數(shù)據(jù)集并開(kāi)發(fā)一個(gè)模型來(lái)查看 MLXTEN 的操作。

import?numpy?as?np import?matplotlib.pyplot?as?plt import?matplotlib.gridspec?as?gridspec import?itertools from?sklearn.linear_model?import?LogisticRegression from?sklearn.svm?import?SVC from?sklearn.ensemble?import?RandomForestClassifier from?mlxtend.classifier?import?EnsembleVoteClassifier from?mlxtend.data?import?iris_data from?mlxtend.plotting?import?plot_decision_regions #?Initializing?Classifiers clf1?=?LogisticRegression(random_state=0) clf2?=?RandomForestClassifier(random_state=0) clf3?=?SVC(random_state=0,?probability=True) eclf?=?EnsembleVoteClassifier(clfs=[clf1,?clf2,?clf3],?weights=[2,?1,?1],?voting='soft') #?Loading?some?example?data X,?y?=?iris_data() X?=?X[:,[0,?2]] #?Plotting?Decision?Regions gs?=?gridspec.GridSpec(2,?2) fig?=?plt.figure(figsize=(10,?8)) for?clf,?lab,?grd?in?zip([clf1,?clf2,?clf3,?eclf],['Logistic?Regression',?'Random?Forest','RBF?kernel?SVM',?'Ensemble'],itertools.product([0,?1],?repeat=2)):clf.fit(X,?y)ax?=?plt.subplot(gs[grd[0],?grd[1]])fig?=?plot_decision_regions(X=X,?y=y,?clf=clf,?legend=2)plt.title(lab) plt.show()

從以上情節(jié)可以解釋模型的決策。當(dāng)每個(gè)模型進(jìn)行預(yù)測(cè)時(shí),可以看到它們之間的差異。例如,一類的 Logistic 回歸模型預(yù)測(cè)結(jié)果越大,X軸值越高,但Y軸上變化不大。與隨機(jī)森林模型相比,在X軸值之后,劃分沒(méi)有很大變化,Y軸值在每次預(yù)測(cè)中都是常數(shù)。

決策區(qū)域的唯一缺點(diǎn)是它只限于二維特征,因此,它比實(shí)際模型本身更適合于預(yù)分析。

5、PDPBox

PDP(Partial Dependence Plot) 是一個(gè)顯示特征對(duì)機(jī)器學(xué)習(xí)模型預(yù)測(cè)結(jié)果的邊際影響的圖。它用于評(píng)估特征與目標(biāo)之間的相關(guān)性是線性的、單調(diào)的還是更復(fù)雜的。

讓我們嘗試使用如下示例數(shù)據(jù)來(lái)了解PDPBox。首先,我們需要安裝PDPBox包。

pip?install?pdpbox

我們可以嘗試獲取更多關(guān)于:PDPBox如何幫助我們創(chuàng)建可解釋的機(jī)器學(xué)習(xí)的信息。

import?pandas?as?pd from?pdpbox?import?pdp,?get_dataset,?info_plots #We?would?use?the?data?and?model?from?the?pdpbox test_titanic?=?get_dataset.titanic() titanic_data?=?test_titanic['data'] titanic_features?=?test_titanic['features'] titanic_model?=?test_titanic['xgb_model'] titanic_target?=?test_titanic['target']

當(dāng)我們有了數(shù)據(jù)和模型后,讓我們嘗試使用 info_plots 函數(shù)檢查特征和目標(biāo)之間的信息。

fig,?axes,?summary_df?=?info_plots.target_plot(df=titanic_data,?feature='Sex',?feature_name='gender',?target=titanic_target) _?=?axes['bar_ax'].set_xticklabels(['Female',?'Male'])

你可以通過(guò)一個(gè)函數(shù)獲取目標(biāo)和特征的統(tǒng)計(jì)信息,這可以讓業(yè)務(wù)方很容易解釋。讓我們檢查模型預(yù)測(cè)分布函數(shù)以及特征。

fig,?axes,?summary_df?=?info_plots.actual_plot(model=titanic_model,?X=titanic_data[titanic_features],?feature='Sex',?feature_name='gender')

現(xiàn)在,讓我們繼續(xù)使用PDP繪圖函數(shù)來(lái)解釋我們的模型預(yù)測(cè)。

pdp_sex?=?pdp.pdp_isolate(model=titanic_model,?dataset=titanic_data,?model_features=titanic_features,?feature='Sex') fig,?axes?=?pdp.pdp_plot(pdp_sex,?'Sex') _?=?axes['pdp_ax'].set_xticklabels(['Female',?'Male'])

從上圖中,我們可以解釋當(dāng)性別特征為男性時(shí),預(yù)測(cè)概率降低(意味著男性存活的可能性降低)。這就是我們?nèi)绾问褂?PDPbox 來(lái)實(shí)現(xiàn)模型的可解釋性。

6、InterpretML

InterpretML 是一個(gè)Python包,它包含許多機(jī)器學(xué)習(xí)可解釋性API。此包的目的是基于繪圖圖提供交互式繪圖,以了解預(yù)測(cè)結(jié)果。

InterpretML 提供了許多方法來(lái)解釋你的機(jī)器學(xué)習(xí),方法包括使用我們討論過(guò)的許多技術(shù)——即SHAP和PDP。此外,這個(gè)包擁有一個(gè)Glassbox模型API,它在開(kāi)發(fā)模型時(shí)提供了一個(gè)可解釋性函數(shù)。

讓我們用一個(gè)示例數(shù)據(jù)集來(lái)嘗試這個(gè)包。首先,我們需要安裝 InterpretML。

pip?install?interpret

讓我們嘗試使用泰坦尼克號(hào)數(shù)據(jù)集示例來(lái)開(kāi)發(fā)模型。

from?sklearn.model_selection?import?train_test_split from?interpret.glassbox?import?ExplainableBoostingClassifier import?seaborn?as?sns #the?glass?box?model?(using?Boosting?Classifier) ebm?=?ExplainableBoostingClassifier(random_state=120) titanic?=?sns.load_dataset('titanic').dropna() #Data?splitting X_train,?X_test,?y_train,?y_test?=?train_test_split(titanic.drop(['survived',?'alive'],?axis?=?1),?titanic['survived'],?test_size?=?0.2,?random_state?=?121) #Model?Training ebm.fit(X_train,?y_train)

它將自動(dòng)對(duì)你的特征進(jìn)行熱編碼,并設(shè)計(jì)交互特性。讓我們?cè)囍玫竭@個(gè)模型的全局解釋。

from?interpret?import?set_visualize_provider from?interpret.provider?import?InlineProvider set_visualize_provider(InlineProvider()) from?interpret?import?show ebm_global?=?ebm.explain_global() show(ebm_global)

從上圖中,我們可以看到模型特征重要性的總結(jié)。它根據(jù)模型特征的重要性向你顯示所有被認(rèn)為重要的特征。

“可解釋”是一個(gè)交互式繪圖,可以使用它來(lái)更具體地解釋模型。如果我們只在上圖中看到摘要,我們可以選擇另一個(gè)組件來(lái)指定要查看的功能。這樣,我們就可以解釋模型中的特征是如何影響預(yù)測(cè)的。

在上圖中,我們可以看到低票價(jià)降低了生存的機(jī)會(huì),但隨著票價(jià)越來(lái)越高,它增加了生存的機(jī)會(huì)。然而,你可以看到密度和條形圖-許多人來(lái)自較低的票價(jià)。

通常情況下,我們不僅對(duì)整體的可解釋性感興趣,而且對(duì)局部的可解釋性感興趣。在本例中,我們可以使用以下代碼來(lái)解釋它。

#Select?only?the?top?5?rows?from?the?test?data ebm_local?=?ebm.explain_local(X_test[:5],?y_test[:5]) show(ebm_local)

局部可解釋性顯示了單個(gè)預(yù)測(cè)是如何進(jìn)行的。這里顯示的值是來(lái)自模型的對(duì)數(shù)賠率分?jǐn)?shù),它們被添加并通過(guò) logistic 函數(shù)傳遞,以得到最終預(yù)測(cè)。在這個(gè)預(yù)測(cè)中,我們可以看到男性對(duì)降低存活率的貢獻(xiàn)最大。

總結(jié)

機(jī)器學(xué)習(xí)的可解釋性對(duì)于任何數(shù)據(jù)科學(xué)家來(lái)說(shuō)都是一個(gè)重要的工具,因?yàn)樗梢宰屇愀玫貙⒛P徒Y(jié)果傳達(dá)給業(yè)務(wù)用戶,內(nèi)容較多,希望對(duì)大家有幫助!

往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線手冊(cè)深度學(xué)習(xí)筆記專輯《統(tǒng)計(jì)學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專輯溫州大學(xué)《機(jī)器學(xué)習(xí)課程》視頻 本站qq群851320808,加入微信群請(qǐng)掃碼:

總結(jié)

以上是生活随笔為你收集整理的机器学习模型可解释性的6种Python工具包,总有一款适合你!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲射色 | 黄色片网站免费看 | 亚洲天堂123 | 秋霞综合网 | 韩国久久久久久 | 中文字幕一区二区三区人妻 | 99国产精品视频免费观看一公开 | 丝袜五月天 | 欧美在线播放一区 | 涩涩视频网 | 香蕉av一区二区 | 少妇高潮惨叫久久久久 | 国产大奶在线 | 香蕉视频国产在线观看 | 亚洲免费福利视频 | 久久中文字幕国产 | 国产馆av | 特级毛片在线播放 | 欧美生活一级片 | 恶虐女帝安卓汉化版最新版本 | 免费在线h | 成人免费在线电影 | 国产911视频 | 国产乱码精品一区二区三区中文 | 337p粉嫩日本欧洲亚洲大胆 | 伊人成综合网 | 美国av片 | 美女一区二区三区视频 | 久久在线视频免费观看 | 欧美巨大另类极品videosbest | 五月婷婷综合激情网 | h片在线观看视频 | 超碰97人| 波多野结衣在线一区二区 | 久久躁日日躁aaaaxxxx | 在线天堂资源 | 成人亚洲精品久久久久软件 | 免费黄色入口 | 国产在线网站 | 一区二区在线精品 | 538国产精品一区二区免费视频 | 未满十八18禁止免费无码网站 | 国产伦精品视频一区二区三区 | 久久精品婷婷 | 床戏高潮做进去大尺度视频网站 | 玖草视频在线观看 | 丁香网五月天 | av狠狠操| 日本欧美不卡 | 亚洲欧洲一区二区 | 精品黑人一区二区三区观看时间 | 在线资源站 | 欧美在线观看视频一区二区 | 九一av | m3u8成人免费视频 | 97人妻一区二区精品免费视频 | 777中文字幕 | 欧美日韩国产一区二区三区 | 中文字幕在线2019 | 激情视频一区二区三区 | 国产精品一区二区久久国产 | 五月婷婷亚洲 | 成人18视频在线观看 | 在线免费观看一区二区 | 小草av在线 | 用我的手指扰乱你 | 小柔的淫辱日记(1~7) | 性色AV无码久久一区二区三 | 波多野结衣中文字幕在线播放 | 在线观看一区二区三区视频 | 就要爱爱tv | 日韩av成人在线观看 | av噜噜在线观看 | 欧美成人综合在线 | 亚洲码无人客一区二区三区 | 女人性高潮视频 | 久久久久久国产 | 亚洲深夜在线 | 五月网站 | 亚洲一区中文字幕永久在线 | 粉嫩一区二区三区 | 欧美a在线播放 | 日日夜夜一区二区 | 成人一区二区三区四区 | aaa人片在线 | 国产91高清 | www亚洲精品 | 91免费污视频 | 高清av网 | 天堂国产一区二区三区 | 肉丝袜脚交视频一区二区 | 亚洲精品美女视频 | 人妻换人妻仑乱 | 国产精品久久久久不卡 | 亚洲理论中文字幕 | 女性裸体不遮胸图片 | 国产精品无码久久久久成人app | 国产精品久久久久久亚洲影视 | 91成人精品一区在线播放 |