Pytorch学习笔记10--时间序列分类总结

原贴地址: https://blog.csdn.net/qq_34919792/article/details/104262255


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

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

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

                                </div>
posted @ 2020-04-18 20:44  云远·笨小孩  阅读(5491)  评论(0编辑  收藏  举报