机器学习(Andrew Ng)学习笔记(第16~18章)

高斯分布实现异常检测

单变量高斯分布实现异常检测

模型描述

在单变量高斯分布中,对于m组、n种特征的数据,假设其所有特征都是相互独立的\(P(x|\mu;\sigma^2)\)是数据x正常的概率,那么

\[P(x|\mu;\sigma^2)=P(x_1|\mu_1;\sigma_1^2)\cdots P(x_n|\mu_n;\sigma_n^2)\]

其中

\[P(x_i|\mu_i;\sigma_i^2)=\frac 1 {\sqrt{2\pi}\sigma_i}\exp(-\frac {(x_i-\mu_i)^2}{2\sigma^2})\]

异常检测过程中,需要确定一个阈值\(t\)\(P(x|\mu;\sigma^2)>t\)则表明数据点是正常的,反之则为异常。

参数求解

\[\mu_t=\frac 1 m \sum_{i=1}^m x_t^{(i)}\]

\[\sigma_t^2=\frac 1 m \sum_{i=1}^m (x_t^{(i)}-\mu_t)^2\]

注意,训练过程中,允许训练集中出现少量异常点

特征转换

数据点的某些特征可能不是完美的高斯分布曲线,为了接近高斯分布,可以用对数函数、幂函数等使该特征的分布曲线接近高斯分布

选取阈值的评价标准

假设初始有10000组正常数据点(可能其中包含少量异常数据点),20个已知的异常点,首先将这些数据按60%,20%,20%比例划分为训练集、交叉验证集、测试集

  • 训练集:6000组正常点

  • 交叉验证集:2000组正常点,10组异常点

  • 测试集:2000组正常点,10组异常点

注意:这里的训练集、交叉验证集、测试集中的数据是完全不重复

在选取阈值的过程中,一般使用F1 Score作为评价标准:

\[Precision=\frac {TP}{TP+FP}\]

\[Recall=\frac {TP}{TP+FN}\]

\[F_1=2\frac {Precision·Recall}{Precision+Recall}\]

用训练集训练好模型后,首先从小到大枚举阈值,对于每种阈值,使用交叉验证集计算F1 Score,然后选F1 Score最大的阈值作为最终阈值。

最后,用测试集的F1 Score来评价模型在真实环境中的性能。

多变量高斯分布实现异常检测

在单变量高斯分布中,有假设:所有特征都是相互独立的。然而在实际生活中,许多特征之间是互相相关的

例如机房里CPU的耗电量与负载是正相关的,不能单一从CPU耗电量或负载来评价CPU是否异常。然而,若CPU耗电量与负载的比值明显增大,则CPU是异常的。

这时,可以考虑对原始数据构造新的特征:CPU耗电量/负载,再使用单变量高斯分布建模。然而手动构造特征费时费力,于是可以考虑采用多变量高斯分布模型。

模型描述

多变量高斯分布模型中,有假设:一些变量之间存在有相关性

\[P(x|\mu;\Sigma)=\frac 1 {\sqrt{2\pi}\sqrt{\det(\Sigma)}}\exp(-\frac 1 2 (x-\mu)^T\Sigma^{-1}(x-\mu))\]

其中,\(\mu=(\mu_1,\cdots,\mu_n)^T=\frac 1 m \sum_{i=1}^m x^{(i)}\)表示n个特征的均值。

猜你喜欢

转载自www.cnblogs.com/qpswwww/p/9293593.html
今日推荐