Как добавить метки к исходным данным с учетом результатов кластеризации с использованием hclust - PullRequest
0 голосов
/ 17 октября 2018

Просто скажите, что у меня есть некоторые немаркированные данные, которые, как я знаю, должны быть сгруппированы в шесть категорий, как, например, этот набор данных:

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

Если я создаю hclust объект с выборкой 60 изисходный набор данных, например, так:

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 голосов
/ 17 октября 2018

Вам нужно определить уровень, на котором вы вырезаете свою дендрограмму, это сформирует группы.

Использование:

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

Похоже, что 2 или 3 могут быть хорошими.Вам нужно найти самый высокий прыжок в вертикальных линиях (Height).

Использовать горизонтальные линии на этой высоте и сосчитать кластер "сформированный".

...