您的位置:首页 > 其它

Andrew Ng Machine Learning 专题【Anomaly Detection】

2015-10-22 15:42 281 查看
此文是斯坦福大学,机器学习界 superstar — Andrew Ng 所开设的 Coursera 课程:Machine Learning 的课程笔记。力求简洁,仅代表本人观点,不足之处希望大家探讨。

课程网址:https://www.coursera.org/learn/machine-learning/home/welcome

Week 9 后半部分 Recommender Systems:http://blog.csdn.net/ironyoung/article/details/49340133

Week 9:

异常检测 & 高斯分布

异常检测是一种介于监督学习与非监督学习之间的机器学习方式。一般用于检查大规模正品中的小规模次品。根据单个特征量的概率分布,从而求出某个样本正常的概率,若正常的概率小于阈值,即 p(x)<ϵ 视其为异常(次品)。正品与次品的 label 值 y 定义为:

y={01if p(x)≥ϵif p(x)<ϵ

如果某个样本由x1,x2两个变量决定,如下图红色叉所示:



同一个圆圈内部,表示的是成为正品的概率相同。越中心的圆圈内部正品率越高。越外层的圆圈内正品率越低。

异常检测一般将每个特征量的分布假设为正态分布(如果特征量与正态分布差距很大,之后我们会提到方法对其进行修正)。为什么是正态分布?因为在生产与科学实验中发现,很多随机变量的概率分布都可以近似地用正态分布来描述(猜测正确的概率更大)。因此,以下稍微介绍一下正态分布的基础知识,如果很熟悉的同学可以略过这部分。

正态分布(高斯分布),包含两个参数:均值μ(分布函数取峰值时所对应横坐标轴的值),与方差σ2(标准差为σ,控制分布函数的“胖瘦”)。如果变量 x 满足于正态分布,将其记为 x∼N(μ,σ2)。而取某个 x 的对应正品概率为:p(x)=12π√σe−(x−μ)22σ2

均值 μ=1m∑i=1mx(i),方差 σ2=1m∑i=1m(x(i)−μ)2

正态分布曲线与坐标轴之间的面积(即函数积分)恒定为 1,因此“高”曲线必然“瘦”,“矮”曲线必然“胖”:



由图可知,标准差σ控制着分布函数的“胖瘦”。原因是因为标准差有关的取值范围,有着固定的分布概率(积分):



异常检测算法流程

我们拥有一组训练数据:x(1),x(2),...,x(m),每个样本有着 m 个特征量 x1,x2,...,xn

将每个样本投影到不同的特征的坐标轴上,基于样本得到各个特征的概率正态分布曲线

假设各个特征的概率是独立的,因此单个样本的异常概率为

p(x)=p(x1;μ1,σ21)×p(x2;μ2,σ22)×...×p(xn;μn,σ2n))=∏i=1np(xj;μj,σ2j)

各个特征的均值为 μj=1m∑i=1mx(i)j,方差为 σ2j=1m∑i=1m(x(i)j−μj)2

如果我们有着 10000 个正品样本,以及 20 个次品样本,我们应该这样区分训练集、交叉验证集,与测试集:

训练集:6000个正品作为训练集(不包括次品样本)

交叉验证集:2000 个正品样本 + 10 个次品样本。用以确定次品概率的阈值 ϵ

测试集:2000 个正品样本 + 10 个次品样本。用以判断算法的检测效果

特别注意,因为使用异常检测的样本集合一般都是偏斜严重的(正品样本远远多于次品样本)。因此,需要在《专题【Machine Learning Advice】》http://blog.csdn.net/ironyoung/article/details/48491237 中提到的 precision/recall/F-score 来进行判断算法的检测效果。

异常检测 VS. 监督学习

监督学习方法与异常检测类似,处理对象都是一堆有 label 的样本,并且目标都是预测新样本的类别。那么什么时候使用监督学习的方法?什么时候使用异常检测的方法?

大体上,区别如下:

样本比例:异常检测适用于正样本(y=1,即次品)个数远远小于负样本的个数的情况;监督学习适用于正负样本个数都非常多的情况

异常规律:如果正样本(y=1,即次品)有着难以预测的模式,引起正样本的原因有很多很多,适用于异常检测;但是如果正样本有着固定的规律,比如感冒(病因已被研究透彻),可以尝试基于大量的样本使用监督学习的方法建立模式进行判断

特征选择

绝大多数情况下,特征量符合正态分布的分布情况。但如果特征的分布极端不符合,我们只能对其进行一些处理,以产生全新的特征来适用于异常检测算法。例如:



此时,我们有着变换后的特征变量:xnew=log(x1)

或者,一般情况下我们希望正品的 p(x) 很大,次品的 p(x) 很小。也就是说,在异常情况下某些特征应该变得极大或极小(正态分布中对于极大值或者极小值的对应概率都是极小的,所以整个样本的正品概率相乘会很容易满足 p(x)<ϵ):例如创建新变量xnew=x21x2,进一步放大了值增大或减小的程度。

Multivariate Gaussion(选学)

如果一个样本有着多种特征,那么整体的正品概率可以按照以上提到的,视每个变量为互相独立然后各自概率相乘进行求解(我们称之为 original model)。但是,如果出现了下图这种正相关(负相关)极强的特征量,同心圆内部的正品概率必然不同,显然不合适了:



我们希望原本的同心圆可以更扁,可以变换方向,例如上图的蓝色椭圆。

此时,我们可以利用协方差矩阵,构造全新的多变量正态分布公式。此时我们用到的不再是方差 σ2,而是协方差矩阵 Σ∈Rn×n:Σ=1m(x(i)−μ)(x(i)−μ)T。多变量正态分布的概率公式为:

p(x)=1(2π)n/2|Σ|1/2e−12(x−μ)TΣ−1(x−μ),其中|Σ|表示协方差矩阵的行列式。

协方差矩阵与均值,对概率分布图的影响如下:









original model VS. multivariate Gaussian

如果一个样本有着多种特征,那我们究竟是应该使用 original model,还是 multivariate Gaussian?

大体上,区别如下:

特征选择:original model 中的各个单个特征(或创造出的新特征),应该尽量满足在异常情况下产生概率极小的特性;而如果特征之间,发现了正相关或负相关的关系,应该用 multivariate Gaussian

计算效率:original model 仅仅乘法,效率较高;multivariate Gaussian 需要计算协方差的逆矩阵,效率较低

样本数目:original model 在训练集极小的情况下也可以计算;multivariate Gaussian 至少需要训练集样本数目大于特征数目,否则协方差矩阵无法求逆

协方差矩阵无法求逆(奇异矩阵)的情况极少发生,但是一旦发生,可能有以下几种原因:

特征的数量大于训练集的样本个数

冗余的特征变量(x1≈x2 或者 x3=x4+x5 这样的高度冗余情况)

编程作业答案:https://github.com/cnauroth/machine-learning-class
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息