我正在学习使用R来聚类数据点,我创建了一个玩具示例。我使用Silhouette统计数据来确定最佳簇数,但它确定的最佳数量不是我所期望的。我将所有步骤和数据包括在内。我想知道我是否误解/误用了什么?我真的很感激任何评论!
首先,数据矩阵" m"从文件加载看起来像这样。 每一行都是对象的特征向量
然后是R代码:
d <- dist(m, method="euclidean")
接下来执行群集:
clustering <- hclust(d, "average")
然后计算所有可能的簇号的轮廓,即1 <= i <= 10:
sub <- cutree(clustering, k=i) #replace i with 1, 2, 3... 10
si <- silhouette(sub, d)
sm <- summary(si, FUN=mean)
sm #to print
例如,我为每个i得到以下平均轮廓值:
i=1, NaN
i=2, 0.19
i=3, 0.157
....
i=8, 0.09
...
最大值为i = 2,表明有两个聚类,如下所示:
即,
cluster1 = {4}
cluster2 = {all else}
我想知道为什么它没有预测下面的3个集群,这是我期望的合理:
cluster1 = {4}
cluster2 = {1,2,5,6,7}
cluster3 = {3,8,9,10}
我通过查看每个对象的特征向量并基于它们至少具有非零值共同特征的事实对对象进行分组来获得此结果。因此,我无法理解为什么应该合并cluster2和cluster3,如最高轮廓值所示?
答案 0 :(得分:0)
欧几里德距离始终考虑所有特征。
它不会查找0值。它们并不特别。
如果有大量的0值,你应该使用不同的距离和/或算法。