原貼地址: 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>