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

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

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

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

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

该公式的图形表示如下图:
Coursea-吴恩达-machine learning学习笔记(十五)【week 9之Anomaly Detection】
μ控制图中曲线的中心位置,σ控制该曲线的宽度。
不同μσ取值的概率密度曲线如下图所示:
Coursea-吴恩达-machine learning学习笔记(十五)【week 9之Anomaly Detection】Coursea-吴恩达-machine learning学习笔记(十五)【week 9之Anomaly Detection】
Coursea-吴恩达-machine learning学习笔记(十五)【week 9之Anomaly Detection】Coursea-吴恩达-machine learning学习笔记(十五)【week 9之Anomaly Detection】
因为这是一个概率分布曲线,所以曲线下的面积积分一定为1。

参数估计
假设有一个数据集{x(1),x(2),,x(m)}x(i)R,如下图:
Coursea-吴恩达-machine learning学习笔记(十五)【week 9之Anomaly Detection】
猜测每个样本x(i)服从高斯分布N(μ,σ2)

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

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

异常检测算法步骤:

  1. 选择可以表征异常样本的特征值xi,得到样本集{x(1),x(2),,x(m)}
  2. 拟合出参数μ1,,μn,σ12,,σn2
    μj=1mi=1mxj(i)σj2=1mi=1m(xj(i)μj)2
  3. 给出新样本x,计算p(x)
    P(x)=j=1np(xj;μj,σj2)=j=1n12πσjexp((xjμj)22σj2)

    如果P(x)<ε,标注为异常。

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

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

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

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

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

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

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

  • 查准率/召回率
  • F1score

用交叉验证集选择参数ε,尝试不同的ε值,选出使F1score最大的那个ε

异常检测VS监督学习

应用场景:

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

补充说明:

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

应用举例:

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

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

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

例:
原特征变量分布如下图:
Coursea-吴恩达-machine learning学习笔记(十五)【week 9之Anomaly Detection】
对其取log(x)转换,特征分布如下:
Coursea-吴恩达-machine learning学习笔记(十五)【week 9之Anomaly Detection】

常见的转换方式:log(x)log(x+1)xx3

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

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

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

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

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

|Σ|Σ的行列式,Octave中用det(Sigma)实现。

不同μΣ取值的概率密度曲线如下:
Coursea-吴恩达-machine learning学习笔记(十五)【week 9之Anomaly Detection】Coursea-吴恩达-machine learning学习笔记(十五)【week 9之Anomaly Detection】
Coursea-吴恩达-machine learning学习笔记(十五)【week 9之Anomaly Detection】Coursea-吴恩达-machine learning学习笔记(十五)【week 9之Anomaly Detection】
Coursea-吴恩达-machine learning学习笔记(十五)【week 9之Anomaly Detection】Coursea-吴恩达-machine learning学习笔记(十五)【week 9之Anomaly Detection】
Coursea-吴恩达-machine learning学习笔记(十五)【week 9之Anomaly Detection】Coursea-吴恩达-machine learning学习笔记(十五)【week 9之Anomaly Detection】
Coursea-吴恩达-machine learning学习笔记(十五)【week 9之Anomaly Detection】Coursea-吴恩达-machine learning学习笔记(十五)【week 9之Anomaly Detection】

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

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

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

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

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

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

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

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

运算量:

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

适用情况:

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

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

  1. 不满足m>n的条件;
  2. 有冗余特征变量。