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

  • 相关阅读:
    ubuntu播放器
    第一次装ubuntu 没root密码时
    web服务器记录
    socket udp编程步骤
    nfs服务器配置
    带线程函数编译条件
    linux使用一个刚编译驱动方法
    tiny6410_led驱动Makefile
    java-设计模式-外观模式
    java-实现一个简单的java Web容器
  • 原文地址:https://www.cnblogs.com/cyfighting/p/4234359.html
Copyright © 2011-2022 走看看