有了以前的铺垫和理论,本文就用一些现实中的实际数据进行一些具体的算法的应用。数据为网络访问日志文件,主要选择了单位时间内的访问请求次数与单位访问中的动做数做为二维特征,而且便于可视化的显示,下面分别进行三种异常算法尝试:算法
1. K-means:编程
算法原理:根据特征向量之间的距离度量进行无监督的训练样本聚类。选定聚类数K,随机选择初始点,并根据距离肯定训练数据点的聚类标签,而后从新计算聚类中心,不断迭代每一个样本点的距离,并从新赋值标签,直到算法收敛或迭代至参数值微信
能够看出一些红色的点更远的偏离了总体样本点的中心,做为异常点的几率更大网络
2. OneClassSVM:框架
算法原理:根据对已有支持向量机的理解,算法并不是对已有标签的数据进行分类判别,而是经过回答:yes or no的方式去根据支持向量域描述(support vector domaindescription SVDD),将样本数据训练出一个最小的超球面(大于3维特征),其中在二维中是一个曲线,将数据所有包起来,即将异常点排除。Sklearn包中给出的demo实验结果如图:能够看出在不一样的数据分布下会有一些不同的偏差,其中调整参数中有一个比较重要的nu,表示异常点比例,默认值为0.5dom
在一样的数据特征维度下,直接调用sklearn包,其中设置nu=0.15学习
实验结果以下:测试
其中第二张是放大以后的图。能够看出,OneClassSVM在对这样数据分布中,并不能更好的发挥做用,绿色点中的红色偏差点有一些莫名其妙;但至少在nu=0.15参数下,能够将Kmeans中的红色聚类点区分出。网站
3. Isolation Forest(iforest)算法:spa
算法原理:这个算法是由周志华老师提出,面对高维数据依然有效快速,在网站异常数据检测的比赛中得到过不错的名次。其主要的算法原理简洁有效,如图所示:
根据树的结构能够有效的进行二分法,划归一个点是否离群异常,能够根据划分这个点的次数去判断,再加入森林集成算法进行投票,使算法的泛化能力更强。
在最新版本的sklearn0.18 中集成有iforest,但实验环境下的anaconda的安装包不是最新版本。最终进行算法原理编程获得如图结果,异常值比例为0.15
能够看出在与kmeans的比较中,将第一类蓝色点的边界更加缩小,但在一些位置上并未判别出离群,做为非监督学习方法,最终仍是须要依据新的数据和标签去确认聚类的准确率。
4. 时间序列异常检测:
根据一些业务需求,除了对每次数据点进入框架内作出算法的判断评价,更重要是根据历史数据,进行长期的时间序列监控预警。
根据目前的已有日志信息,主要是时间戳和响应时长;须要进行每分钟的请求次数以及相应的响应时长,首先先按照3欧米伽指标进行简单测试:
但这些简单的统计指标对于某些异常状况并不能检测,还须要加入多种相似曲线指标:协助检测周期性异常、极大值异常点、极小值异常点和空段点,如图所示:
对于时间序列模型如:AM、ARMA和高斯分布参数估计等算法进行进一步处理。有待读者和小编一块儿学习~
本文分享自微信公众号 - 智能算法(AI_Algorithm)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。