【问题标题】:How to decide best number of clusters for kamila clustering with R?如何确定使用 R 进行 kamila 聚类的最佳聚类数?
【发布时间】:2018-11-04 06:52:02
【问题描述】:

我有一个混合类型的数据集,所以我想尝试kamila 聚类。它很容易应用,但我想要一个类似于膝盖图的图来决定聚类的数量。

data <- read.csv("binarymat.csv",header=FALSE,sep=";")
conInd <- c(9)
conVars <- data[,conInd]
conVars <- data.frame(scale(conVars))
catVarsFac <- data[,c(1,2,3,4,5,6,7,8)]
catVarsFac[] <- lapply(catVarsFac, factor)
catVarsDum <- dummyCodeFactorDf(catVarsFac)
kamRes <- kamila(conVars, catVarsFac, numClust=5, numInit=10,
            calcNumClust = "ps",numPredStrCvRun = 10, predStrThresh = 0.5)
summary(kamRes)

它说最好的聚类数是 5。它是如何决定的,我可以看到一个表明这一点的图吗?

【问题讨论】:

    标签: r cluster-analysis mixed-type


    【解决方案1】:

    kamila 包文档中

    将 calcNumClust 设置为 'ps' 使用的预测强度方法 Tibshirani & Walther (J. of Comp. and Graphical Stats. 14(3), 2005)。 估计聚类数量没有完美的方法;附言 倾向于给出比基于 BIC 的方法更小的数字 样本量。

    在您使用它的情况下,您为numClust 指定了一个 值。所以,看起来你实际上并没有选择集群的数量——你已经选择了一个。

    要选择簇数,您必须指定您感兴趣的范围,例如numClust = 2 : 7,以及选择簇数的方法。

    如果您还想选择集群的数量,类似以下的方法可能会起作用。

    kamRes <- kamila(conVars, catVarsFac, numClust = 2 : 7, numInit = 10, 
              calcNumClust = "ps", numPredStrCvRun = 10, predStrThresh = 0.5)
    

    关于选择集群数量的信息现在显示在 kamRes$nClustplot(2:7, kamRes$nClust$psValues) 可能就是您所追求的。

    【讨论】:

    • 非常感谢苏仁。我正在尝试您提供的代码,但它给出了这个错误。 “kamila 中的错误(conVar = conVar[testInd, ], catFactor = catFactor[testInd, : 输入数据集必须是数据帧”
    • 错误提示 Input datasets must be dataframes... 因为我不知道您使用的是什么数据,所以很难准确说出发生了什么。
    • 查看您的代码 catVarsFac 可能是一个列表,因为您是从 lapply 获取的。
    • 谢谢,我正在努力解决问题。
    • 我正在使用一个包含 8 个二进制变量和一个连续变量的数据集。因此,正如您在代码中看到的那样,conVars 是按比例缩放的,它是数据框。我还用catVarsFac[] &lt;- data.frame(lapply(catVarsFac, factor)) 使 catVarsFac 成为一个数据框,它仍然给出同样的错误。我无法修复它。你知道当我只写kamRes &lt;- kamila(conVars, catVarsFac, numClust=5,numInit=10) 时它正在工作。
    猜你喜欢
    • 2013-02-28
    • 2012-10-26
    • 2014-06-23
    • 1970-01-01
    • 2014-07-04
    • 2016-11-23
    • 1970-01-01
    相关资源
    最近更新 更多