精华内容
参与话题
问答
  • 时间序列分类总结(time-series classification)

    千次阅读 多人点赞 2020-02-11 14:54:55
    时间序列分类总结(time-series classification)一、传统方法(需要手工设计)1、DTW(dynamic time warping)& KNN2、基于特征的方法二、深度学习1、MLP、FCN、ResNet2、LSTM_FCN、BiGRU-CNN3、MC-CNN(multi-...


           时间序列是很多数据不可缺少的特征之一,其应用很广泛,如应用在天气预测,人流趋势,金融预测等。感觉在时间序列的使用上大致可以分为两部分,一种是基于时间序列的分类任务,一种是基于时间序列对未来的预测。因为最近在思考这一方面的问题,想做一个综述出来,若有不认同点,麻烦拍砖。

    一、传统方法(需要手工设计)

    1、DTW(dynamic time warping)& KNN

           在深度学习大量使用之前,在时间序列分类方面,DTW和KNN的结合是一种很有用的方法。
           在做两个不同的时间序列匹配的时候,虽然我们可以通过肉眼发现它们之间存在着很高的相似性,但是由于部分位置的拉伸或者压缩,或者沿着时间轴上存在着平移,对两者直接计算欧氏距离效果一般不是很好,而定义规则进行对齐又无法适用实际应用中的多种情况,而DTW是在1970年提出了,其思想在一定程度上解决了该问题,通过动态规划的方法,来计算损失(即距离),最小的作为输出结果。在这里插入图片描述
           上图来自于参考博客[2]中,虽然其时序信号比较简单,但是也表达出来了两个正弦信号虽然相似但是存在差异性。DTW能够计算这两个序列的相似程度,并且给出一个能最大程度降低两个序列距离的点到点的匹配。
    在这里插入图片描述
    这是一个计算的小例子。(参考自[2])
    比如说,给定一个样本序列X和比对序列Y,Z:
    X:3,5,6,7,7,1
    Y:3,6,6,7,8,1,1
    Z:2,5,7,7,7,7,2
    请问是X和Y更相似还是X和Z更相似?
    DTW首先会根据序列点之间的距离(欧氏距离),获得一个序列距离矩阵 MM,其中行对应X序列,列对应Y序列,矩阵元素为对应行列中X序列和Y序列点到点的欧氏距离:
    在这里插入图片描述
    在这里插入图片描述
          通过这个方法,可以通过动态规划来获得一个更为合理的度量结果,用该结果来表示两个样本之间的相似性关系,其动态搜索的过程也可以表示为下图。
    在这里插入图片描述
          而DTW和KNN之间的结合可以表示为下图所示,用DTW来获得一种度量结果,然后通过KNN进行聚类,方法简单,在传统方法中很受欢迎。
    在这里插入图片描述

    2、基于特征的方法

          这一类的方法都是一些通过某种度量关系来提取相关特征的方法,如词袋法,通过找到该时间序列中是否有符合已有词袋中的特征(序列的样子),将一个序列用词来表示,再对词进行分类。而其他的基于特征的方法都是利用了类似的方法,如提取统计量,基于规则等,再通过分类模型进行分类。

    二、深度学习

    1、MLP、FCN、ResNet

          基于深度学习的方法在实际上的处理和处理二维数据的方法上基本相同,由于时序信息每一个样本都可以看作为一个数组。而MLP的输入正好是一个向量(数组),通过全连接的形式对整体数组的每一个元素逐层赋予权重,并求得最后的分类,这种方法是一种比较粗暴的学习方法,直接学习所有元素直接的线性或非线性相关关系,但是并没有去深度挖掘数组中更好的表现特征,分类效果不佳。
    在这里插入图片描述
          FCN是将MLP中的全链接层用卷积层进行替代,Resnet也是,但是其中的卷积层都用一维卷积核进行了替代。
    在这里插入图片描述
          上表来自于参考文献【5】中的,可以看到深度学习的方法效果基本上与传统方法相接近,甚至有所超过,其中整体表现最好的是FCN。
          在天池比赛-合肥高新杯心电大赛的决赛方案中,我发现最后获得较高收益的baseline模型有如xcetion这样的参数量较多的模型,我想这样模型的好处可能是能从多个方面去挖掘更加大量的数据吧,但是在处理一个时序性问题中,要说明这些模型哪个更优并没办法,只能通过实验去获得。
    这是该比赛的答辩链接,里面提供了很多的解决思路,很受启发。
    https://tianchi.aliyun.com/course/video?spm=5176.12586971.1001.1.51df7b91Avma5o&liveId=41127

    2、LSTM_FCN、BiGRU-CNN

    在这里插入图片描述
          LSTM_FCN的方法比较简单,是将输入分别输入到两个分支中,LSTM和FCN,并在最后将两个输出分支进行concat进行softmax获得分类结果。在这篇论文中,作者说这种方法取得了比FCN更好的效果。
          在其他的一些比赛方案中,也有resnet+LSTM+FC的组合形式,通过Resnet的一维卷积先提取相关特征,然后通过LSTM学习一维特征向量的相关关系,再进行分类,可能针对于不同的问题还是要试试才知道哪个的效果更加好。
          BiGRU-CNN与以上方法相比实际上并没有做什么大的改进,就是将LSTM分支替换成双向的GRU分支。

    3、MC-CNN(multi-channel CNN)、MCNN(multi-scale CNN)

    在这里插入图片描述
           MC-CNN是我在网上看到了另外一种处理方法,它应用于NLP中,与之前的方法不同的是,这种方法比较重要的一步是初始化不同的embedding,对数据进行编码,形成多个通道的输入,再通过卷积层学习,最后进行分类。Embedding这一步我觉得是一种数据变换的方法,但是并不是特别理解,猜想可能是embedding变换后的数据更加适合于学习的缘故吧。
          MCNN应该是将图像处理中的多尺度的思想融入了时间序列处理中,将不同的feature map输出出来,进行预测分类,可以参考FPN这种结构。

    参考文献

    【1】Time Series Classifification from Scratch with Deep Neural Networks: A Strong Baseline
    【2】https://blog.csdn.net/raym0ndkwan/article/details/45614813(DTW个人觉得讲的比较清楚的博客)
    【3】https://nbviewer.jupyter.org/github/markdregan/K-Nearest-Neighbors-with-Dynamic-
    Time-Warping/blob/master/K_Nearest_Neighbor_Dynamic_Time_Warping.ipynb
    【4】http://www.doc88.com/p-0334856528441.html(BiGRU CNN)
    【5】Time Series Classifification from Scratch with Deep Neural Networks: A Strong Baseline
    【6】LSTM Fully Convolutional Networks for Time Series Classification

    展开全文
  • 时间序列分类

    万次阅读 2018-08-19 10:15:16
    时间序列分类比较麻烦是因为我们用于模型训练的数据的每条样本一般是一个特征向量x对应一个y的形式,而时间序列的大量的信息藏在它的结构中,不仅仅体现在数值上。没意识到这一点的话,我们提取的特征可能就没有什么...

    时间序列分类比较麻烦是因为我们用于模型训练的数据的每条样本一般是一个特征向量x对应一个y的形式,而时间序列的大量的信息藏在它的结构中,不仅仅体现在数值上。没意识到这一点的话,我们提取的特征可能就没有什么价值。(其实意识到了也没用,因为还是不会处理。)

    总结

    1. 通过把K近邻(K=1)和动态时间规整距离结合起来,能得到一个效果突出的时间序列分类器,解决了很多人面对时间序列无所下手的问题。有兴趣的读者可以试试K为其它值的情况;

    2. 由于是用了KNN,就有KNN的老毛病——计算时间复杂度高。我们可以通过在计算DTW距离时缩小规划窗口来提升算法的速度.

    详细参考此链接:

    https://mp.weixin.qq.com/s/EF2r1GHB6JUJYLlU4idxYA

    展开全文
  • 【转】时间序列分类算法简介及其在能耗数据分类上的应用 原文链接:时间序列分类算法简介及其在能耗数据分类上的应用–李元龙   本文首先简要介绍最近几年来时间序列分类算法的最新研究成果,包括dynamic time ...

    时间序列分类算法简介及其在能耗数据分类上的应用

    原文链接:时间序列分类算法简介及其在能耗数据分类上的应用–李元龙

      本文首先简要介绍最近几年来时间序列分类算法的最新研究成果,包括dynamic time warping的各种改进技术和相关研究,以及最新的聚合式算法(ensemble algorithm)。其次以根据能耗数据来监测服务器运行程序的研究为实例,介绍如何对实际应用中的时间序列数据进行更准确的分类。

    一、时间序列分类算法综述

      时间序列分类问题(Time Series Classification, TSC)是数据挖掘中的一个经典问题。其核心问题定义如下:

    给定时间序列集合S,对任意时间序列x属于S, 其所属类别(label)为lx。给出任意测试数据x‘,求预测其可能所属的类别。

      比如有一些人参与不同的运动项目。 假定我们采集了不同项目的运动轨迹数据集,那么给定一个未知的人的运动轨迹,判断其参与的运动项目就是个典型的时间序列分类问题。

      上述问题与基于欧式距离的经典分类问题并无差别。然而在实际中,经典分类算法在时间序列分类上的表现一般较差,其根本原因在于时间序列数据与传统的空间点数据存在关键不同:对于一个时间序列x,其每一个时刻的测量值对应于传统欧式空间的一个维度。在传统的欧氏空间中,维度之间的关联关系是有限的,不同维度的数值大小可以千差万别。然而对于一个时间序列,其所有的信息都包含在不同时刻的变化中。时间序列通常会按照某一些模式变化,因此其数据在不同维度的上的关联性非常重要。基于此差异,时间序列数据无法很好地被传统基于欧式距离的分类算法所求解。

      由于欧式距离不能很好地针对时间序列的波动模式进行分类,研发更适合时间序列分类的距离度量就成为关键,这其中最经典的时间序列距离度量就是Dynamic Time Warping (DTW)。 DTW的原理如下:

    Alt text

    1

      针对序列x和y,DTW计算在卷曲时间轴的情况下两个序列最好的匹配结果,并以这个匹配结果来计算他们之间的距离。如上图所示,x和y两个序列有相同的模式但是y序列在时间上移后了。如用欧式距离,x与y因距离较大很可能会被归为不同类别; 而DTW可以准确判别出x和y模式上的类似并得出一个较小的距离度量。实际上,DTW不仅可以考虑到上述简单的平移情形,还能考虑到时间轴上局部的缩放变形等。DTW通过对时间序列波动模式的分析可得到更好的时间序列分类结果。研究表明,在时间序列分类问题上,DTW距离度量配合简单的最小距离分类法(nearest neighbor)就可以取得较传统欧式距离算法(如SVM、经典多层神经网络、决策树、Adaboost)压倒性的优势。

      DTW更进一步衍生出多种不同的变种,例如由Keogh和 Pazzani 提出的基于序列一阶导数的改进便取得了良好的效果;其中一种简单的方法叫Complexity Invariant distance (CID),其利用一阶导数信息对DTW距离做计算,在某些问题上具有突出效果。

      除了DTW,还有其他考量时间序列的波动模式算法。例如Ye 和Keogh提出的Shapelet方法:考察序列中具有代表意义的子序列来作为Shapelet特征而进行分类。Lin等人提出了基于字典的方法,将序列根据特定的字典转化为词序列,从而进行分类。Deng提出了基于区间的方法,从区间中提取波动的特征。

      除了上述方法外,聚合算法(将多种不同算法聚合在一起)的研究也有了长足的进步。最近提出的COTE算法几乎将上述所有不同分类算法聚合在一起,得到了优异的分类效果。想要进一步了解上述主要算法的细节以及更全面的时间序列分类算法综述,请参考“The Great Time Series Classification Bake Off: An Experimental Evaluation of Recently Proposed Algorithms. Extended Version

    二、基于能耗数据来监测服务器运行程序

      时间序列分类算法具有广泛的应用。下面介绍一个在不干扰server运行状态下,基于服务器的能耗数据来判断正在运行的程序的应用。

      该应用的核心技术路线如下:

    首先在一个server上运行各种不同的程序,采集运行程序时server的能耗时间序列;运用这些数据(程序名作为label)训练一个分类模型;然后给定任意检测到的能耗数据,判断正在运行的程序。

      我们收集了13类数据进行实验。这些数据一共有3000条,每条长度为200个时间节点。这些数据记录了不同程序运行时server的能耗(W)数据。

      为了显示时间序列分类算法的优势,我们首先采用传统的分类算法分析这些数据。结果显示,在所测试的算法中,即便是表现最好random forest其分类准确率仅达63%左右, 而标准的多层神经网、SVM及基于欧式距离的算法只有50%左右的准确率。之所以准确率较低,是因为当我们把时间序列看作欧式空间中的点数据集时,其可分性非常差。

    Alt text
    2

      将基于八种不同方法(从经典PCA到效果领先的基于流形学习的降维方法)所采集的数据投射到一个二维空间,可以得到如图2所示的效果图。可以看到,并没有一种方法可以呈现出非常好的类别分布。

      鉴于此,我们提出基于DTW的时间序列分类方法对能耗数据进行分类与判断:

      首先,虽然采用DTW距离可将分类准确度提高至84%,但分类速度慢,因此我们提出一种考察局部模式信息、对DTW距离函数加以改进的方案,即Local Time Warping (LTW)。 LTW被设计为非交换率,也就是LTW(x, y)可能不等于LTW(y, x):将LTW与最近临分类算法相配合来判断一个序列x’属于哪一类时,我们只需要找哪个训练数据y离x’最近,而不需要x‘也离y很近。这么做可使距离衡量的定义更为宽松,从而可对复杂分布的数据进行更好地分类。采用LTW这一DTW距离函数改进方案,算法的时间效率可提升近10倍(相对于经典DTW实现),分类准确率可达到88%。

      同时,我们引入基于LSTM(Long Short Term Memory Neural Network)的分类算法。LSTM是一个具有序列数据建模能力的神经网络。随着深度学习的蓬勃发展,它的突出效果也日益显现。我们采用了一个经典的LSTM层来对数据进行分类,结构如下:

    Alt text

    3

      经测试,LSTM算法的分类准确率也达到88%左右。

      传统聚合算法并没有考虑到LSTM。LSTM在上述问题上的优异表现证明可以聚合LSTM与传统基于DTW的方法。虽然两种算法的分类效果类似(88%),但由于两者在原理上截然不同,可以预见他们准确预测的样本会有明显差别。我们将LTW和LSTM合二为一:将两者的分类概率向量简单相加,便可取得93%左右的实际分类效果。

      综上,这种聚合LTW和LSTM的时间分类算法,对server能耗序列进行分类的准确率可达93%。这说明仅仅利用server的能耗数据,我们就有很大概率准确检测server内部正在运行何种程序。这样的检测机制可以推广到所有的电器。

    三、结语

      本文简单总结了现有基于DTW的分类方法,并针对服务器能耗数据提出了一种聚合改进的距离衡量方法LTW和LSTM神经网络的方法,实现了93%的分类准确率。

      时间序列分类问题是一个非常有意思的问题,尤其是当对比DTW和LSTM的不同作用机制时。运用DTW计算距离,针对不同的序列对,计算中的序列index warping是不同的。DTW实际采用动态规划来计算距离。这是一个严格意义的程序而不是一个简单的计算公式。而LSTM是一个固定的训练好的神经网络。针对不同的序列,其网络权重在训练好之后都不会变化,却可以达到类似DTW的效果。这是否在某种程度上证明LSTM可以类比动态规划呢?

    展开全文
  • 进行时间序列分类实践--python实战

    千次阅读 2019-08-23 16:47:38
    分类时间序列数据?这真的有可能吗?可能有什么用呢?这些只是您阅读本文标题时必须具备的一些问题。这是公平的 - 当我第一次遇到这个概念时,我有完全相同的想法! 我们大多数人的时间序列数据主要涉及产生预测的...

    介绍

    你是否想要分类时间序列类型的数据?时间序列数据分类的实现真的有可能吗?即使分类了又可能有什么用呢?这些可能是您阅读本文标题时必须具备的一些基本问题。这是普遍存在的–当我第一次遇到这个概念时,我也有完全相同的想法!

    我们大多数人的时间序列数据主要涉及生产预测的交易方面。无论是预测产品的需求还是销售额,航空公司的乘客数量或特定股票的收盘价,我们都习惯于利用久经考验的时间序列技术来预测需求。

    在这里插入图片描述

    但随着生成的数据量呈指数增长,我们有了更多的机会去尝试新想法和算法。使用复杂的时间序列数据集仍然是一个利基(有前途的)领域,扩展你包含新的想法的技能以总是很有帮助的。

    这就是我在文章中的目的,向您介绍时间序列分类的新概念。我们将首先了解这个主题的含义以及它在行业中的应用。但是我们不会停留在理论部分 - 我们将通过处理时间序列数据集并执行二进制时间序列分类来解决问题。边做边学 - 这将有助于您以实际的方式理解这个概念。

    如果您之前没有处理过时间序列问题,我强烈建议您先从一些基本预测开始。您可以通过以下文章了解初学者:

    全面的初学者指南,用于创建时间序列预测(使用Python中的代码)

    目录

    1. 时间序列分类简介
      1. 心电图信号
      2. 图像数据
      3. 传感器
    2. 设置问题陈述
    3. 阅读和理解数据
    4. 预处理
    5. 建立我们的时间序列分类模型

    时间序列分类简介

    时间序列分类实际上已经存在了一段时间。但到目前为止,它主要限于研究实验室,而不是行业应用。但是有很多研究正在进行,正在创建新的数据集并提出了许多新的算法。当我第一次看到这个时间序列分类概念时,我最初的想法是 - 我们如何对时间序列进行分类以及时间序列分类数据是什么样的?我相信你一定想知道同样的事情。

    可以想象,时间序列分类数据与常规分类问题不同,因为属性具有有序序列。让我们来看看一些时间序列分类用例,以了解这种差异。

    1)对ECG / EEG信号进行分类

    心电图或心电图记录心脏的电活动,广泛用于诊断各种心脏问题。使用外部电极捕获这些ECG信号。

    例如,考虑以下信号样本,它代表一个心跳的电活动。左侧的图像表示正常心跳,而与其相邻的图像表示心肌梗塞。

    在这里插入图片描述

    从电极捕获的数据将是时间序列形式,并且信号可以分类为不同的类别。我们还可以对记录大脑电活动的脑电信号进行分类。

    2)图像分类

    图像也可以是顺序的时间相关格式。请考虑以下情形:

    根据天气条件,土壤肥力,水的可用性和其他外部因素,农作物在特定的田地中生长。该字段的图片每天拍摄5年,并标记在该字段上种植的作物的名称。你能明白我的意思么?数据集中的图像是在固定的时间间隔之后拍摄的,并且具有定义的序列,这可能是对图像进行分类的重要因素。

    3)分类运动传感器数据

    传感器生成高频数据,可以识别其范围内物体的移动。通过设置多个无线传感器并观察传感器中信号强度的变化,我们可以识别物体的运动方向。

    您还可以考虑哪些其他应用程序可以应用时间序列分类?请在文章下方的评论部分告诉我。

    设置问题陈述

    我们将致力于“ 室内用户运动预测 ”问题。在该挑战中,多个运动传感器被放置在不同的房间中,并且目标是基于从这些运动传感器捕获的频率数据来识别个体是否已经移动穿过房间。

    两个房间有四个运动传感器(A1,A2,A3,A4)。请看下面的图像,其中说明了传感器在每个房间中的位置。这两个房间布置了3对不同的房间(group1,group2,group3)。

    在这里插入图片描述
    一个人可以沿着上图中所示的六个预定义路径中的任何一个移动。如果一个人走在路径2,3,4或6,他会在房间内移动。另一方面,如果一个人沿着路径1或路径5行进,我们可以说该人已经在房间之间移动。

    传感器读数可用于识别人在给定时间点的位置。当人在房间或房间内移动时,传感器中的读数会发生变化。此更改可用于标识人员的路径。

    现在问题陈述已经清楚了,现在是时候开始编码了!在下一节中,我们将查看问题的数据集,这有助于消除您在此声明中可能存在的任何遗留问题。您可以从以下链接下载数据集:室内用户移动预测

    阅读和理解数据

    我们的数据集包含316个文件:

    • 314 MovementAAL csv文件,包含放置在环境中的运动传感器的读数
    • 一个目标包含每个MovementAAL文件的目标变量csv文件
    • 一个Group Data csv文件,用于标识哪个MovementAAL文件属于哪个安装组
    • 该路径包含该对象所采取的方法csv文件

    我们来看看数据集。我们将从导入必要的库开始。

    import pandas as pd
    import numpy as np
    %matplotlib inline
    import matplotlib.pyplot as plt
    from os import listdir
    
    from keras.preprocessing import sequence
    import tensorflow as tf
    from keras.models import Sequential
    from keras.layers import Dense
    from keras.layers import LSTM
    
    from keras.optimizers import Adam
    from keras.models import load_model
    from keras.callbacks import ModelCheckpoint
    

    在加载所有文件之前,让我们快速了解一下我们要处理的数据。从移动数据中读取前两个文件:

    df1 = pd.read_csv('/ MovementAAL / dataset / MovementAAL_RSS_1.csv')
    df2 = pd.read_csv('/ MovementAAL / dataset / MovementAAL_RSS_2.csv'
    df1.head()
    

    在这里插入图片描述

    df2.head()
    

    在这里插入图片描述

    df1.shape, df2.shape
    
    ((27, 4), (26, 4))
    

    这些文件包含来自四个传感器的标准化数据 - A1,A2,A3,A4。csv文件的长度(行数)不同,因为对应于每个csv的数据的持续时间不同。为简化起见,我们假设每秒都会收集传感器数据。第一次读数持续27秒(所以27行),而另一次读数持续26秒(所以26行)。

    在构建模型之前,我们必须处理这种不同的长度。现在,我们将使用以下代码块读取传感器中的值并将其存储在列表中:

    path = 'MovementAAL/dataset/MovementAAL_RSS_'
    sequences = list()
    for i in range(1,315):
        file_path = path + str(i) + '.csv'
        print(file_path)
        df = pd.read_csv(file_path, header=0)
        values = df.values
        sequences.append(values)
    
    targets = pd.read_csv('MovementAAL/dataset/MovementAAL_target.csv')
    targets = targets.values[:,1]
    

    我们现在有一个列表’序列 ‘,其中包含来自运动传感器的数据和’目标’,其中包含csv文件的标签。当我们打印序列[0]时,我们从第一个csv文件中获取传感器的值:

    sequences[0]
    

    在这里插入图片描述

    如前所述,数据集是在三对不同的房间中收集的 - 因此有三组。此信息可用于将数据集划分为训练集,测试集和验证集。我们现在将加载DatasetGroup csv文件:

    groups = pd.read_csv('MovementAAL/groups/MovementAAL_DatasetGroup.csv', header=0)
    groups = groups.values[:,1]
    

    我们将取前两组数据用于培训,取第三组数据用于测试。

    预处理步骤

    由于时间序列数据的长度不同,我们无法直接在此数据集上构建模型。那么我们怎样才能决定一个系列的理想长度呢?我们可以通过多种方式处理它,这里有一些想法(我很乐意在评论部分听到您的建议):

    • 用零填充较短的序列以使所有序列的长度相等。在这种情况下,我们将向模型提供不正确的数据
    • 找到系列的最大长度,并使用最后一行中的数据填充序列
    • 确定数据集中序列的最小长度,并将所有其他序列截断为该长度。但是,这将导致数据的巨大损失
    • 取所有长度的平均值,截断较长的系列,并填充比平均长度短的系列

    让我们找出最小,最大和平均长度:

    len_sequences = []
    for one_seq in sequences:
        len_sequences.append(len(one_seq))
    pd.Series(len_sequences).describe()
    
    count    314.000000 # 计算非na /null观察值的数量。
    mean      42.028662 # 平均值。
    std       16.185303 # 观测值的标准差。(n-1 哦)
    min       19.000000 # 最小值。
    25%       26.000000 # 第一四分位数 (Q1),又称“较小四分位数”,等于该样本中所有数值由小到大排列后第25%的数字。
    50%       41.000000 # 第二四分位数 (Q2),又称“中位数”,等于该样本中所有数值由小到大排列后第50%的数字。
    75%       56.000000 # 第三四分位数 (Q3),又称“较大四分位数”,等于该样本中所有数值由小到大排列后第75%的数字。
    max      129.000000 # 对象中值的最大值。
    dtype: float64
    

    对于 四分位数 不是太了解?我敢开始也不是很了解,这里有详细解释

    大多数文件的长度在40到60之间。只有3个文件的长度超过100个。因此,采用最小或最大长度没有多大意义。第90个四分位数为60,这被视为数据序列的长度。我们来编代码:

    #Padding the sequence with the values in last row to max length
    to_pad = 129
    new_seq = []
    for one_seq in sequences:
        len_one_seq = len(one_seq)
        last_val = one_seq[-1]
        n = to_pad - len_one_seq
       
        to_concat = np.repeat(one_seq[-1], n).reshape(4, n).transpose()
        new_one_seq = np.concatenate([one_seq, to_concat])
        new_seq.append(new_one_seq)
    final_seq = np.stack(new_seq)
    
    #truncate the sequence to length 60
    from keras.preprocessing import sequence
    seq_len = 60
    final_seq=sequence.pad_sequences(final_seq, maxlen=seq_len, padding='post', dtype='float', truncating='post')
    

    现在已准备好数据集,我们将根据组将其分开。准备训练,验证和测试集:

    train = [final_seq[i] for i in range(len(groups)) if (groups[i]==2)]
    validation = [final_seq[i] for i in range(len(groups)) if groups[i]==1]
    test = [final_seq[i] for i in range(len(groups)) if groups[i]==3]
    
    train_target = [targets[i] for i in range(len(groups)) if (groups[i]==2)]
    validation_target = [targets[i] for i in range(len(groups)) if groups[i]==1]
    test_target = [targets[i] for i in range(len(groups)) if groups[i]==3]
    
    train = np.array(train)
    validation = np.array(validation)
    test = np.array(test)
    
    train_target = np.array(train_target)
    train_target = (train_target+1)/2
    
    validation_target = np.array(validation_target)
    validation_target = (validation_target+1)/2
    
    test_target = np.array(test_target)
    test_target = (test_target+1)/2
    

    建立时间序列分类模型

    我们准备了用于LSTM(长短期记忆)模型的数据。我们处理了可变长度序列并创建了训练,验证和测试集。让我们构建一个单层LSTM网络。

    注意:您可以在这个精彩解释的教程中熟悉LSTM 。我会建议你先完成它,因为它可以帮助你理解下面代码的工作原理。

    model = Sequential()
    model.add(LSTM(256, input_shape=(seq_len, 4)))
    model.add(Dense(1, activation='sigmoid'))
    
    model.summary()
    

    在这里插入图片描述

    我们现在将训练模型并监控验证的准确性:

    adam = Adam(lr=0.001)
    chk = ModelCheckpoint('best_model.pkl', monitor='val_acc', save_best_only=True, mode='max', verbose=1)
    model.compile(loss='binary_crossentropy', optimizer=adam, metrics=['accuracy'])
    model.fit(train, train_target, epochs=200, batch_size=128, callbacks=[chk], validation_data=(validation,validation_target))
    
    #loading the model and checking accuracy on the test data
    model = load_model('best_model.pkl')
    
    from sklearn.metrics import accuracy_score
    test_preds = model.predict_classes(test)
    accuracy_score(test_target, test_preds)
    

    我的准确度得分为0.78846153846153844。这是一个非常有希望的开始,但我们肯定可以通过使用超参数,改变学习速度和/或时代数来改善LSTM模型的性能。

    这将我们带到本教程的结尾。写下来的想法是以实用的方式向您介绍时间序列谱中的一个全新世界。

    就个人而言,我发现预处理步骤是我们所涉及的所有部分中最复杂的部分。然而,它也是最重要的一个(否则整个时间序列数据将会失败!)。在处理此类挑战时,向模型提供正确的数据同样重要。

    这是一个非常酷的时间序列分类资源,我提到并发现最有帮助的:

    • 关于“通过油藏计算预测异构室内环境中用户移动”的论文
    • Paper on “Predicting User Movements in Heterogeneous Indoor Environments by Reservoir Computing”
    附:关于此文章一些小问题的解答

    Q:
    a)文章读完了,但是你在文中的目标是什么?
    b)在这种情况下,准确度0.78意味着什么?


    A:
    a) 本文实例的目标是用于识别此人是否从一个房间移动到另一个房间或是否在同一房间内移动。
    b) 在对某些数据进行训练之后,我们使用相同的方法模型对未知的数据进行预测,准确度为78%。

    Q: 如何预测未来几天数据中将出现的时间序列模式


    A:按模式分类来看,您可以使用简单的arima模型进行预测,然后进行分解以获得趋势和季节性。

    Q:有关图像数据的时间序列分类的任何出版物?


    A:可以参考:http://www.timeseriesclassification.com/

    展开全文
  • 为什么要进行时间序列分类? (Why Time Series Classification?) First of all it’s important to underline why this problem is so important today, and therefore why it is very interesting to understand ...
  • 基于深度学习的时间序列分类[含代码]

    万次阅读 多人点赞 2019-03-12 18:10:12
    基于深度学习的时间序列分类引言数据集实验环境搭建实验设计实验代码实验结果 引言 目前,深度学习在计算机视觉和语音识别上有了非常广泛的应用,但是在工业应用方面还没有完善的体系,一方面缺乏数据集另一方缺乏...
  • 基于深度学习时间序列分类研究综述[论文阅读]

    万次阅读 多人点赞 2019-03-15 10:22:22
    时间序列分类研究简介核心论文写在前面的话原文概述摘要1引言2背景2.1时间序列分类2.2基于深度学习的时间序列分类2.3生成性或判别性方法生成模型判别模型3方法3.1为什么判别的端到端方法?3.2方法比较完全卷积神经...
  • 本文通过论文、实战教程等几十篇篇博文,梳理总结了一套系统化的时间序列预测时间序列分类任务的入门指南。文中提及的博客、论文和教程全部内容的总字数大约在50万字到100万字之间。
  • 时间序列预测算法总结

    万次阅读 多人点赞 2018-10-18 10:30:48
    时间序列算法 time series data mining 主要包括decompose(分析数据的各个成分,例如趋势,周期性),prediction(预测未来...时间序列预测 常用的思路: 1、计算平均值 2、exponential smoothing指数衰减 ...
  • 时间序列分析和预测(含实例及代码)

    万次阅读 多人点赞 2018-09-17 21:37:34
    时间序列预测关键:确定已有的时间序列的变化模式,并假定这种模式会延续到未来。 时间序列预测法的基本特点 假设事物发展趋势会延伸到未来 预测所依据的数据具有不规则性 不考虑事物发展之间的因果...
  • ⏱最一段时间都在学习时间序列预测时间序列分类相关的知识,一开始拿到任务感觉无从下手,论文看不懂,代码不会写。经过近三个月的摸索,也算是入门的小白了,这篇博文算是个人经过踩坑,去粗取精之后的经验总结。...
  • MATLAB 时间序列预测算法(有代码)

    万次阅读 多人点赞 2019-09-05 09:57:44
    ##MATLAB 时间序列预测算法(有代码) #最近在学习时间序列,找了很多资料,都需要会员,充值,本着共同进步的原则,给大家分享一下我找到的学习资料,里面大部分代码能实现,只有ARMA部分不能,因为现在的库中没有...
  • 简单粗暴LSTM:LSTM进行时间序列预测

    万次阅读 多人点赞 2018-12-14 21:12:48
    使用LSTM进行时间序列预测 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新...
  • LSTM进阶:使用LSTM进行多维多步的时间序列预测

    万次阅读 多人点赞 2019-05-17 20:54:51
    现在我总结一下常用的LSTM时间序列预测: 1.单维单步(使用前两步预测后一步) 可以看到trainX的shape为 (5,2) trainY为(5,1) 在进行训练的过程中要将trainX reshape为 (5,2,1)(LSTM的输入为 [samples, ...
  • 时间序列预测

    千次阅读 2018-06-01 10:33:19
     许铁-巡洋舰科技 认为:“时间序列预测”本身包含了多种类型的问题,而这些问题存在不同特征的数据。进行时间序列预测时,首先考虑的并不是选择模型,而是分析目标问题。” 认为:”一个时间序列,往往是外界...
  • 时间序列预测(三)—— Xgboost模型

    千次阅读 2019-05-20 15:24:55
    时间序列预测(三)—— Xgboost模型 文章链接 (一)数据预处理 (二)AR模型(自回归模型) (三)Xgboost模型 (四)LSTM模型 (五)Prophet模型(自回归模型) 模型原理   Xgboost(Extreme Gradient Boost)...
  • Matlab时间序列分析

    万次阅读 多人点赞 2018-11-13 18:53:46
    在引入时间序列前,先介绍几个matlab函数 matlab中的gallery函数简析 Matlab 中的 gallery 函数是一个测试矩阵生成函数。当我们需要对某些算法进行测试的时候,可以利用gallery函数来生成各种性质的测试矩阵。其用法...
  • 卷积神经网络模型(CNN)可以应用于时间序列预测。有许多类型的CNN模型可用于每种特定类型的时间序列预测问题。在本介绍了在以TF2.1为后端的Keras中如何开发用于时间序列预测的不同的CNN模型。这些模型是在比较小的...
  • 本文介绍了在以tensorflow2.1.0为后端的Keras中,如何为各种时间序列预测问题开发LSTM模型。本文旨在为每种类型的时间序列问题提供所对应模型的示例,你可以依此为模板,针对自己的业务需求进行修改。
  • keras进行时间序列预测

    千次阅读 2019-04-01 16:06:16
    时间序列预测概述数据集的预处理基准方法调优增加dropout层增加网络深度 概述 用深度学习的方法进行端到端的时间序列预测需要一下几个步骤 1.对数据进行预处理,比如数据清洗,归一化等,然后把时间序列数据转化...
  • 时间序列森林(Time Series Forest, TSF)模型将时间序列转化为子序列的均值、方差和斜率等统计特征,并使用随机森林进行分类。TSF通过使用随机森林方法(以每个间隔的统计信息作为特征)来克服间隔特征空间巨大的...
  • Pytorch LSTM 时间序列预测

    千次阅读 2018-11-25 15:16:50
    Pytorch LSTM 时间序列预测 https://github.com/pytorch/examples/blob/master/time_sequence_prediction/generate_sine_wave.py Pytorch官网提供初学者入门的一个例子,有助于学习Pytorch时间序列预测。本例中...
  • 时间序列预测matlab程序

    热门讨论 2012-10-26 16:20:21
    时间序列预测matlab程序
  • 多组时间序列预测

    千次阅读 2018-12-20 17:48:44
    云脑科技机器学习训练营以讲解时间序列收尾,详细解说了时间序列的传统模型、进阶模型、神经网络模型。本期训练营由科赛联合云脑科技打造,中美大咖导师授课,精心指导学员解决机器学习中的实际问题,为人工智能行业...
  • Tensorflow2.0之时间序列预测

    千次阅读 热门讨论 2020-03-09 13:42:39
    文章目录项目介绍Tensorflow实现1、导入需要的库2、引入数据集3、划分特征和标签、建模预测3.1 用单变量预测一个未来时间点3.1.1 取出只含温度的数据集3.1.2 温度随时间变化绘图3.1.3 将数据集转换为数组类型3.1.4 ...
  • 作为forecast包与xgboost包的重度依赖者,最近看到整合两家之长的forecastxgb包甚是兴奋,便忍不住翻译forecastxgb包的一些时间序列预测例子与大家交流。 一.安装 目前forecastxgb包还在
  • 基于Keras的LSTM多变量时间序列预测

    万次阅读 多人点赞 2018-01-12 17:48:51
     传统的线性模型难以解决多变量或多输入问题,而神经网络如LSTM则擅长于处理多个变量的问题,该特性使其有助于解决时间序列预测问题。    在接下来的这篇博客中,你将学会如何利用深度学习库Keras搭建LSTM模型来...
  • 统计学——时间序列预测

    千次阅读 2019-02-15 10:43:12
    第13章 时间序列分析和预测 时间序列是同一现象在不同时间上的相继观测值排列而成的序列。本书中用t表示所观察的时间,Y表示观察值,则Yi( i =1, 2, …, n)为时间ti上的观察值。 时间序列可以分为平稳序列和非平稳...
  • 数学建模常用模型06 :时间序列预测

    万次阅读 多人点赞 2018-08-03 13:50:11
    时间序列预测与马尔科夫链预测互补,至少有2个点需要信息的传递,ARMA模型,周期模型,季节模型等 ARMA模型的全称是自回归移动平均(auto regression moving average)模型,它是目前最常用的拟合平稳序列的模型,它...
  • 时间序列预测可以被构造为一个监督学习问题。通过对时间序列数据的重构,可以针对不同问题使用相关的机器学习算法。本文介绍了如何将时间序列问题重新构造为机器学习中的监督学习问题。

空空如也

1 2 3 4 5 ... 20
收藏数 176,027
精华内容 70,410
关键字:

时间序列分类