I try to use an isolation Forest用于异常检测(欺诈检测)。如果我运行下面的代码(带有训练和测试集):
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。如何使用DecisionTrees可以使用的predict_proba
。在文档中是否有针对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])
答案 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)后,如果返回结果为正,则为离群值,否则为离群值。
希望这很有帮助。