python - IsolationForest 的 Predict_proba
问题描述
我尝试使用隔离森林进行异常值检测(欺诈检测)。如果我运行下面的代码(带有训练和测试集):
from sklearn.ensemble import IsolationForest
iso = IsolationForest(random_state=0).fit(X_train)
isopred = iso.predict(X_test)
我得到一个数组:array([1, 1, -1, ..., 1, 1, 1])
其中包含1或-1。我如何使用predict_proba
可以用于DecisionTrees的。在未提及的文档中是否有可用于 IsolationTree 的功能?
当我运行时:iso.predict_proba(X_test)
我收到此错误:
AttributeError:“IsolationForest”对象没有属性“predict_proba”
我正在搜索一个数组,它给出了预测属于哪个类(异常值或非异常值)的概率。
我的X_test
样子:
A B C
11 1 0
11 3 0
11 0 1
和y_test.values.ravel()
:
array([0,0,1])
解决方案
此模块中没有predict_proba,因为它不使用概率将每个样本评估为异常值,而是使用分数。
查看您提供的文档,每个样本都使用具有以下公式的决策函数进行分类:
decision_function = score_samples - offset_. offset_
所以你可能想要的是score_samples。使用样本数据:
X = [[-1.1], [0.3], [0.5], [100]]
iso = IsolationForest(random_state=0).fit(X)
iso_pred = iso.predict([[0.1], [0], [90]])
iso_scores = abs(iso.score_samples([[0.1], [0], [90]]))
结果是:
[ 1 1 -1]
[0.33644293 0.35190077 0.62865009]
减去每个样本的偏移量(默认=-0.5)后,如果返回结果为正,则为异常值,否则为异常值。
希望对您有所帮助。
推荐阅读
- java - 如何为我的线程处理程序方法设置超时?
- sql - 在 SQL Server 2017 中创建目录
- c++ - 从进程中卸载 dll
- java - 确定 Ellipse2D 是否与 Rectangle 重叠
- php - Laravel 获取一对多关系的关系
- c++ - 在 C++ 中查找数字的总和。不同的方法
- python - Zope: ZMySQLDA OperationalError: (2006, 'MySQL server has gone away')
- alibaba-cloud-ecs - 附加云盘,大于2 TiB的磁盘如何格式化
- swift - 创建可重用和可配置的品牌组件
- php - 我想在php中根据周对我的数组进行分组