K-means聚类算法
来源:互联网 发布:淘宝优惠券如何领取 编辑:程序博客网 时间:2024/06/05 09:53
最近我正在学习Stanford公开课Andrew Ng老师讲的Machine Learning(ML)课程,受益匪浅。下面附上视频教程以及课后作业的链接:(https://class.coursera.org/ml/class/index)这几天对K-means聚类算法进行了学习,并在此做一个小结,第一是希望以后能养成及时总结的好习惯,第二是想能给和我一样刚刚入门机器学习的同行人(小伙伴们)一点点启迪和帮助,共同进步。
--------------------------------------话不多说,进入正题-------------------------------------------------------
K-means算法属于非监督学习(Unsupervised Learning)的范畴。所谓非监督学习,简单来说就是给的数据集没有标签y(监督学习就是给的数据集有标签y),还有PCA、一些deep learning也属于非监督学习。K-means的算法如下图所示:
K-means算法有两个核心的部分:
1 cluster assignment,也就是上图的第一个for循环的内容,它的作用是分别计算数据集中的点x(i)(共m个数据点)与所有种子点(共K个)的欧氏距离,若与第k个种子点的欧氏距离最小则x(i)被分为第k类,即c(i)=k;
2 move centroids,也就是上图第二个for循环的内容,它的作用是聚完类后计算某类中所有数据点的平均值,并把种子点移到这个平均值对应的位置上成为新的中心点;
重复上面两个步骤直到最大迭代次数。
和监督学习一样,K-means算法也可以计算代价函数,即cost function J(distortion function)。
它主要有两个作用:
1 观察算法是否工作正常。代价函数J的变量有两大类:c(1)...c(m)和u1...uK。当执行第一个for循环的时候需要固定u1...uK,改变c(1)...c(m)使得J的值降低;当执行第二个for循环的时候需要固定c(1)...c(m)改变u1...uK的值。和监督学习不同,由于没有收到学习率这一参数的影响,J值会持续下降(监督学习的学习率如果设置的过大可能会使得J上升);如果出现有上升的情况,说明代码出现了bug,所以可以用来观察算法是否工作正常。
2 避免局部最优(help avoid local optima)。我们一般从数据点中随机选取种子点。由于随机初始化种子点不同会使得最终的收敛结果不同,导致得不到最好的收敛结果,代价函数J可以帮助避免局部最优。具体方法如下:
我们采用一种叫Multiple random initialization的方法,就是多次随机初始化种子点来进行聚类算法(一般50-1000次),收敛后计算代价函数J找到最小值即被认作是全局最优解。但是这种方法只对K=2-10有效果,当K值较大时效果不是很明显。
K-means聚类算法简单快速,时间复杂度近于线性——O(mKt)——其中m代表数据点的个数,K代表聚类的种类,t代表迭代的次数,适合挖掘大规模数据集。但是缺点也同样明显:
1 K值是事先选定的,实际中有时候会难以估计。有一个简单的方法叫Elbow-method,就是画出K值与代价函数J所对应的曲线,找出elbow点对应的K值;还有就是根据实际需求和经验来确定K值,如衣服的尺码等。
2 当数据量非常大时算法的时间开销会非常大。
3 随机初始化种子点会对聚类结果有较大影响。有一种优化方案是K-means++算法,它的核心思想其实就是让种子点的距离尽可能的远。下面附上算法介绍的链接:http://blog.csdn.net/b_h_l/article/details/12751675
----------------------------------------下面是课后作业的代码,如有错误欢迎指出--------------------------------
上面两个图是核心部分两个for循环对应的代码,下图是k-means++的源码(注意载入数据时与上面不同,上面的X矩阵的行向量是数据的特征,这里x矩阵列向量是数据的特征)
- k-means聚类算法
- k-means聚类算法
- K-means聚类算法
- K-means聚类算法
- K-means聚类算法
- K-means聚类算法
- K-means聚类算法
- K-means聚类算法
- K-MEANS聚类算法
- k-means聚类算法
- K-means聚类算法
- 聚类算法 K-means
- K-means聚类算法
- K-means聚类算法
- K-means聚类算法
- 聚类算法:K-means
- K-means聚类算法
- K-means聚类算法
- 【扫盲贴】浅谈38K红外发射接受编码
- JSP/SERVLET入门教程--Servlet 使用入门
- 随笔 2015 7 20
- sun.jnu.encoding
- 玩转iOS 9的UIDynamics
- K-means聚类算法
- OSI七层网络参考模型
- hibernate学习之路——hello word
- Oracle的触发器
- 1009 数字1的数量
- 机器学习算法与Python实践之(三)支持向量机(SVM)进阶
- Remove Element
- Problem A: Median Value
- 【leetcode】Product of Array Except Self