数据预处理至关重要,这次我们来谈谈预处理中的异常值检测问题。文章先对正态分布(高斯分布)的基本概念进行介绍,然后给出采用高斯分布的异常值检测算法,最后给出多元高斯分布的异常值检测算法。
1. 正态分布
正态分布(Normal distribution)是一种概率分布,又名高斯分布(Gaussian distribution)。正态分布是具有两个参数μ和σ^2的连续型随机变量的分布,第一参数μ是遵从正态分布的随机变量的均值,第二个参数σ^2是此随机变量的方差,所以正态分布记作N(μ,σ^2 )。遵从正态分布的随机变量的概率规律为取 μ邻近的值的概率大 ,而取离μ越远的值的概率越小;σ越小,分布越集中在μ附近,σ越大,分布越分散。
正态分布的密度函数的特点是:关于μ对称,在μ处达到最大值,在正(负)无穷远处取值为0,在μ±σ处有拐点。它的形状是中间高两边低 ,图像是一条位于x 轴上方的钟形曲线。当μ=0,σ^2 =1时,称为标准正态分布,记为N(0,1)。
2. 异常值检测算法
2.1 算法步骤
2.2 直观认识
假设有一二维数据集,其分布如下图所示。
按照上一节论述的异常值检测算法,我们可以求出每一维特征的高斯分布(概率密度函数),进而可以对每一个样本计算p(xi)。对于最左上方的蓝色样本,根据x1、x2的概率分布,其值在x1、x2上的概率都非常小,因此算出来的p是小于算法中定义的ε,因此可以检测出左上方的蓝色样本是异常值。同理可得,中间的蓝色样本是正常值;右下方的蓝色样本是异常值。
2.3 异常值检测vs监督学习
理解了异常值检测算法,是不是有种很熟悉的感觉。没错,对于异常值检测我们还可以用二分类监督算法来做。那么在实际应用中,我们究竟该如何选择呢?下面给出几点建议。
(1) 当正负样例都非常多时,采用监督学习算法;
(2)当正样例非常多,负样例非常少时(反之亦然),采用异常值检测算法;
(3)对于一些特征,其分布不符合高斯分布,需要我们进行相应变换,如:
3. 多元高斯检测算法
有时我们根据上述算法会误判一些异常值为正常值,如下图所示:
从图中我们可以看出,绿色样本的x1、x2分布概率都很大,因此上述算法将检测不出这个异常值(这是因为它的p值和一些红色样本的p值在同一等高面)。下面我们将提出多元高斯分布的异常值检测算法。
3.1 算法步骤
算法改进之处:原模型是假设各变量是独立的,因此绘制的等高面是均匀的;而改进的模型最终求得的等高面可能是倾斜的,因此可检测出之前的那个异常值。
3.2 原模型vs多元高斯检测算法
合适的才是最好的,因此这里有必要讨论下原模型与改进后模型的优缺点。
对于原模型:其计算简单快捷,适合训练数据集较大的情形;可以根据已有特征人工组合出更有效的新特征,效果明显。对于改进算法:计算复杂,存在无解的情况(∑矩阵为奇异阵),适用于样本较少的情形;必须满足m>n才可使用(一般m>10n)。