[吴恩达机器学习]13·异常检测

吴恩达机器学习系列课程:https://www.bilibili.com/video/BV164411b7dx

多元正态分布(高斯分布)

多元正态分布的概率密度函数: p(x;μ,Σ)=1(2π)n/2|Σ|1/2exp(12(xμ)TΣ1(xμ)) 其中,xRnn 维随机变量,μRnx 的均值,ΣRn×n 是协方差矩阵。

特别地,当 x 的各个维度不相关时,上述联合概率密度函数等于各分量的概率密度函数之积,即: p(x;μ,Σ)=i=1np(xi;μi,σi2)

异常检测

异常检测的原理非常简单:假设有正常的数据集 {x(1),x(2),,x(m)},我们构建一个多元正态分布,其均值为样本均值,协方差矩阵为样本的协方差矩阵,即: μ=1mi=1mx(i)Σ=1mi=1m(x(i)μ)(x(i)μ)Tp(x;μ,Σ)=1(2π)n/2|Σ|1/2exp(12(xμ)TΣ1(xμ)) 或者直接认定 x 各维度不相关,取: p(x;μ,Σ)=i=1np(xi;μi,σi2)

后者在计算上更快,且允许 mn 的情况;而前者在 m>nΣ 不可逆。

对于要检测的数据 x,如果 p(x;μ,Σ) 小于某个阈值 ε,那么就认为该数据是异常数据,否则正常。


如果我们有标注过的数据(标注是否异常),则可以将数据划分为训练集、验证集和测试集。训练集包含大部分正常数据,并据此构建出正态分布模型;验证集和测试集包含正常和异常数据,我们可以根据验证集的结果调整参数 ε,最后在测试集上进行测试。

注意,由于异常检测通常有偏(正常数据远远多于异常数据),所以测试结果应该取 precision,recall,F1 等值。

实现

训练集即据此构建的二元正态分布:

1
2
3
Xmeans = X.mean(axis=0)
Xcov = ((X - Xmeans).T @ (X - Xmeans)) / X.shape[0]
normDist = multivariate_normal(mean=Xmeans, cov=Xcov)
PYTHON

根据验证集找到的最佳 约为:;此时测试集上 值约为:.


[吴恩达机器学习]13·异常检测
https://xyfjason.github.io/blog-main/2021/01/29/吴恩达机器学习-13·异常检测/
作者
xyfJASON
发布于
2021年1月29日
许可协议