【问题标题】:K-means algorithm in matlab [closed]matlab中的K-means算法[关闭]
【发布时间】:2011-07-20 14:07:13
【问题描述】:

如何在 Matlab 中实现 K-means 算法而不使用 kmeans(X,k) 语法?

实际上问题在于没有实现算法。请看下图:

我实现了大多数网站提供的算法,例如http://en.wikipedia.org/wiki/Kmeans

1. Give initial values to m1 .. mk
2. Assignment with closest mean
3. Update

我设置了 X 的 4 个观测值(200 个样本),我已经知道这 4 个观测值来自 1 个集群。 因此,根据算法,上述图像的聚类是可以解释的,但事实并非如此。我认为 4 个初始值不应该随机选择。

我还运行了一些其他源代码,例如http://people.revoledu.com/kardi/tutorial/kMean/matlab_kMeans.htm。推导出同样的结果。您可以从http://www.4shared.com/get/IfwUEUBD/Observation.html 下载我的观察结果并亲自查看结果。

【问题讨论】:

  • 如果你想知道kmeans源代码,在MATLAB的命令提示符下输入type kmeans.m
  • @Ata:算法很简单,描述得很好:en.wikipedia.org/wiki/K-means_clustering。您应该能够自己实现它作为练习。如果您对代码有问题,可以寻求帮助,但表明您已经努力......
  • @Ata:Kmeans算法对初始化很敏感,请看这个相关问题:stackoverflow.com/questions/3657801/…

标签: matlab cluster-analysis k-means


【解决方案1】:

如果您想实现自己的 k-means 或(无论出于何种原因)不想使用 MATLAB k-means 语法,那么有两种方法:

  1. 阅读论文:“一种高效的 k-Means 聚类算法: 分析与实现”,还可以阅读其他一些资源,然后编写自己的代码。

  2. 搜索互联网,直到找到其他免费实现,以便您可以在代码中使用它。

您可能希望查看以下链接:

http://people.revoledu.com/kardi/tutorial/kMean/index.html

【讨论】:

    【解决方案2】:

    “不使用 kmeans(X,k) 语法”是指不事先指定 k,即簇的数量吗?这是不可能的,因为该算法依赖于提前知道集群的数量。如果您真的想在事先不知道集群数量的情况下执行集群,我会研究另一种算法,例如DBSCAN algorithm

    如果您想要一个已经使用可用源代码实现的 K-means 算法,请查看VLFeat 以获得可靠的实现。语法就是 kmeans(X,k)。

    【讨论】:

    • k 和 X 都指定了。我想知道 k-means 源代码。我检查了 VLFeat。看起来,它是一个与 matlab 兼容的库。我可以找到函数 m 文件的解决方案吗?
    • VLFeat 实际上是通过 .mex 文件链接到 Matlab 的 C 代码,因此实际上没有任何 matlab 代码可供查看。不过,您可以查看 C 代码以了解发生了什么...
    猜你喜欢
    • 1970-01-01
    • 2013-07-03
    • 2019-02-19
    • 2018-10-11
    • 2010-12-05
    • 2017-04-20
    • 2013-04-22
    • 2012-06-19
    • 2013-02-14
    相关资源
    最近更新 更多