我正在尝试了解和试验 SHAP 值如何解释每个异常事件(行)的行为以及它如何与shap.force_plot()
. 我已经创建了一个包含 7 个异常值的简单合成数据集。
- 我没有得到4.85是如何计算为输出模型的。
outliers_df = temp_dataset.loc[synth_data_df[outdet.label_feature] == 1]
outliers_df
#Here is the frame of 7 outlier cases I input to SHAP:
+----+-------------+--------------+---------------+
| id | NF1 | CF1 |outlier_scores |
+----+-------------+--------------+---------------+
| 1 | 904 | 2 | -0.192221 |
| 2 | 951 | 3 | -0.203116 |
| 3 | 125 | 5 | -0.076722 |
| 4 | 755 | 2 | -0.237189 |
| 5 | 983 | 2 | -0.213205 |
| 6 | 906 | 3 | -0.202074 |
| 7 | 999 | 5 | -0.266428 |
+----+-------------+--------------+---------------+
我在实现中应用了IsolationForest
使用类OutlierDetector
来隔离异常值:
outdet = OutlierDetector(synth_data_df, label_feature="label",
normalize_outlier_scores=True, standardize_outlier_scores=False,
n_estimators=100, max_samples=1., contamination=0.1)
outdet.train_IF()
我得到了每一行的 SHAP:
outdet.shap_values_outliers = outdet.explainer.shap_values(outliers_df)
outdet.shap_values_outliers
array([[-6.0205, -0.7785, 0. ],
[-6.3379, -0.7031, 0. ],
[-2.9014, -1.0911, 0. ],
[-6.6259, -1.1502, 0. ],
[-6.445 , -0.8171, 0. ],
[-6.2393, -0.7787, 0. ],
[-8.1958, -0.1862, 0. ]])
这对于 3 个功能的第一行很简单shap.force_plot()
。在我训练我的模型后,我已经连接outlier_scores
到框架NF1
,CF1
如下所示:
怎么获得通过脚本,如此处所述?
一般解释考虑和对于第一个事件或观察,考虑到没有将预测推高的特征用红色显示?
获得理由?
编辑 我还想分享以下情节,这可能有助于了解我们是否可以理解这两个特征之一对解释异常值的贡献,例如 :
outdet.plot_shap_values()