本系列文章如果没有特殊说明,正文内容均解释的是文字上方的图片
机器学习 | Coursera
吴恩达机器学习系列课程_bilibili
目录
15 异常检测
15-1 问题动机
以飞机发动机的异常检测为例,
x
1
x_1
x1和
x
2
x_2
x2分别表示发动机的两个特征,先有一堆数据集表示正常的发动机(如上图红色叉),可以认为越靠近圆圈中间越正常,现在有一个新的发动机
x
t
e
s
t
x_{test}
xtest,将他放进坐标系中比较,越靠近中心表示
p
(
x
test
)
p\left(x_{\text {test }}\right)
p(xtest )越大,设定一个阈值
ε
\varepsilon
ε,如果
p
(
x
test
)
⩾
ε
p\left(x_{\text {test }}\right) \geqslant \varepsilon
p(xtest )⩾ε则表示该新发动机正常,如果
p
(
x
test
)
<
ε
p\left(x_{\text {test }}\right) < \varepsilon
p(xtest )<ε则表示发动机异常
异常检测常被用来进行用户的欺诈监测(检测异常的用户)
15-2 高斯分布(正态分布)
- x ∼ N ( μ , σ 2 ) x \sim \mathcal{N}\left(\mu, \sigma^{2}\right) x∼N(μ,σ2)
- x x x是实数, ∼ \sim ∼表示以…分布, N \mathcal{N} N表示按正态分布, μ \mu μ表示均值, σ 2 \sigma^{2} σ2表示方差
- 如上图正态分布曲线(是一条钟形曲线),纵轴表示取到的概率, μ \mu μ决定曲线中心的位置,标准差 σ \sigma σ决定曲线的宽度
高斯分布曲线的公式:
p
(
x
;
μ
,
σ
2
)
=
1
2
π
σ
exp
(
−
(
x
−
μ
)
2
2
σ
2
)
p\left(x ; \mu, \sigma^{2}\right) =\frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{(x-\mu)^{2}}{2 \sigma^{2}}\right)
p(x;μ,σ2)=2πσ1exp(−2σ2(x−μ)2)
- 高斯分布曲线的积分=1(即上图红色阴影部分面积)
如上图,现有一个无标签数据集,可以看出数据集在中间概率大,两侧概率小,假设满足正态分布,进行参数估计
假设数据集满足正态分布:
x
(
i
)
∼
N
(
μ
,
σ
2
)
x^{(i)} \sim \mathcal{N}\left(\mu, \sigma^{2}\right)
x(i)∼N(μ,σ2)
参数估计公式为:
μ
=
1
m
∑
i
=
1
m
x
(
i
)
\mu=\frac{1}{m} \sum_{i=1}^{m} x^{(i)}
μ=m1i=1∑mx(i)
σ
2
=
1
m
∑
i
=
1
m
(
x
(
i
)
−
μ
)
2
\sigma^{2}=\frac{1}{m} \sum_{i=1}^{m}\left(x^{(i)}-\mu\right)^{2}
σ2=m1i=1∑m(x(i)−μ)2
求方差的公式中
1
m
\frac{1}{m}
m1也可能是
1
m
−
1
\frac{1}{m-1}
m−11,在机器学习中,这两种公式差距不大
15-3 算法
密度估计问题
p
(
x
)
p(x)
p(x)表示特征
x
x
x出现的概率
假设所有特征均满足正态分布
给出概率
p
(
x
)
=
p
(
x
1
;
μ
1
,
σ
1
2
)
p
(
x
2
;
μ
2
,
σ
2
2
)
p
(
x
3
;
μ
3
,
σ
3
2
)
⋯
p
(
x
n
;
μ
n
,
σ
n
2
)
=
∏
j
=
1
n
p
(
x
j
;
μ
j
,
σ
j
2
)
\begin{array}{l} p(x)\\ =p\left(x_{1} ; \mu_{1}, \sigma_{1}^{2}\right) p\left(x_{2} ; \mu_{2}, \sigma_{2}^{2}\right) p\left(x_{3} ; \mu_{3}, \sigma_{3}^{2}\right) \cdots p\left(x_{n} ; \mu_{n}, \sigma_{n}^{2}\right) \\ =\prod_{j=1}^{n} p\left(x_{j} ; \mu_{j}, \sigma_{j}^{2}\right) \end{array}
p(x)=p(x1;μ1,σ12)p(x2;μ2,σ22)p(x3;μ3,σ32)⋯p(xn;μn,σn2)=∏j=1np(xj;μj,σj2)
异常检测算法的流程如上图
15-4 开发和评估异常检测系统
假设有一个带标签的数据集,选取出正常的样本去掉标签作为训练集,得出异常检测算法,然后用交叉验证集(带标签)来验证,用测试集(带标签)来测试
上图是以发动机检测为例的训练集、交叉验证集和测试集的分法
由于数据集中的数据可能非常倾斜,所以可能需要计算F值来判断算法的效果,或者用F值来决定怎样的
ε
\varepsilon
ε是合适的
15-5 异常检测vs监督学习
异常检测算法通常用于:
- 有很少数量的正样本(这里以异常的飞机发动机为例),有很大数量的负样本(这里以正常的飞机发动机为例)
- 学习算法很难从极少数数量的正样本中学习出飞机发动机的异常之处,但能根据负样本学习出正态分布曲线
- 未来的异常发动机出现的异常特征难以预测,可能与当前的正样本中的异常特征完全不同
监督学习算法通常用于:
- 有很大数量的正样本和负样本
- 有足够的的正样本数量来让学习算法找到特征,并且未来出现的正样本的特征与目前已有的样本的特征相似
样本数量与某类情况出现概率没关系(即使一类情况出现概率为99%,另一类概率为1%),只要同时有大量的正样本和负样本,就能用监督学习算法,比如癌症预测
15-6 选择要使用的特征
- 如果数据像上图第一行的坐标系一样看起来像正态分布的话,可以直接用正态分布
- 如果数据像上图第二行左侧坐标系,不符合正态分布的话,可以对特征进行转换,比如这里用 l o g ( x ) log(x) log(x)来替换特征值,让新得到的曲线像正态分布,然后用正态分布
- 除了用
l
o
g
(
x
)
log(x)
log(x)之外,也可以用
l
o
g
(
x
+
c
)
log(x+c)
log(x+c)c是常数、
x
1
2
x^{\frac{1}{2}}
x21、
x
1
3
x^{\frac{1}{3}}
x31等等
- 如果如上图一个绿色的异常样本混在了正常样本中,算法没能将其挑出来
- 可以寻找/创造一个新的特征让这个异常样本与其他正常样本区别开来
举例:
服务器CPU负载量和网络流量应该是线性关系的(一起变大,一起变小)
如果某一台服务器陷入了死循环,就会导致CPU负载很大而网络流量很小的情况
这种情况下要找出异常可以创建一个新的特征 x 5 = C P U 负 载 网 络 流 量 x_5=\frac{CPU负载}{网络流量} x5=网络流量CPU负载,这样就能捕捉到异常。或者是CPU负载的平方也可以
15-7 多元高斯分布
以服务器的异常为例,上图中绿色样本在两轴中的概率都不低,但很明显在左侧坐标系中他是一个异常样本,算法不能意识到左侧坐标系中的椭圆内的才是正常样本,而默认是以样本中心为圆心,按圆向外概率递减
所以要使用多元高斯分布↓
将这两个特征合起来考虑,一个n维向量
μ
\mu
μ和一个n×n的协方差矩阵
Σ
\Sigma
Σ作为多元高斯分布的参数,公式为:
p
(
x
;
μ
,
Σ
)
=
1
(
2
π
)
n
2
∣
Σ
∣
1
2
exp
(
−
1
2
(
x
−
μ
)
⊤
Σ
−
1
(
x
−
μ
)
)
p(x ; \mu, \Sigma)= \frac{1}{(2 \pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}} \exp \left(-\frac{1}{2}(x-\mu)^{\top} \Sigma^{-1}(x-\mu)\right)
p(x;μ,Σ)=(2π)2n∣Σ∣211exp(−21(x−μ)⊤Σ−1(x−μ))
- 其中 ∣ Σ ∣ |\Sigma| ∣Σ∣是矩阵 Σ \Sigma Σ的行列式
- μ \mu μ表示的是高斯分布图像中的峰值的位置,这里第一个数是特征 x 1 x_1 x1的位置,第二个数是特征 x 2 x_2 x2的位置
- μ \mu μ和 Σ \Sigma Σ的计算公式会在下一节给出
μ
\mu
μ对图像的影响如上图所示
15-8 使用多元高斯分布的异常检测
μ
\mu
μ和
Σ
\Sigma
Σ的计算公式如上图
首先计算出
μ
\mu
μ和
Σ
\Sigma
Σ的值,然后代入到多元高斯分布计算公式,计算出概率,然后将概率与
ε
\varepsilon
ε比较判断正常or异常
如上图,原来的高斯分布计算出的正态分布图像是一种特殊的多元高斯分布图像,他的椭圆是与轴平行的,而多元高斯分布可以生成一个不与轴平行的椭圆图像
原始高斯分布模型与多元高斯分布的应用区别:
- 原来的可能需要手动创造特征来正确识别异常项,而多元高斯分布不需要,它能自动捕捉这些特征
- 原来的计算量较小,当特征量达到n=10000时就需要用原来的了
- 原来的可以在样本数量m很小的情况下正常工作,而多元高斯分布需要保证m>>n,一般是m ≥ \ge ≥ 10n,否则矩阵 Σ \Sigma Σ会是一个不可逆矩阵
- 在多元高斯分布中,如果几个特征之间是线性相关的,也会导致矩阵 Σ \Sigma Σ会是一个不可逆矩阵,比如 x 1 = x 2 x_1=x_2 x1=x2或者 x 1 = x 2 + x 3 x_1=x_2+x_3 x1=x2+x3,可以通过删除特征 x 1 x_1 x1来解决