意外的聚类错误(围绕中心点进行分区)
Posted
技术标签:
【中文标题】意外的聚类错误(围绕中心点进行分区)【英文标题】:Unexpected clustering errors (partitioning around mediods) 【发布时间】:2020-12-06 18:59:04 【问题描述】:我正在使用fpc
包来确定最佳集群数。 pamk()
函数将相异矩阵作为参数,不需要用户指定k
。根据documentation:
pamk() 这会调用 pam 和 clara 来围绕 medoids 进行分区 聚类方法(Kaufman 和 Rouseeuw,1990),包括两个 估计聚类数量的不同方法。
但是当我输入两个非常相似的矩阵 - foo
和 bar
(数据如下)时,函数在第二个矩阵(条形图)上出错
Error in pam(sdata, k, diss = diss, ...) :
Number of clusters 'k' must be in 1,2, .., n-1; hence n >= 2
鉴于输入矩阵基本相同,什么可能导致此错误?例如:
foo 有效!
hc <- hclust(as.dist(foo))
plot(hc)
pamk.best <- fpc::pamk(foo)
pamk.best$nc
[1] 2
酒吧没有
hc <- hclust(as.dist(bar))
plot(hc, main = 'bar dendogram')
pamk.best <- fpc::pamk(bar)
Error in pam(sdata, k, diss = diss, ...) :
Number of clusters 'k' must be in 1,2, .., n-1; hence n >= 2
任何建议都会有所帮助!
dput(foo)
structure(c(0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0,
0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0,
0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0,
0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0,
0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9,
9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0,
0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0,
0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0,
0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9,
9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0), .Dim = c(14L, 14L), .Dimnames = list(
c("etc", "etc", "etc", "etc", "etc", "etc", "etc", "similares",
"etc", "etc", "etc", "etc", "etc", "similares"), NULL))
dput(bar)
structure(c(0, 6, 6, 6, 6, 6, 0, 0, 0, 0, 6, 0, 0, 0, 0, 6, 0,
0, 0, 0, 6, 0, 0, 0, 0), .Dim = c(5L, 5L), .Dimnames = list(c("ramírez",
"similares", "similares", "similares", "similares"), NULL))
【问题讨论】:
【参考方案1】:bar
具有 n=5
列,因此 max(krange)
必须为 krange;试试:
pamk.best <- fpc::pamk(bar, krange=c(2:(dim(bar)[2]-1)))
【讨论】:
以上是关于意外的聚类错误(围绕中心点进行分区)的主要内容,如果未能解决你的问题,请参考以下文章
R语言生成仿真的3D高斯簇数据集使用scale函数进行数据缩放并使用KMeans进行聚类分析数据反向缩放并比较聚类生成的中心和实际数据的中心的差异预测新的数据所属的聚类簇