【问题标题】:java - k-means clusteringjava - k-means 聚类
【发布时间】:2018-01-14 17:08:11
【问题描述】:

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

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 算法感到困惑。有人愿意提供提示或代码方面的帮助吗?

提前致谢。

【问题讨论】:

  • 如果您确实有代码,我们可以为您提供帮助。但我们不会为您编写代码。
  • 您有什么具体问题吗?对于 SO 来说,帮助的范围太广了。
  • Ehm,无法使用搜索引擎?
  • 嗨,很抱歉没有发布代码,但我只是在学习,我什至不知道如何从 k-means 算法的代码开始,因为我不是即使确定这是否适合我的情况。我不希望任何人为我做这项工作,但如果我以正确的方式前进,任何提示将不胜感激。谢谢。
  • 用伪代码看k-means,然后用Java写

标签: java k-means data-analysis


【解决方案1】:

k-means 聚类的伪代码

假设您有一个度量(我们称之为 M),它可以比较输入对象(在您的情况下为向量)并输出相似性度量。

还有一个函数(我们称之为 A),它能够计算输入对象集合的平均值

  1. 从数据集中随机选择 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

【讨论】:

    猜你喜欢
    • 2015-04-11
    • 2011-08-13
    • 2013-08-08
    • 2013-02-14
    • 2011-04-11
    • 2016-12-16
    • 2011-06-06
    • 2018-02-27
    • 2019-11-25
    相关资源
    最近更新 更多