R使用fviz_nbclust求解最优聚类数报more cluster centers错误如何解决
报错原因
你当前使用的数据集tab维度为6行(g1~g6)、37列,fviz_nbclust函数默认将输入数据的行作为聚类样本,且默认测试的聚类数范围为1到10:
- 若你实际需要对列(37个样本)聚类,未做转置的情况下函数只会把6行当作样本,当测试的k值超过6时,自然会出现「聚类中心数多于唯一数据点」的报错
- 若你确实需要对行(6个基因)聚类,默认测试上限10远大于6个样本的最大可支持聚类数,同样会触发报错
解决方案
场景1:对37个列样本聚类
先对数据做转置,让行对应聚类样本,同时调整k.max参数将测试的最大聚类数降低到合理范围:
# 未标准化版本 fviz_nbclust(t(tab), kmeans, method = "wss", k.max = 8) # 标准化版本(你的特征取值均为0/0.5/1,标准化必要性较低,可按需选择) fviz_nbclust(scale(t(tab)), kmeans, method = "wss", k.max = 8)
如果调整后仍报错,说明你的样本中重复值较多,可继续调低k.max的取值。
场景2:对6个行基因聚类
直接调整k.max参数,让最大测试聚类数小于等于5即可:
# 未标准化版本 fviz_nbclust(tab, kmeans, method = "wss", k.max = 5) # 标准化版本 fviz_nbclust(scale(tab), kmeans, method = "wss", k.max = 5)
额外说明:你的数据集特征/样本量偏少,kmeans聚类效果可能有限,也可考虑使用层次聚类做小样本聚类。
内容的提问来源于stack exchange,提问作者mirkuz
相关产品推荐
相关产品推荐

