吴恩达机器学习(十九)—— 异常检测

吴恩达机器学习系列内容的学习目录 → \rightarrow 吴恩达机器学习系列内容汇总

1. 问题的动机

  异常检测是机器学习算法的一个常见应用,这种算法的一个有趣之处在于:它虽然主要用于非监督学习,但从某些角度来看,又类似于一些监督学习问题。
  一个异常检测的例子:假设作为一个飞机引擎制造商,当我们生产的飞机引擎从生产线上流出时,我们需要进行QA(质量控制测试),而作为这个测试的一部分,我们测量了飞机引擎的一些特征变量,比如引擎运转时产生的热量 x ( 1 ) x^{(1)} x(1),或者引擎的振动 x ( 2 ) x^{(2)} x(2)等等。这样一来,就有了一个数据集{ x ( 1 ) x^{(1)} x(1), x ( 2 ) x^{(2)} x(2), …, x ( m ) x^{(m)} x(m)},如果生产了 m m m个引擎的话,我们将这些数据绘制成图表,如下图所示。

在这里插入图片描述
  异常检测问题可以定义如下:我们假设后来有一天,有一个新的飞机引擎从生产线上流出,这个新的飞机引擎有它的特征变量。所谓的异常检测问题就是我们希望知道这个新的飞机引擎是否有某种异常,或者说,我们希望判断这个引擎是否需要进一步测试。因为,如果它看起来像一个正常的引擎,那么我们可以直接将它运送到客户那里,而不需要进一步的测试。
  给定数据集 x ( 1 ) x^{(1)} x(1), x ( 2 ) x^{(2)} x(2), …, x ( m ) x^{(m)} x(m),我们假使这 m m m个数据集是正常的,则需要一个算法来知道新的数据 x t e s t x_{test} xtest是否异常?我们要采取的方法是给定无标签的训练集,对数据 x x x的概率分布 p ( x ) p(x) p(x)建模。

在这里插入图片描述
  上图中,在蓝色圈内的数据属于正常数据的可能性较高,而越是偏远的数据,其属于正常数据的可能性就越低。这种方法称为密度估计,表达如下:
