Извлечение древовидной структуры текста из hclust в R

В рамках проекта прогнозирования спроса я хотел бы определить лучший способ группировки временных рядов, которые имеют сходство друг с другом, чтобы я мог применить алгоритм прогнозирования сверху вниз. На данный момент мой ключевой вопрос заключается в том, чтобы определить, какие группы являются подходящими и какова соответствующая иерархия этих групп. Почитав немного, я считаю, что Dynamic Time Warping может помочь. Чтобы проверить это, я создал небольшой тестовый пример, но столкнулся с одной проблемой: как я могу извлечь иерархию, например, из текстового дерева или чего-то подобного. Я надеюсь, что, возможно, кто-то из вас сможет помочь мне в дальнейшем.

Я создал следующий случай, чтобы продемонстрировать, к чему я пришел.

sc2 <- read.table("http://dl.dropbox.com/u/9641130/R/hclust.data", header=F, sep="")
SampleLabels <- c("ID1", "ID2", "ID3", "ID4", "ID5", "ID6", "ID7", "ID8", "ID9", "ID10", "ID11", "ID12", "ID13", "ID14", "ID15")
distMatrix2 <- dist(sc2, method="DTW")
hc2 <- hclust(distMatrix2, method="average")
# show the visual tree
plot(hc2, labels=SampleLabels)

Каким-то образом я хотел бы получить имена и элементы кластеров в виде текста, чтобы я мог продолжать работать с ним. У кого-нибудь есть идея?

Спасибо!


person Jochem    schedule 20.06.2012    source источник
comment
Я так понимаю нужно выбрать где спилить дерево(numgroups)? Затем получите группы с чем-то вроде: groups = cutree(hc2,k=numgroups). Это дает групповые задания. Не уверен, что еще вы хотели бы.   -  person Seth    schedule 21.06.2012


Ответы (2)


Вы можете использовать dendrapply и атрибуты для доступа к каждому узлу в дереве.

person Swathi    schedule 21.10.2012
comment
Было бы здорово, если бы вы предоставили пример кода, иллюстрирующий задуманное вами решение. Это поможет этому ответу стать лучшим ресурсом для будущих читателей. - person joran; 22.10.2012

Следуя ответу Сета в комментариях выше, я пришел к следующему решению:

numgroups <- 5
groups <- cutree(hc2,k=numgroups)
LabelsAndGroups <- t(rbind(SampleLabels,groups)) # t is just to get a better overview when presenting the results here. 
LabelsAndGroups
      SampleLabels groups
 [1,] "ID1"        "1"   
 [2,] "ID2"        "1"   
 [3,] "ID3"        "2"   
 [4,] "ID4"        "1"   
 [5,] "ID5"        "3"   
 [6,] "ID6"        "4"   
 [7,] "ID7"        "1"   
 [8,] "ID8"        "4"   
 [9,] "ID9"        "5"   
[10,] "ID10"       "1"   
[11,] "ID11"       "2"   
[12,] "ID12"       "3"   
[13,] "ID13"       "4"   
[14,] "ID14"       "4"   
[15,] "ID15"       "1"   
person Jochem    schedule 27.04.2014