博客專欄

        EEPW首頁 > 博客 > 在機器學習中使用 SHAP 值實現模型可解釋性

        在機器學習中使用 SHAP 值實現模型可解釋性

        發布人:ygtu 時間:2023-08-06 來源:工程師 發布文章

        推薦:使用NSDT場景編輯器助你快速搭建可二次編輯的3D應用場景

        機器學習可解釋性

        機器學習可解釋性是指用于解釋和理解機器學習模型如何進行預測的技術。隨著模型變得越來越復雜,解釋它們的內在邏輯并深入了解它們的行為變得越來越重要。

        這很重要,因為機器學習模型通常用于做出具有現實世界后果的決策,例如醫療保健、金融和刑事司法。如果沒有可解釋性,就很難知道機器學習模型是否做出了正確的決策,或者它是否有偏見。

        在機器學習可解釋性方面,需要考慮各種技術。一種流行的方法是確定特征重要性分數,該分數揭示了對模型預測影響最大的特征。SKlearn 模型默認提供特征重要性分數,但您也可以利用 SHAP、Lime 和 Yellowbrick 等工具來更好地可視化和理解機器學習結果。

        本教程將介紹 SHAP 值以及如何使用 SHAP Python 包解釋機器學習結果。

        什么是 SHAP 值?

        SHAP 值基于博弈論中的 Shapley 值。在博弈論中,Shapley值有助于確定協作博弈中的每個玩家對總支出的貢獻。

        對于機器學習模型,每個特征都被視為一個“玩家”。要素的 Shapley 值表示該要素在所有可能的特征組合中的貢獻的平均量級。

        具體而言,SHAP 值是通過比較存在和不存在特定特征的模型預測來計算的。這是針對數據集中的每個要素和每個樣本以迭代方式完成的。

        通過為每個特征分配每個預測的重要性值,SHAP 值提供了模型行為的本地、一致的解釋。它們揭示了哪些特征對特定預測的影響最大,無論是正面的還是負面的。這對于理解復雜機器學習模型(如深度神經網絡)背后的推理很有價值。

        SHAP 值入門

        在本節中,我們將使用 Kaggle 的移動價格分類數據集來構建和分析多分類模型。我們將根據功能(例如RAM,尺寸等)對手機價格進行分類。目標變量為 <code>price_range</code>,值為 0(低成本)、1(中等成本)、2(高成本)和 3(非常高的成本)。

        注意:帶有輸出的代碼源可在 Deepnote 工作區中找到。

        安裝 SHAP

        使用<code>pip</code>或<code>conda</code>命令在系統上安裝<code>shap</code>非常簡單。

        pip install shap

        conda install -c conda-forge shap
        加載數據

        數據集干凈且組織良好,使用標簽編碼器將類別轉換為數字。

        import pandas as pd
        
        mobile = pd.read_csv("train.csv")
        mobile.head()

        在機器學習中使用 SHAP 值實現模型可解釋性

        準備數據

        首先,我們將確定因變量和自變量,然后將它們拆分為單獨的訓練集和測試集。

        from sklearn.model_selection import train_test_split
        
         
        X = mobile.drop('price_range', axis=1)
        y = mobile.pop('price_range')
        
        # Train and test split
        X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)
        訓練和評估模型

        之后,我們將使用訓練集訓練我們的隨機森林分類器模型,并在測試集上評估其性能。我們獲得了 87% 的準確率,這是相當不錯的,我們的模型總體上是平衡的。

        from sklearn.ensemble import RandomForestClassifier
        from sklearn.metrics import classification_report
        
        # Model fitting
        rf = RandomForestClassifier()
        rf.fit(X_train, y_train)
        
        # Prediction
        y_pred = rf.predict(X_test)
        
        # Model evaluation
        print(classification_report(y_pred, y_test))
                      precision    recall  f1-score   support
        
                   0       0.95      0.91      0.93       141
                   1       0.83      0.81      0.82       153
                   2       0.80      0.85      0.83       158
                   3       0.93      0.93      0.93       148
        
            accuracy                           0.87       600
           macro avg       0.88      0.87      0.88       600
        weighted avg       0.87      0.87      0.87       600
        計算 SHAP 值

        在這一部分中,我們將創建一個 SHAP 樹解釋器,并使用它來計算測試集的 SHAP 值。

        import shap
        shap.initjs()
        
        # Calculate SHAP values
        explainer = shap.TreeExplainer(rf)
        shap_values = explainer.shap_values(X_test)
        摘要圖

        匯總圖是模型中每個特征的特征重要性的圖形表示。它是了解模型如何進行預測和識別最重要特征的有用工具。

        在我們的例子中,它顯示了每個目標類的特征重要性。事實證明,手機的“內存”,“battery_power”和尺寸在決定價格范圍方面起著重要作用。

        # Summarize the effects of features
        shap.summary_plot(shap_values, X_test)

        在機器學習中使用 SHAP 值實現模型可解釋性

        我們現在將可視化類“0”的未來重要性。我們可以清楚地看到,RAM、電池和手機尺寸對預測低成本手機有負面影響。

        shap.summary_plot(shap_values[0], X_test)

        在機器學習中使用 SHAP 值實現模型可解釋性

        依賴關系圖

        依賴圖是一種散點圖,用于顯示特定特征如何影響模型的預測。在此示例中,功能為“battery_power”。

        圖的 x 軸顯示“battery_power”的值,y 軸顯示形狀值。當電池電量超過1200時,開始對低端手機型號的分類產生負面影響。

        shap.dependence_plot("battery_power", shap_values[0], X_test,interaction_index="ram")

        在機器學習中使用 SHAP 值實現模型可解釋性

        力圖

        讓我們將焦點縮小到單個樣本。具體來說,我們將仔細研究第 12 個樣本,看看哪些特征導致了“0”結果。為此,我們將使用力圖并輸入期望值、SHAP 值和測試樣本。

        事實證明,RAM、手機尺寸和時鐘速度對型號的影響更大。我們還注意到,該模型不會預測“0”類,因為 f(x) 較低。

        shap.plots.force(explainer.expected_value[0], shap_values[0][12,:], X_test.iloc[12, :], matplotlib = True)

        在機器學習中使用 SHAP 值實現模型可解釋性

        我們現在將可視化類“1”的力圖,我們可以看到它是正確的類。

        shap.plots.force(explainer.expected_value[1], shap_values[1][12, :], X_test.iloc[12, :],matplotlib = True)

        在機器學習中使用 SHAP 值實現模型可解釋性

        我們可以通過檢查測試集的第 12 條記錄來確認我們的預測。

        y_test.iloc[12]
        >>> 1
        決策圖

        決策圖可以成為了解機器學習模型決策過程的有用工具。它們可以幫助我們識別對模型預測最重要的特征,并識別潛在的偏差。

        為了更好地理解影響模型預測類“1”的因素,我們將檢查決策圖。根據此圖,手機高度似乎對模型有負面影響,而RAM則有積極影響。

        shap.decision_plot(explainer.expected_value[1], shap_values[1][12,:], X_test.columns)

        在機器學習中使用 SHAP 值實現模型可解釋性

        結論

        在這篇博文中,我們介紹了 SHAP 值,這是一種解釋機器學習模型輸出的方法。我們已經展示了如何使用 SHAP 值來解釋單個預測和模型的整體性能。我們還提供了如何在實踐中使用 SHAP 值的示例。

        隨著機器學習擴展到醫療保健、金融和自動駕駛汽車等敏感領域,可解釋性和可解釋性只會變得越來越重要。SHAP 值提供了一種靈活、一致的方法來解釋預測和模型行為。它可用于深入了解模型如何進行預測、識別潛在偏差并提高模型的性能。

        原文鏈接:在機器學習中使用 SHAP 值實現模型可解釋性 (mvrlink.com)


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: AI 人工智能 chatgpt

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 吴桥县| 屯昌县| 额尔古纳市| 隆尧县| 库伦旗| 五指山市| 荥经县| 武宁县| 雷山县| 奈曼旗| 淮阳县| 陆良县| 贡山| 法库县| 方正县| 武川县| 鞍山市| 牙克石市| 德江县| 蒙山县| 吉首市| 咸宁市| 合肥市| 东城区| 历史| 盐边县| 阜新市| 永寿县| 富源县| 深州市| 绥宁县| 柳河县| 韶山市| 阳曲县| 汶上县| 景宁| 敖汉旗| 崇仁县| 田阳县| 德保县| 香格里拉县|