Scikit learn 通过改变';nu';

Scikit learn 通过改变';nu';,scikit-learn,svm,outliers,anomaly-detection,Scikit Learn,Svm,Outliers,Anomaly Detection,在上面的例子中,我使用我的数据集来识别异常值。对nu参数进行轻微更改后,发现的异常数量存在巨大差异 这可能只是数据集的一个特殊性吗?还是scikit中的一个bug 注:很遗憾,我无法共享数据集。注意:不是答案。提供MCVE 我最近也遇到了这个问题。我想了解低值的拐点 import numpy as np import pandas as pd from sklearn.svm import OneClassSVM X = np.random.rand(100, 1) nu = np.geo

在上面的例子中,我使用我的数据集来识别异常值。对
nu
参数进行轻微更改后,发现的异常数量存在巨大差异

这可能只是数据集的一个特殊性吗?还是scikit中的一个bug


注:很遗憾,我无法共享数据集。

注意:不是答案。提供MCVE

我最近也遇到了这个问题。我想了解低值的拐点

import numpy as np
import pandas as pd
from sklearn.svm import OneClassSVM

X = np.random.rand(100, 1)

nu = np.geomspace(0.0001, 1, num=100)
df = pd.DataFrame(data={'nu': nu})

for i in range(0, len(X)):
    df.loc[i, 'anom_count'] = (OneClassSVM(nu=df.loc[i, 'nu']).fit_predict(X) == -1).sum()

df.set_index('nu').plot();


如果减小
OneClassSVM
tol
参数的值,结果会更好,尽管对于nu的低值来说,结果并不完全如预期的那样

将numpy导入为np
从sklearn.svm导入OneClassSVM
将matplotlib.pyplot作为plt导入
X=np.rand.rand(100,1)
nus=np.geomspace(0.0001,0.5,num=100)
离群值_分数=np.零(len(nus))
对于i,枚举中的nu(nus):
离群值分数[i]=(OneClassSVM(nu=nu,tol=1e-12)。拟合预测(X)=-1。平均值()
plt.绘图(nus,异常值_分数)
plt.xlabel('nu')
plt.ylabel(‘异常分数’)
plt.show()

使用默认值
tol
可以获得以下信息

您能将绘图添加到帖子中吗?我添加了被剪断的代码返回的绘图,还添加了使用默认
tol
df.set_index('nu').plot(xlim=(0, 0.2));
df.anom_count.min() # 3
df.anom_count.idxmin() # 62
df.loc[df.anom_count.idxmin(), 'nu'] # 0.031