很多应用需要决定新的观测值是否属于已有的观测集,这种能力经常被用来清洗数据。
两个很重要的区别:
- 奇异值探测(novelty detection):
训练数据不受异常值的污染,我们感兴趣的是在新观测中发现异常。 - 异常值探测(outlier detection):
训练数据含有异常值,我们需要拟合训练数据的中心模式,忽略偏差观测值。
奇异值探测
一般来说,奇异值探测是要学习一个绘制在高维空间上的粗糙、近似的轮廓来定义初始观测值的分布。然后,如果进一步的观测在边界内,则认为他们与初始观测值来自于同一分布,如果落在边界外,判定他们是异常的。
One-Class SVM 可以使用 svm.OneClassSVM 来实现。 它需要选择核和参数来定义边界,通常使用RBF核。
异常值探测
异常值探测和奇异值探测都是将一些污染的“孤立点”和常规观测的核心分开。但是,在异常值探测中,我们没有一个能代表常规观测分布的干净数据集来进行训练。
椭圆包络线拟合
一种常规的异常值探测方法是假定数据都来自于一个已知的分布(比如高斯分布),按照这个假设,我们试着去定义数据的形状,定义那些与形状足够远的观测值为异常值。
sklearn 提供了covariance.EllipticEnvelope 对数据进行稳健的协方差估计,从而将椭圆与中心数据点匹配,忽略中心模式以外的点。
例如,假定内层数据是服从高斯分布的,将能够鲁棒地估计位置和协方差(不包括异常值的影响)。Mahalanobis 距离被用来衡量异常值。
Isolation Forest
在高维数据集上进行异常值探测的一种有效方法是使用随机森林。ensemble.IsolationForest 通过随机地选择特征,然后在所选特征的值域区间随机地选择分割值来“孤立”观测值。
由于递归分割可以用树结构来表示,需要的分割次数等于从根节点到目标节点的长度。
路径的长度是森林中随机树的平均值,是对正态性和决策函数的衡量。
随机切分对于异常值产生明显短的路径,因此,如果随机森林在特定的样本上生成了较短的路径长度,他们很可能是异常的。
总结
严格来说,One-Class SVM不是异常值探测方法,而是奇异值探测方法,它的训练集不应该被异常值污染,因为它可能拟合异常值。就是说,高维数据或者没有假设分布的异常值探测是很有挑战的,One-Class SVM在这些情况下能得到有用的结果。
- 对于中心化和椭圆化的内在模式,svm.OneClassSVM无法从 the rotational symmetry of the inlier population获益,拟合了一些训练集中的异常值。相反,covariance.EllipticEnvelope和ensemble.IsolationForest 表现较好。
- 对于双峰分布的内在模式,covariance.EllipticEnvelope不能很好的拟合,然而,ensemble.IsolationForest 和svm.OneClassSVM也很难探测这种模式,svm.OneClassSVM会产生过拟合,因为它没有正确的模型,它解释了一些异常值凑巧聚集在一起的区域。
- 对于非高斯分布的内在模式,svm.OneClassSVM和ensemble.IsolationForest能够合理的近似,但是covariance.EllipticEnvelope几乎是失败的。
http://scikit-learn.org/stable/modules/outlier_detection.html