【问题标题】:Kmeans simple scripKmeans 简单脚本
【发布时间】:2018-10-18 01:19:51
【问题描述】:

我有一个脚本,大体上我明白意思但是最后一行,输出,谁能解释一下为什么是0.5?

data = load('dataset_seeds.txt');
data = data(:,1:7);
K = 3;
[m,C,sumd,D] = kmeans(data,K);
display('CENTROID');
C
display('     IDX |JARAK KE C1|JARAK KE C2|JARAK KE C3');
[m D.^0.5]

【问题讨论】:

  • 你应该问写脚本的人为什么是 0.5。让我困惑。 D is the distance from each point to each centroid.可能作者以为是平方距离?
  • @CrisLuengo 因为 k-means only 使用 squared 错误,是的,它是平方距离。
  • @Anony-Mousse:你有这方面的参考吗? kmeans 的文档只是说“距离”而不是“平方欧几里得距离”。文献中描述了许多不同的 kmeans 误差规范,而不是“only squared errors”。
  • 很多人误解了这一点。但是 mean 优化了平方误差。它不会优化绝对误差。因此,k-means 无法优化非平方欧几里得距离。 q.e.d.另外,这就是为什么发明了 PAM、k-medians、k-medoids...
  • @Anony-Mousse:我们谈论的是 MATLAB 中的 kmeans 函数,它确实实现了不同的距离度量和计算类质心的不同方法。此外,您的论点很奇怪,因为您使用欧几里得距离或平方欧几里得距离获得的空间划分是相同的。如果人们在计算k-means时使用平方欧几里得距离,并不是因为他们使用均值来计算质心,而是因为它与欧几里得距离的结果相同并且成本更低。

标签: matlab cluster-analysis


【解决方案1】:

K-means 最小化平方和。

平方和是平方欧几里得距离。

因此,Matlab kmeans 也使用平方欧几里得距离。

所以如果你想返回聚类分配和非平方欧几里得距离,你可以重用之前的平方偏差,并且只需要计算每个平方根。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    相关资源
    最近更新 更多