作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用随机森林模型和神经网络进行二元分类,其中使用 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])
这生成了如下图所示的图
但是,我想将其导出到数据框,我该怎么做?
我希望我的输出如下所示。我想将其导出为完整的数据框。你能帮我一下吗?
最佳答案
让我们做一个小实验:
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)
这里的解释器
是什么?如果你执行dir(explainer)
,你会发现它有一些方法和属性,其中包括:
explainer.expected_value
您对此感兴趣,因为这是 SHAP 值相加的基础。
此外:
sv = explainer.shap_values(X)
len(sv)
会给出提示sv
是一个由2个对象组成的列表,它们很可能是1
和0
的SHAP值,它们必须是对称(因为朝向 1 的方向移动的量完全相同,但符号相反,朝向 0
)。
因此:
sv1 = sv[1]
现在您已拥有将其打包为所需格式的一切:
df = pd.DataFrame(sv1, columns=X.columns)
df.insert(0, 'bv', explainer.expected_value[1])
问:我怎么知道?
A:阅读文档和源代码。
关于python - 将 SHAP 瀑布图导出到数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71688298/
我正在为我的网格样式显示使用 jQuery 瀑布。 为了解决常见的图像重叠问题,我将瀑布方法包装在 .load() 函数中,例如: $(window).load(function(){ $('#b
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 3年前关闭。 Improve thi
对于瀑布图,如果设置为 isSum() ,是否有办法覆盖列标签上显示的值,不幸的是,每列传递的值都会四舍五入,因此会出现当最后一列设置为 isSum() 时,与 Excel 数据相比存在差异。 最佳答
我是一名优秀的程序员,十分优秀!