异常检测
第一百二十三课:问题动机
什么是异常检测?
判断xtext,即新的飞机引擎是否能像一个正常的引擎一样工作?
![](https://img.haomeiwen.com/i15527263/e09e05417f3e6d32.png)
更正式的定义:
建立模型p(x),将xtest与p(x)进行比较:
![](https://img.haomeiwen.com/i15527263/71d3e0b286255b9c.png)
欺诈检测:
寻找网站中操作异常的用户
工业生产领域
计算机机群管理
![](https://img.haomeiwen.com/i15527263/5d55856de7338e65.png)
第一百二十四课:高斯分布
正态分布
两个参数,均值u;方差σ^2
u控制钟形曲线的中心位置,σ控制钟形曲线的宽度
![](https://img.haomeiwen.com/i15527263/493f6bc92555246a.png)
例子:
阴影面积的积分都是1!
![](https://img.haomeiwen.com/i15527263/56d1817cc12d2229.png)
参数估计问题:
参数估计问题就是给定数据集,我希望能找到能够估算出u和σ平方的值:
极大似然估计:
![](https://img.haomeiwen.com/i15527263/c1417e2a8c70ec4e.png)
第一百二十五课:异常检测算法
基于高斯分布建立异常检测算法:
我们处理异常检测的方法是:我们要用数据集建立起概率模型,p(x),我们要试图解决哪些特征量出现的概率比较高,哪些特征量的出现概率比较低,因此x就会是一个向量。
x1到xn上的独立假设:
![](https://img.haomeiwen.com/i15527263/98b5d039651d9532.png)
异常算法使用:
1.选择特征量,它能帮我们指出那些反常的样本
2.给出训练集,计算u和σ(向量化公式)
3.计算新样本的p(x)
![](https://img.haomeiwen.com/i15527263/84c800342a22bd0d.png)
例子:
![](https://img.haomeiwen.com/i15527263/0a307aafa21563d8.png)
如何估计p(x)的值,即x的概率值,检测算法。
即用给定的数据集,拟合了参数,对参数进行评估,来得到参数u和σ的值,然后用新的例子,说明其是否为异常。
第一百二十六课:开发和评估异常检测系统
实验评估的重要性,它的主要思想是当你为某个应用开发一个学习算法时,如果你有一个办法通过返回一个实数,来评估你的算法,那么做这些选择就会简单的多。
为了快速的开发出这样一个算法评估系统,假设我们有一些带标签的数据,来指明哪些是异常样本,哪些是正常样本,这就是我们认为的能评估异常检测算法的标准方法。
![](https://img.haomeiwen.com/i15527263/16caa8253a254dd1.png)
![](https://img.haomeiwen.com/i15527263/6969b94bdf3d22e2.png)
![](https://img.haomeiwen.com/i15527263/fdee2360fa0f4350.png)
选择ε的方法就是尝试许多不同的ε值并从中选择一个表现良好的值。
![](https://img.haomeiwen.com/i15527263/8e6b8a127ec48a60.png)
评估一个异常检测算法的步骤,并且在能够评估一个算法之后,能够用像F1这样的实数进行评估之后,将使你在尝试开发一个异常检测系统时大大提高当你进行决策时的效率。
第一百二十七课:异常检测VS监督学习
上几节课中谈到一个问题:假如我们有带标签的数据,已知是否是异常,我们为什么不直接用一个监督学习算法,为什么不直接用逻辑回归或者是神经网络算法来尝试直接学习我们的带标签的数据来预测y的值呢?
什么情况下使用监督学习?什么时候使用异常检测算法?
正常例子很少
很少的正样本,大量的负样本
明天的异常你预料不到
——异常检测算法
大量的正负样本
——监督学习
关键区别是在异常检测中,我们通常只有很少量的正样本,因此对于一个学习算法而言,它是不可能从这些正样本中学习到足够的知识的。就可以使用大量的负样本,让这个算法学到足够多的内容。
![](https://img.haomeiwen.com/i15527263/4d2fea215853dc85.png)
![](https://img.haomeiwen.com/i15527263/ab360e807160092c.png)
第一百二十八课:选择要使用的功能
你使用什么特征或者说你选择什么特征来实现异常检测算法?
在使用数据之前,让它更接近于钟形曲线。
![](https://img.haomeiwen.com/i15527263/e222c6ef4d4d9baa.png)
你如何得到异常检测算法的特征?
先完整训练出一个算法,然后在一组交叉训练集上运行算法,然后找出那些预测出错的样本,并看看我们是否能找到一些其他特征来帮助学习算法。
找到异常样本,看看它能不能启发你创建一个新的特征,可以更容易去发掘异常数据。
![](https://img.haomeiwen.com/i15527263/6bc81cc2a2619b89.png)
我平常在做异常检测选择特征向量时的思考:
![](https://img.haomeiwen.com/i15527263/caea2cac76e78bbd.png)
第一百二十八课:多变量高斯分布
多元高斯分布有一些优势也有一些劣势,它可以捕捉到一些之前的算法检测不出来的异常。
![](https://img.haomeiwen.com/i15527263/c0f31c99d718fc40.png)
只能是圆形检测,很多异常值检测不出来,所以改良版(多元高斯分布):
![](https://img.haomeiwen.com/i15527263/92b9a936a2b41162.png)
∑是一个协方差矩阵,它衡量的是方差,或者说特征变量x1和x2的变化量。
![](https://img.haomeiwen.com/i15527263/137a1419938bcc16.png)
![](https://img.haomeiwen.com/i15527263/79e997d1c0ae6eb5.png)
![](https://img.haomeiwen.com/i15527263/1bb584a5e6ed70b1.png)
![](https://img.haomeiwen.com/i15527263/d08975c3c9644cda.png)
![](https://img.haomeiwen.com/i15527263/d496ff443d62acc8.png)
![](https://img.haomeiwen.com/i15527263/e1e99b96d04de63f.png)
多元高斯分布描述的概率分布大致如上图。它重要的优势是能让你在描述两个特征变量之间可能存在正相关或者负相关的情况。
第一百三十课:使用多变量高斯分布的异常检测
参数估计问题:
![](https://img.haomeiwen.com/i15527263/aaee1925cdd99109.png)
怎么样把这些都综合起来,开发一个异常检测算法呢?
首先用数据集拟合该模型p(x),当你有一个新样本后,使用公式计算p(x),和设定值比较。
![](https://img.haomeiwen.com/i15527263/4692d12efb66b787.png)
多元高斯分布模型和原始模型有什么关系?
可以用数学推导:
原始模型相比于多元高斯模型,多元高斯模型的轮廓(等高线)总是轴对齐的。
![](https://img.haomeiwen.com/i15527263/af8eb9e8375aa7d2.png)
所以原始模型只是高斯多元模型的一种特殊情况。
如何在两个模型之间进行选择?
原始模型需要你手动建立特征值之间的关系,而你一旦建立了这种关系,算法就可以运行的很好。多元高斯模型本身就可以识别出这种特征值之间的关系,原始模型的优势就是它的计算成本比较低,换一种说法就是它能适应巨大规模的n,即适应数量巨大的特征。
![](https://img.haomeiwen.com/i15527263/9f738d9e0a3731e7.png)
上图左边的模型用的比较多,可以手动设计一些新特征加入到特征值中,来捕捉异常的组合值,但是当你有一个很大的训练集,但是n不是很大的时候,这时多元高斯模型会值得考虑,会有更好的效果。
最后一个技术上的问题:
如果你在运行多元高斯模型的时候,发现∑矩阵是奇异的或者说不可逆的,那么通常是两种情况,一种是你没有满足m大于n的条件,第二种是你存在冗余的特征(两个相同的特征)。(特征值线性相关)
本节的异常检测算法可以帮助你自动地捕捉正样本和负样本各种特征值之间的联系,如果它发现某些特征值的组合值是异常的,它将会标记为异常样本。
网友评论