异常检测
模型p(x) 为我们其属于一组数据的可能性
通过p(x)<ε检测非正常用户。
异常检测主要用来识别欺骗。例如在线采集而来的有关用户的数据,一个特征向量中可能会包含如:用户多久登录一次,访问过的页面,在论坛发布的帖子数量,甚至是打字速度等。尝试根据这些特征构建一个模型,可以用这个模型来识别那些不符合该模式的用户。
再一个例子是检测一个数据中心,特征可能包含:内存使用情况,被访问的磁盘数量,CPU的负载,网络的通信量等。根据这些特征可以构建一个模型,用来判断某些计算机是不是有可能出错了。
高斯分布(正态分布)
_____________________________________________________________________________________________
算法
将应用高斯分布开发异常检测算法。
异常检测算法:
对于给定的数据集x(1),x(2),...,x(m),我们要针对每一个特征计算 μ 和 σ2 的估计值。
一旦我们获得了平均值和方差的估计值,给定新的一个训练实例,根据模型计算 p(x):
我们选择一个ε,将p(x)=ε作为我们的判定边界,当p(x)>ε时预测数据为正常数据,否则则为异常。
我们介绍了如何拟合p(x),也就是x的概率值,以开发出一种异常检测算法。同时,我们也给出了通过给出的数据集拟合参数,进行参数估计,得到参数 μ 和 σ,然后检测新的样本,确定新样本是否是异常。
___________________________________________________________________________
开发和评估异常检测系统
异常检测算法是一个非监督学习算法,意味着我们无法根据结果变量 yy 的值来告诉我们数据是否真的是异常的。我们需要另一种方法来帮助检验算法是否有效。当我们开发一个异常检测系统时,我们从带标记(异常或正常)的数据着手,我们从其中选择一部分正常数据用于构建训练集,然后用剩下的正常数据和异常数据混合的数据构成交叉检验集和测试集。
例如:我们有10000台正常引擎的数据,有20台异常引擎的数据。 我们这样分配数据:
6000台正常引擎的数据作为训练集
2000台正常引擎和10台异常引擎的数据作为交叉检验集
2000台正常引擎和10台异常引擎的数据作为测试集
具体的评价方法如下:
-
根据测试集数据,我们估计特征的平均值和方差并构建p(x)函数
-
对交叉检验集,我们尝试使用不同的εε值作为阀值,并预测数据是否异常,根据F1值或者查准率与查全率的比例来选择 ε
-
选出 ε 后,针对测试集进行预测,计算异常检验系统的F1值,或者查准率与查全率之比
异常检测 VS 监督学习
异常检测中,通常只有很少的正样本。
两者比较:
|
异常检测 |
监督学习 |
|
非常少量的正向类(异常据 y=1), 大量的负向类(y=0) |
同时有大量的正向类和负向类 |
|
许多不同种类的异常,非常难。根据非常 少量的正向类数据来训练算法。 |
有足够多的正向类实例,足够用于训练算法,未来遇到的正向类实例可能与训练集中的非常近似。 |
|
未来遇到的异常可能与已掌握的异常、非常的不同。 |
|
|
例如: 欺诈行为检测 生产(例如飞机引擎)检测数据中心的计算机运行状况 |
例如:邮件过滤器 天气预报 肿瘤分类 |
选择要使用的功能(转换成高斯分布)
如何得到异常算法的特征
__________________________________________________________________________________________
多变量高斯分布
多元高斯分布
使用多变量高斯分布的异常检测
异常检测算法步骤: