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

Ann*_*nne 5 scikit-learn isolation-forest

我已阅读决策函数和 Score_samples 的文档,但无法弄清楚这两种方法之间有什么区别,以及我应该使用哪一种方法来进行异常值检测算法。

任何帮助,将不胜感激。

Ben*_*ger 6

请参阅该属性的文档offset_

\n
\n

用于根据原始分数定义决策函数的偏移量。我们有关系:decision_function = score_samples - offset_offset_定义如下。当污染参数设置为 \xe2\x80\x9cauto\xe2\x80\x9d 时,偏移量等于 -0.5,因为 inliers 的分数接近 0,outliers 的分数接近 -1。当提供的污染参数不同于 \xe2\x80\x9cauto\xe2\x80\x9d 时,偏移量的定义方式使得我们在训练中获得预期的离群值(决策函数 < 0 的样本)数量。

\n
\n


Art*_*Sbr 0

用户指南引用了Fei Tony、Kai Ming 和zhi-Hua 撰写的论文“隔离森林” 。

我没有阅读这篇论文,但我认为您可以使用任一输出来检测异常值。文档说score_samples是 相反的decision_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()
Run Code Online (Sandbox Code Playgroud)

关系

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

t[['decision_function','score_samples']].var()
> decision_function    0.003039
> score_samples        0.003039
> dtype: float64
Run Code Online (Sandbox Code Playgroud)

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