分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
公开课地址:https://class.coursera.org/ml-003/class/index
授课老师:Andrew Ng
1、problem motivation(问题的产生)
先来看一个例子,假设我们要对飞机引擎进行检测,我们知道飞机引擎的性能和很多因素相关,这里我只选择热量和振动强度两个因素,在获取大量正常的数据以后,我们能在二维坐标系中绘制出这两个因素之间的关系,如下图红色点所示:
现在有一个新的引擎送到我们这里检测,我们检测了该引擎的热量和振动强度,现在为了确定该引擎是否正常,可以通过判断其对应点是否在正常区域内,如果在就可以认为该引擎正常,否则认为该引擎异常,上图中标注为anomaly的点就是异常点。
同样,我们也可以根据点的密度来判断异常情况,点越密表明越正常,否则就是异常,为了更好的衡量,我们可以设定一个阈值,当估计值小于阈值,证明密度过低,为异常情况:
异常检测在制造业和信息业的用处很大,除了上面提到的飞机引擎检测,在数据中心中加入异常检测可以判断电脑是否运行正常。
2、gaussian distribution(高斯分布)
学过概率的同学肯定都知道高斯分布,它还有一个名字叫正态分布,其分布形状和表达式如下:
通过调整均值和方差,图像的形状会发生变化,学过概率的直接无视:
假设我们已知样本点服从高斯分布,我们就需要求出均值和方差,通过公式不难求得:
注意在计算方差时我们是除以m而不是常见的除以m-1,Adrew解释称这是为了计算方便,尽管期望不准确了,但这点误差可以忽略。
3、algorithm(算法)
现在我们已经知道了高斯分布的情况,那么如何来计算一个样本点的密度呢?我们首先假设样本点中的每个特征都满足高斯分布,如果有n维特征,那么就有n个高斯分布:
某个样本的密度就是该样本点在n维高斯分布上的密度的乘积。下面是整个算法过程:
可以看到,在给定新的样本后,我们可以计算出密度值与阈值进行比较,如果小于阈值就认为是异常。下面是一个具体的例子:
4、developing and evaluating an anomaly detection system(开发评估一个异常检测系统)
在开发一个系统之前我们首先要有数据:
比如针对前面提到的引擎问题,我们可以获得下面数据:
注意在训练集中不存在异常值,在验证集和测试集中才包含异常值。然后就是训练,验证,测试,在评估模型好坏的时候可以采用前面提到的F1-score值来评价,至于阈值,也可以通过验证的情况进行选择:
5、anomaly detection vs. Supervised learning(异常检测vs监督学习)
异常检测是把异常区分出来,这一点类似于监督学习中的分类,不过这两者还是存在较大区别的,例如异常检测中异常值较少(positive),而监督学习中不存在这种情况,同时如果异常的种类太多或者未来异常难以预测也应该采用异常检测而不是监督学习:
下面是这两者的应用,从应用中也能看出上面提到的区别:
6、choosing what feature to use(选择要使用的特征)
前面我们都是假设样本的特征都是服从高斯分布的,实际情况并不如此,为此我们需要做一番变换:
可以看到,通过求log值,可以把左下方看起来不像高斯分布的情况变成高斯分布。同时我们希望p(x)在正常情况下尽可能大,在异常时尽可能小,但是经常会发现在这两种情况下p(x)的值区别不大。考虑前面提到的数据中心监控问题,可以从当前的特征中提取出新的特征来满足要求:
7、multivariate Gaussian distribution(多元高斯分布)
还是前面提到的数据中心的监控问题,这里我们不再像之前那样按照特征分成多个高斯分布进行相乘,而是直接用一个高斯分布进行表示,这就是多元高斯分布,概率论中也提到过:
这里方差是一个矩阵的形式体现的,也就是我们经常听到的协方差矩阵,同时均值也是以矩阵形式体现的。多元意味着高斯分布不再是二维平面上的分布,而是在更高维的面上分布。下面是二维的情况,通过改变均值和协方差我们能看到分布的变化:
8、anomaly detection using the multivariate gaussian distribution(使用多元高斯分布异常检测)
首先我们需要根据样本点计算出多元高斯分布的均值和协方差:
然后计算新加入的样本点的密度:
其实,多元高斯分布和前面的高