i f   p ( x ) { < ε           a n o m o u s ⩾ ε           n o r m a l     if\ _{}p(x)\left\{\begin{matrix} < \varepsilon \ _{}\ _{}\ _{}\ _{}\ _{}anomous\\ \geqslant \varepsilon\ _{}\ _{}\ _{}\ _{}\ _{} normal\ _{}\ _{} \end{matrix}\right. if p(x){<ε     anomousε     normal    因此,当我们建立了 x x x的概率分布模型之后,对 x t e s t x_{test} xtest,如果 p ( x t e s t ) < ε p(x_{test})< \varepsilon p(xtest)<ε(阈值),就将其标记为异常;反之,如果 p ( x t e s t ) ⩾ ε p(x_{test})\geqslant \varepsilon p(xtest)ε,认为它是正常的。
  异常检测的应用有欺诈检测、工业生产领域、数据中心的计算机监控等。

2. 高斯分布

  高斯分布,也称为正态分布。通常如果我们认为变量 x x x符合高斯分布 x ∼ N ( μ , σ 2 ) x\sim N(\mu , \sigma ^{2}) xN(μ,σ2),则其概率密度函数为 p ( x ; μ , σ 2 ) = 1 2 π σ e x p ( − ( x − μ ) 2 2 σ 2 ) p(x; \mu , \sigma ^{2})=\frac{1}{\sqrt{2\pi \sigma }}exp(-\frac{(x-\mu )^{2}}{2\sigma ^{2}}) p(x;μ,σ2)=2πσ 1exp(2σ2(xμ)2)其中, μ = 1 m ∑ i = 1 m x ( i ) \mu =\frac{1}{m}\sum ^{m}_{i=1}x^{(i)} μ=m1i=1mx(i) σ 2 = 1 m ∑ i = 1 m ( x ( i ) − μ ) 2 \sigma ^{2}=\frac{1}{m}\sum ^{m}_{i=1}(x^{(i)}-\mu )^{2} σ2=m1i=1m(x(i)μ)2

  需要注意的是,在机器学习中对于方差我们通常只除以 m m m而非统计学中的 m − 1 m-1 m1
  高斯分布样例如下图所示。
在这里插入图片描述

3. 算法

  应用高斯分布开发异常检测算法:

  1. 选择我们认为可以指出异常样本的特征变量 x j x_{j} xj
  2. 通过 μ j = 1 m ∑ i = 1 m x j ( i ) \mu_{j} =\frac{1}{m}\sum ^{m}_{i=1}x_{j}^{(i)} μj=m1i=1mxj(i) σ j 2 = 1 m ∑ i = 1 m ( x j ( i ) − μ j ) 2 \sigma_{j} ^{2}=\frac{1}{m}\sum ^{m}_{i=1}(x_{j}^{(i)}-\mu_{j} )^{2} σj2=m1i=1m(xj(i)μj)2拟合参数 μ 1 \mu_{1} μ1, μ 2 \mu_{2} μ2, …, μ n \mu_{n} μn σ 1 2 \sigma_{1}^{2} σ12, σ 2 2 \sigma_{2}^{2} σ22, …, σ n 2 \sigma_{n}^{2} σn2
  3. 给定新样本 x x x,计算 p ( x ) p(x) p(x) p ( x ) = ∏ j = 1 n p ( x j ; μ j , σ j 2 ) = ∏ j = 1 n 1 2 π σ j e x p ( − ( x j − μ j ) 2 2 σ j 2 ) p(x)=\prod ^{n}_{j=1}p(x_{j}; \mu_{j} , \sigma _{j}^{2})=\prod ^{n}_{j=1}\frac{1}{\sqrt{2\pi \sigma_{j} }}exp(-\frac{(x_{j}-\mu _{j})^{2}}{2\sigma_{j} ^{2}}) p(x)=j=1np(xj;μj,σj2)=j=1n2πσj 1exp(2σj2(xjμj)2)如果 p ( x ) < ε p(x)< \varepsilon p(x)<ε,则认为异常。

4. 开发和评价异常检测系统

  实数评估的重要性:当我们为某个应用开发一个学习算法时,需要进行一系列的选择(比如,选择特征等)。如果我们有某种方法,通过返回一个实数来评估我们的算法,那么对这些选择做出决定往往会更容易的多。
  异常检测算法是一个非监督学习算法,意味着我们无法根据结果变量 y y y的值来告诉我们数据是否真的是异常的。我们需要另一种方法来帮助检验算法是否有效。
  当我们开发一个异常检测系统时,我们从带标记(异常或正常)的数据着手,从其中选择一部分正常数据用于构建训练集,然后用剩下的正常数据和异常数据混合的数据构成交叉检验集和测试集。
  对异常检测系统具体的评价方法如下:
    1. 根据训练集数据,我们估计特征的平均值和方差并构建 p ( x ) p(x) p(x)函数;
    2. 对交叉检验集,我们尝试使用不同的 ε \varepsilon ε值作为阀值,并预测数据是否异常,根据F1值或者查准率与查全率的比例来选择 ε \varepsilon ε
    3. 选出 ε \varepsilon ε后,针对测试集进行预测,计算异常检验系统的F1值,或者查准率与查全率之比。

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

  异常检测与监督学习对比如下表所示。

异常检测监督学习
非常少量的正向类(异常数据 y = 1 y=1 y=1),大量的负向类( y = 0 y=0 y=0同时有大量的正向类和负向类
许多不同种类的异常,很难有算法去从少量正样本中学习异常是什么足够数量的正样本,可以用于训练算法
未来可能出现的异常看起来与已有的异常截然不同未来可能出现的正样本与当前训练集中的正样本类似
例如: 欺诈行为检测、生产(例如飞机引擎)、数据中心的机器监视例如:邮件过滤器、天气预报、肿瘤分类

  什么情况下,能让我们把某个学习问题当做是一个异常检测,或者是一个监督学习的问题?
  对于一个学习问题,如果正样本的数量很少,甚至有时候是0,也就是说出现了太多没见过的不同的异常类型,那么对于这些问题,通常应该使用的算法就是异常检测算法;而如果正负样本数量都很多的话,则可以使用监督学习算法。例如,如果网络有很多诈骗用户,则可以变为监督学习;如果只有少量诈骗用户,则为异常检测。

6. 选择特征

  当应用异常检测时,选择什么特征对运行有很大影响。
  异常检测假设特征符合高斯分布,如果数据的分布不是高斯分布,异常检测算法也能够工作,但是最好还是将数据转换成高斯分布,例如使用对数函数: x = l o g ( x + c ) x=log(x+c) x=log(x+c),其中 x x x为非负常数;或者 x = x c x=x^{c} x=xc c c c为 0-1 之间的一个分数,等方法进行转换。

在这里插入图片描述
  如何得到异常检测算法的特征?进行误差分析。
  一个常见的问题是一些异常的数据可能也会有较高的 p ( x ) p(x) p(x)值,因而被算法认为是正常的。这种情况下误差分析能够帮助我们,我们可以分析那些被算法错误预测为正常的数据,观察能否找出一些问题。我们可能能从问题中发现我们需要增加一些新的特征,增加这些新特征后获得的新算法能够帮助我们更好地进行异常检测。
  我们通常可以通过将一些相关的特征进行组合,来获得一些新的更好的特征(异常数据的该特征值异常地大或小)。

7. 多元高斯分布

  假使我们有两个相关的特征,而且这两个特征的值域范围比较宽,这种情况下,一般的高斯分布模型可能不能很好地识别异常数据。其原因在于,一般的高斯分布模型尝试的是去同时抓住两个特征的偏差,因此创造出一个比较大的判定边界。
  下图中有两个相关特征 x 1 x_{1} x1 x 2 x_{2} x2,红色的线(根据 ε ε ε的不同其范围可大可小)是一般的高斯分布模型获得的判定边界,很明显绿色的叉所代表的数据点很可能是异常值,但是其 p ( x ) p(x) p(x)值却仍然在正常范围内。多元高斯分布将创建像图中蓝色曲线所示的判定边界。

在这里插入图片描述
  在一般的高斯分布模型中,我们计算 p ( x ) p(x) p(x)的方法是,通过分别计算每个特征对应的概率然后将其累乘起来;在多元高斯分布模型中,我们将构建特征的协方差矩阵,用所有的特征一起来计算 p ( x ) p(x) p(x)
  我们首先计算所有特征的平均值,然后再计算协方差矩阵: p ( x ) = ∏ j = 1 n p ( x j ; μ j , σ j 2 ) = ∏ j = 1 n 1 2 π σ j e x p ( − ( x j − μ j ) 2 2 σ j 2 )     μ = 1 m ∑ i = 1 m x ( i )                                                                                                                 Σ = 1 m ∑ i = 1 m ( x ( i ) − μ ) ( x ( i ) − μ ) T = 1 m ( X − μ ) T ( X − μ ) \begin{matrix} p(x)=\prod ^{n}_{j=1}p(x_{j}; \mu_{j} , \sigma _{j}^{2})=\prod ^{n}_{j=1}\frac{1}{\sqrt{2\pi \sigma_{j} }}exp(-\frac{(x_{j}-\mu _{j})^{2}}{2\sigma_{j} ^{2}})\ _{}\\\\ _{}\ \mu =\frac{1}{m}\sum ^{m}_{i=1}x^{(i)}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{}\ _{} \\\\ \Sigma =\frac{1}{m}\sum ^{m}_{i=1}(x^{(i)}-\mu )(x^{(i)}-\mu )^{T}=\frac{1}{m}(X-\mu )^{T}(X-\mu ) \end{matrix} p(x)=j=1np(xj;μj,σj2)=j=1n2πσj 1exp(2σj2(xjμj)2)  μ=m1i=1mx(i)                                                        Σ=m1i=1m(x(i)μ)(x(i)μ)T=m1(Xμ)T(Xμ)其中, μ \mu μ 是一个向量,其每一个单元都是原特征矩阵中一行数据的均值。
  最后我们计算多元高斯分布的 p ( x ) p(x) p(x) p ( x ; μ , Σ ) = 1 ( 2 π ) n 2 ∣ Σ ∣ 1 2 e x p ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) p(x;\mu ,\Sigma )=\frac{1}{(2\pi )^{\frac{n}{2}}\left | \Sigma \right |^{\frac{1}{2}}}exp\left ( -\frac{1}{2}(x-\mu )^{T}\Sigma ^{-1} (x-\mu )\right ) p(x;μ,Σ)=(2π)2nΣ211exp(21(xμ)TΣ1(xμ))   下面我们来看看协方差矩阵是如何影响模型的。

在这里插入图片描述
  对于上图中5个不同的模型从左往右依次进行分析:

  1. 第一个模型是一个一般的高斯分布模型;
  2. 通过协方差矩阵,第二个模型令特征 x 1 x_{1} x1拥有较小的偏差,同时保持特征 x 2 x_{2} x2的偏差;
  3. 通过协方差矩阵,第三个模型令特征 x 2 x_{2} x2拥有较大的偏差,同时保持特征 x 1 x_{1} x1的偏差;
  4. 通过协方差矩阵,第四个模型在不改变两个特征的原有偏差的基础上,增加两者之间的正相关性;
  5. 通过协方差矩阵,第五个模型在不改变两个特征的原有偏差的基础上,增加两者之间的负相关性。

  多元高斯分布模型与原高斯分布模型的关系:可以证明的是,原高斯分布模型是多元高斯分布模型的一个子集,即像上图中的第一、二、三3个模型所示,如果协方差矩阵只在对角线的单位上有非零的值时,即为原高斯分布模型。

8. 使用多元高斯分布进行异常检测

  使用多元高斯分布进行异常检测:

  1. 通过设定 μ = 1 m ∑ i = 1 m x ( i ) \mu =\frac{1}{m}\sum ^{m}_{i=1}x^{(i)} μ=m1i=1mx(i) Σ = 1 m ∑ i = 1 m ( x ( i ) − μ ) ( x ( i ) − μ ) T \Sigma =\frac{1}{m}\sum ^{m}_{i=1}(x^{(i)}-\mu )(x^{(i)}-\mu )^{T} Σ=m1i=1m(x(i)μ)(x(i)μ)T拟合模型 p ( x ) p(x) p(x)
  2. 给定新样本 x x x,计算 p ( x ) p(x) p(x) p ( x ) = ∏ j = 1 n p ( x j ; μ j , σ j 2 ) = ∏ j = 1 n 1 2 π σ j e x p ( − ( x j − μ j ) 2 2 σ j 2 ) p(x)=\prod ^{n}_{j=1}p(x_{j}; \mu_{j} , \sigma _{j}^{2})=\prod ^{n}_{j=1}\frac{1}{\sqrt{2\pi \sigma_{j} }}exp(-\frac{(x_{j}-\mu _{j})^{2}}{2\sigma_{j} ^{2}}) p(x)=j=1np(xj;μj,σj2)=j=1n2πσj 1exp(2σj2(xjμj)2)如果 p ( x ) < ε p(x)< \varepsilon p(x)<ε,则认为异常。

  原高斯分布模型和多元高斯分布模型的比较

原高斯分布模型多元高斯分布模型
不能捕捉特征之间的相关性,但可以通过将特征进行组合的方法来解决自动捕捉特征之间的相关性
计算代价低,能适应大规模的特征计算代价较高,训练集较小时也同样适用
即使 m m m(训练及大小)很小也可以必须要有 m > n m>n m>n ,不然的话协方差矩阵不可逆的,通常需要 m > 10 n m>10n m>10n,另外特征冗余也会导致协方差矩阵不可逆

  原高斯分布模型被广泛使用着,如果特征之间在某种程度上存在相互关联的情况,我们可以通过构造新特征的方法来捕捉这些相关性。如果训练集不是太大,并且没有太多的特征,我们可以使用多元高斯分布模型。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值