#Anomaly detection(异常检测)
这是机器学习算法的一个常见应用,虽然主要用在非监督学习问题,但从某些角度看跟监督学习问题是非常相似的。
更正式的定义:
- 给定无标签的训练集,对数据建模即p(x),即对x的分布概率建模,对于新样本,如果p(Xtest)低于阈值ε,则将其标记为异常。
举例:
#Gaussian distribution(高斯分布)
也称为normal distribution(正态分布)。
- variance parameter(方差)
- standard deviation(标准方差)
Parameter estimation(参数估计)问题:
给定数据集,希望估算出μ和sigma平方的值。
- 这里的估计实际上就是对μ和sigma平方的极大似然估计;
- 在机器学习中大家喜欢用1/m
#Algorithm(算法)
有一个共有m个样本的无标签训练集,用数据集建立概率模型p(x),找出哪些特征量的出现概率较高或较低。
- 如何建立模型:假设特征x_1是分散的,它服从高斯正态分布,以此类推。
- 事实上这个等式等同于一个从x_1到x_n的独立假设
- 分布项p(x)的估计问题有时称作density estimation(密度估计)问题
异常检测算法:
1、选择特征量;
2、给出训练集进行参数拟合;
3、当给出一个新样例,计算p(x)的值,如果很小,则标注为异常。
举例:
#Developing and evaluating an anomaly detection system(开发和评估异常检测系统)
为了评估一个异常检测系统,假设我们有一些带标签的数据代表异常样本以及一些无异常的样本:
1、假设有一系列训练集(无标签)
2、定义交叉验证集合测试集用来评估这个异常检测算法
举例:
- 异常样本的数量通常是2~50,而且通常数量比正常样本大得多;
- 用6000个无标签(实际上是y=0)样本来拟合p(x)
- 推荐:60%、60%、20%
- 上图中下半部分的方法不推荐
1、用训练集拟合模型
2、在交叉验证集和测试集中,给出x算法将预测出y的值
- 因为数据很倾斜(y=0的情况很常见),那么classification accuracy(分类正确率)就不是一个好的评价指标;
- 可以用这些评估异常检测算法:
- 计算真阳性、假阳性、假阴性、真阴性的比例
- 或者计算算法的精度以及召回率
- 或者计算像F1-score
3、ε是我们用来决定什么时候把一个样本当作是异常样本的一个阈值,如果有交叉验证集,则有一个选择参数ε的方法就是尝试去使用许多不同的ε值然后从中选择一个能最大化F1-score的ε值,或是在其他方面表现更好的ε值。
#Anomaly detection VS. supervised learning(异常检测VS监督学习)
如果我们有一些已知是异常的例子,还有一些已知正常的例子,为什么不直接用一个监督学习算法?
方一)
- 如果遇到一个问题,正常例子数量很少,则可能使用一个异常检测算法,将这些正样本用于交叉验证集和测试集,将庞大数量的负样本来拟合p(x)的值;
- 对于监督学习,通常在合理范围内会有大量的正样本和负样本。
方二)
- 对于异常检测应用来说经常有许多不同类型的异常,从少量的正样本很难去学习异常是什么;
- 有足够多的正样本,使用一个监督学习算法会更合理。
#Choosing what features to use(选择要使用的特征)
- 画直方图用的是Octave中的hist命令
- 如果是不太符合高斯正态分布的图,则对数据进行一次log transformation(对数转换)
如何得到异常检测算法的特征?
通过一个error analysis(误差分析)步骤【与监督学习中的类似】:
先完整地训练出一个算法,然后在一组交叉验证集上运行算法,找出那些预测出错的样本,并看看我们能否找到一些其他的特征来帮助学习算法让那些在交叉验证集中判断出错的样本表现得更好。
- 通常选择那些既不会特别大也不会特别小的特征
#Multivariate Gaussian distribution(多变量高斯分布)
异常检测算法不能意识到这个蓝色椭圆所表示的好样本概率高的范围。
多变量高斯分布也叫multivariate normal distribution(多元正态分布):
- determinant(行列式):可使用Octave中的det(sigma)来计算。
- identity matrix(单位矩阵)
- ∑是一个covariance matrix(协方差矩阵),衡量的是variance(方差)
多元高斯分布还可以用来给数据的correlations(相关性)建立模型:
也可以改变μ:
#Anomaly detection using the multivariate Gaussian distribution(使用多变量高斯分布的异常检测)
parameter fitting(参数拟合)/parameter estimation(参数估计)问题:
如果有一组样本,并且服从多元高斯分布,该如何去估计参数μ和∑:
代入异常检测算法中:
多元高斯分布模型和原始模型有怎样的关系?
- 原始模型实际上就是某种特殊情形下的多元高斯分布,这个情形就是,当它的协方差矩阵∑在非对角线上都是0的时候。
什么时候该用原始模型什么时候该用多元高斯模型?
- 原始模型要用得多一些,然而多元高斯模型在捕捉特征间的关系方面有着很多优点,原始模型需要创建新特征来捕捉异常的组合值;
- 原始模型的计算成本较低,能适应数量巨大的特征;
- 对于原始模型,即使有一个较小的有一定相关性的训练集也能顺利运行,而对于多元高斯分布,必须保证m大于n,即样本的数量要大于特征数量;
- 如果拟合多元高斯模型的时候发现协方差矩阵∑是奇异的,即不可逆的,通常是两种情况,一种是你没有满足m大于n的条件,第二种是你存在冗余的特征(即线性相关的特征)。先确保m远大于n,再检查有没有冗余特征。
PS.内容为学习吴恩达老师机器学习的笔记【https://study.163.com/course/introduction/1004570029.htm】