时间序列分类是根据已标注的时间序列建立一个分类模型,然后使用分类模型预测未标记时间序列的类别。从时间序列中抽取出新特征肯呢个有助于提高分类模型的性能。特征提取技术有奇异值分解(SVD)、离散傅立叶变换(DFT)、离散小波变换(DWT)、分段积累近似法(PAA)、连续重要点(PIP)、分段线性表示,以及符号表示。

  基于原始数据的分类

  我们使用party包来演示在原始数据上进行时间序列分类。在调用函数ctree()前,首先将类别标签转换为分类值,这样做可以避免得到一个像1.35这样的实数值。分析代码如下:

  > classId <- rep(as.character(1:6), each=100)

  > sc <- read.table("./synthetic_control.data", header=F, sep="")

  > newSc <- data.frame(cbind(classId, sc))

  > library(party)

  > ct <- ctree(classId~., data=newSc,controls=ctree_control(minsplit=30,minbucket=10,maxdepth=5))

  > pClassId <- predict(ct)

  > table(classId, pClassId)

  pClassId

  classId 1 2 3 4 5 6

  1 97 0 0 0 0 3

  2 1 93 2 0 0 4

  3 0 0 96 0 4 0

  4 0 0 0 100 0 0

  5 4 0 10 0 86 0

  6 0 0 0 87 0 13

  > (sum(classId==pClassId))/nrow(sc)

  [1] 0.8083333

  > plot(ct,ip_args=list(pval=FALSE),ep_args=list(digits=0))

  

  基于特征提取的分类

  接下来,我们使用离散小波变换(DWT)从时间序列中提取特种呢个,然后建立分类模型。小波变换通过小波来表示多分辨率。哈尔小波变换是最简单的离散小波变换。另一个常用的特征提取技术是离散傅立叶变换(DFT)。

  下面的例子是使用哈尔过滤器提取DWT系数。wavelets包用于实现离散小波变换,其中函数dwt(x,filter,n.levels,...)计算DWT系数,x为一个单变量或多变量的时间序列,filter指明所使用的小波过滤器,n.levels指明需要分解的层数,该函数返回一个dwt对象,其中槽W包包含小波系数,V包包含相似系数。原始时间序列还可以使用wavelets包中的idwt()函数通过逆离散小波变换进行重构。分析代码如下:

  > library(wavelets)

  > wtData <- NULL

  > for(i in 1:nrow(sc)) {

  + a <- t(sc[i,])

  + wt <- dwt(a, filter="haar", boundary="periodic")

  + wtData <- rbind(wtData, unlist(c(wt@W, wt@V[[wt@level]])))

  + }

  > wtData <- as.data.frame(wtData)

  > wtSc <- data.frame(cbind(classId, wtData))

  > ct <- ctree(classId~., data=wtSc, controls=ctree_control(minsplit=30,minbucket=10,maxdepth=5))

  > pClassId <- predict(ct)

  > table(classId, pClassId)

  pClassId

  classId 1 2 3 4 5 6

  1 97 3 0 0 0 0

  2 1 99 0 0 0 0

  3 0 0 81 0 19 0

  4 0 0 0 63 0 37

  5 0 0 16 0 84 0

  6 0 0 0 1 0 99

  > (sum(classId==pClassId))/nrow(wtSc)

  [1] 0.8716667

  > plot(ct,ip_args=list(pval=FALSE),ep_args=list(digits=0))

  

  k-NN分类

  k-NN分类同样适用于时间序列,它找出与新实例最邻近的k个对象,再根据投票机制给该实例打上类标号。然而原始的k-NN分类算法搜索k个最邻近对象需要的时间复杂度为O(n^2),n为数据的大小。因此,在处理大的时间序列数据时需要建立一个高效的索引。使用Arya和Mount's ANN库,RANN包能够以O(n log n)的时间复杂度快速地搜索最邻近对象。下面的例子是在没有建立索引的时间序列数据集上进行k-NN分类。

  > k <- 20

  > newTS <- sc[501,] + runif(100)*15

  > distances <- dist(newTS, sc, method="DTW")

  > s <- sort(as.vector(distances), index.return=TRUE)

  > table(classId[s$ix[1:k]])

  4 6

  1 19

  对于新时间序列数据的20个最邻近对象,其中有3个属于类别4,有17个属于类别6。根据投票机制选择类标号频率最大的,即新时间序列归属于类别6。

