2012-06-20 4 views
1

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

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

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) 

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

Спасибо!

+3

Как я понимаю, вам нужно выбрать, где вы хотите, чтобы срубить дерево ('numgroups')? Затем получите группы с чем-то вроде: 'groups = cutree (hc2, k = numgroups)'. Это дает групповые задания. Не знаете, что еще вы хотели бы. – Seth

ответ

0

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

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" 
0

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

+2

Было бы здорово, если бы вы могли предоставить пример кода, который иллюстрирует решение, которое вы имеете в виду. Это поможет этому ответу стать лучшим ресурсом для будущих читателей. – joran