Re: [問題] 有關時間序列資料計算DTW問題
笨方法:
每一種長度的距離都算一次,存進distMatrix裡面
不知道怎麼加速(攤手
library(dtw)
test=read.csv("C:\\Users\\user_148\\Downloads\\test.csv", header = FALSE)
test = as.matrix(test)
dtw_f = function(i, j){
dtw(test[!is.na(test[,i]), i],test[!is.na(test[,j]),j])$distance
}
loc_mat = as.matrix(expand.grid(1:ncol(test.fr), 1:ncol(test.fr)))
distMatrix = mapply(function(x,y) dtw_f(x,y), loc_mat[,1], loc_mat[,2])
dim(distMatrix) = rep(ncol(test), 2)
※ 引述《sinclairJ (SunnyGymBoy)》之銘言:
: 資料檔:https://www.dropbox.com/s/3wh4o9c0l5pplwq/test.csv?dl=0
: 資料檔說明:資料檔維度為60*99,有99條時間序列
: (每條時間序列長度不一,長度最長為60(可視為60個單位時間點))
: 問題描述:因現實資料的關係,有些時間序列會有NA值
: 但查過文獻之後,這不影響分析
: 小弟主要要做的分析是1 by 1計算這些時間序列的相似性
: (而DTW就是一種可以計算兩條序列不等長(也可等長)的相似性之計算距離方法)
: 而得出99*99的距離矩陣之後 再對距離矩陣做資料探勘中的分群
: 問題:因時間序列有NA值,所以不太能用自動化的方式一次完成99*99分析
: 小弟原本的程式碼如下
: test=read.csv("") #讀檔
: library(dtw)
: DtstMatrix=dist(test,method="DTW") #執行這行會出現錯誤
: 所以小弟用比較笨的方法,用眼睛一條一條看,然把NA的值取出來再做計算
: 小弟此時的程式碼如下
: eg1.如果要計算等長的序列
: d1=dtw(test[,5],test[,6]) #以計算第5與第6條序列相似性為例
: d1$distance #看兩條序列的距離,越小表示越相似
: eg2.如果要計算不等長的序列
: d2=dtw(test[,5],test[c(1:45),7]) #以計算第5與第7條序列相似性為例
: 不過小弟要每條序列都與每條序列做一次計算然後得出99*99的距離矩陣
: 距離矩陣示意圖如下(28*28為例)
: http://i.imgur.com/Tp5we4U.jpg

: 不知道各位前輩有沒有什麼較方便的方法可以教導小弟一下
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.109.73.190
※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1444801404.A.806.html
推
10/15 09:55, , 1F
10/15 09:55, 1F
我同學跟我說dtw是放兩個不等長的東西,只是NA要去掉
我一直以為是要等長...所以我取最小size去算
因此,我誤會你的意思了 程式有錯,我更正了
推
10/16 12:15, , 2F
10/16 12:15, 2F
→
10/16 12:15, , 3F
10/16 12:15, 3F
嗯嗯
已修改文章
※ 編輯: celestialgod (180.218.154.163), 10/18/2015 20:42:18
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
R_Language 近期熱門文章
PTT數位生活區 即時熱門文章