2014-01-03 2 views
1

Я начал со списка хобби и людей, я хотел сгруппировать этих людей по их общим увлечениям. Итак, я создал матрицу расстояний, тогда я применил иерархическую кластеризацию и разделение, чтобы группировать кластеризацию в определенное количество кластеров. Теперь у меня есть матрица разреза, но я не знаю, как извлечь из нее кластеры. Не могли бы вы посоветоваться?группы извлечений из матрицы расстояний с использованием разреза в R

Вот пример того, что я имею в виду.

Расстояние матрица:

 one three two 
one  0  1.0 1.0 
three 1  0.0 0.5 
two  1  0.5 0.0 

Тогда я использовал hclust и cutree и получил этот результат:

hc <- hclust(dist, method="ward") 
ct <- cutree(hc, k=1:3) 
     1  2  3 
one  1  1  1 
three 1  2  2 
two  1  2  3 

Как получить список людей, которые принадлежат одной и той же группе?

Благодарим за помощь.

+0

Как создать матрицу расстояний? – jlhoward

ответ

1

Ваш k=1:3 обеспечит прогнозируемое кластер для каждого из $ K = {1, 2, 3} $. Если вы хотите группировать группы в соответствии с кластером, предположите, что WLOG, что 2 - это количество кластеров, которые вас интересуют, вам просто нужно объединить имена столбца матрицы в записи столбцов матрицы.

Пример:

hc <- hclust(dist(USArrests)) 
memb <- cutree(hc, k = 1:5) 
tapply(names(memb[, 3]), memb[, 3], c) ## say we're interested in 3 clusters 
2

ct - это матрица, поэтому вы можете индексировать столбцы, чтобы получить членство для групп с размерами 1: 3. Например,

cp[, 2] 

дает нетривиальное решение назначить 3 наблюдения двум группам.

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

Dij <- matrix(c(0, 1.0, 1.0, 
       1, 0.0, 0.5, 
       1, 0.5, 0.0), ncol = 3, byrow = TRUE) 
rownames(Dij) <- colnames(Dij) <- c("one", "two", "three") 
hc <- hclust(as.dist(Dij), method="ward") 
ct <- cutree(hc, k=1:3) 

вы можете использовать функцию split() разделить имена строк из ct (которые вы наблюдения/образец идентификаторы из матрицы расстояний, Dij), разбивая его на членский вектор из любого столбца ct, который вы хотите использовать. Например.

> split(rownames(ct), ct[,2]) 
$`1` 
[1] "one" 

$`2` 
[1] "two" "three" 
Смежные вопросы