【机器学习】4 款超级棒的模型可解释性工具包,总有一款适合你!
近年來機器學習模型可解釋性成為大家關注的熱點,我們不再滿足于模型效果,而是對模型效果的產生原因有了更多的思考,這樣的思考不僅有助于模型和特征優化,也能更好的幫助理解模型本身和提升模型服務質量。
算法通常被看成黑盒子模型,訓練數據流入黑盒子,訓練出一個函數(這個函數也可以稱之為模型),輸入新的數據到該函數得出預測結果。對于算法給出的預測結果,其實很多人內心都會有質疑:"WHY?"
這就是為什么我們要擁有模型可解釋性。
什么是模型可解釋性?
模型可解釋性試圖理解和解釋響應函數所做出的這些決定,即what,why以及how。通常,機器學習模型通過預測,并使用這些預測解決一系列問題。我們會有如下疑問:
這些預測的可信度如何?
他們足夠可靠地做出重大決策嗎?
模型可解釋性將你的注意力從"結論是什么?"轉到"為什么得出這個結論?"。
為什么模型可解釋性很重要?
以一個分類器的示例:哈士奇與狼的分類問題,其中一些哈士奇犬被錯誤分類為狼。使用可解釋的機器學習,你可能會發現這些錯誤分類主要是由于圖像中的雪而引起的,分類器將其用作預測狼的特征。
模型可解釋性對于驗證模型結果是否符合你的期望是很有必要的。它不僅可以與業務方建立信任關系,推動項目繼續進行下去,而且可以結果來改善模型性能本身。
如何解釋機器學習模型?
為方便大家理解,讓我們創建一個模型,引入隨機森林分類器,并對模型進行訓練、預測。
#訓練 From?sklearn.ensemble?import?RandomForestClassifier rfc?=?RandomForestClassifier() rfc.fit(train_X,y) #預測 testpred?=?rfc.predict(test_X)模型可解釋工具
我們已經建立了模型,現在是時候介紹、使用「4種」可解釋工具了。
1、ELI5
我們先從最流行的工具之一ELI5開始。ELI5 是一個 Python 軟件包,可幫助調試機器學習分類器并解釋其預測。它可以為以下機器學習框架和軟件包提供支持:
scikit-learn
Keras
xgboost
LightGBM
CatBoost
sklearn-crfsuite
ELI5 安裝方法
pip?install?eli5 #?或 conda?install?-c?conda-forge?eli5ELI5 使用方法
import?eli5 eli5.show_weights(rfc) 結果更多使用技巧,文檔參考如下:
https://eli5.readthedocs.io/en/latest/2、LIME
在機器學習模型事后局部可解釋性研究中,一種代表性方法是由 Marco Tulio Ribeiro 等人提出的 Local Interpretable Model-Agnostic Explanation(LIME)。
一般地,對于每一個輸入實例,LIME首先利用該實例以及該實例的一組近鄰數據訓練一個易于解釋的線性模型來擬合待解釋模型的局部邊界,然后基于該線性模型解釋待解釋模型針對該實例的決策依據,其中,線性模型的權重系數直接體現了當前決策中該實例的每一維特征重要性。
LIME 安裝方法
pip?install?lime #?或 conda?install?-c?conda-forge?limeLIME 使用方法
LIME主要提供三種解釋方法,這三種方法都處理不同類型的數據:
表格解釋
文字翻譯
圖像解釋。
我們將使用Lime的文本解釋方法。
rfc.fit(vectorized_train_text,y) Import?lime From?sklearn.pipeline?import?make_pipeline explainer?=?lime.lime_text.LimeTextExplainer( class_names=["Not?Patient",?"Patient"]) pl?=?make_pipeline(vect,rfc) exp?=?explainer.explain_instance( train["combined_text"][689],?pl.predict_proba) exp.show_in_notebook()更多使用技巧,文檔參考如下:
https://github.com/marcotcr/lime3、SHAP
SHAP(SHapley Additive exPlanations)是一種博弈論方法,用于解釋任何機器學習模型的輸出。它使用博弈論中的經典Shapley值及其相關擴展將最佳信用分配與本地解釋聯系起來。
SHAP 安裝方法
pip?install?shap or conda?install?-c?conda-forge?shapSHAP 使用方法
import?xgboost import?shap#?train?an?XGBoost?model X,?y?=?shap.datasets.boston() model?=?xgboost.XGBRegressor().fit(X,?y)#?explain?the?model's?predictions?using?SHAP #?(same?syntax?works?for?LightGBM,?CatBoost,?scikit-learn,?transformers,?Spark,?etc.) explainer?=?shap.Explainer(model) shap_values?=?explainer(X)#?visualize?the?first?prediction's?explanation shap.plots.waterfall(shap_values[0])上面的解釋顯示了每個功能都有助于將模型輸出從基值推向模型輸出的功能。推高預測的特征以紅色顯示,推低預測的特征以藍色顯示??梢暬嗤忉尩牧硪环N方法是使用力圖:
#?visualize?the?first?prediction's?explanation?with?a?force?plot shap.plots.force(shap_values[0])更多使用技巧,文檔參考如下:
https://github.com/slundberg/shap4、MLXTEND
Mlxtend(機器學習擴展)是一個用于數據科學和機器學習任務的非常有用 Python 工具庫。
MLXTEND 安裝方法
pip?install?mlxtend or? conda?install?-c?conda-forge?mlxtend?MLXTEND 使用方法
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()更多使用技巧,文檔參考如下:
總結
以上是生活随笔為你收集整理的【机器学习】4 款超级棒的模型可解释性工具包,总有一款适合你!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win7系统网页视频无法播放怎么办
- 下一篇: 积米浏览器如何清除浏览数据