Coursea-吴恩达-machine learning学习笔记(十五)【week 9之Anomaly Detection】

异常检测
存在样本集 {x(1),x(2),,x(m)} { x ( 1 ) , x ( 2 ) , ⋯ , x ( m ) } ,通常假设这 m m 个样本都是正常的或者不异常的,对训练集数据建一个模型p(x),即对 x x 的分布概率建模,当建立完概率模型后,对新的样本xtest来说,如果 p(xtest)<ε p ( x t e s t ) < ε ,标记为不正常,否则,标记为正常。
异常检测最常见的应用:

  1. 欺诈检测
    x(i) x ( i ) 为用户活动的特征值;
    利用数据建立模型 p(x) p ( x ) ,用来表示用户做出各种行为的可能性,即对应特征变量出现的概率;
    检测用户的 p(x) p ( x ) 是否小于 ε ε 来定义行为异常用户。
  2. 工业生产领域
  3. 数据中心的计算机监控

高斯分布(正态分布)
xR x ∈ R ,如果 x x 的概率分布服从高斯分布(均值为μ,方差为 σ2 σ 2 ),则记做 xN(μ,σ2) x ∼ N ( μ , σ 2 ) ,高斯分布的概率密度公式:

p(x;μ,σ2)=12πσexp((xμ)22σ2) p ( x ; μ , σ 2 ) = 1 2 π σ e x p ( − ( x − μ ) 2 2 σ 2 )

该公式的图形表示如下图:
这里写图片描述
μ μ 控制图中曲线的中心位置, σ σ 控制该曲线的宽度。
不同 μ μ σ σ 取值的概率密度曲线如下图所示:
这里写图片描述 这里写图片描述
这里写图片描述 这里写图片描述
因为这是一个概率分布曲线,所以曲线下的面积积分一定为1。

参数估计
假设有一个数据集 {x(1),x(2),,x(m)} { x ( 1 ) , x ( 2 ) , ⋯ , x ( m ) } x(i)R x ( i ) ∈ R ,如下图:
这里写图片描述
猜测每个样本 x(i) x ( i ) 服从高斯分布 N(μ,σ2) N ( μ , σ 2 )

μ=1mi=1mx(i)σ2=1mi=1m(x(i)μ)2 μ = 1 m ∑ i = 1 m x ( i ) σ 2 = 1 m ∑ i = 1 m ( x ( i ) − μ ) 2

基于高斯分布的异常检测算法
存在训练集 {x(1),x(2),,x(m)} { x ( 1 ) , x ( 2 ) , ⋯ , x ( m ) } x(i)Rn x ( i ) ∈ R n
x1N(μ1,σ21),x2N(μ2,σ22),x3N(μ3,σ23),,xnN(μn,σ2n) x 1 ∼ N ( μ 1 , σ 1 2 ) , x 2 ∼ N ( μ 2 , σ 2 2 ) , x 3 ∼ N ( μ 3 , σ 3 2 ) , ⋯ , x n ∼ N ( μ n , σ n 2 )
则模型 P(x)=p(x1;μ1,σ21)p(x2;μ2,σ22)p(x3;μ3,σ23)p(xn;μn,σ2n)=j=1np(xj;μj,σ2j) P ( x ) = p ( x 1 ; μ 1 , σ 1 2 ) p ( x 2 ; μ 2 , σ 2 2 ) p ( x 3 ; μ 3 , σ 3 2 ) ⋯ p ( x n ; μ n , σ n 2 ) = ∏ j = 1 n p ( x j ; μ j , σ j 2 )

异常检测算法步骤:

  1. 选择可以表征异常样本的特征值 xi x i ,得到样本集 {x(1),x(2),,x(m)} { x ( 1 ) , x ( 2 ) , ⋯ , x ( m ) }
  2. 拟合出参数 μ1,,μn,σ21,,σ2n μ 1 , ⋯ , μ n , σ 1 2 , ⋯ , σ n 2
    μj=1mi=1mx(i)jσ2j=1mi=1m(x(i)jμj)2 μ j = 1 m ∑ i = 1 m x j ( i ) σ j 2 = 1 m ∑ i = 1 m ( x j ( i ) − μ j ) 2
  3. 给出新样本 x x ,计算p(x)
    P(x)=j=1np(xj;μj,σ2j)=j=1n12πσjexp((xjμj)22σ2j) 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)<ε P ( x ) < ε ,标注为异常。

