java - k 均值聚类

java - k-means clustering

我有以下输入整数向量(示例):

4 138 233 461 610 621 669 742 814 827
89 138 334 656 697 810
138
138 196 738
659 738
4 461
138 337 756 810
8 138 196 337 468 663 664 756 809 810

它们都包含整数值 [1-850] 并且都存储在 csv 文件中。

我想根据向量的相似性将它们分成多个集群,但我对如何在 java 中为我的输入数据实施 k-means 算法感到困惑。有人愿意提供提示或代码帮助吗?

提前致谢。

k 均值聚类的伪代码

假设您有一个可以比较输入对象(在您的例子中是向量)并输出相似性度量的度量(我们称之为 M)。

和一个能够计算一组输入对象的平均值的函数(我们称之为 A)

  1. 从您的数据集中随机 select N 项。它们是集群的新中心(称为质心)。
  2. 对于不是质心的每个项目 X,计算它到每个质心的距离(使用 M),并将其标记为属于 X 和 C 之间的距离(使用 M)最小的那个质心 C。
  3. 现在每个项目都分配给一个质心。
  4. 使用平均函数 (A) 计算新的质心
  5. 要么直接使用 A 的输出作为新的质心,要么找到最接近 A 输出的实际项目(使用 M)
  6. 重复步骤 2 到 5 直到收敛(或直到您的计算预算已用完)

另请查看 https://en.wikipedia.org/wiki/K-means_clustering