请说我有一些未标记的数据,我知道这些数据应分为六个类别,例如以下数据集:
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
。
任何人都可以帮助提取此信息吗?
答案 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
看起来2
或3
可能不错。您需要在垂直线(Height
)中找到最高的跳动。
在该高度使用水平线并计算“形成”的簇。