当使用某个学习算法开发一个具体的机器学习应用时,常需要作出许多决定,如选择特征值等,如果找到某种评价算法的方式,直接返回一个数字来评价算法的好坏,那么做决定将会容易很多。
异常检测问题是一个非监督学习问题,使用无标签数据,但如果有一些带标签的数据可以指出异常/非异常样本,这就是可以评价异常检测算法的标准方法。

假设存在一些带标签数据(包含异常/非异常样本),如果正常 y=0 y = 0 ,否则 y=1 y = 1
训练集为无标签数据 {x(1),x(2),,x(m)} { x ( 1 ) , x ( 2 ) , ⋯ , x ( m ) } (假设均为正常/非异常样本)
交叉验证集: {(x(1)cv,y(1)cv),,(x(mcv)cv,y(mcv)cv)} { ( x c v ( 1 ) , y c v ( 1 ) ) , ⋯ , ( x c v ( m c v ) , y c v ( m c v ) ) }
测试集: {(x(1)test,y(1)test),,(x(mtest)test,y(mtest)test)} { ( x t e s t ( 1 ) , y t e s t ( 1 ) ) , ⋯ , ( x t e s t ( m t e s t ) , y t e s t ( m t e s t ) ) }
交叉验证集和测试集中包含异常样本。

举例:以飞机引擎为例
10000 10000 个正常引擎, 20 20 个异常引擎
(注:根据经验,通常 y=1 y = 1 的样本数为 250 2 ∼ 50 个, y=0 y = 0 的样本很多)

一种典型的数据分类:
训练集: 6000 6000 个正常引擎;
交叉验证集: 2000 2000 个正常引擎( y=0 y = 0 ), 10 10 个异常引擎( y=1 y = 1 );
测试集: 2000 2000 个正常引擎( y=0 y = 0 ), 10 10 个异常引擎( y=1 y = 1 );
正常引擎的划分比例为 6:2:2 6 : 2 : 2 ,异常引擎的划分比例为 0:1:1 0 : 1 : 1

接下来:
在训练集 {x(1),x(2),,x(m)} { x ( 1 ) , x ( 2 ) , ⋯ , x ( m ) } 上拟合模型 p(x) p ( x )
在交叉验证集或测试集样本 x x 上,预测:

y={1, p(x)<ε()0, p(x)ε()

因为该类样本比较偏斜,所以用到的评价度量指标为:

  • 查准率/召回率
  • F1score F 1 − s c o r e

用交叉验证集选择参数 ε ε ,尝试不同的 ε ε 值,选出使 F1score F 1 − s c o r e 最大的那个 ε ε

异常检测 VS V S 监督学习

应用场景:

  • 异常检测:正样本( y=1 y = 1 )的数量很少(通常为 020 0 ∼ 20 ),负样本( y=0 y = 0 )的数量很多;
  • 监督学习:正、负样本的数量都很多。

补充说明:

  • 异常检测:存在多种不同的异常情况,对于任何学习算法,都很难从少量的正样本中学习到异常的全部情况,很多未知的异常无法从现有样本中学到;
  • 监督学习:对算法来说,有充足的正样本来学习正样本的样子,未来的正样本类似于训练集中的样本。

应用举例:

  • 异常检测:欺诈检测、工业生产、数据中心的计算机监控;
  • 监督学习:垃圾邮件分类、天气预测、癌症分类。

异常检测算法的特征变量选择
当应用异常检测时,对它的效率影响最大的因素之一是使用什么特征变量。
在使用异常检测算法之前,可以通过画出特征变量取值来看其是否服从高斯分布(注:虽然不是高斯分布,算法也可以正常运行)

Octave O c t a v e 中画直方图用 hist() h i s t ( ) 命令
如果数据不服从高斯分布,可以对数据进行一些转换,使其更像高斯分布。

例:
原特征变量分布如下图:
这里写图片描述
对其取 log(x) l o g ( x ) 转换,特征分布如下:
这里写图片描述

常见的转换方式: log(x) l o g ( x ) log(x+1) l o g ( x + 1 ) x x x3 x 3

如何得到异常检测算法的特征变量?
先完整的训练出一个学习算法,然后在一组交叉验证集上运行算法,找出那些预测出错的样本,再看看能否找到一些其他的特征变量,来帮助学习算法在那些交叉验证集判断出错的样本中表现得更好。

为异常检测算法选择特征变量时,选取那些通常取值不会特别大也不会特别小的特征变量。

多元高斯分布
存在特征 xRn x ∈ R n ,不要把 p(x1),p(x2) p ( x 1 ) , p ( x 2 ) ⋯ 分开,而是建立一个 p(x) p ( x ) 整体的模型。

多元高斯分布的参数包括 μRn μ ∈ R n ΣRn×n Σ ∈ R n × n (协方差矩阵)
概率密度公式为:

p(x;μ,Σ)=1(2π)n2|Σ|12exp(12(xμ)TΣ1(xμ)) p ( x ; μ , Σ ) = 1 ( 2 π ) n 2 | Σ | 1 2 e x p ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) )

