异常检测

一、动机

给定数据集x(1),x(2),…,x(m),假使数据集正常,希望知道新的数据xtest是否正常,即这个测试数据不属于该组数据的几率如何。
构建模型,根据该测试数据的位置得到属于一组数据的可能性p(x)。
在这里插入图片描述
如图,蓝色圈内的数据属于该组数据的可能性较高,越偏远的数据,属于该组数据的可能性就越低。这种方法称为密度估计,表达如下:
在这里插入图片描述
欺诈检测:
X(i)=用户的第i个活动特征,
模型p(x)=属于一组数据的可能性,
通过p(x)< ε 检测非正常用户。

二、高斯分布

如果变量x符合高斯分布x~N(u,σ2),则其概率密度函数为:
在这里插入图片描述
利用已有数据预测总体中的u和σ2,计算方法如下:
在这里插入图片描述
在这里插入图片描述
高斯分布样例:
在这里插入图片描述
注:机器学习中对于方差通常只除以m

三、算法

异常检验算法:
对于给定的数据集x(1),x(2),…,x(m),针对每一个特征计算u和σ2的估计值。
在这里插入图片描述
获得平均值和方差的估计值后,给定新的一个训练实例,根据模型计算p(x):
在这里插入图片描述
当p(x)< ε 时为异常

以下是几个样例:
如图为一个由两个特征的训练集,以及特征的分布情况。
在这里插入图片描述
下图的三维图表表示的是密度估计函数,z轴为根据两个特征的值所估计p(x)值。
选择一个ε,将p(x)= ε 作为判定边界,当p(x)= ε 时预测数据为正常数据,否则为异常
在这里插入图片描述

四、开发评价异常检测系统

异常检测算法是一个非监督学习算法,意味着无法根据结果变量y的值来确定数据是否真的异常,需要根据另一种方法帮助检验算法是否有效。

开发异常检测系统时,从带标记的数据着手,从中选择一部分正常数据构建训练集,用剩下的正常数据和异常数据混合的数据构成交叉检验集和测试集。

例如有10000台正常引擎的数据,20台异常引擎的数据,可以这样分配数据:
6000台正常引擎的数据作为训练集,
2000台正常引擎和10台异常引擎的数据作为交叉检验集,
2000台正常引擎和10台异常引擎的数据作为测试集。

具体评价方法:
1.根据测试集数据,估计特征的平均值和方差构建p(x)函数
2.对交叉验证集,尝试用不同的ε值作为阀值,预测数据是否异常,根据F1值或查准率、查全率的比例选择ε
3.选出ε后,针对测试集进行预测,计算异常检验系统的F1值,或者查准率与查全率之比

五、异常检测与监督学习

5.1 异常检测

1.非常少量的正向量(异常数据y=1),大量的负向量(y=0)
2.有大量的正向类和负向类
3.存在许多不同种类的异常
4.根据非常少量的正向类数据来训练算法

举例:
1.欺诈行为检测
2.生产(飞机引擎)
3.检测数据中心的计算机运行状况

5.2 监督学习

1.有足够多的正向类实例用于训练算法
2.未来遇到的正向类实例可能与训练集中的非常近似
3.未来遇到的异常可能与已掌握的异常非常不同

举例:
1.邮件过滤器
2.天气预报
3.肿瘤分类

六、选择特征

异常检测假设特征符合高斯分布,如果数据的分布不是高斯分布,异常检测算法也能够工作,但最好将数据转换成高斯分布,例如
使用对数函数:x=log(x+c),其中c为非负常数;
或者:c=xc,c为0-1之间的一个分数
在这里插入图片描述

误差分析

一些异常的数据可能会有较高的p(x)值,被算法认为是正常的,此时误差分析可以帮助我们,分析被错误预测为正常的数据,观察能否找出一些问题,从问题中增加一些新的特征帮助更好的进行异常检测。

异常检测误差分析:
在这里插入图片描述
通常可以通过将一些相关特征进行组合,获得一些更好的特征。
例如:
检测数据中心的计算机状况的例子中,可以用CPU负载与网络通信量的比例作为一个新的特征,如果该值异常的大,有可能意味着该服务器陷入问题中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值