Список кластеризации для функции hclust
С помощью plot(hclust(dist(x)))
Метод, я смог нарисовать карту дерева кластеров. Оно работает. Тем не менее, я хотел бы получить список всех кластеров, а не древовидную диаграмму, потому что у меня огромное количество данных (например, 150 тыс. Узлов), и сюжет становится грязным.
Другими словами, скажем, если a b c
это кластер, и если d e f g
это кластер, то я хотел бы получить что-то вроде этого:
1 a,b,c
2 d,e,f,g
Обратите внимание, что это не совсем то, что я хочу получить в качестве "вывода". Это всего лишь пример. Я просто хотел бы иметь возможность получить список кластеров вместо древовидного графика. Это могут быть векторные, матричные или просто простые числа, которые показывают, к каким группам относятся элементы.
Как это возможно?
2 ответа
Я буду использовать набор данных, доступный в R, чтобы продемонстрировать, как разрезать дерево на нужное количество частей. Результатом является таблица.
Построить объект hclust.
hc <- hclust(dist(USArrests), "ave")
#plot(hc)
Теперь вы можете разрезать дерево на столько веток, сколько захотите. Для моего следующего трюка я разделю дерево на две группы. Вы устанавливаете количество разрезов с помощью k
параметр. Увидеть ?cutree
и использование параметра h
что может быть более полезным для вас (см. cutree(hc, k = 2) == cutree(hc, h = 110)
).
cutree(hc, k = 2)
Alabama Alaska Arizona Arkansas California
1 1 1 2 1
Colorado Connecticut Delaware Florida Georgia
2 2 1 1 2
Hawaii Idaho Illinois Indiana Iowa
2 2 1 2 2
Kansas Kentucky Louisiana Maine Maryland
2 2 1 2 1
Massachusetts Michigan Minnesota Mississippi Missouri
2 1 2 1 2
Montana Nebraska Nevada New Hampshire New Jersey
2 2 1 2 2
New Mexico New York North Carolina North Dakota Ohio
1 1 1 2 2
Oklahoma Oregon Pennsylvania Rhode Island South Carolina
2 2 2 2 1
South Dakota Tennessee Texas Utah Vermont
2 2 2 2 2
Virginia Washington West Virginia Wisconsin Wyoming
2 2 2 2 2
Скажем так,
y<-dist(x)
clust<-hclust(y)
groups<-cutree(clust, k=3)
x<-cbind(x,groups)
Теперь вы получите для каждой записи кластерную группу. Вы также можете установить поднабор данных:
x1<- subset(x, groups==1)
x2<- subset(x, groups==2)
x3<- subset(x, groups==3)