【问题标题】:Use Absolute Pearson Correlation as Distance in K-Means Algorithm (MATLAB)在 K-Means 算法中使用绝对 Pearson 相关性作为距离 (MATLAB)
【发布时间】:2014-02-14 22:08:26
【问题描述】:

我需要使用相关距离进行一些聚类,但我需要绝对 Pearson 距离,而不是使用定义为 d=1-r 的内置“距离”“相关”。在我的应用程序中,反相关数据应该获得相同的集群 ID。现在,当使用 kmeans() 函数时,我得到了高度反相关的质心,我想通过组合它们来避免这些质心。现在,我对 matlab 还不是很流利,并且在阅读 kmeans 函数时遇到了一些问题。是否可以根据我的目的对其进行编辑?

示例:

当使用相关距离作为指标时,第 1 行和第 2 行应该获得相同的集群 ID。

我做了一些尝试来编辑内置的 matlab 函数(打开 kmeans->line 775) 但奇怪的是——当我改变距离函数时,我得到一个有效的距离矩阵但错误的集群索引,找不到原因。 很想得到一些提示!万事如意!

【问题讨论】:

  • 我不明白你的问题......你的意思是:“现在当使用 kmeans() 函数时,我得到的质心高度反相关”我认为这就是你想要的......或者这句话错了吗?
  • 感谢您的回答,不,这不是我想要的,也许我写的这句话不清楚。我需要的是脚本将反相关数据视为相同。为此,距离函数必须为 -1 和 1 提供相同的值。所以它可以是 abs(pearson_corr_coef)
  • 所以你可以修改另一个版本的kmeans,正如我在答案中指出的那样

标签: matlab cluster-analysis data-mining k-means


【解决方案1】:

这是一个很好的例子,说明了为什么不应将 k-means 与其他距离函数一起使用。

k-means 不 最小化距离。它最小化一维偏差平方和 (SSQ)。

这在数学上等同于平方欧几里得距离,因此它确实最小化了 欧几里得 距离,这是一个数学副作用。它确实不最小化任意其他距离,这不等同于方差最小化。

在您的情况下,很高兴看到它失败的原因;我必须记住这是一个演示案例。

您可能知道,k-means(即 Lloyds)由两个步骤组成:按最小平方偏差分配,然后 重新计算均值。

现在的问题是,重新计算平均值与绝对 pearson 相关性不一致。

让我们取两个向量,它们是 -1 相关的:

+1 +2 +3 +4 +5
-1 -2 -3 -4 -5

并计算均值:

 0  0  0  0  0

轰隆隆。它们与它们的平均值完全不相关。事实上,对于这个向量,皮尔逊相关甚至都没有明确,因为它的方差为零......

为什么会这样?因为您将 k-means 误解为基于距离。它实际上与 算术平均值 一样多。算术平均值是最小二乘 (!!) 估计量 - 它最小化 平方偏差的总和。这就是平方欧几里得距离起作用的原因:它优化与重新计算平均值相同的数量。在两个步骤中优化同一目标会使算法收敛。

另请参阅counter-example for Earth-movers distance,其中 k-means 的平均步长产生次优结果(尽管可能不如绝对 pearson 差)

考虑使用 k-medoids 又名 PAM,而不是使用 k-means,它确实适用于任意距离。或许多其他聚类算法之一,包括DBSCAN 和OPTICS。

【讨论】:

  • 你可能想改写你的答案 - 你说“k-means 不会最小化距离”,然后说“......所以它确实最小化欧几里得距离”
  • 它不关心它是否最小化欧几里得距离。它试图最小化方差。有副作用。
【解决方案2】:

您可以尝试修改另一个版本的 kmeans:This version 也很高效,但要简单得多(大约 10 行代码)。 Here你有代码的解释。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-09
    • 2013-04-22
    • 2013-09-12
    • 2013-02-02
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 2018-04-06
    相关资源
    最近更新 更多