机器学习之k-means算法
来源:互联网 发布:知乎 爬虫 加载 编辑:程序博客网 时间:2024/05/22 10:26
K-means(k均值)
一、算法分析
K-means(k均值)是基于数据划分的无监督聚类算法,是数据挖掘领域的十大算法之一。样本集预先不知所属类别或标签,需要根据样本之间的距离或相似度来自动进行分类。聚类算法可以分为基于划分的方法、基于联通性的方法、基于密度的方法、基于密度分布模型的方法。K-means是属于基于划分的聚类方法。
基于划分的方法是将样本集组成的矢量空间划分为多个区域,每个区域都存在一个区域相关的表示,通常称为区域中心。对于每个样本,可以建立一种样本到区域中心的映射,其中为指示函数。根据建立的映射q(x),可以将所有的样本分类到相应的中心,得到最终的分类结果。
不同的基于划分的聚类算法的主要区别在于:如何建立相应的映射方式q(x),在经典的k-means聚类算法这两个,映射是通过样本与各中心的误差平方和最小准则来建立的。
算法的步骤为:
二、算法改进
1、聚类中心初始化的改进
K-means对聚类中心的初始化比较敏感,不同的初始值会带来不同的聚类结果,这是因为K-means仅仅是对目标函数的求局部最优解,不能求得全局最优解;改进后的方法为k-means++, 其选择初始seeds的基本思想就是:初始的聚类中心之间的相互距离要尽可能的远。
(1)从输入的数据点集合中随机选择一个点作为第一个聚类中心
(2)对于数据集中的每一个点x,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x)
(3)选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大
(4)重复2和3直到k个聚类中心被选出来
(5)利用这k个初始的聚类中心来运行标准的k-means算法
从上面的算法描述上可以看到,算法的关键是第3步,如何将D(x)反映到点被选择的概率上,一种算法如下:
先从我们的数据库随机挑个随机点当“种子点”对于每个点,我们都计算其和最近的一个“种子点”的距离D(x)并保存在一个数组里,然后把这些距离加起来得到Sum(D(x))。然后,再取一个随机值,用权重的方式来取计算下一个“种子点”。这个算法的实现是,先取一个能落在Sum(D(x))中的随机值Random,然后用Random -= D(x),直到其<=0,此时的点就是下一个“种子点”。重复2和3直到k个聚类中心被选出来
利用这k个初始的聚类中心来运行标准的k-means算法可以看到算法的第三步选取新中心的方法,这样就能保证距离D(x)较大的点,会被选出来作为聚类中心了。至于为什么原因比较简单,如下图 所示:
假设A、B、C、D的D(x)如上图所示,当算法取值Sum(D(x))*random时,该值会以较大的概率落入D(x)较大的区间内,所以对应的点会以较大的概率被选中作为新的聚类中心。
2、类别个数的自适应确定
在经典的k-means算法中,聚类个数k需要预先设定,不具备自适应能力;使用ISODATA算法,引入类别的合并与分开机制。
3、经典的k-means采用二次欧式距离作为相似性度量,在处理非标准正太分布和非均匀样本集合时聚类效果较差。为了有效克服该局限性假设,K-means需要推广到更广义的度量空间,经典的两种改进方法是:KernelK-means和谱聚类方法Specttral Clustering.
(1) Kernel K-means
将样本点通过某种方式映射到新的高维空间,在该空间中样本点之间的内积可以通过相对应的核函数进行计算,即:
借助核函数的存在,可以在新空间进行k-means聚类。
(2)Specttral Clustering
Specttral Clustering尝试着变换样本空间度量,首先需要求取样本集合的仿射矩阵,然后计算仿射矩阵的特征向量,利用得到的特征向量进行k-means聚类。
三、二分K-means聚类
略
四、总结
1、k-means聚类简洁快速,假设均方误差是计算群组分散度的最佳参数,对于满足正态分布的数据聚类效果较好。
2、K-means的性能依赖于聚类中心的初始位置,不能确保收敛于最优解,对孤立点敏感。可以采用一些前端的方法,首先计算出初始聚类中心,或者每次用不同的初始聚类中将该算法运算多次,然后择优确定
3、虽然二分k-means聚类算法改进了k-means的不足,但是他们共同的缺点是必须事先确定K的值,不合适的k返回较差的结果。
4、对于海量数据分析,如何确定k的值,一直都是难题,常用方法是层次聚类。
- 机器学习之K-means算法:深入浅出K-Means算法
- 机器学习算法 之 K-Means聚类
- 机器学习之K-means算法
- 【机器学习算法】之K-means聚类
- 机器学习之k-means算法
- 机器学习算法之K-means-spark
- 机器学习--K-means算法
- 机器学习--K-means算法
- 【机器学习】K-Means算法
- 机器学习:k-means算法
- 机器学习十大算法之K-means算法
- 机器学习之聚类算法/Bisecting K-Means算法
- 机器学习之聚类算法(K-Means)
- 机器学习之K-means算法(Python描述)基础
- 机器学习算法之二:5分钟上手K-Means
- 机器学习之聚类算法k-means
- 机器学习算法小整理之K-means
- 机器学习之K-means聚类算法
- NOIP提高模拟 Binary
- JAVA_Apache_POI操作EXCEL(与第一个sheet相同去重)
- 51Nod-1076-2条不相交的路径
- 2016/8/17 学会学习
- java web整合开发笔记
- 机器学习之k-means算法
- 邮箱验证正则表达式【转载】
- java正则表达式学习
- 多线程问题的总结
- Linux自学笔记(四)注意事项
- 动态规划和贪心算法之背包问题理解
- Spring集成Hessian
- 枚举(又称穷举)
- 九度OJ 1139 最大子矩阵