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
异常检测是一种介于监督学习与非监督学习之间的机器学习方式。一般用于检查大规模正品中的小规模次品。根据单个特征量的概率分布,从而求出某个样本正常的概率,若正常的概率小于阈值,即 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
课程网址: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
相关文章推荐
- 用Python从零实现贝叶斯分类器的机器学习的教程
- My Machine Learning
- 机器学习---学习首页 3ff0
- 也谈 机器学习到底有没有用 ?
- 量子计算机编程原理简介 和 机器学习
- 初识机器学习算法有哪些?
- 10个关于人工智能和机器学习的有趣开源项目
- 机器学习实践中应避免的7种常见错误
- 机器学习书单
- 北美常用的机器学习/自然语言处理/语音处理经典书籍
- 如何提升COBOL系统代码分析效率
- 自动编程体系设想(一)
- 自动编程体系设想(一)
- 支持向量机(SVM)算法概述
- 神经网络初步学习手记
- 常用的分类评估--基于R语言
- 开始spark之旅
- spark的几点备忘
- 关于机器学习的学习笔记(一):机器学习概念
- 关于机器学习的学习笔记(二):决策树算法