在K-Means算法中使用绝对皮尔逊相关作为距离(MATLAB)

i00*_*008 3 matlab cluster-analysis data-mining k-means

我需要使用相关距离进行一些聚类,而不是使用内置的"距离"相关性,其定义为d = 1-ri需要绝对的皮尔逊距离.在我的应用中,反相关数据应该相同cluter ID.而现在使用kmeans()函数即可获得高度防腐的质心,我希望通过组合它们来避免.现在,我还不熟悉matlab,并且在阅读kmeans函数时遇到一些问题.是否有可能为我的pourpose编辑它?

例:

将相关距离用作度量时,第1行和第2行应获得相同的群集ID.

我做了一些尝试来编辑内置的matlab函数(打开kmeans->第775行),但是很奇怪 - 当我改变距离函数时,我得到一个有效的距离矩阵,但错误的聚类索引,无法找到它的原因.很想得到一些提示!一切都好!

Ano*_*sse 6

这是为什么你不应该将k-means与其他距离函数一起使用的一个很好的例子.

K均值并没有最小化的距离.它最小化了方一维偏差(SSQ)的总和.

这在数学上等于欧氏距离的平方,所以它确实最小化欧几里德距离,作为数学副作用.它并不会减少任意其他的距离,这并不等同于方差最小化.

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

您可能知道,k-means(Lloyds,即)包含两个步骤:通过最小平方偏差分配,然后重新计算均值.

现在的问题是,重新计算均值与绝对皮尔森相关性不一致.

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

+1 +2 +3 +4 +5
-1 -2 -3 -4 -5
Run Code Online (Sandbox Code Playgroud)

并计算平均值:

 0  0  0  0  0
Run Code Online (Sandbox Code Playgroud)

繁荣.它们的平均值并不完全相关.事实上,Pearson相关系数甚至没有明确定义这个载体了,因为它具有零方差...

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

另请参阅此反演示例,了解地球移动距离,其中k均值的平均步长产生次优结果(尽管可能没有绝对皮尔逊那么糟糕)

而不是使用k-means,考虑使用k-medoids aka PAM,它可以在任意距离工作.或许多其他聚类算法之一,包括DBSCANOPTICS.