异常值

异常值检测

应用高斯分布检测异常数据

高斯分布

x服从均值为 μ \mu μ,方差为 σ 2 σ^2 σ2的高斯分布,其概率密度分布图如下:

异常值_第1张图片

p ( x ) = 1 2 π σ e x p ( − ( x − μ ) 2 2 σ 2 ) p(x)=\frac 1 {\sqrt{2\pi}\sigma}exp(-\frac{(x-\mu)^2}{2σ^2}) p(x)=2π σ1exp(2σ2(xμ)2)
其中, μ = 1 m ∑ i = 1 m x ( i ) \mu=\frac 1 m \sum_{i=1}^mx^{(i)} μ=m1i=1mx(i)
σ 2 = 1 m ∑ i = 1 m ( x ( i ) − μ ) 2 \sigma^2=\frac 1 m \sum_{i=1}^m(x^{(i)}-\mu)^2 σ2=m1i=1m(x(i)μ)2

算法流程

  • 选出哪些你认为可能是异常的特征或者是样本
  • 计算出你选择的数据的每个特征的均值和标准差
  • 给定一个新的数据 x x x,计算 p ( x ) p(x) p(x):
    p ( x ) = ∏ j = 1 n p ( x j ; μ j , σ j 2 ) = ∏ j = 1 n 1 2 π σ j e x p ( − ( x j − μ j ) 2 2 σ j 2 ) p(x)=\prod_{j=1}^np(x_j;\mu_j,\sigma_j^2)=\prod_{j=1}^n\frac{1}{\sqrt{2\pi}\sigma_j}exp(-\frac{(x_j-\mu_j)^2}{2\sigma^2_j}) p(x)=j=1np(xj;μj,σj2)=j=1n2π σj1exp(2σj2(xjμj)2)

如果 p ( x ) < ϵ p(x)<\epsilon p(x)<ϵ则为异常

如何开发和评价一个异常检测系统

异常检测算法是一个非监督学习算法,意味着我们无法根据结果变量 y y y 的值来告诉我们数据是否真的是异常的。我们需要另一种方法来帮助检验算法是否有效。当我们开发一个异常检测系统时,我们从带标记(异常或正常)的数据着手,我们从其中选择一部分正常数据用于构建训练集,然后用剩下的正常数据和异常数据混合的数据构成交叉检验集和测试集。

例如:我们有10000台正常引擎的数据,有20台异常引擎的数据。 我们这样分配数据:

6000台正常引擎的数据作为训练集

2000台正常引擎和10台异常引擎的数据作为交叉检验集

2000台正常引擎和10台异常引擎的数据作为测试集

具体的评价方法如下:

根据测试集数据,我们估计特征的平均值和方差并构建p(x)函数

对交叉检验集,我们尝试使用不同的 ϵ \epsilon ϵ值作为阀值,并预测数据是否异常,根据 F 1 F_1 F1值或者查准率与查全率的比例来选择 ϵ \epsilon ϵ
选出 ϵ \epsilon ϵ 后,针对测试集进行预测,计算异常检验系统的 F 1 F_1 F1值,或者查准率与查全率之比

异常检测与监督学习的对比

异常检测 监督学习
非常少量的正向类(异常数据 y=1), 大量的负向类(y=0) 同时有大量的正向类和负向类
许多不同种类的异常,非常难。根据非常 少量的正向类数据来训练算法。 有足够多的正向类实例,足够用于训练 算法,未来遇到的正向类实例可能与训练集中的非常近似。
未来遇到的异常可能与已掌握的异常、非常的不同。
例如: 欺诈行为检测 生产(例如飞机引擎)检测数据中心的计算机运行状况 例如:邮件过滤器 天气预报 肿瘤分类

异常值处理

你可能感兴趣的:(机器学习)