最佳簇公式:使用 NbClust 寻找等价物
Optimal Clusters Formula: Finding Equivalent Using NbClust
我有两个根据矩阵 B 计算的变量:
1) 相关矩阵cor(B)
2) 来自相关矩阵的相异矩阵的层次聚类
然后我使用 clustConfigurations
函数计算 "elbow graph" 以确定最佳簇数。
参见下面的代码:
library(NetCluster)
B = matrix(
c(2, 0, 0, 1, 0, 0, 1,
0, 1, 0, 0, 2, 1, 0,
0, 0, 3, 1, 0, 0, 2,
1, 0, 1, 4, 0, 0, 2,
0, 0, 0, 0, 4, 0, 2,
0, 1, 0, 0, 0, 2, 1,
1, 0, 2, 2, 2, 1, 8),
nrow=7,
ncol=7)
colnames(B) = c("A", "B", "C", "D", "E", "F", "G")
rownames(B) = c("A", "B", "C", "D", "E", "F", "G")
B
A B C D E F G
A 2 0 0 1 0 0 1
B 0 1 0 0 0 1 0
C 0 0 3 1 0 0 2
D 1 0 1 4 0 0 2
E 0 2 0 0 4 0 2
F 0 1 0 0 0 2 1
G 1 0 2 2 2 1 8
Correlation_Matrix <- cor(B)
dissimilarity <- 1 - Correlation_Matrix
Correlation_Matrix_dist <- as.dist(dissimilarity)
Correlation_Matrix_dist
HClust_Correlation_Matrix <- hclust(Correlation_Matrix_dist)
clustered_observed_cors = vector()
num_vertices <- ncol(B)
clustered_observed_cors1 <-clustConfigurations(num_vertices,HClust_Correlation_Matrix,Correlation_Matrix)
当我尝试使用更大的矩阵(特别是 1213 x 1213)执行此操作时,矩阵对于 运行 这个脚本来说太大了,所以我决定使用另一个名为 NbClust
的包。
文档:
https://cran.r-project.org/web/packages/NbClust/NbClust.pdf
我的目标是用这个新包重新创建上面的过程,但我不确定下面的代码是否等同于上面的代码:
library(NbClust)
nbclustering<-NbClust(diss = Correlation_Matrix_dist,
distance = NULL,
min.nc=2,
max.nc=20,
method = "complete",
index = "dunn")
This would give you the optimal amount of clusters:
nbclustering$Best.nc
上面的代码是否等同于我原来的代码,如果不是,我需要做哪些修改?
谢谢!
NbClust
是一个比 hclust
更广泛的函数,更侧重于评估最终集群数量的指标。
hclust
的默认方法是 "complete"
。
这与 NbClust 使用的方法相同,但选项为:method = "complete"
。
所以用Nbclust的结果来定义函数得到的聚类的最终簇数是正确的hclust
.
我有两个根据矩阵 B 计算的变量:
1) 相关矩阵cor(B)
2) 来自相关矩阵的相异矩阵的层次聚类
然后我使用 clustConfigurations
函数计算 "elbow graph" 以确定最佳簇数。
参见下面的代码:
library(NetCluster)
B = matrix(
c(2, 0, 0, 1, 0, 0, 1,
0, 1, 0, 0, 2, 1, 0,
0, 0, 3, 1, 0, 0, 2,
1, 0, 1, 4, 0, 0, 2,
0, 0, 0, 0, 4, 0, 2,
0, 1, 0, 0, 0, 2, 1,
1, 0, 2, 2, 2, 1, 8),
nrow=7,
ncol=7)
colnames(B) = c("A", "B", "C", "D", "E", "F", "G")
rownames(B) = c("A", "B", "C", "D", "E", "F", "G")
B
A B C D E F G
A 2 0 0 1 0 0 1
B 0 1 0 0 0 1 0
C 0 0 3 1 0 0 2
D 1 0 1 4 0 0 2
E 0 2 0 0 4 0 2
F 0 1 0 0 0 2 1
G 1 0 2 2 2 1 8
Correlation_Matrix <- cor(B)
dissimilarity <- 1 - Correlation_Matrix
Correlation_Matrix_dist <- as.dist(dissimilarity)
Correlation_Matrix_dist
HClust_Correlation_Matrix <- hclust(Correlation_Matrix_dist)
clustered_observed_cors = vector()
num_vertices <- ncol(B)
clustered_observed_cors1 <-clustConfigurations(num_vertices,HClust_Correlation_Matrix,Correlation_Matrix)
当我尝试使用更大的矩阵(特别是 1213 x 1213)执行此操作时,矩阵对于 运行 这个脚本来说太大了,所以我决定使用另一个名为 NbClust
的包。
文档:
https://cran.r-project.org/web/packages/NbClust/NbClust.pdf
我的目标是用这个新包重新创建上面的过程,但我不确定下面的代码是否等同于上面的代码:
library(NbClust)
nbclustering<-NbClust(diss = Correlation_Matrix_dist,
distance = NULL,
min.nc=2,
max.nc=20,
method = "complete",
index = "dunn")
This would give you the optimal amount of clusters:
nbclustering$Best.nc
上面的代码是否等同于我原来的代码,如果不是,我需要做哪些修改?
谢谢!
NbClust
是一个比 hclust
更广泛的函数,更侧重于评估最终集群数量的指标。
hclust
的默认方法是 "complete"
。
这与 NbClust 使用的方法相同,但选项为:method = "complete"
。
所以用Nbclust的结果来定义函数得到的聚类的最终簇数是正确的hclust
.