斯坦福机器学习笔记九
异常检测
对于给定数据集
如上图所示,在蓝色圈内的数据属于该组数据的可能性较高,在中心区域的这些数据有很大的概率值,而稍微远离中心区域的数据概率会小一些 ,更远的地方的数据,它们的概率将更小,而外面的数据将成为异常数据,这种方法称为密度估计。
这里采用的是高斯分布开发异常检测算法,对于给定的数据集
μ j=1m∑mi=1x(i)
σ 2j=1m∑mi=1(x(i)j− μ j)2
根据求得的平均值和方差的估计值,可以得到一个模型:
p(x)=∏nj=1p(xj, μ j ,σ 2j)=∏nj=112 π √ σ jexp⎛⎝−(xj− μ j)22 σ 2j⎞⎠
密度估计的表达式如下:
模型p(x)为该数据属于一组数据的可能性,我们选定一个 ε,将 p(x)=ε 作为判定边界,当 p(x)>ε 时预测数据为正常数据,否则则为异常数据。
1、异常检测算法的实现
首先需要找到的是带标签的数据。将带标签数据分为正样本和负样本,正样本数目远远大于负样本数目。将正样本的60%分类到训练样本;正样本的20%和一半的负样本分别分类到交叉验证集和测试集。
1)使用训练集数据,我们估计出特征的平均值
2)对于交叉验证集,尝试使用不同的 ε 值作为阈值,并预测数据是否异常,由于数据偏斜,还要计算查准率和召回率以及
3) 选好 ε 值以后,针对测试集进行预测,计算异常检测系统的
2、异常检测算法与监督学习的比较
当正样本,也就是异常样本的数量很小时,应该考虑异常检测算法,并把异常样本分到交叉验证集和测试集中。如果异常的种类很多,应该采用异常检测算法。在监督学习中,正负样本的数量都应该很大。未来出现的故障跟训练集中的很相似的话,采用监督学习。
3、特征向量的选择
异常检测算法假设数据符合高斯分布,如果数据不是高斯分布,最好将其转换成高斯分布,例如使用对数函数:x=log(x+c) 或者
一个常见的问题是,一些异常的数据可能会有较高的 p(x) 值,会被误判为正常的数据,这种情况下使用误差分析,分析那些被算法错误预测的数据,观察是否能找出一些其他的特征变量来帮助学习算法获得更好的指标。
4、异常检测使用多元高斯分布
使用多个高斯密度乘积的形式,会出现下图所示的误检,即红色的点为正常的情况,而绿色的点为异常的情况,粉色的线为多个高斯密度乘积拟合出的异常检测阈值,会把异常的点归为正常的范围内,蓝色为异常检测使用多元高斯拟合出的阈值。为了避免上述的误检,采用的方法就是使用多元高斯分布。
一般的高斯分布模型中,计算p(x) 是通过分别计算每个特征对应的几率然后累乘起来;在多元高斯分布模型中,将要构建特征的协方差矩阵,用所有的特征一起计算p(x)。
具体步骤如下:
首先计算特征的平均值 μ 和协方差矩阵
μ j=1m∑mi=1x(i)
Ξ =1m∑mi=1(x(i)j− μ j)(x(i)j− μ j)T=1m(X− μ )T(X− μ )
然后计算多元高斯分布的p(x):
p(x)=1(2 π )n2| Ξ |12exp(−12(x− μ )T Ξ −1(x− μ ))
如果 p(x)<ε 则认为是异常数据。
通过改变协方差矩阵和均值,可以改变多元高斯分布等高线的形状。改变协方差矩阵主对角线的值,可以改变多元高斯分布等高线的椭圆程度;改变协方差矩阵次对角线的值,可以改变等高线的椭圆的方向,其绝对值越大,椭圆越扁。改变均值的值,可以改变中心点的位置。
原高斯分布模型是多元高斯分布模型的一个子集,它们在异常检测算法中的区别如下:
如果训练集不是太大,并且没有太多的特征,我们可以使用多元高斯分布模型。