用R语言做数据分析——时间序列分类相关推荐

  1. r语言数据变量分段_R数据分析:用R语言做meta分析

    这里以我的一篇meta分析为例,详细描述meta分析的一般步骤,该例子实现的是效应量β的合并 R包:metafor或meta包,第一个例子以metafor包为例. 1.准备数据集 2.异质性检验 in ...

  2. 使用r语言做garch模型_使用GARCH估计货币波动率

    使用r语言做garch模型 Asset prices have a high degree of stochastic trends inherent in the time series. In o ...

  3. R语言与数据分析练习:选择适当模型拟合某股票连续若干天的收盘价序列的发展

    R语言与数据分析练习:选择适当模型拟合某股票连续若干天的收盘价序列的发展 ARIMA模型 ARIMA模型(英语:Autoregressive Integrated Moving Average mod ...

  4. R语言与数据分析-01-数据类型与数据输入-01-基础

    一. R语言的数据类型 原文链接 : r语言与数据分析实战1 1.1 知识描述 搞清楚我们面对的数据类型是什么,并能实现数据类型之间的转换 1.2 相关知识 需要认真学习以下函数: mode(): 用 ...

  5. R语言 面板数据分析 plm包实现(一) ——LSDV和固定效应模型

    系列文章 R做面板数据分析:R语言 面板数据分析 plm包实现(一) --LSDV和固定效应模型 如果想看随机效应模型怎么做,参见这篇文章 R语言 面板数据分析 plm包实现(二)--随机效应模型 如 ...

  6. 2014全球软件技术峰会WOT:R语言金融数据分析

    跨界知识聚会系列文章,"知识是用来分享和传承的",各种会议.论坛.沙龙都是分享知识的绝佳场所.我也有幸作为演讲嘉宾参加了一些国内的大型会议,向大家展示我所做的一些成果.从听众到演讲 ...

  7. 通过R语言做灰色预测

    通过R语言做灰色预测 GM(1,1)模型的定义 数据的检验与处理 数据的生成 级比检验 GM(1,1)建模 生成累加数据和均值数据 构造矩阵BBB及数据向量YYY,有 计算: 建立模型,求解,并还原数 ...

  8. 看书标记【R语言 商务数据分析实战4】

    看书标记--关于R语言 chapter 4 4.2 任务实现 [R语言 商务数据分析实战4] chapter 4 财政收入预测分析 从海量数据中发现隐藏的运行模式,并提供具有决策意义的信息.变量过多会 ...

  9. 看书标记【R语言 商务数据分析实战6】

    看书标记--关于R语言 chapter 6 6.2 任务实 [R语言 商务数据分析实战6] chapter 6 P2P信用贷款风险控制(用户逾期还款概率模型) 关于数据库的应用+数据清洗+实时数据识别 ...

  10. 看书标记【R语言 商务数据分析实战9】

    看书标记--关于R语言 chapter 9 9.2 任务实现 [R语言 商务数据分析实战9] chapter 9 餐饮企业综合分析 统计分析>>ARIMA预测销售额>>协同过滤 ...

最新文章

  1. 01.Python基础-3.集合容器
  2. 小米网抢购系统开发实践和我的个人观察
  3. 美术设计经验分享:6招提升照明效果
  4. Python外卷(8)--pdist, squareform
  5. mysql超过1W条查询不显示_mysql 被写入1W数据后无法select*from table,但是加入limit参数后可以查询...
  6. kafka 在 360 商业化的实践
  7. 热力图怎么做_LncRNA这么热,5分左右的LncRNA研究文章应该怎么做
  8. vue element 地址联动的使用
  9. java向数据库添加中文乱码_java向数据库中插入中文出现乱码
  10. Kotlin基础2(持续更新)
  11. 10个程序员实用但偏执的 Java 编程技巧
  12. 水果店圈子:怎么做好水果店线上营销方案,水果店线上如何做
  13. 网吧无盘服务器2021,云更新无盘客户端
  14. IP-Prefix List
  15. Java学习个人总结
  16. 芯片全产业链:【设计】-【制造(原材料+制造装备+代工)】-【封装】
  17. 数字货币与电子支付究竟有何不同 一起来了解央行数字货币的本质内涵
  18. MySQL 数据库调优基本策略
  19. CSV格式表格文件自动转换科学计数法的解决方法
  20. root lg android tv,首款Android 7.0手机LG V20发布,KingRoot教你玩转新系统

热门文章

  1. 如何使iframe透明
  2. 【设计心理学】格式塔理论
  3. 如何根据vin码查询_VIN车辆识别代码查询
  4. 虚拟机网卡和linux bridge上tap设备的关系
  5. 冰点还原无法修改计算机时间,安装冰点还原后无法更改系统时间怎么办
  6. Office小知识(三)——使用visio绘制流程图实例及遇到的一些问题
  7. 网页对话框:window.showModalDialog的基本用法
  8. ET7.0 腾讯云centos部署
  9. 中年,就是1个人演1部西游记
  10. 图书馆管理系统5W1H分析