1 异常检测和监督算法的区别
在上一篇笔记中,我们在说明异常检测的时候提到,训练集全部都是正常的样本,而验证集和测试集却包含了正常样本和异常样本,也就是说它们是有标记的。
有标记不是监督学习算法的范畴么?
很多人可能会有这样的疑惑。
其实对于异常检测和监督学习之间,还是存在一定的区别的。
正如我们前面所说,异常检测的样本大部分的情况是倾斜类,也就是说阴性样本 (y = 0)非常多,阳性样本(y = 1)非常少。
所以两者的关键区别就在于:
学习算法对于样本数量的要求非常高,监督不可能从一小撮阳性样本学习到太多的东西。
而对于异常检测来说,不需要阳性样本也能学习到预测模型,那一小部分的阳性样本,只要能够评算法效果就足够了。
还是以之前所说的飞机引擎为例,大部分情况下都是正常的,而正常的样本数据也大致趋同,小部分情况下是异常的,而异常的故障可能多种多样。
对于那些我们需要预测的数据来说,还可能存在新类型的故障。
如果这个时候使用监督学习来预测,效果肯定不好,甚至还需要常常修改预测模型。
但是异常检测却能很好地解决这样的问题。
2 异常检测的使用条件
在异常检测中,我们使用高斯分布来计算各项数据的概率,那么首先数据得服从高斯分布:
例如我们把数据打印成柱状图,得到这样的图形:
这就是满足高斯分布的数据。
而如果数据是这样的图形:
显然是不是直接使用的,我们需要将其转换成符合高斯分布的数据:
可以通过以下方式进行转换:
其中 C 是常数。
3 特征转换
使用异常检测算法,对于正常样本,我们希望得到的结果是 p(x) ≥ ε ,对于异常样本我们希望得到的结果是 p(x) < ε 。
有时候可能存在一些异常样本数据混在正常样本中间,例如有个数据计算得到的 p(x) ≥ ε ,判断为一个正常样本,但实际上却是一个异常样本。
例如下图这样,在一堆正常样本中混入了一个异常样本:
我们没有办法将它区分开来,但是如果增加一个维度 x2,区分就变得可能:
我们举一个例子,假如我们需要监控计算机的运行情况,我们有这样的一些数据:
x1:占用内存
x2:磁盘每秒访问次数
x3:CPU负载
x4:网络流量
一般来说网络流量 x4 和 CPU负载 x3 是存在正相关关系的,例如访问的人数多了,CPU的负载就高了。
CPU负载升高了,而网络流量却没有太大的变化,那么很可能就是出现了问题,例如计算机在执行任务的时候进入了死循环。
但是这样的情况下,无论是CPU负载,还是网络流量,单独来看可能都在正常的范围之内,所以使用原有的特征我们不能进行有效的区分。
这时候我们就需要根据实际的情况来增加新的特征 x5:
例如:
或者:
这时候如果网络流量不变,而CPU负载增大,那么特征 x5 就会和之前有明显的区别。
文章转载自公众号:止一之路
网友评论