在 r 中使用邻近矩阵进行聚类
clustering using a proximity matrix in r
我有一个马氏距离的邻近矩阵(相异性)。
矩阵(样本):
> dput(MD[1:5,1:5])
structure(c(0, 10.277, 8.552, 8.592, 9.059, 10.277, 0, 10.917,
9.489, 8.176, 8.552, 10.917, 0, 8.491, 8.104, 8.592, 9.489, 8.491,
0, 9.375, 9.059, 8.176, 8.104, 9.375, 0), .Dim = c(5L, 5L), .Dimnames = list(
c("2", "4", "5", "6", "9"), c("X2", "X4", "X5", "X6", "X9"
)))
矩阵有1900人,行名是一个Id。
我需要对这些人进行聚类,然后在该人的 id 旁边得到一个聚类。
我知道如何使用 k-means 进行聚类,但我不知道如何在已经有相异矩阵的情况下进行聚类。
您可以使用层次聚类,从 Mahalanobis 距离矩阵开始:
MD
X2 X4 X5 X6 X9
#2 0.000 10.277 8.552 8.592 9.059
#4 10.277 0.000 10.917 9.489 8.176
#5 8.552 10.917 0.000 8.491 8.104
#6 8.592 9.489 8.491 0.000 9.375
#9 9.059 8.176 8.104 9.375 0.000
hc <- hclust(as.dist(MD))
clusters <- cutree(hc, k = 3) # obtain 3 clusters
clusters
#2 4 5 6 9
#1 2 3 1 3
plot(hc)
rect.hclust(hc, k = 3, border = "red")
如果我理解正确,使用 dendextend
:
fit<-hclust(MD)
fit %>% as.dendrogram %>%
set("branches_k_color", k = 3, value = c("purple", "orange","red")) %>%
plot
簇 # 由颜色指定...从 cutree
传递而来。
我有一个马氏距离的邻近矩阵(相异性)。
矩阵(样本):
> dput(MD[1:5,1:5])
structure(c(0, 10.277, 8.552, 8.592, 9.059, 10.277, 0, 10.917,
9.489, 8.176, 8.552, 10.917, 0, 8.491, 8.104, 8.592, 9.489, 8.491,
0, 9.375, 9.059, 8.176, 8.104, 9.375, 0), .Dim = c(5L, 5L), .Dimnames = list(
c("2", "4", "5", "6", "9"), c("X2", "X4", "X5", "X6", "X9"
)))
矩阵有1900人,行名是一个Id。 我需要对这些人进行聚类,然后在该人的 id 旁边得到一个聚类。
我知道如何使用 k-means 进行聚类,但我不知道如何在已经有相异矩阵的情况下进行聚类。
您可以使用层次聚类,从 Mahalanobis 距离矩阵开始:
MD
X2 X4 X5 X6 X9
#2 0.000 10.277 8.552 8.592 9.059
#4 10.277 0.000 10.917 9.489 8.176
#5 8.552 10.917 0.000 8.491 8.104
#6 8.592 9.489 8.491 0.000 9.375
#9 9.059 8.176 8.104 9.375 0.000
hc <- hclust(as.dist(MD))
clusters <- cutree(hc, k = 3) # obtain 3 clusters
clusters
#2 4 5 6 9
#1 2 3 1 3
plot(hc)
rect.hclust(hc, k = 3, border = "red")
如果我理解正确,使用 dendextend
:
fit<-hclust(MD)
fit %>% as.dendrogram %>%
set("branches_k_color", k = 3, value = c("purple", "orange","red")) %>%
plot
簇 # 由颜色指定...从 cutree
传递而来。