时间序列聚类及动态时间规整(DTW)距离优化
时间序列聚类采用多种策略,并针对动态时间规整(DTW)距离及其相应的下界(LBs)进行了一系列优化。包含传统聚类算法的实现,以及更新的程序如k-Shape和TADPole聚类。功能可以通过自定义距离度量和质心定义轻松扩展。
本包实现的许多算法都是专门为DTW设计的,因此得名。然而,主要的聚类函数非常灵活,可以测试多种不同的聚类方法,直接使用时间序列,或通过应用适当的转换然后在结果空间中进行聚类。包中包含的其他实现提供了一些DTW的替代方案。
更多信息:
实现
- 划分、层次和模糊聚类
- k-Shape聚类
- 基于形状的距离
- 时间序列的形状提取
- TADPole聚类
- k-Shape聚类
- DTW的优化版本
- Keogh和Lemire的DTW下界
- 全局对齐核(GAK)距离
- DTW重心平均
- 软-DTW(距离和质心)
- 部分多变量支持(GAK、DTW和软-DTW)
- 聚类有效性指标(硬性和模糊、内部和外部)
- 大多数函数的并行化
安装
可以通过install.packages("dtwclust")
安装CRAN上的最新版本。
如果想测试github上的最新版本,首先安装R包开发的先决条件(只有在需要构建vignette时才需要LaTeX)以及remotes包,然后输入remotes::install_github("asardaes/dtwclust")
。
如果你不确定安装哪个版本,可以查看CHANGELOG文件,我会尽量保持更新。检查持续集成构建以确保一切正常。
许可证
本软件包独立于任何与作者有关或曾经有关的组织或机构开发。
示例
# 加载数据
data("uciCT")
划分聚类
pc <- tsclust(CharTraj, type = "partitional", k = 20L,
distance = "dtw_basic", centroid = "pam",
seed = 3247L, trace = TRUE,
args = tsclust_args(dist = list(window.size = 20L)))
#>
#> 预计算距离矩阵...
#>
#> 迭代1:变化 / 距离和 = 100 / 1361.256
#> 迭代2:变化 / 距离和 = 8 / 1101.633
#> 迭代3:变化 / 距离和 = 2 / 1036.096
#> 迭代4:变化 / 距离和 = 0 / 1031.353
#>
#> 耗时0.412秒。
plot(pc)
层次聚类
hc <- tsclust(CharTraj, type = "hierarchical", k = 20L,
distance = "sbd", trace = TRUE,
control = hierarchical_control(method = "average"))
#>
#> 计算距离矩阵...
#> 执行层次聚类...
#> 提取中心点...
#>
#> 耗时0.147秒。
plot(hc)
模糊聚类
# 计算最多50阶的自相关,将时间序列列表作为输入
acf_fun <- function(series, ...) {
lapply(series, function(x) { as.numeric(acf(x, lag.max = 50L, plot = FALSE)$acf) })
}
# 基于自相关的模糊c均值聚类
fc <- tsclust(CharTraj[1L:25L], type = "fuzzy", k = 5L,
preproc = acf_fun, distance = "L2",
seed = 123L)
fc
#> 具有5个簇的模糊聚类
#> 使用L2距离
#> 使用fcm中心点
#> 使用acf_fun预处理
#>
#> 分析所需时间:
#> 用户 系统 经过时间
#> 0.03 0.00 0.03
#>
#> 模糊隶属度的前几行:
#>
#> 簇_1 簇_2 簇_3 簇_4 簇_5
#> A.V1 0.04550608 0.015278671 0.06017278 0.02854909 0.8504934
#> A.V2 0.02649930 0.007304681 0.03576385 0.01482575 0.9156064
#> A.V3 0.03891669 0.007107856 0.03584082 0.01348798 0.9046467
#> A.V4 0.09316283 0.194096301 0.10463724 0.20029868 0.4078050
#> A.V5 0.09423895 0.163296699 0.11727901 0.17605511 0.4491302
#> B.V1 0.39131228 0.034768969 0.35717141 0.07915848 0.1375889
一些多变量支持
# 多变量序列以矩阵列表的形式提供,使用GAK距离
mvc <- tsclust(CharTrajMV[1L:20L], k = 4L, distance = "gak", seed = 390L)
# 注意每个序列的变量是如何在图中依次附加的
plot(mvc, labels = list(nudge_x = -10, nudge_y = 1))