我正在使用隨機森林模型進行二元分類,其中使用 SHAP 來解釋模型預測的神經網路。我按照教程撰寫了下面的代碼來獲得如下所示的瀑布圖
row_to_show = 20
data_for_prediction = ord_test_t.iloc[row_to_show] # use 1 row of data here. Could use multiple rows if desired
data_for_prediction_array = data_for_prediction.values.reshape(1, -1)
rf_boruta.predict_proba(data_for_prediction_array)
explainer = shap.TreeExplainer(rf_boruta)
# Calculate Shap values
shap_values = explainer.shap_values(data_for_prediction)
shap.plots._waterfall.waterfall_legacy(explainer.expected_value[0], shap_values[0],ord_test_t.iloc[row_to_show])
這生成了如下所示的圖

但是,我想將其匯出到資料框,我該怎么做?
我希望我的輸出如下所示。我想將其匯出為完整的資料框。你能幫我嗎?

uj5u.com熱心網友回復:
如果我沒記錯的話,你可以這樣做pandas
import pandas as pd
shap_values = explainer.shap_values(data_for_prediction)
shap_values_df = pd.DataFrame(shap_values)
要獲取功能名稱,您應該執行以下操作(如果data_for_prediction是資料框):
feature_names = data_for_prediction.columns.tolist()
shap_df = pd.DataFrame(shap_values.values, columns=feature_names)
uj5u.com熱心網友回復:
我們來做一個小實驗:
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_breast_cancer
from shap import TreeExplainer
X, y = load_breast_cancer(return_X_y=True)
model = RandomForestClassifier(max_depth=5, n_estimators=100).fit(X, y)
explainer = TreeExplainer(model)
這是什么explainer?如果你這樣做dir(explainer),你會發現它有一些方法和屬性,其中包括:
explainer.expected_value
您對此很感興趣,因為這是 SHAP 值相加的基礎。
此外:
sv = explainer.shap_values(X)
len(sv)
將給出一個提示是一個由 2 個物件組成的串列,這些物件很可能是和sv的 SHAP 值,它們必須是對稱的(因為向 1 移動的移動量完全相同,但符號相反,向 移動)。100
因此:
sv1 = sv[1]
現在您擁有將其打包為所需格式的一切:
df = pd.DataFrame(sv1, columns=X.columns)
df.insert(0, 'bv', explainer.expected_value[1])
問:我怎么知道?
B:閱讀檔案和源代碼。
uj5u.com熱心網友回復:
我正在使用它:
def getShapReport(classifier,X_test):
shap_values = shap.TreeExplainer(classifier).shap_values(X_test)
shap.summary_plot(shap_values, X_test)
shap.summary_plot(shap_values[1], X_test)
return pd.DataFrame(shap_values[1])
它首先顯示模型的形狀值,然后顯示每個預測,最后回傳正類的資料幀(我處于不平衡背景關系中)
它適用于樹解釋器而不是瀑布,但基本相同。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/454202.html
上一篇:ModuleNotFoundError:沒有名為“sklearn.neighbors._dist_metrics”的模塊
