文章目录
十五、异常检测
15.1 问题的动机
飞机引擎检测:给定一系列正常的引擎参数,要求确定一个新生产的引擎是否正常;
异常用户检测:网站检测用户刷新频率,登录次数、登陆位置等信息,判断用户行为是否异常;
数据中心的计算机检测:检测计算机内存消耗、硬盘容量等信息,判断计算机是否异常;
15.2 高斯分布
本节问题:
- 了解高斯函数以及各参数的意义;
高斯分布,即正态分布,x~N(μ,σ2):σ是标准差,确定了高斯分布概率密度函数的宽度,σ2就是方差;
高斯函数分布图象:
概率密度函数与x轴的面积为1,即积分值=1;
15.3 算法
本节问题:
- 如何用高斯分布推导异常检测算法;
密度估计
每个特征有每个特征的高斯分布,独立同分布;即使每个特征不独立,这个算法也能进行;
异常检测算法:
如果算出来P(x)低于阈值,则标记为异常;
定义一个范围,范围之外的即为异常值;
15.4 开发和评价一个异常检测系统
本节问题:
- 开发一个异常检测系统用于实际问题;
- 如何评估一个异常检测算法;
加入带标签的样本后,这个不就相当于监督学习了吗?
训练+预测;
step1:用无标签样本训练(假设样本都是无异常的),拟合p(x);
step2:输入交叉验证集(含异常和正常样本),预测y的值;
step3:算法成功预测的次数对算法进行评估;但这里不能直接用分类正确率,因为前面说过,倾斜的数据集(大部分y=0,小部分y=1)不适合用它作为评价指标;还是使用精度,召回率它们;
step4:确定阈值€:使用不同的阈值,最终采用能最大化F1-score的阈值€;
step5:确定模型和参数后,就可以用测试集来评估这个模型系统;
15.5 异常检测 VS 监督学习
本节问题:
- 异常检测与监督学习的区别;
思维方式的不同:
- 异常检测往往是有大量正样本和少量负样本或者大量负样本和少量正样本,伴随着倾斜的情况;而监督学习则是拥有大量的正样本和负样本;
- 有时候需要知道是什么原因(特征)导致样本异常,此时在监督学习中很难做到,而选择大量负样本、少量正样本的异常检测中就方便多了;如果仅仅是判断新样本是否为正负样本时,监督学习拥有海量样本信息,能够做出很好的判断;
15.6 选择特征
本节问题:
- 如何选择适当的特征来实现异常检测;
- 误差分析
~~~~~~
画出某个特征的数据分布图,例如画出来如图1所示,那么它的分布自然就很像高斯分布,可以考虑作为特征来实现异常检测;
如果画出来如图2,那么很明显不像,需要做出一点变换,比如log(x)来让它更像高斯分布;log适合处理拖尾的;不同的图像,处理的函数也不同;
误差分析步骤:
~~~~~~
同监督学习,先简单地搞出一套完整的算法,然后用验证集对其进行验证,然后对判断错误的验证集样本进行分析,看能不能找到一些其他的特征,让这些判断出错的样本能表现得更好;
灵活的建立新的特征or选取特征,比如计算机指标监控:
~~~~~~
如果服务器卡在某个死循环,那么CPU负荷增加,但网络流量并不会变,就可以新建一个特征x5=CPU Load / network traffic,当这个值突然骤升,说明肯定出现了这个问题;
这里比较适用于时序数据的监控;
15.7 多元高斯分布
本节问题:
- 多元高斯分布的作用;
- 如何理解多元高斯分布,作用原理;
多元高斯分布看起来适用于这样的场景:
~~~~~~
对于x1,x2两个特征,有一定的联系,但某样本在x1,x2的取值在各自的高斯分布上都不算太差,那么异常检测算法会将其划分为非异常点,而实际意义上它很可能是异常点,需要同时考虑x1,x2两个特征值;
用数据的相关性建模:
改变μ就是改变中心点的位置;
能不能新建一个特征x3=x1/x2呢?
这是可以的,创建新的特征来捕捉异常的组合值;而多元高斯模型只是自动化了这个操作;
15.8 使用多元高斯分布进行异常检测
相当于增加了特征值之间的相关性;
这两个限制条件:m>n & 非冗余 保证了Σ可逆,从而才能继续下去,遇到这两个文件的概率非常低,基本不用担心;