<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          手把手教你使用SHAP(機(jī)器學(xué)習(xí)模型解釋工具)

          共 3912字,需瀏覽 8分鐘

           ·

          2021-12-02 10:51


          SHAP簡介

          SHAP(SHapley Additive exPlanation)是解決模型可解釋性的一種方法。SHAP基于Shapley值,該值是經(jīng)濟(jì)學(xué)家Lloyd Shapley提出的博弈論概念?!安┺摹笔侵赣卸鄠€個體,每個個體都想將自己的結(jié)果最大化的情況。該方法為通過計算在合作中個體的貢獻(xiàn)來確定該個體的重要程度。

          SHAP將Shapley值解釋表示為一種加性特征歸因方法(additive feature attribution method),將模型的預(yù)測值解釋為二元變量的線性函數(shù):

          其中,M是簡化輸入的特征數(shù),

          假設(shè)第i個樣本為,第i個樣本的第j個特征為,模型對該樣本的預(yù)測值為yi,整個模型的基線(通常是所有樣本的目標(biāo)變量的均值)為,那么SHAP value服從以下等式:

          其中SHAP值。f(xi,1)就是第i個樣本中第1個特征對最終預(yù)測值yi的貢獻(xiàn)值。每個特征的SHAP值表示以該特征為條件時預(yù)期模型預(yù)測的變化。對于每個功能,SHAP值說明了貢獻(xiàn),以說明實(shí)例的平均模型預(yù)測與實(shí)際預(yù)測之間的差異。當(dāng)f(xi,1)>0,說明該特征提升了預(yù)測值,反之,說明該特征使得貢獻(xiàn)降低。

          加性特征歸因方法是滿足以下三個條件的唯一解決方案:

          • 局部精度 Local Accuracy:對特定輸入x近似原始模型 f 時,局部精度要求解釋模型至少和 f 對簡化的輸入x′ 輸出匹配: - 缺失性 Missingness:如果簡化的輸入表示特征是否存在,缺失性要求輸入中缺失的特征對結(jié)果沒有影響: - 一致性 Consistency:一致性要求如果模型發(fā)生變化,簡化輸入的貢獻(xiàn)應(yīng)當(dāng)增加或不變,與其他輸入無關(guān):

          定理1來自于合作博弈論的組合結(jié)果,?i表示Shapley值。Young (1985)證明了Shapley值是唯一滿足局部精度、一致性和一個冗余屬性的值。

          SHAP****優(yōu)點(diǎn):

          • 解決了多重共線性問題- 不僅考慮單個變量的影響,而且考慮變量之間的協(xié)同效應(yīng)

          缺點(diǎn)

          • 計算效率低

          應(yīng)用方法

          (基于tensorflow和keras)

          1. 導(dǎo)入SHAP庫
          import shap

          如果沒有這個庫,先在terminal安裝:

          pip install shap
          1. 導(dǎo)入模型

          以隨機(jī)森林為例:

          導(dǎo)入模型的方法為:

          from sklearn.externals import joblib
          model = joblib.load('..(你的隨機(jī)森林模型路徑)\RF.model')
          1. 確定特征值,也就是你要分析的參數(shù)

          在本文的例子中,特征參數(shù)都在x_test數(shù)組中

          1. 創(chuàng)建解釋器
          explainer = shap.TreeExplainer(model) #創(chuàng)建解釋器

          因?yàn)槲覀兊哪P褪请S機(jī)森林,所以采用的是針對樹的解釋器:TreeExplainer

          1. 用解釋器對特征參數(shù)進(jìn)行解釋
          shap_values = explainer.shap_values(x_test) #x_test為特征參數(shù)數(shù)組 shap_value為解釋器計算的shap值
          1. 繪制單變量影響圖
          shap.dependence_plot("參數(shù)名稱", 計算的SHAP數(shù)組, 特征數(shù)組, interaction_index=None,show=False)

          注意:

          1)”參數(shù)名稱“表示要繪制的單變量名稱

          2)shap_value是第5步計算的SHAP值

          3)特征數(shù)組為dataframe格式。第一行需要是特征名稱,后面是具體的特征數(shù)值。如果原始數(shù)組是numpy的array數(shù)組,需要按照以下代碼添加特征名稱:

          data_with_name = pd.DataFrame(x_test) #將numpy的array數(shù)組x_test轉(zhuǎn)為dataframe格式。
          data_with_name.columns = ['特征1','特征2','特征3'#添加特征名稱

          4)interaction_index 表示是否考慮交互作用,None為只考慮單因素作用,不考慮其他因素。如果不是None,會自動搜索與該參數(shù)交互最大的參數(shù),也就是令顏色的離散程度最大的特征進(jìn)行著色,然后從圖中展示出來。

          如圖所示,如果考慮交互作用,與等效滲透率交互作用最強(qiáng)的是厚度,或者說,厚度這個參數(shù)對等效滲透率的SHAP值分布影響最大。當(dāng)然,這里可以通過設(shè)置查看別的參數(shù)的交互作用。

          圖中橫坐標(biāo)表示特征的取值,縱坐標(biāo)表示特征的SHAP值,也就是特征的取值對于模型的輸出會帶來的變化量。此外,對于同一個x值,也就是特征取值相同的樣本,他們的SHAP值不同,這是因?yàn)樵撎卣髋c其他特征有交互作用。

          5)show=False 表示不顯示圖,如果是true,顯示的是默認(rèn)繪圖格式,也就是說坐標(biāo)的大小啊,含義啊都是默認(rèn)的。如果不滿意自帶的繪圖格式,可以show=False,然后自定義格式。這里給出一套相關(guān)自定義代碼:

          fig, ax = plt.subplots()
          plt.rcParams['font.sans-serif'] = ['SimHei']  # 用來正常顯示中文標(biāo)簽
          plt.rcParams['axes.unicode_minus'] = False  # 用來正常顯示負(fù)號
          shap.dependence_plot("等效滲透率", shap_values, data_with_name,show=False)
          plt.xticks( fontproperties='Times New Roman', size=20) #設(shè)置x坐標(biāo)字體和大小
          plt.yticks(fontproperties='Times New Roman', size=20) #設(shè)置y坐標(biāo)字體和大小
          plt.xlabel('Mean(average impact on model output magnitude)', fontsize=20)#設(shè)置x軸標(biāo)簽和大小
          plt.tight_layout() #讓坐標(biāo)充分顯示,如果沒有這一行,坐標(biāo)可能顯示不全
          plt.savefig("保存.png",dpi=1000) #可以保存圖片
          1. 重要性排序繪圖
          shap.summary_plot(shap_values, x_test, plot_type="bar",show=False)

          這行代碼可以繪制出參數(shù)的重要性排序。

          8. 不同特征參數(shù)共同作用的效果圖

          shap.initjs()  # 初始化JS
          shap.force_plot(explainer.expected_value, shap_values, x_test,show=False)

          這個可以體現(xiàn)出不同參數(shù)組合對模型的貢獻(xiàn)度。也就是說,可以給出模型優(yōu)化方案,

          這里有很多種模式可以選擇,第一種是根據(jù)對模型的貢獻(xiàn)度進(jìn)行排序的,如圖所示:

          第二種是根據(jù)參數(shù)的相似性對樣本進(jìn)行排序

          第三種是按照原始的樣本排序繪圖

          后面幾種繪圖方式就是根據(jù)不同的參數(shù)進(jìn)行繪圖:

          解釋:這里鼠標(biāo)可以隨意指到任何位置,然后就可以看到不同的組合情況以及對模型的貢獻(xiàn)值(縱坐標(biāo)顯黑的部分)。這里的橫坐標(biāo)表示第幾個樣本,縱坐標(biāo)表示不同組合對模型的貢獻(xiàn)值。藍(lán)色表示負(fù)影響的參數(shù),紅色表示正影響的參數(shù)。這是一個參數(shù)疊加圖,紅色區(qū)域越大,說明正影響越強(qiáng),反之,藍(lán)色區(qū)域越大,說明負(fù)影響越強(qiáng)。個人認(rèn)為這個圖的好處就是能夠給出明確的對模型貢獻(xiàn)大的參數(shù)組合。

          1. 重要性排序圖(帶正負(fù)影響)

          傳統(tǒng)的feature importance只告訴哪個特征重要,但我們并不清楚該特征是怎樣影響預(yù)測結(jié)果的。SHAP value最大的優(yōu)勢是SHAP能對于反映出每一個樣本中的特征的影響力,而且還表現(xiàn)出影響的正負(fù)性。

          如下圖所示,這個圖也可以看出參數(shù)的重要性,但是比之前的重要性排序圖多了具體特征值的影響。以Feature5為例,該參數(shù)對模型的影響最大,當(dāng)feature5的值越小,模型的輸出越小,越大,模型的輸出越大。




          Python“寶藏級”公眾號【Python之王】專注于Python領(lǐng)域,會爬蟲,數(shù)分,C++,tensorflow和Pytorch等等。

          近 2年共原創(chuàng) 100+ 篇技術(shù)文章。創(chuàng)作的精品文章系列有:

          日常收集整理了一批不錯的 Python 學(xué)習(xí)資料,有需要的小伙可以自行免費(fèi)領(lǐng)取。

          獲取方式如下:公眾號回復(fù)資料領(lǐng)取Python等系列筆記,項目,書籍,直接套上模板就可以用了。資料包含算法、python、算法小抄、力扣刷題手冊和 C++ 等學(xué)習(xí)資料!


          瀏覽 3067
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  精品大奶自慰 | 日本一级黄色作爱视频网站 | 天天日天天爽天天操 | 免费抽插视频网站 | 色播在线视频 |