当前位置:   article > 正文

【ML32】Anomaly Detection Algorithm 异常检测算法

异常检测算法

异常检测算法基本概念

异常检测算法,属于 机器学习-非监督模型,明显不包含 Label

异常检测算法 的作用,也可以顾名思义,就是检测异常。可以检测工业产品异常,可以检测人异常不异常,对于异常的概念不要深究,归根到底还是尝试着找到 规律,然后通过规律判断的一种算法。

理解来说,你出生到现在就喜欢穿紫色衣服,结果你今天穿了黄色衣服就是异常。工业零件出厂测试,平常1000转速才发热,结果今天100就热的不得了,那就是异常,大概率是次品。按规律办事异常检测 的代名词。

在这里插入图片描述


简述异常检测步骤

首先上述已经介绍异常检测在做什么,而下述内容将从宏观上建立异常检测是怎么做的。

我们拿由两个因素 x 1 , x 2 x_1,x_2 x1,x2 决定异常来举例:
在这里插入图片描述
假设两个因素分别为: x 1 x_1 x1 为距离, x 2 x_2 x2 为时间。
在同一条路线上,大部分的出租车都在15分钟走了15km。而却有一辆出租车5分钟走了25公里,有几辆出租车20分钟还没有走10公里,根据我们的要求,5分钟那个为异常数据,其超速行驶;20分钟没走10公里的也是异常数据,其消极怠工。
在这里插入图片描述
我们可以自行设定要求,比如上图设定的要求为黄色圈内达标,其他不达标且逐渐递减。而我们现在有需要考虑一个问题,那就是如何设定这个圈圈的范围,换句话说就是如何设定标准?计算其对比标准的公式又是什么?
在异常检测中,我们称我们设定的标准为 ε ε ε,而计算的公式为每个变量的 高斯分布函数 函数的乘积。当我们的 高斯分布函数 的乘积大于 标准 ε 时,则为正常;而小于标准时,则判定为异常。
在这里插入图片描述


高斯分布函数

高斯分布函数是变量相关概率函数,而异常检测算法也是根据计算概率的乘积判断是否为异常。一般情况来说,概率越小,则越有可能是异常情况。

p ( x ; μ , σ 2 ) = 1 2 π σ 2 exp ⁡ − ( x − μ ) 2 2 σ 2 p(x ; \mu,\sigma ^2) = \frac{1}{\sqrt{2 \pi \sigma ^2}}\exp^{ - \frac{(x - \mu)^2}{2 \sigma ^2} } p(x;μ,σ2)=2πσ2 1exp2σ2(xμ)2
在这里插入图片描述
其中 μ μ μ 为平均值, σ σ σ 为标准差。我有一篇高斯分布函数的相关计算可看:
【ML33 高斯分布函数】


设定标准 ε

标准 ε 与几个概念相关,第一个是 cross validation 验证集,另一个是 目标检测指标


cross validation 验证集

验证集的出现是为了校验构建的模型是否合理。我有一篇有关验证集的博客:
【ML24】Cross Validation Set 验证集

def estimate_gaussian(X): 
# 计算平均值以及标准差
    m, n = X.shape
    
    mu = 1 / m * np.sum(X, axis = 0)
    var = 1 / m * np.sum((X - mu)**2, axis=0)

    return mu, var
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

目标检测指标

TP(True Positive): 对的当成对的;
TN(True Negative): 错的当成错的;
FP(False Positive): 错的当成对的;
FN(False Negative): 对的当成错的。

p r e c = t p t p + f p prec=\frac{tp}{tp+fp} prec=tp+fptp精度 : 对的当成对的 错的当成对的 + 对的当成对的 :\frac {对的当成对的} {错的当成对的+对的当成对的} 错的当成对的+对的当成对的对的当成对的

r e c = t p t p + f n rec=\frac{tp}{tp+fn} rec=tp+fntp召回率 对的当成对的 对的当成对的 + 对的当成错的 \frac {对的当成对的} {对的当成对的+对的当成错的} 对的当成对的+对的当成错的对的当成对的

对于精度和召回率的理解尝试通过下述案例:

e . g . e.g. e.g. 超市中有100种牛奶,高钙牛奶有50个,要A去找所有高钙牛奶:
A找到80种,其中高钙牛奶为40种,那么其精度为 40 80 \frac {40} {80} 8040,其召回率为 40 50 \frac {40} {50} 5040

F1
F1值就是Precision和Recall的调和平均数。因为我们不能将拿到的牛奶种有多少是对的牛奶作为A的能力的评价,还要结合拿到了多少对的牛奶,

F 1 = 2 ∗ 精度 ∗ 召回率 精度 + 召回率 F_1 =2* \frac {精度*召回率} {精度+召回率} F1=2精度+召回率精度召回率


阐述完验证集以及目标检测函数,现在开始计算 ε :

def select_threshold(y_val, p_val): 

    best_epsilon = 0
    best_F1 = 0
    F1 = 0
    
    step_size = (max(p_val) - min(p_val)) / 1000
    
    for epsilon in np.arange(min(p_val), max(p_val), step_size):
    
        predictions = (p_val < epsilon)
        
        tp = sum((predictions == 1) & (y_val == 1))
        fp = sum((predictions == 1) & (y_val == 0))
        fn = sum((predictions == 0) & (y_val == 1))

        prec = tp/(tp+fp)
        rec = tp/(tp+fn)

        F1 = 2*prec*rec/(prec+rec)
        
        if F1 > best_F1:
            best_F1 = F1
            best_epsilon = epsilon
        
    return best_epsilon, best_F1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

判定异常

异常检测经过设定标准 ε 以及计算每个因素的高斯函数之后。

将待检测数据的每个因素的高斯函数结果(概率)相乘,若其结果小于标准 ε,则为正常;而若小于,则为异常。

图片来源:吴恩达《Machine Learning》Anomaly detection algorithm
在这里插入图片描述


异常检测算法与监督学习的区别在于哪

异常检测 对比 监督学习,最大的区别在于监督学习只能检测出指定的问题,而异常检测却可以检测出没有指定的错误以及问题。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/552237
推荐阅读
  

闽ICP备14008679号