文章内容转载自:http://blog.csdn.net/sinat_35512245/article/details/55051306
http://blog.csdn.net/baimafujinji/article/details/50570824
----------------------------------------------------------------------------------------------------------------------------------------------------
K-means方法是一种非监督学习的算法,它解决的是聚类问题
1、算法简介:K-means方法是聚类中的经典算法,数据挖掘十大经典算法之一;算法接受参数k,然后将事先输入的n个数据对象划分为k个聚类以便使得所获得的聚类满足聚类中的对象相似度较高,而不同聚类中的对象相似度较小。
2、算法思想:以空间中k个点为中心进行聚类,对最靠近他们的对象归类,通过迭代的方法,逐次更新各聚类中心的值,直到得到最好的聚类结果。
3、算法描述:
(1)适当选择c个类的初始中心;
(2)在第k次迭代中,对任意一个样本,求其到c个类的各中心的距离,将该样本归到距离最短的那个中心所在的类(也成为簇);
(3)利用均值等方法更新该类的中心值;
(4)对于所有的C个聚类中心,如果利用(2)(3)的迭代法更新后,值保持不变,则迭代结束;否则继续迭代。
注:对于距离函数和中心类型的某些组合,算法总是收敛到一个解,即K均值到达一种状态,聚类结果和中心都不再改变。但为了避免过度迭代所导致的时间消耗,实践中,也常用一个较弱的条件替换掉“中心不再发生变化”这个条件。例如,使用“直到仅有1%的点改变簇”。
4、算法举例:
详细内容参看:http://blog.csdn.net/sinat_35512245/article/details/55051306
5、优、缺点:
优点:
1、该算法时间复杂度为O(tkmn),(其中,t为迭代次数,k为簇的数目,m为记录数,n为维数)与样本数量线性相关,所以,对于处理大数据集合,该算法非常高效,且伸缩性较好;
2、原理简单,实现容易。
缺点:
1、聚类中心的个数K 需要事先给定,但在实际中这个 K 值的选定是非常难以估计的,很多时候,事先并不知道给定的数据集应该分成多少个类别才最合适;
2、Kmeans需要人为地确定初始聚类中心,不同的初始聚类中心可能导致完全不同的聚类结果。(可以使用K-means++算法来解决);
3、结果不一定是全局最优,只能保证局部最优;
4、对噪声和离群点敏感;
5、该方法不适于发现非凸面形状的簇或大小差别很大的簇;
6、需样本存在均值(限定数据种类)。
6、算法改进
针对上述第2个缺陷,可以使用Kmeans++算法来解决。 k-means++算法选择初始seeds的基本思想就是:初始的聚类中心之间的相互距离要尽可能的远。wiki上对该算法的描述是如下:
- 从输入的数据点集合中随机选择一个点作为第一个聚类中心;
- 对于数据集中的每一个点x,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x);
- 选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大;
- 重复2和3直到k个聚类中心被选出来;
- 利用这k个初始的聚类中心来运行标准的k-means算法。