编程作业放到了github上:coursera_machine_learning
1. Anomaly Detection (异常检测)
当一堆数据集中出现少个别几个异常数据时,需要检测出这几个异常数据。
1.1 异常检测算法概述
用一个分布 P(x) P ( x ) 来表示数据 x x 是正常数据的概率,如果 则 x x 是异常数据,反之。
而异常检测算法要做的,就是从现有的训练集中训练出这个分布 。
异常检测是一个“无监督学习”模型。
1.2 单元高斯分布
异常检测中我们使用“高斯分布”。因此只要通过训练集计算出“高斯分布”中的参数 μ μ 和 σ2 σ 2 即可。
对于其中一条数据 x(i)={ x(i)1,x(i)2,...,x(i)n} x ( i ) = { x 1 ( i ) , x 2 ( i ) , . . . , x n ( i ) } ,认为其各特征之间是独立同分布的,则:
于是对于特征 xj x j 而言,只要其满足“高斯分布”,就可以计算:
至此,通过计算得到了 x x 的分布,于是当新来一个 ,只要计算 P(xtest)<ϵ P ( x t e s t ) < ϵ 是否成立,如果是,则 xtest x t e s t 是一个异常值。 ϵ ϵ 的选择在下一节中讲到。
但是目前为止,必须保证features是满足“高斯分布”的。至于如何选择这样子的特征以及当特征不满足高斯分布时怎么处理。
1.3 模型评估
一个模型需要有一个评估标准来判断这个模型的好坏。
虽说异常检测是一个无监督模型,但是在评估的时候,我们还是需要知道一些正确答案labels才能进行评估的。所谓无监督模型是指在训练的时候输入的数据没有标签,但是在测试评估的时候是要有参照的。
假设有如下数据:
10000条好数据;20条异常数据
分成如下数据集:
训练集:6000条好数据
[作用:计算出正常数据的高斯分布P(x)]验证集:2000条好数据(y=1);10条异常数据(y=0)
[作用:选择参数 ϵ ϵ 及特征]测试集:2000条好数据(y=1);10条异常数据(y=0)
[作用:评估模型的好坏]
评估过程如下:
步骤1: 先用训练集学习出好数据的高斯分布模型P(x)
步骤2: 在验证集上进行预测,令:
y={ 1if p(x)<ϵ0if p(x)⩾ϵ y = { 1 i f p ( x ) < ϵ 0 i f p ( x ) ⩾ ϵ
步骤3: 验证机上模型评估以便调整参数
1.常用的方法是计算正确率,但这种方式显然不适合用在这里,因为这个数据集是“倾斜的(skewed dataset)”,好数据 >> 异常数据,如果全部预测成好的,其正确率也不低]
2.对于skewed dataset,采用以下方法均可:
- 真阳性、假阳性、假阴性、真阴性
- Precision/Recall
- F1 score步骤4: 阈值 ϵ ϵ 的选择(包括特征的选择)
[多试几个 ϵ ϵ ,然后评估模型,选择F1 score值较高的]
步骤5: 最后,在测试集上运用上述评估方式,得出模型最终的performance
总结一下,训练集学习模型,验证集选择参数 ϵ ϵ 和特征,测试集评估模型。
1.4 特征选择
首先需要保证选择的数据是满足高斯分布的。判断的依旧就是将这个特征进行可视化,如果这个特征不是高斯分布,那么就需要通过各种变换将其转换成高斯分布。
比如说,下面这个特征的分布是一个“长尾分布”,则可以通过“取对数 logx log x ”、“开平方 x√ x ”等方式将其转变成一个“高斯分布”。
其次,通过一个“误差分析”来选择特征。
先用算法跑出一个模型来,然后预测错误的数据 – 应为异常被判断成了正常 所对应的特征。该数据所对应的特征的概率是否符合一般情况,如果 p(x(i)j) p ( x j ( i ) ) 在异常时应该很高,而这里却很低,那么考虑这个特征的正确性,有可能需要更换特征,或者生成一个新的特征。
在异常检测中,一般选择那些在异常和正常数据间变化特别大的特征。
1.5 异常检测 Vs 监督学习
可以看到异常检测其实也是将数据集分成两类数据 – 正常数据和异常数据,那么为什么不采用监督学习呢?
第一种情况:当数据集中两类数据分布极其不均匀时,如异常数据只有“几十个”而正常数据远远多于异常数据时,应当采用“异常检测”。
[因为从这么少的异常数据中,是无法学习到符合异常数据的特征的,所以应该用异常检测去学习正常数据的特征(即所服从的高斯分布)]
第二种情况:当异常数据的种类太多,而给出的数据集中没有完全包括时,应采用“异常检测”。
[因为监督学习只能学习到现有种类的特征,无法对未知种类进行学习。所以应使用异常检测算法学习现有正常数据的特征,然后才能对异常数据进行区分。或者说无监督学习可以学到数据本身所具有的特性,而监督学习学到的只是数据对于当前任务的特性。]
监督学习的一个重要前提是各类数据的量要均匀。
1.6 多元高斯分布
之前的单元高斯分布中,要求各特征之间没有关联,独立同分布,也就是说,单元高斯分布只能学习各特征的分布,没法学习到特征之间的关联性。如果想要引入特征之间的关联性,需要自己手动构造新的特征来表示其他特征之间的关联。
而多元高斯分布可以直接通过一个“协方差矩阵”来检测到各特征之间的关联性。
多元高斯分布的计算公式如下: