如何获得导致隔离林异常的主要特征

机器算法验证 机器学习 异常检测 隔离森林
2022-04-08 14:12:37

我正在使用隔离森林对多维数据进行异常检测。该算法以良好的准确性检测异常记录。除了检测异常记录之外,我还需要找出哪些特征对数据点的异常贡献最大。我们有什么办法可以得到这个吗?

2个回答

SHAP 值shap Python 库可用于此目的。自 2019 年 10 月以来,Shap 内置了对 scikit-learn IsolationForest 的支持

import shap
from sklearn.ensemble import IsolationForest

# Load data and train Anomaly Detector as usual 
X_train, X_test, ...
est = IsolationForest()
est.fit(...)

# Create shap values and plot them
X_explain = X_test
shap_values = shap.TreeExplainer(est).shap_values(X_explain)
shap.summary_plot(shap_values, X_explain)

这是我为我拥有的一个 IsolationForest 模型绘制的一个示例,它是时间序列的。 在此处输入图像描述

您还可以获得特定特征的部分依赖图,或显示单个 X 实例的特征贡献的图。shap 项目 README 中给出了这方面的示例。

上下文异常值解释中描述了一种可能的描述无监督异常值检测中特征重要性的方法Lime方法类似,假设局部线性,并通过对感兴趣的异常值周围的数据点进行采样,生成分类问题。作者建议应用具有线性内核的 SVM,并使用估计的权重来衡量特征重要性。