zoukankan      html  css  js  c++  java
  • kmeans算法初识

    基础知识:

    K-means聚类算法

    聚类,简单地说就是把相似的东西分到一组。同 Classification (分类)不同,对于一个 classifier ,通常需要你告诉它“这个东西被分为某某类”。 理想情况下,一个 classifier 会从它得到的训练集中进行“学习”, 从而具备对未知数据进行分类的能力,这种提供训练数据的过程通常叫做 supervised learning (监督学习)。

    而在聚类的时候,我们并不关心某一类是什么,我们需要实现的目标只是把相似的东西聚到一起,因此,一个聚类算法通常只需要知道如何计算相似度就可以开始工作了,因此 clustering 通常并不需要使用训练数据进行学习,这在 Machine Learning 中被称作 unsupervised learning (无监督学习)。

    经常接触到的聚类分析,一般都是数值聚类,一种常见的做法是同时提取 N 种特征,将它们放在一起组成一个 N 维向量,从而得到一个从原始数据集合到 N 维向量空间的映射——你总是需要显式地或者隐式地完成这样一个过程,然后基于某种规则进行分类,在该规则下,同组分类具有最大的相似性

    http://blog.sina.com.cn/s/blog_62186b46010145ne.html

    K-means聚类算法的基本思想是初识随机给定K个簇中心,按照最邻近原则把分类样本点分到各个簇。然后按平均法重新计算各个簇的质心,从而确定新的簇心。一直迭代,直到簇心的移动距离小于某个给定的值。

    简单来说:也就是先给定一个簇心,然后把所有数据进行一个大概的划分,属于哪一类就分到那里去;之后呢,通过不断地计算,确定新的簇心,直到簇心的移动距离小于某个给定的值。

    K-means聚类算法主要分为三个步骤:
    1、第一步是为待聚类的点寻找聚类中心

    2、第二步是计算每个点到聚类中心的距离,将每个点聚类到离该点最近的聚类中去

    3、第三步是计算每个聚类中所有点的坐标平均值,并将这个平均值作为新的聚类中心

    反复执行2、3,直到聚类中心不再进行大范围移动或者聚类次数达到要求为止。

    下图展示了对n个样本点进行K-means聚类的效果,这里k取2:

    http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006910.html
    (a)未聚类的初始点集
    (b)随机选取两个点作为聚类中心
    (c)计算每个点到聚类中心的距离,并聚类到离该点最近的聚类中去
    (d)计算每个聚类中所有点的坐标平均值,并将这个平均值作为新的聚类中心
    (e)重复(c),计算每个点到聚类中心的距离,并聚类到离该点最近的聚类中去
    (f)重复(d),计算每个聚类中所有点的坐标平均值,并将这个平均值作为新的聚类中心

    Matlab实现:

    详见:http://www.oschina.net/code/snippet_176897_10239

    执行结果:

    >> Kmeans
    6 iterations, total sum of distances = 204.821
    10 iterations, total sum of distances = 205.886
    16 iterations, total sum of distances = 204.821
    9 iterations, total sum of distances = 205.886
    ........
    9 iterations, total sum of distances = 205.886
    8 iterations, total sum of distances = 204.821
    8 iterations, total sum of distances = 204.821
    14 iterations, total sum of distances = 205.886
    14 iterations, total sum of distances = 205.886
    6 iterations, total sum of distances = 204.821

    Ctrs =
        1.0754   -1.0632
        1.0482    1.3902
       -1.1442   -1.1121


    SumD =
       64.2944
       63.5939
       76.9329

    聚类效果:


    Matlab R2012a Documentation:

    http://www.mathworks.com.sixxs.org/help/toolbox/stats/kmeans.html?nocookie=true
    stackoverflow:kmeans example in matlab does not run:

    http://stackoverflow.com/questions/8411117/kmeans-example-in-matlab-does-not-run

    资料来自:http://blog.sina.com.cn/s/blog_62186b46010145ne.html

  • 相关阅读:
    数组有没有length()这个方法? String有没有length()这个方法?
    序列化接口的id有什么用?
    如何进行Hibernate的性能优化?
    构造器Constructor是否可被override?
    Collection框架中实现比较要实现什么接口?
    ArrayList如何实现插入的数据按自定义的方式有序存放?
    Java中会存在内存泄漏吗,请简单描述?
    List 和 Map 区别?
    面向对象的特征有哪些?
    垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
  • 原文地址:https://www.cnblogs.com/cyfighting/p/4234359.html
Copyright © 2011-2022 走看看