使用一类SVM计算异常分数以进行异常检测

时间:2018-12-28 09:50:21

标签: machine-learning anomaly-detection

我对使用One-Class SVM计算异常检测的异常分数有疑问。我的问题是:如何使用Decision_function(X)来计算它,就像我在隔离林中计算异常得分的方法一样? 非常感谢

3 个答案:

答案 0 :(得分:1)

在孤立森林中,异常分数是一种度量,它用于选择特定观察值所需的平均路径长度与选择“正常”观察值所需的平均路径长度的偏差

这里的平均值是使用的所有不同树的平均值。由于SVM不是整体方法-这种异常评分的概念并不直接适用。

一种方法,而且我不知道这在统计学上/科学上听起来如何,测量异常得分是根据预测子集建立多个SVM分类器。然后,您可以将特定点被分类为异常值的次数的百分比用作异常分数的代理。

答案 1 :(得分:0)

是的,您必须使用decision_function()作为一类SVM中异常分数的度量。

看看这个example,您可能会更好地理解。

np.absolute(clf.decision_function(X_test))
#higher the value, it indicates that the datapoint is more likely to be anomaly.

答案 2 :(得分:0)

默认情况下,这是一个已知问题,scikit实现不会提供 NOT 异常得分。

解决该问题的一种方法是使用Decision_function(https://scikit-learn.org/stable/modules/generated/sklearn.svm.OneClassSVM.html#sklearn.svm.OneClassSVM.decision_function),但使用以下方法:

anomaly_metric[i] = max_value_decision_fn - decision_fn[i]

其中i是第i个数据点。

来源:https://activisiongamescience.github.io/2015/12/23/Unsupervised-Anomaly-Detection-SOD-vs-One-class-SVM/#sklearn-Users-Beware

How to calculate AUC for One Class SVM in python?