如何使用hclust

时间:2018-10-17 09:03:27

标签: r hierarchical-clustering hclust

请说我有一些未标记的数据,我知道这些数据应分为六个类别,例如以下数据集:

library(tidyverse)
ts <- read_table(url("http://kdd.ics.uci.edu/databases/synthetic_control/synthetic_control.data"), col_names = FALSE)

如果我使用原始数据集中的60个样本创建一个hclust对象,如下所示:

n <- 10
s <- sample(1:100, n)
idx <- c(s, 100+s, 200+s, 300+s, 400+s, 500+s)
ts.samp <- ts[idx,]
observedLabels <- c(rep(1,n), rep(2,n), rep(3,n), rep(4,n), rep(5,n), rep(6,n))
# compute DTW distances
library(dtw)#Dynamic Time Warping (DTW)
distMatrix <- dist(ts.samp, method= 'DTW')
# hierarchical clustering
hc <- hclust(distMatrix, method='average')

我知道我可以将标签添加到树状图中以进行如下查看:

observedLabels <- c(rep(1,), rep(2,n), rep(3,n), rep(4,n), rep(5,n), rep(6,n))
plot(hc, labels=observedLabels, main="")

但是,我想为群集的初始数据框添加正确的标签。因此,对于ts.samp,我想添加一个额外的列,该列具有将每个观察值聚类到的正确标签。

似乎ts.samp$cluster <- hc$label应该将群集添加到数据帧中,但是hc$label返回NULL

任何人都可以帮助提取此信息吗?

1 个答案:

答案 0 :(得分:0)

您需要定义一个切割树状图的级别,这将形成组。

使用:

labels <- cutree(hc, k = 3) # you set the number of k that's more appropriate, see how to read a dendrogram
ts.samp$grouping <- labels

让我们看一下树状图,以便找到k的最佳数字:

plot(hc, main="")
abline(h=500, col = "red") # cut at height 500 forms 2 groups
abline(h=300, col = "blue") # cut at height 300 forms 3/4 groups

enter image description here

看起来23可能不错。您需要在垂直线(Height)中找到最高的跳动。

在该高度使用水平线并计算“形成”的簇。