码迷,mamicode.com
首页 > 编程语言 > 详细

K-means算法简介

时间:2016-01-17 01:15:33      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:

  K-means 算法是无监督的 聚类算法,算法简单,有效。

K-means算法:

输入参数:

  指定聚类数目 k,训练集 X

输出 :

  k 个聚类

算法描述:

  K-means 算法 是一个 迭代算法,每次迭代分成两个步骤:

    1)指定聚类步骤:

      计算每个样本到 k 个 聚类中心的 距离,将样本归类到 距离 聚类中心 最小的那个类别

    2)移动聚类中心步骤:

      根据每个聚类所拥有的样本点,重新计算每个聚类的中心

 

伪代码描述:

  随机初始化 k 个聚类的 中心 u(1), u(2)... u(k)

  repeat {

    for i = 1 to m # 假设有m 个样本

      c(i) = 聚类中心 离 X(i) 最近的那个聚类的下标索引 #(1,2... k)

    for i = 1 to k # k 个类别

      u(i) =  属于 i 聚类所有 点的 平均值,即 中心  

  } 

  注意:停止条件可以自己设定,比如 归类不再发生变化,或者最多 N次迭代 等

 

K-means算法 = 优化问题:

  K-means的优化目标:

    J(c(1), c(2)...c(m), u(1), u(2)...u(k)) = 1/2 * sum( ||x(i) - uc(i) || ^2)

    min J

 

  对应到算法:

    1)指定聚类步骤时,保持聚类中心不变,通过改变每个样本所属聚类来最小化 J;

    2)移动聚类中心步骤时,通过移动调整聚类中心 来 最小化 J。

    

K-means算法存在问题:

  往往K-means算法的解空间存在多个满足 J 局部最小值,因此K-means算法得到的解,很有可能只是满足 J 局部最小的那个解,而不是全局最小的那个解。

 

一种避免方案:

  运行 K-means 算法 n 次,比如 n = 100 次,每次 都是 随机初始化 k 个 聚类中心, 然后迭代最后收敛得到 k 个 聚类。

  最后,依此计算 这 n 次 J 值,选择 J 值 最小那次 得到的 k 个 聚类

 

如何选择 k?:

  计算 J 随着 k 数目变化 而 如何变化,k = 1, 2 .. 

  如果选择的 k 是 发生比较明显转折的那个点,就叫做 elbow method

 

K-means算法简介

标签:

原文地址:http://www.cnblogs.com/simplelovecs/p/5136686.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!