赞
踩
异常检测算法,属于 机器学习-非监督模型,明显不包含 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
1exp−2σ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
目标检测指标
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
异常检测经过设定标准 ε 以及计算每个因素的高斯函数之后。
将待检测数据的每个因素的高斯函数结果(概率)相乘,若其结果小于标准 ε,则为正常;而若小于,则为异常。
图片来源:吴恩达《Machine Learning》Anomaly detection algorithm
异常检测 对比 监督学习,最大的区别在于监督学习只能检测出指定的问题,而异常检测却可以检测出没有指定的错误以及问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。