我正在如下使用oneclasssvm。
from sklearn.svm import OneClassSVM
clf = OneClassSVM(random_state=42)
clf.fit(X)
y_pred_train = clf.predict(X)
print(len(np.where(y_pred_train == -1)[0]))
但是,我获得了超过50%的数据作为异常值。我想知道是否有一种方法可以减少一个类svm中离群值的数量。
我尝试了contamination
。但是,似乎oneclasssvm不支持污染。
还有其他方法可以使用吗?
很高兴在需要时提供更多详细信息。
答案 0 :(得分:2)
您可以通过控制OneClassSVM的nu
参数来控制训练数据中有多少数据点被标记为离群值。
根据API文档,nu是An upper bound on the fraction of training errors and a lower bound of the fraction of support vectors. Should be in the interval (0, 1]. By default 0.5 will be taken.
我建议您有一个标记的验证集,然后调整您的SVM超参数,例如nu
。 kernel
等,以在标记的验证集上获得最佳性能。
答案 1 :(得分:1)
我想了解您使用的方差,维数,样本点数量,但我的第一个建议是尝试:
clf = OneClassSVM(random_state=42, gamma='scale')
从Docs
当前默认值为“自动”,如果gamma ='scale',则使用1 / n_features 传递,然后使用1 /(n_features * X.var())作为伽玛值。 当前的伽玛默认值“ auto”将在以下位置更改为“ scale” 版本0.22。 “ auto_deprecated”,不赞成使用的“ auto”版本是 用作默认值,指示没有显式的gamma值 通过。