数据异常到底该如何检测?(二)

有了之前的铺垫和理论,本文就用一些现实中的实际数据进行一些具体的算法的应用。数据为网络访问日志文件,主要选择了单位时间内的访问请求次数与单位访问中的动作数作为二维特征,并且便于可视化的显示,下面分别进行三种异常算法尝试:

 

1. K-means:

算法原理:根据特征向量之间的距离度量进行无监督的训练样本聚类。选定聚类数K,随机选择初始点,并根据距离确定训练数据点的聚类标签,然后重新计算聚类中心,不断迭代每个样本点的距离,并重新赋值标签,直到算法收敛或迭代至参数值

可以看出一些红色的点更远的偏离了整体样本点的中心,作为异常点的概率更大

 

2. OneClassSVM:

算法原理:根据对已有支持向量机的理解,算法并非对已有标签的数据进行分类判别,而是通过回答:yes or no的方式去根据支持向量域描述(support vector domaindescription SVDD),将样本数据训练出一个最小的超球面(大于3维特征),其中在二维中是一个曲线,将数据全部包起来,即将异常点排除。Sklearn包中给出的demo实验结果如图:可以看出在不同的数据分布下会有一些不一样的误差,其中调整参数中有一个比较重要的nu,表示异常点比例,默认值为0.5



在同样的数据特征维度下,直接调用sklearn包,其中设置nu=0.15

实验结果如下:

其中第二张是放大之后的图。可以看出,OneClassSVM在对这样数据分布中,并不能更好的发挥作用,绿色点中的红色误差点有一些莫名其妙;但至少在nu=0.15参数下,可以将Kmeans中的红色聚类点区分出。

 

3. Isolation Forest(iforest)算法:

算法原理:这个算法是由周志华老师提出,面对高维数据依然有效快速,在网站异常数据检测的比赛中获得过不错的名次。其主要的算法原理简洁有效,如图所示:


根据树的结构可以有效的进行二分法,划归一个点是否离群异常,可以根据划分这个点的次数去判断,再加入森林集成算法进行投票,使算法的泛化能力更强。


在最新版本的sklearn0.18 中集成有iforest,但实验环境下的anaconda的安装包不是最新版本。最终进行算法原理编程得到如图结果,异常值比例为0.15


可以看出在与kmeans的比较中,将第一类蓝色点的边界更加缩小,但在一些位置上并未判别出离群,作为非监督学习方法,最终还是需要依据新的数据和标签去确认聚类的准确率。

 

4. 时间序列异常检测:

根据一些业务需求,除了对每次数据点进入框架内做出算法的判断评价,更重要是根据历史数据,进行长期的时间序列监控预警。

根据目前的已有日志信息,主要是时间戳和响应时长;需要进行每分钟的请求次数以及相应的响应时长,首先先按照3欧米伽指标进行简单测试:


但这些简单的统计指标对于某些异常情况并不能检测,还需要加入多种类似曲线指标:协助检测周期性异常、极大值异常点、极小值异常点和空段点,如图所示:


对于时间序列模型如:AM、ARMA和高斯分布参数估计等算法进行进一步处理。有待读者和小编一起学习~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值