|Σ| | Σ | Σ Σ 的行列式, Octave O c t a v e 中用 det(Sigma) d e t ( S i g m a ) 实现。

不同 μ μ Σ Σ 取值的概率密度曲线如下:
这里写图片描述这里写图片描述
这里写图片描述这里写图片描述
这里写图片描述这里写图片描述
这里写图片描述这里写图片描述
这里写图片描述这里写图片描述

多元高斯分布的参数估计
训练集 {x(1),x(2),,x(m)} { x ( 1 ) , x ( 2 ) , ⋯ , x ( m ) } x(i)Rn x ( i ) ∈ R n

μ=1mi=1mx(i)Σ=1mi=1m(x(i)μ)(x(i)μ)T μ = 1 m ∑ i = 1 m x ( i ) Σ = 1 m ∑ i = 1 m ( x ( i ) − μ ) ( x ( i ) − μ ) T

基于多元高斯分布的异常检测算法

  1. 用训练集拟合模型 p(x) p ( x )
    μ=1mi=1mx(i)Σ=1mi=1m(x(i)μ)(x(i)μ)T μ = 1 m ∑ i = 1 m x ( i ) Σ = 1 m ∑ i = 1 m ( x ( i ) − μ ) ( x ( i ) − μ ) T
  2. 对于一个新样本,计算
    p(x)=1(2π)n2|Σ|12exp(12(xμ)TΣ1(xμ)) p ( x ) = 1 ( 2 π ) n 2 | Σ | 1 2 e x p ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) )

    如果 p(x)<ε p ( x ) < ε ,标记为异常。

原始模型: P(x)=p(x1;μ1,σ21)p(x2;μ2,σ22)p(xn;μn,σ2n) P ( x ) = p ( x 1 ; μ 1 , σ 1 2 ) p ( x 2 ; μ 2 , σ 2 2 ) ⋯ p ( x n ; μ n , σ n 2 )
对应一种多元高斯分布模型: p(x;μ,Σ)=1(2π)n2|Σ|12exp(12(xμ)TΣ1(xμ)) p ( x ; μ , Σ ) = 1 ( 2 π ) n 2 | Σ | 1 2 e x p ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) )
Σ=σ21σ22σ2n Σ = [ σ 1 2 σ 2 2 ⋱ σ n 2 ] 时。

原始模型 VS V S 多元高斯分布
特征关联:

  • 原始模型:手动新建一个特征值来捕捉 x1,x2 x 1 , x 2 不正常组合值的异常情况;
  • 多元高斯分布:自动捕捉不同特征量之间的相关性。

运算量:

  • 原始模型:运算量小,适用于特征变量很多( n n 很大)的情况;
  • 多元高斯分布:运算量大。

适用情况:

  • 原始模型:当训练集很小(m很小)时也适用;
  • 多元高斯分布: m m 必须大于n(最好 m10n m ⩾ 10 n ),即样本数量一定要大于特征变量的数量。

当使用多元高斯分布时,如果发现 Σ Σ 是不可逆的,通常有两种情况:

  1. 不满足 m>n m > n 的条件;
  2. 有冗余特征变量。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值