意外的聚类错误(围绕中心点进行分区)

Posted

技术标签:

【中文标题】意外的聚类错误(围绕中心点进行分区)【英文标题】:Unexpected clustering errors (partitioning around mediods) 【发布时间】:2020-12-06 18:59:04 【问题描述】:

我正在使用fpc 包来确定最佳集群数。 pamk() 函数将相异矩阵作为参数,不需要用户指定k。根据documentation:

pamk() 这会调用 pam 和 clara 来围绕 medoids 进行分区 聚类方法(Kaufman 和 Rouseeuw,1990),包括两个 估计聚类数量的不同方法。

但是当我输入两个非常相似的矩阵 - foobar(数据如下)时,函数在第二个矩阵(条形图)上出错

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中DBSCAN的聚类中心平均值?

R语言生成仿真的3D高斯簇数据集使用scale函数进行数据缩放并使用KMeans进行聚类分析数据反向缩放并比较聚类生成的中心和实际数据的中心的差异预测新的数据所属的聚类簇

用于获得相等大小的聚类的聚类算法

Matlab中的聚类

WGS84 坐标中的聚类或过滤点

具有多列的聚类表