1.动机
令要检测的异常类(正类)标记为,正常类(负类)标记为
。异常检测的问题就是对
进行估计。
在都是负类训练集上估计出,学习出正类应该具有的特征,然后在正负类都存在的交叉验证集上确定一个
,当新样本
来到时,根据
的关系,从而判断出,
是否为正类。
为什么不能使用监督学习的机制?原因主要有两点:
(1)正、负类的标记很不均匀,对于监督学习,需要足够多的正、负类样本同时存在,算法才能找到数据后面的结构,而通常异常检测的问题中,负类的数据总会远大于正类的数据。
(2)正常的样本总是有着相似的特点,异常的样本却各有各有的不同。对于异常的样本来说,引起异常的因素不全相同并且新的异常样本很可能在训练集中从未出现过,这就导致算法很难去学习出它们之间背后的结构。相反的,正常的样本有着相似的结构,且样本数目不少,所以算法学习它们之间的结构会很容易。
2.的建立
记
首先回顾一下之前的内容:
当样本数m>>特征数n时,在混合高斯模型中,是对k个成分进行进行估计,使用EM算法确定出x和隐变量z的分布(服从k多项式分布)。当样本数小于特征数时,因为协方差矩阵不可逆,无法估计出
,所以可以使用因子分析求出一部分分量的分布。
而具体到异常检测的问题中,通常假设样本是服从一个多元高斯分布的,即k=1,而并不是混合的。这样子的话,当样本数m>>特征数n时,可以直接用样本去估计这个高斯分布,即:
当样本数小于特征数时,求不出来。使用因子分析先分析出独立的特征出来,然后再进行估计。对比如下:
PS:(左边的是特征随机变量相互独立时,总分布就等于分量的乘积,感觉就是弱化了的因子分析)
常用的技巧就是:
首先,可视化样本特征的频率直方图,当样本明显不服从高斯分布时,可以使用一些变换,将其变换成高斯分布,然后再进行估计,接着,通过判断分类的错误,查看分量,手动的选择,调整一些特征分量更好地检测,最后就是进行评价,需要注意的是,不能简单地使用错误率进行评价,要使用P,R,F等指标。
3.参考:
吴恩达 coursera 机器学习