14 异常检测
异常检测(Anomaly detection)是机器学习算法的一个常见应用。这种算法的一个有趣之处在于:它虽然主要用于非监督学习问题,但从某些角度看,它又类似于一些监督学习问题。
异常检测主要用来识别欺骗。例如在线采集而来的有关用户的数据,一个特征向量中可能会包含如:用户多久登录一次,访问过的页面,在论坛发布的帖子数量,甚至是打字速度等。尝试根据这些特征构建一个模型,可以用这个模型来识别那些不符合该模式的用户。
14.1 高斯分布
高斯分布,也称正态分布。如果认为变量x符合高斯分布,则其概率密度函数为:
利用已有数据来预测总体的和的计算方法如下:
高斯分布样例如下:
14.2 异常检测算法
应用高斯分布可以开发异常检测算法。对于给定的数据集,针对每一个特征计算和的估计值。
获得和的估计值后,给定新的一个训练实例,根据模型计算
当时,为异常。
下图是一个由两个特征的训练集,以及特征的分布情况:
下面的三维图表表示的是密度估计函数,z轴为根据两个特征的值所估计值:
选择一个,将作为判定边界,当时预测数据为正常数据,否则为异常。
14.3 开发和评价一个异常检测系统
异常检测算法是一个非监督学习算法,意味着无法根据结果变量的值来判断数据是否真的是异常的。需要另一种方法来帮助检验算法是否有效。当开发一个异常检测系统时,从带标记(异常或正常)的数据着手,从其中选择一部分正常数据用于构建训练集,然后用剩下的正常数据和异常数据混合的数据构成交叉检验集和测试集。
例如:有 10000 台正常引擎的数据,有 20 台异常引擎的数据。这样分配数据:
6000 台正常引擎的数据作为训练集。
2000 台正常引擎和 10 台异常引擎的数据作为交叉检验集。
2000 台正常引擎和 10 台异常引擎的数据作为测试集。
具体评价方法如下:
-
根据测试集数据,估计特征的平均值和方差并构建函数。
-
对交叉检验集,尝试使用不同的值作为阀值,并预测数据是否异常,根据F1值或者查准率与查全率的比例来选择。
-
选出后,针对测试集进行预测,计算异常检验系统的F1值,或者查准率与查全率之比
14.4 异常检测与监督学习对比
构建的异常检测系统也使用了带标记的数据,与监督学习有些相似,下面的对
比有助于选择采用监督学习还是异常检测:
异常检测 |
监督学习 |
非常少量的正向类(异常数据y=1),大 量的负向类(y=0)。 |
同时有大量的正向类和负向类。 |
许多不同种类的异常,非常难根据非常 少量的正向类数据来训练算法。未来遇到的异常可能与已掌握的异常、非常的不同。 |
有足够多的正向类实例,足够用于训练 算法,未来遇到的正向类实例可能与训练集中的非常近似。 |
例如: 欺诈行为检测 生产(例如飞机引擎)检测数据中心的计算机运行状况。 |
例如:邮件过滤器 天气预报 肿瘤分类。 |
14.5 选择特征
异常检测假设特征符合高斯分布,如果数据的分布不是高斯分布,异常检测算法也能够工作,但是最好还是将数据转换成高斯分布,例如使用对数函数:,其中c为非负常数;或者,c为0~1之间的一个分数等方法。
误差分析:一些异常的数据可能也会有较高的p(x)值,因而被算法认为是正常的。这种情况下误差分析能够分析那些被算法错误预测为正常的数据,观察能否找出一些问题。可能从问题中发现需要增加一些新的特征,增加这些新特征后获得的新算法能够更好地进行异常检测。通过将一些相关的特征进行组合,来获得一些新的更好的特征(异常数据的该特征值异常地大或小),例如,在检测数据中心的计算机状况的例子中,我们可以用 CPU负载与网络通信量的比例作为一个新的特征,如果该值异常地大,便有可能意味着该服务器是陷入了一些问题中。
14.6 多元高斯分布(选)
有两个相关的特征,它们的值域范围比较宽,在此情况下,一般的高斯分布不能很好地识别异常数据。因为一般的高斯分布模型是尝试去同时抓住两个特征的偏差,因此创造出一个比较大的判定边界。
如图,一般高斯分布的判定边界为如下圆形边界,将异常点划在正常范围内。多元高斯分布将创建如下椭圆形的判定边界。
在多元高斯分布模型中,将构建特征的协方差矩阵,用所有的特征一起来计算p(x)。首先计算所有特征的平均值,然后再计算协方差矩阵:
注:u是一个向量,其每一个单元都是原特征矩阵中一行数据的均值。最后我们计算多元高斯分布的p(x):
其中是矩阵的行列式,是逆矩阵。协方差矩阵是如何影响模型的:
从左往右依次分析:
1)是一个一般的高斯分布模型。
2)通过协方差矩阵,令特征1拥有较小的偏差,同时保持特征2的偏差。
3)通过协方差矩阵,令特征2拥有较大的偏差,同时保持特征1的偏差。
4)通过协方差矩阵,在不改变两个特征的原有偏差的基础上,增加两者之间的正相关性。
5)通过协方差矩阵,在不改变两个特征的原有偏差的基础上,增加两者之间的负相关性。
多元高斯分布模型与原高斯分布模型的关系:原本的高斯分布模型是多元高斯分布模型的一个子集,即像上图中的第1、2、3个例子所示,如果协方差矩阵只在对角线的单位上有非零的值时,即为原本的高斯分布模型。
原高斯分布模型和多元高斯分布模型的比较:
原高斯分布模型 |
多元高斯分布模型 |
不能捕捉特征之间的相关性 但可以通过将特征进行组合的方法来解决 |
自动捕捉特征之间的相关性 |
计算代价低,能适应大规模的特征 |
计算代价较高 训练集较小时也同样适用 |
必须要有m>n,不然的话协方差矩阵是不可逆的,通常需要m>10n另外特征冗余也会导致协方差矩阵不可逆。 |
原高斯分布模型被广泛使用着,如果特征之间在某种程度上存在相互关联的情况,可以通过构造新特征的方法来捕捉这些相关性。如果训练集不是太大,并且没有太多的特征,可以使用多元高斯分布模型。