目录
引言
在异常检测领域中,我们常常需要决定新观察的点是否属于与现有观察点相同的分布(则它称为inlier),或者被认为是不同的(称为outlier)。 在这里,必须做出两个重要的区别:
异常值检测,outlier detection:
训练数据包含异常值,这些异常值被定义为远离其他异常值的观察值。 因此,异常检测估计器试图适应训练数据最集中的区域,忽略不正常的观察。
新颖点检测,novelty detection:
训练数据不受异常值的污染,我们有兴趣检测新观察是否是异常值。 在这种情况下,异常值也被称为新颖点(a novelty)。
异常值检测和新颖性检测都属于异常检测,都是用来检测异常的、不常见的一些观察值。
异常值检测是一种无监督的方法,新颖点检测是一种半监督的异常检测方法。 在异常值检测的情况下,异常值不能形成密集的簇,因为异常检测的估计器假设异常值总是位于低密度区域。 相反,在新颖性检测的背景下,新颖点可以形成密集的簇,只要它们处于训练数据的低密度区域中。
scikit-learn框架提供了一套机器学习工具,可用于新颖性或异常值检测。 这个策略是通过从数据中以无人监督的方式学习对象来实现的:
estimator.fit(X_train)
新的观测值,可以用如下方法来做个“预测”,即判断:
estimator.predict(X_test)
这里,正常的点(内部点,inliers)的标签是1,异常点是-1。预测方法利用估计器计算的原始评分函数的阈值。 可以通过score_samples方法访问该评分函数,而阈值可以通过contamination参数来控制。
decision_function方法也可以从评分函数中定义,负值是异常值,非负值是内部点:
estimator.decision_function(X_test)
需要注意的是,