有谁知道确定使用 kmeans 进行聚类是否合适的好方法?也就是说,如果您的样本实际上是同质的怎么办?我知道诸如混合模型(通过 R 中的 mclust)之类的东西将为 1:k 集群情况提供拟合统计信息,但似乎所有评估 kmeans 的技术都需要至少 2 个集群。
有谁知道比较kmeans的1和2集群案例的技术?
有谁知道确定使用 kmeans 进行聚类是否合适的好方法?也就是说,如果您的样本实际上是同质的怎么办?我知道诸如混合模型(通过 R 中的 mclust)之类的东西将为 1:k 集群情况提供拟合统计信息,但似乎所有评估 kmeans 的技术都需要至少 2 个集群。
有谁知道比较kmeans的1和2集群案例的技术?
差距统计是这样做的好方法;蒂布希拉尼、哈斯蒂和瓦尔特 (2001)。
http://stat.ethz.ch/R-manual/R-devel/library/cluster/html/clusGap.html - 相关的 R 包。
这个想法是它执行一个顺序假设检验,对 K=1,2,3,... 的数据进行聚类,而不是随机噪声的零假设,这相当于一个聚类。它的特殊优势在于它可以为您提供是否 K=1 的可靠指示,即是否没有集群。
这是一个例子,几天前我正在检查一些天文学数据——即来自一个凌日系外行星调查。我想知道(凸)集群有什么证据。我的数据是“过境”
library(cluster)
cgap <- clusGap(transit, FUN=kmeans, K.max=kmax, B=100)
for(k in 1:(kmax-1)) {
if(cgap$Tab[k,3]>cgap$Tab[(k+1),3]-cgap$Tab[(k+1),4]) {print(k)};
break;
}
通过差距统计,您正在寻找测试“失败”的第一个 K 值,即差距统计显着下降。上面的循环将打印出这样的 ak,但是简单地绘制 cgap 会为您提供下图:
查看 Gap 从 k=1 到 k=2 的显着下降,这表示实际上没有集群(即 1 个集群)。
您也可以尝试一种更新的方法:A. Kalogeratos 和 A.Likas,Dip-means: an incremental clustering method for estimating the number of clusters,NIPS 2012。
这个想法是使用统计假设检验对包含一个点与集合中其余点之间的相似性/距离的向量进行单峰性检验。测试是使用 Hartigan-Hartigan dip test , Ann 完成的。统计学家。13(1):70-84。
该方法从所有数据集作为一个集群开始,只要拒绝单峰假设(即存在多个集群),就将其增量拆分。
因此,此方法将指示数据中是否存在多个聚类(您的问题),但它也可能提供最终聚类。
假设我正在考虑同样的例子,
library(cluster)
cgap <- clusGap(transit, FUN=kmeans, K.max=kmax, B=100)
for(k in 1:(kmax-1)) {
if(cgap$Tab[k,3]>cgap$Tab[(k+1),3]-cgap$Tab[(k+1),4]) {print(k)};
break;
}
如何根据最大间隙统计对与最佳聚类解决方案相对应的聚类元素进行子集化?这样我就可以使用它对每个集群进行进一步分析。
我知道有一个命令叫做子集。当我们给出了我们想要的集群数量时,使用这个命令没有问题。但是当我们想根据使用 gap 获得的最优 k 进行子集化时如何对其进行子集化(简而言之,如果存在循环,则对簇的元素进行子集化)