机器学习算法评估实战
上QQ阅读APP看书,第一时间看更新

1.5 异常检测

在前言中我们提到,准确率这个指标是有一定局限性的,尤其是当正样本(P)数量和负样本(N)数量差异较大的时候。如P∶N=99∶1,即便模型把所有负样本都预测为正样本,都能保证99%的准确率,但是这样的模型没有任何意义。

对于异常检测,我们应该如何做算法评估呢?

首先我们对比异常检测和普通二分类有何区别,如表1.3所示。

表1.3 对比异常检测和普通二分类

 

异常检测

普通二分类

负样本(普通样本)

数量极多,是正样本的10倍甚至更多

数量很多

正样本(异常样本)

数量极少

数量很多,与负样本相当

样本分布

两种样本分布明显不同:正样本类型分布很多,有些特殊样本甚至不在训练集和测试集里;负样本分布空间有限,容易识别

正负样本分布基本一致

特征分布

正负样本差异化明显,正样本有很多负样本不存在的特殊特征

正负样本分布基本一致

从表1.3中可以看出,在异常检测的情况下,正样本极多,负样本极少,我们把这种分布情况称为正负样本分布不均衡。此时,如果用准确率这一指标来评估异常检测,不仅识别不了未知的异常样本,训练集中已有的异常样本也很容易被误判为正常样本。所以,用准确率指标来评估异常检测是不合理的。

衡量异常检测算法效果最直接的指标就是精确率和召回率,即在评估模型判为异常样本的集合中,有多少是真正的异常样本,即TN/(FN+TN),而真正的异常样本又在全部异常样本中占多大比例,即TN/(TN+FP)。

1.3节也提到,在样本不平衡问题中,ROC通常会给出一个较乐观的效果估计,所以这种情况下还是P-R曲线更好。因为当正负样本比例失调时,如正样本1个,负样本100个,ROC变化不大,而P-R曲线更能反映出分类器性能的好坏。如果是对比两个分类器,因为只有一个正样本,所以在画ROC的时候变化可能不太大;但是在画P-R曲线的时候,因为要召回这一个正样本,所以哪个分类器同时召回的负样本更少,那个分类器就更好。差的分类器一般会召回更多的负样本,这样精确率必然大幅下降,分类器性能就可以对比出来了。



知识拓展

在训练模型时如何解决样本不均衡的问题呢?

样本不均衡问题一般有两种解决思路:一种是欠采样,另一种是过采样。

在异常样本分布复杂且数量较多,而正常样本分布比较简单的情况下,可以采用欠采样,即减少正常样本的数量,从而达到让异常样本和正常样本比例相近的目的。这种乐观的情况比较少见,更多的时候我们面对的是异常样本太少且总样本数量也不够多的情况,也就是说,正常样本不能减少,只能增加异常样本,也就是过采样。

过采样的方法有很多,如随机过采样、感知过采样和自适应过采样等。我们介绍一下比较常用的感知过采样[4]

感知过采样是一种比较保守的过采样方式,它的基本原理是增加异常样本的样本密度。如图1.5所示,假设样本有两个特征,分别为f_1 (横轴)和f_2 (纵轴)。首先从全部异常样本集合X 中取出一个样本x_1 ,依次计算x_1 在特征空间中与其他异常样本{x_2 ,x_3 ,x_4 ,…,x_m }在每个特征维度的距离,得到一个距离矩阵\boldsymbol D_m ;然后在这些距离的中点位置生成一个新的样本点,得到m-1 个新样本。接着再取出x_2 ,计算和剩余异常样本的特征距离,得到距离矩阵\boldsymbol D_{m-1} ,生成m -2个新样本……最终得到一个新的异常样本集合,新集合的样本数量为m+(m-1)+(m-2)+\cdots+1 =m(m-1)/2 [4]

我们也可以在样本数量足够多的时候停止循环,或者在循环完毕之后再对新生成的样本做一次随机欠采样,这样就能够获取我们想要的异常样本。

图片 328

图1.5 感知过采样