微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SKLearn中isolation_forest中的决策函数和score_samples有什么区别

如何解决SKLearn中isolation_forest中的决策函数和score_samples有什么区别

我已经阅读了关于决策函数score_samples here 的文档,但无法弄清楚这两种方法间的区别以及我应该使用哪一种来进行异常值检测算法。

任何帮助将不胜感激。

解决方法

User Guide 引用了 Fei Tony、Kai Ming 和 Zhi-Hua 撰写的论文隔离森林

我没有阅读论文,但我认为您可以使用任一输出来检测异常值。文档说 score_samplesdecision_function 相反,所以我认为它们会成反比,但两个输出似乎与目标具有完全相同的关系。唯一的区别是它们在不同的范围内。事实上,它们甚至具有相同的方差。

为了看到这一点,我将模型拟合到 sklearn 中可用的乳腺癌数据集,并可视化按每个输出的十分位数分组的目标变量的平均值。如您所见,它们具有完全相同的关系。

# Import libraries
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.ensemble import IsolationForest

# Load data
X = load_breast_cancer()['data']
y = load_breast_cancer()['target']

# Fit model
clf = IsolationForest()
clf.fit(X,y)

# Split the outputs into deciles to see their relationship with target
t = pd.DataFrame({'target':y,'decision_function':clf.decision_function(X),'score_samples':clf.score_samples(X)})
t['bins_decision_function'] = pd.qcut(t['decision_function'],10)
t['bins_score_samples'] = pd.qcut(t['score_samples'],10)

# Visualize relationship
plt.plot(t.groupby('bins_decision_function')['target'].mean().values,lw=3,label='Decision Function')
plt.plot(t.groupby('bins_score_samples')['target'].mean().values,ls='--',label='Score Samples')
plt.legend()
plt.show()

Relationship

就像我说的,它们甚至有相同的差异:

t[['decision_function','score_samples']].var()
> decision_function    0.003039
> score_samples        0.003039
> dtype: float64

总而言之,您可以互换使用它们,因为它们都与目标共享相同的关系。

,

查看属性 offset_ 的文档:

Offset 用于定义原始分数的决策函数。我们有关系:decision_function = score_samples - offset_offset_ 定义如下。当污染参数设置为“自动”时,偏移量等于-0.5,因为内点的得分接近于0,离群点的得分接近于-1。当提供不同于“auto”的污染参数时,偏移量的定义方式是我们在训练中获得期望的异常值(决策函数

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。