吴恩达机器学习个人笔记(九)-异常检测

       异常检测也属于无监督学习,但是看起来又有点像是监督学习,其实异常检测依靠个人理解为如果有一堆数据聚集在一个范围内,这个范围内的数据都为正常(相比较与异常),如果新输入一个数据,即要检测该数据是否处于该范围内。属于正常的数据或者异常,所以叫做异常检测。

1 问题的动机(Problem Motivation)

     什么是异常检测(Anomaly detection),吴恩达老师给大家举了一个例子是关于飞机引擎QA的:

     假设飞机引擎制造商为了测试飞机引擎,测量了关于引擎的一些变量,比如热量,振动等,将他们作为特征:

                        

   那么你就有一个数据集,从x^{(1)} 到x^{(m)},将这些数据制成表格。看起来如下所示

                                                 

       上图中的每个×都表示一个数据,也就是飞机的引擎,这些都是无标签的数据。这样异常检测的问题即可定义如下:假设生产出一个新的飞机引擎,假设为x_{test}。那么异常检测就是查看该新生产的引擎是否正常。

       由此可以引出下面的定义。给定一个数据集x^{(1)},x^{(2)},\cdots ,x^{(m)},我们假设数据集是正常的,希望知道新的数据x_{test}是不是异常的,即这个测试数据不属于该数据的几率如何。我们所构建的模型应该可以得出该新数据属于一个数据集的可能性p(x)是多少。

                                                

    上图中,蓝色圈内的数据属于该数据集的可能性比较高,而越是偏远的数据,数据该数据集的可能性就越低。这种方法被称为密度估计,表达如下:

                                                    p(x)\left\{\begin{matrix} < \varepsilon & anomaly\\ \geq \varepsilon & normal \end{matrix}\right.

   模型p(x)为我们其属于一组数据的可能性,通过 p(x)<\varepsilon 来检测非正常用户

2 高斯分布(Gaussian Distribution )

   该部分只是对高斯分布的介绍,因为该高斯分布对其算法异常重要。高斯分布也叫做正态分布

   如果我们认为变量 x 符合高斯分布 x\sim N(\mu ,\sigma^{2}),那么其概率密度函数为: p(x,\mu ,\sigma ^{2}) =\frac{1}{\sqrt{2\pi \sigma }} exp(-\frac{(x-\mu )^{2}}{2\sigma ^{2}})

   我们可以用已有的数据来预测总体中的 \mu\sigma ^{2}的计算方法如下:

                                          \mu =\frac{1}{m}\sum _{i=1}^{m}x^{(i)}                         \sigma ^{2}=\frac{1}{m}\sum _{i=1}^{m}(x^{(i)}-\mu )^{2}

   高斯分布的样例如下所示

                    

  3 算法(Algorithm)

      异常检查算法为:对于给定的数据集x^{(1)},x^{(2)},\cdots ,x^{(m)},我们要针对每一个特征计算\mu\sigma ^{2}的估计值

                                     \mu_{j} =\frac{1}{m}\sum _{i=1}^{m}x_{j}^{(i)}                       \sigma _{j}^{2}=\frac{1}{m}\sum _{i=1}^{m}(x_{j}^{(i)}-\mu_{j} )^{2}

     一旦我们获得了平均值和方差的估计值,给定一个新的一个训练实例,即可根据模型计算p(x):

                                  p(x)=\prod _{j=1}^{n}p(x_{j};\mu _{j},\sigma _{j}^2)=\prod _{j=1}^{n}\frac{1}{\sqrt{2\pi \sigma _{j}}}exp(-\frac{(x_{j}-\mu _{j})^{2}}{2\sigma _{j}^{2}})

     当 p(x)<\varepsilon 时为异常。下图为一个数据又两个特征的训练集,以及特征的分布情况:

 

           

      x_{1} 也就是特征1的高斯分布如第一张图所示,x_{2}也就是特征2 的高斯分布如图2所示。下面有一个三维图表示的时密度估计函数,z 轴为根据两个特征的值 x_{1} 和 x_{2}所估计的p(x)值:

                                      

      我们选择一个\varepsilon,将p(x)=\varepsilon作为我们的判定边界,当p(x)>\varepsilon时预测数据为正常数据,否则为异常

4 开发和评价一个异常检测系统(Developing and Evaluating )

       异常检测算法是一个非监督学习算法,意味着我们无法根据结果变量  y 的值来告诉我们数据是否真的是异常的。我们需要另一种方法来检验算法是否有效。

       当我们开发一个异常检测系统时,我们从带标记(异常或正常)的数据着手,我们从其中选择一部分正常数据用于构建训练集,然后用剩下的正常数据和异常数据混合的数据构成交叉检验集和测试集。

       例如:我们有10000台正常引擎的数据,有20台异常引擎的数据。 我们这样分配数据:

       6000台正常引擎的数据作为训练集

       2000台正常引擎和10台异常引擎的数据作为交叉检验集

       2000台正常引擎和10台异常引擎的数据作为测试集

      具体的评价方法如下:

  1. 根据测试集数据,我们估计特征的平均值和方差并构建p(x)函数
  2. 对交叉检验集,我们尝试使用不同的\varepsilon值作为阀值,并预测数据是否异常,根据F1值或者查准率与查全率的比例来选择\varepsilon
  3. 选出 \varepsilon后,针对测试集进行预测,计算异常检验系统的值,或者查准率与查全率之比

 5异常检测与监督学习对比

      之前构建的异常检测系统也使用了带标签的数据,与监督学习很相似。下面对两种机器学习方法进行比较:

异常检测监督学习
非常少量的正向类(y=1),大量的负向类(y=0同时有大量的正向类和负向类
由许多不同种类的异常。不能根据非常少量的正向类来训练算法有足够多的正向类实例,足够用于训练算法,未来遇到的正向类实例可能与训练集中的非常相近
未来遇到的异常可能与已掌握的异常非常的不同 

例如:欺骗行为检测,生产(例如飞机引擎)

 

例如;邮件过滤器,天气预报 肿瘤分类

       我感觉异常检测与监督学习的选择为他们之间用来训练模型的数据集之间的差异,异常检测算法中两个类型的数据集可以说时不对等的,其中一方比较多,另一方很少的量。而监督学习可能两个类型的数据都一样的多,都可以用来训练。

6 选择特征

       对于异常检测算法,我们使用的特征非常的重要。我们之前假设我们选择的特征都是符合高斯分布的,如果数据的分布不是高斯分布,那异常检测算法也能够工作,最主要的是我们可以将数据转化为高斯分布。例如使用对数函数 x=log(x+c),其中c为非负常数;或者x=x^{c},c为 0\sim 1 之间的一个分数。例如下图所示

                               

       选择特征通俗的来讲就是可能我们特征分布不是高斯分布,我们通过一些方法将这些特征变成高斯分布

7 多元高斯分布

      假设我们有两个相关的特征,并且这两个特征的值域范围比较宽,这种情况下,一般的高斯分布模型可能不能很好的识别异常数据。通俗化就是两个特获的正常取值范围都比较大,新数据的两个特征取值都符合之前的范围,但是综合起来就不符合,为异常。这种原因是,一般的高斯分布模型尝试的是去同时抓住两个特征的偏差,因此创造出一个比较大的判定边界。

      下图中是两个相关的特征,洋红色的线是一般的高斯分布模型获得的判定边界,很明显绿色所代表的X一个异常的数据,但是其p(x)的值仍然处于正常范围内。如果使用多元高斯分布模型,那么会创建像图中蓝色曲线所代表的判定边界。

                                               

         一般的高斯分布模型中,我们计算p(x) 的方法是:通过分别计算每个特征对应的几率然后将其累乘起来。在多元高斯分布模型中,我们将构建特征的协方差矩阵,用所有的特征一起来计算 p(x).

        一开始我们先计算所有特征的平均值,然后再计算协方差矩阵

        p(x)=\prod _{j=1}^{n}p(x_{i};\mu ,\sigma _{j}^{2})=\prod _{j=1}^{n}\frac{1}{\sqrt{2\pi \sigma _{j}}}exp(-\frac{(x_{j}-\mu _{j})^{2}}{2\sigma _{j}^2})

         \mu =\frac{1}{m}\sum _{i=1}^{m}x^{(i)}

        \Sigma =\frac{1}{m}\sum_{i=1}^{m}(x^{(i)}-\mu )(x^{(i)}-\mu )^{T}=\frac{1}{m}(X-\mu )^{T}(X-\mu )

       其中\mu是一个向量,其每一个单元都是原特征矩阵中每一行数据的均值,最后我们可以利用上述所计算的 \mu 和\Sigma 来计算之前的高斯分布公式的p(x),如下所示

         p(x)=\frac{1}{(2\pi )^{2}\left | \Sigma \right |^{\frac{1}{2}}}exp(-\frac{1}{2}(x-\mu )^{T}\Sigma ^{-1}(x-\mu ))

       其中 \left | \Sigma \right | 为定矩阵,\Sigma ^{-1}为逆矩阵。为啥要使用协方差,协方差矩阵对模型的影响如下所示:

      由上图可以看出,不断改变协方差矩阵中的值,高斯分布的模型的变化也不尽相同。上图中的5个不同模型,从左往右依次是 

        1.是一个一般的高斯分布模型

        2.通过协方差矩阵,令特征1拥有较小的偏差,同时保持特征2的偏差

        3.通过协方差矩阵,令特征2拥有较大的偏差,同时保持特征1的偏差

        4.通过协方差矩阵,在不改变两个特征的原有偏差的基础上,增加两者之间的正相关性

        5.通过协方差矩阵,在不改变两个特征的原有偏差的基础上,增加两者之间的负相关性

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值