0

我有一个我正在使用的 300x5000 的矩阵,我想测试哪个距离计算参数最有效。我得到以下结果:

'Sqeuclidean' = 17 次迭代,距离总和 = 25175.4

“相关性” = 9 次迭代,距离总和 = 32.7

'Cityblock' = 34 次迭代,距离总和 = 105175.3

'余弦' = 11 次迭代,距离总和 = 11.9

我无法理解为什么结果变化如此之大以及如何选择最有效的距离参数。有什么建议吗?

编辑:

我有 300 个功能,每个功能有 5000 个实例。该函数如下所示:

[idx, ctrs, sumd, d] = kmeans(matrix, 25, 'distance', 'cityblock', 'replicate', 20)

通过交换距离参数。这些特征已经标准化。

谢谢!

4

2 回答 2

0

不同的距离值

  • 距离函数
  • 数据集
  • 规范化

一般没有可比性。现实中的简单示例:以“米”或“英寸”为单位测量距离,您会得到截然不同的结果。以米为单位的结果不会更好,因为它是在不同的尺度上测量的。所以你不能比较不同结果的方差

请注意,k-means 仅适用于欧式距离,可能无法与其他距离函数收敛。恕我直言,L_p 规范应该没问题,在 TF-IDF 上也可能是余弦。但我不知道有什么证据。

哦,k-means 对高维数据的效果真的很差。它适用于低维。

于 2012-06-27T09:30:25.370 回答
0

正如 slayton 评论的那样,您确实需要定义“最佳”对您的特定问题意味着什么。

唯一重要的是距离函数对数据的聚类程度。一般来说,聚类高度依赖于距离函数。您选择的两个指标(迭代次数、距离总和)与聚类的效果完全无关。

你需要知道你想要通过集群实现什么,并且你需要一些指标来衡量你实现该目标的程度。如果有一个客观指标来确定您的集群有多好,那么就使用它。通常,指标比较模糊:当我可视化数据时,这看起来是否正确。查看您的数据,并查看每个距离函数如何对数据进行聚类。选择似乎生成最佳聚类的距离函数。对数据的几个子集执行此操作,以确保您的直觉是正确的。您还应该尝试了解每个距离函数给您的结果。

最后,一些问题适用于特定的距离函数。如果您的问题具有空间特征,那么欧几里得(几何)距离通常是一个自然的选择。对于不同的问题,其他距离函数会表现得更好。

于 2012-06-26T16:46:17.330 回答