問題
私はさまざまな車の速度の時系列を持っています。私の究極の目的は、時間の経過とともにスピードの類似点に基づいて異なる車両をクラスター化することです。だから、私は基本的に、各セルが一対の車速時系列の間の距離を含む距離行列を生成する必要があります。ダイナミックタイムワーピング(dtw)を距離メトリックとして使用したいと思います。したがって、速度タイムシリーズの各ペアにdtwを適用したいと考えています。Rの複数の時系列にdtwアルゴリズムを適用するには?
データ
にここでは、車1台のみ8観察とのみ3台が含まれているいくつかのサンプルデータです:私は
を試してみました
> dput(c)
structure(list(file.ID2 = c("Cars_03", "Cars_03", "Cars_03",
"Cars_03", "Cars_03", "Cars_03", "Cars_03", "Cars_03", "Cars_04",
"Cars_04", "Cars_04", "Cars_04", "Cars_04", "Cars_04", "Cars_04",
"Cars_04", "Cars_05", "Cars_05", "Cars_05", "Cars_05", "Cars_05",
"Cars_05", "Cars_05", "Cars_05"), speed.kph.ED = c(129.3802848,
129.4022304, 129.424176, 129.4461216, 129.4680672, 129.47904,
129.5009856, 129.5229312, 127.8770112, 127.8221472, 127.7672832,
127.7124192, 127.6575552, 127.6026912, 127.5478272, 127.4929632,
134.1095616, 134.1205344, 134.1315072, 134.1534528, 134.1644256,
134.1753984, 134.1863712, 134.197344)), row.names = c(NA, -24L
), class = c("tbl_df", "tbl", "data.frame"), .Names = c("file.ID2",
"speed.kph.ED"))
私は1ペアのdtw::dtw()
距離を見つけることができますは次のようになります。
library(dplyr)
library(dtw)
c3 <- c %>% filter(file.ID2=="Cars_03")
c4 <- c %>% filter(file.ID2=="Cars_04")
query <- c4$speed.kph.ED
reference <- c3$speed.kph.ED
dtw_results <- dtw(x = query, y = reference)
dtw_results$distance
しかし、私の質問です:自動的に各ペアの間にdtw()$distance
を見つけて、距離行列を生成する方法はありますか? Cars_03
Cars_03 - - Cars_04
Cars_03 - Cars_05
Cars_04 - Cars_03
Cars_04 - Cars_04
Cars_04 - Cars_05
など
Cars_03:この例では、これらの対を意味します私はfor loop
がこれを行う方法の一つであることを知っています。しかし、dtw
自体が多くのRAMを必要とするので、for loop
はプロセスをさらに遅くする可能性があります。他の選択肢はありますか?これが愚かな質問であれば申し訳ありませんが、私はdtw
を使うのがとても新しいです。
パッケージを使いたい場合、優れた 'dtwclust'パッケージはこの比較を自動化します。 – lmo