【发布时间】:2018-12-28 09:50:20
【问题描述】:
我有一个关于使用 One-Class SVM 计算异常检测的异常分数的问题。我的问题是:我如何使用决策函数(X)来计算它,就像我在隔离森林中计算异常分数的方式一样? 非常感谢,
【问题讨论】:
标签: machine-learning anomaly-detection
我有一个关于使用 One-Class SVM 计算异常检测的异常分数的问题。我的问题是:我如何使用决策函数(X)来计算它,就像我在隔离森林中计算异常分数的方式一样? 非常感谢,
【问题讨论】:
标签: machine-learning anomaly-detection
在隔离森林中,异常分数是衡量选择特定观察所需路径的平均长度与选择“正常”观察所需的平均路径长度的偏差
这里的平均值取自所有使用的不同树。由于 SVM 不是一种集成方法——这种异常分数的概念并不直接适用。
一种方法,我不知道这在统计/科学上听起来如何,测量异常分数是基于预测变量的子集构建多个 SVM 分类器。然后,您可以使用特定点被分类为异常值的次数百分比作为异常分数的代理。
【讨论】:
是的,您必须使用decision_function() 作为一类 SVM 中异常分数的度量。
看看这个example,你可能会得到更好的理解。
clf.decision_function(X_test)
# returns the signed distance to the separating hyperplane.
# Signed distance is positive for an inlier and negative for an outlier.
【讨论】:
OneClassSVM 有更多解释。
这是一个已知问题,默认情况下 scikit 实现是否不提供异常分数。
解决此问题的一种方法是使用 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 个数据点。
【讨论】: