Twritters的异常检测算法(Anomaly Detection)做的比较好,Seasonal Hybrid ESD算法是先用STL把序列分解,考察残差项。假定这一项符合正态分布,然后就可以用Generalized ESD提取离群点。

  目标是检测出时间序列数据集的异常点,如图所示,蓝色线是时间序列数据集,红色是圈是异常点。

  

  

  R语言实现如下,一些依赖包需要install.packages("")或者手动在cran社区下载(注意依赖包的下载)。本人github下载源码。

  1 主函数是,包含了主要逻辑,加载数据集,IMSHESD算法检测异常点和画出数据集和异常点。IMSHESD算法是主要功能,下面详细介绍。

library(zoo)
path_data="E:/Develop/Rstudio/IMS-H-ESDS/3151.csv"
path_sear="E:/Develop/Rstudio/IMS-H-ESDS/IS-H-ESD.R" source(path_sear)
data <-read.table(path_data,sep=",",skip=)
print(data)
test_data=IMSHESD(data)
plot(x=data[[]], y=data[[]],xlab="time",ylab="value",col="blue",type="l")
lines(x=test_data[[]], y=test_data[[]],col="red",type="p")

  2 IMSHESD算法是主要逻辑如下,通过Fourier转换自动求得时间序列的季节周期peri(必须满足数据集的长度>2*peri+1才可以应用时间序列分析),按照季节周期对数据集做划分,然后应用anmodetection异常检测算法探测异常。

IMSHESD<-function(data,group_peri=)
{
path_Fourier="E:/Develop/Rstudio/IMS-H-ESDS/Fourier.R"
path_data_group="E:/Develop/Rstudio/IMS-H-ESDS/data_group.R"
path_anmo_detection="E:/Develop/Rstudio/IMS-H-ESDS/anmo_detection.R"
source(path_Fourier)
source(path_data_group)
source(path_anmo_detection)
#data <-data_group(data,mode="median",group_period=)
peri=Fourier_trans(data)
print(peri)
if(ncol(data)!=)
{
print("The col of data must be two!")
stop()
}
if((*peri+)<length(data[[]])){
data_sep_length=ceiling(*peri+)
print(data_sep_length)
all_data <- vector(mode="list", length=ceiling(length(data[[]])/(data_sep_length)))
for(j in seq(,length(data[[]]), by=data_sep_length)){
start_data <- data[[]][j]
end_data <- data[[]][min(j + data_sep_length, length(data[[]]))]
if(j+data_sep_length<length(data[[]])){
all_data[[ceiling(j/(data_sep_length))]] <- subset(data, data[[]] >= start_data & data[[]] < end_data)
}else{
all_data[[ceiling(j/(data_sep_length))]] <- subset(data,data[[]] >= data[[]][length(data[[]])-data_sep_length] & data[[]] < end_data)
}
}
res=c()
for(i in :length(all_data))
{
res_temp=anmodetection(all_data[[i]],anoms_per=0.1,period=peri,alpha=0.05)
res=c(res,res_temp)
}
data_plot=rep(c(),length(res))
for(i in :length(res))
{
data_plot[i]=data[[]][which(data[[]]==res[i])]
}
anmo_point<-data.frame(res,data_plot)
}else{
print("This is not a seasonal time series")
stop()
}
}

  3 Fourier转换自动求得时间序列的季节周期peri。

Fourier_trans<-function(data)
{
install.packages("TSA")
library(TSA)
p=periodogram(data[])
dd=data.frame(freq=p$freq,spec=p$spec)
order=dd[order(-dd$spec),]
top2=head(order,)
time=min(1.00/top2$f)
}

  4 异常检测主要逻辑anmodetection函数,需要规定异常点的上限10%,STL分解数据集:周期+趋势+随机噪声=原始时间序列(分解方法有Twitters的Decompose和STL),残差项根据正态分布(方差未知使用学生t分布),提取离散点。假设要检测k个离群点,就对数据重复使用k次ESD检验,如果发现离群点就从数据里剔出去,然后在剩下的数据上重新检测(Generalized ESD)。

anmodetection<-function(data,anoms_per=0.10,period=,alpha=0.05,mode="addi")
{
num <- length(data[[]])
#cat("num",num)
num_anmo=trunc(anoms_per*length(data[[]]))
R_idx=rep(seq(),length(data[[]]))
if(ncol(data)!=)
{
print("The col of data must be two!")
stop()
}
data_decompose <- stl(ts(data[[2L]], frequency =period),"periodic",robust = TRUE)
seasonal_data <- data_decompose$time.series[,]
#cat("seasonal_data",seasonal_data)
trend_data <- data_decompose$time.series[,]
random_decomp <- data_decompose$time.series[,]
data<-data.frame(times=data[[]],count=(data[[]]-seasonal_data-median(data[[]])))
func_med <- match.fun(median)
func_mad <- match.fun(mad)
numb_anom=
for(n in :num_anmo)
{
data_norm<-abs(data[[]]-func_med(data[[]]))
data_mad<-func_mad(data[[]])
data_res<-data_norm/data_mad
R_res<-max(data_res)
max_temp_idx <- which(data_res == R_res)[]
R_idx_out=data[[]][max_temp_idx]
R_idx[n] <- R_idx_out
data <- data[-which(data[[]] == R_idx[n]), ]
p <- - alpha/(*(num-n+))
t <- qt(p,(num-n-))
thres <- t*(num-n) / sqrt((num-n-+t**)*(num-n+))
if(R_res>thres)
{
numb_anom <- n
}
}
if(numb_anom>)
{
R_idx <- R_idx[:numb_anom]
}
else
{
R_idx = NULL
}
return(R_idx)
}

  实验结果:红色圈标出了异常点,异常点是10%的比例。

 参考

  Twitters异常检测方法,https://anomaly.io/blog/

  

机器学习:异常检测算法Seasonal Hybrid ESD及R语言实现的更多相关文章

  1. 【机器学习】异常检测算法(I)

    在给定的数据集,我们假设数据是正常的 ,现在需要知道新给的数据Xtest中不属于该组数据的几率p(X). 异常检测主要用来识别欺骗,例如通过之前的数据来识别新一次的数据是否存在异常,比如根据一个用户以 ...

  2. 时间序列异常检测算法S-H-ESD

    1. 基于统计的异常检测 Grubbs' Test Grubbs' Test为一种假设检验的方法,常被用来检验服从正太分布的单变量数据集(univariate data set)\(Y\) 中的单个异 ...

  3. kaggle信用卡欺诈看异常检测算法——无监督的方法包括: 基于统计的技术,如BACON *离群检测 多变量异常值检测 基于聚类的技术;监督方法: 神经网络 SVM 逻辑回归

    使用google翻译自:https://software.seek.intel.com/dealing-with-outliers 数据分析中的一项具有挑战性但非常重要的任务是处理异常值.我们通常将异 ...

  4. 异常检测算法--Isolation Forest

    南大周志华老师在2010年提出一个异常检测算法Isolation Forest,在工业界很实用,算法效果好,时间效率高,能有效处理高维数据和海量数据,这里对这个算法进行简要总结. iTree 提到森林 ...

  5. 异常检测算法:Isolation Forest

    iForest (Isolation Forest)是由Liu et al. [1] 提出来的基于二叉树的ensemble异常检测算法,具有效果好.训练快(线性复杂度)等特点. 1. 前言 iFore ...

  6. 如何开发一个异常检测系统:使用什么特征变量(features)来构建异常检测算法

    如何构建与选择异常检测算法中的features 如果我的feature像图1所示的那样的正态分布图的话,我们可以很高兴地将它送入异常检测系统中去构建算法. 如果我的feature像图2那样不是正态分布 ...

  7. 异常检测(Anomaly detection): 异常检测算法(应用高斯分布)

    估计P(x)的分布--密度估计 我们有m个样本,每个样本有n个特征值,每个特征都分别服从不同的高斯分布,上图中的公式是在假设每个特征都独立的情况下,实际无论每个特征是否独立,这个公式的效果都不错.连乘 ...

  8. 异常检测算法的Octave仿真

    在基于高斯分布的异常检测算法一文中,详细给出了异常检测算法的原理及其公式,本文为该算法的Octave仿真.实例为,根据训练样例(一组网络服务器)的吞吐量(Throughput)和延迟时间(Latenc ...

  9. 异常检测算法Robust Random Cut Forest(RRCF)关键定理引理证明

    摘要:RRCF是亚马逊发表的一篇异常检测算法,是对周志华孤立森林的改进.但是相比孤立森林,具有更为扎实的理论基础.文章的理论论证相对较为晦涩,且没给出详细的证明过程.本文不对该算法进行详尽的描述,仅对 ...

随机推荐

  1. JQuery插件让图片旋转任意角度且代码极其简单

    引入下方的jquery.rotate.js文件,然后通过$("选择器").rotate(角度);可以旋转任意角度, 例如$("#rotate-image").r ...

  2. mysql 的2个关于事务和安全性的参数

    innodb_flush_log_at_trx_commit:(mysql写事物日志的方式) 0 log buffer 会每秒写入到日志文件中,并刷新到磁盘  (提交方式与事物无关,性能最好) 1 事 ...

  3. Daily Scrum 10.30

    由于最近一段时间吴文会同学身体欠安,经过讨论我们对任务做了一下调整,暂时由罗洪运同学接手界面部分的开发.部分进度较快的同学的任务已经快要完成,工作重点也会转为整体开发和协助其他同学开发. 下面是今天的 ...

  4. H5学习小结——div+css创建电子商务静态网页

    使用Sublime Text软件编写电子商务类网站静态形式首页 经过差不多一星期的学习,基本掌握了div+css的用法之后,开始了实战练习.首先要做的就是要练习一下一般电子商务网页的编写,我做的是下图 ...

  5. cookie&&session再理解笔记

    就拿php来说,两个php页面之间不拿get,post传递变量的话,数据是不能共享的.访问完1.php页面该页面的变量就被销毁了.所以就拿学校食堂来说,拿现金买饭的话你交完钱后,他给你个票以便确认你, ...

  6. 配置samba服务一例

    问题: 在/data/share目录下建立三个子目录public.training.devel用途如下 public目录用于存放公共数据,如公司的规章制度 training目录用于存放公司的技术培训资 ...

  7. Layer弹窗组件

    layer是一款近年来备受青睐的web弹层组件,她具备全方位的解决方案,致力于服务各水平段的开发人员,您的页面会轻松地拥有丰富友好的操作体验. Layer的开发手册和下载地址 http://layer ...

  8. NLP 自然语言处理

    参考: 自然语言处理怎么最快入门:http://www.zhihu.com/question/ 自然语言处理简介:http://wenku.baidu.com/link?url=W6Mw1f-XN8s ...

  9. P4行为模型BMV2依赖关系安装:thrift nanomsg nnpy安装

    由于安装p4factory的步骤需要OF的支持,我需要下载p4的行为模型BMV2: thrift是支持BMV2的软件框架:nanomsg是一个实现了几种"可扩展协议"的高性能通信库 ...

  10. libgdx 常见问题

    libgdx assets file not found Select Run -> Edit Configurations from the menu In the "Working ...