K-means聚类算法(非MapReduce实现)
来源:互联网 发布:泡泡堂 for mac 编辑:程序博客网 时间:2024/05/01 09:09
援引:http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006910.html
1.概念
k-means 算法接受输入量 k ;然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。
2.一般介绍
聚类属于无监督学习,以往的回归、朴素贝叶斯、SVM等都是有类别标签y的,也就是说样例中已经给出了样例的分类。而聚类的样本中却没有给定y,只有特征x,比如假设宇宙中的星星可以表示成三维空间中的点集。聚类的目的是找到每个样本x潜在的类别y,并将同类别y的样本x放在一起。比如上面的星星,聚类后结果是一个个星团,星团里面的点相互距离比较近,星团间的星星距离就比较远了。
在聚类问题中,给我们的训练样本是,每个,没有了y。
K-means算法是将样本聚类成k个簇(cluster),具体算法描述如下:
1、 随机选取k个聚类质心点(cluster centroids)为。
2、 重复下面过程直到收敛 {
对于每一个样例i,计算其应该属于的类
对于每一个类j,重新计算该类的质心
}
K是我们事先给定的聚类数,代表样例i与k个类中距离最近的那个类,的值是1到k中的一个。质心代表我们对属于同一个类的样本中心点的猜测,拿星团模型来解释就是要将所有的星星聚成k个星团,首先随机选取k个宇宙中的点(或者k个星星)作为k个星团的质心,然后第一步对于每一个星星计算其到k个质心中每一个的距离,然后选取距离最近的那个星团作为,这样经过第一步每一个星星都有了所属的星团;第二步对于每一个星团,重新计算它的质心(对里面所有的星星坐标求平均)。重复迭代第一步和第二步直到质心不变或者变化很小。
下图展示了对n个样本点进行K-means聚类的效果,这里k取2。
K-means面对的第一个问题是如何保证收敛,前面的算法中强调结束条件就是收敛,可以证明的是K-means完全可以保证收敛性。下面我们定性的描述一下收敛性,我们定义畸变函数(distortion function)如下:
J函数表示每个样本点到其质心的距离平方和。K-means是要将J调整到最小。假设当前J没有达到最小值,那么首先可以固定每个类的质心,调整每个样例的所属的类别来让J函数减少,同样,固定,调整每个类的质心也可以使J减小。这两个过程就是内循环中使J单调递减的过程。当J递减到最小时,和c也同时收敛。(在理论上,可以有多组不同的和c值能够使得J取得最小值,但这种现象实际上很少见)。
由于畸变函数J是非凸函数,意味着我们不能保证取得的最小值是全局最小值,也就是说k-means对质心初始位置的选取比较感冒,但一般情况下k-means达到的局部最优已经满足需求。但如果你怕陷入局部最优,那么可以选取不同的初始值跑多遍k-means,然后取其中最小的J对应的和c输出
- K-means聚类算法(非MapReduce实现)
- K-means聚类算法(非MapReduce实现)
- 使用MapReduce实现k-means算法
- Matlab实现k-means聚类算法
- K-Means聚类算法 --Matlab实现
- 【JAVA实现】K-means聚类算法
- 聚类算法-K-means-C++实现
- K-Means聚类算法java实现
- Python实现K-Means聚类算法
- K-Means聚类算法的实现
- k-means聚类算法python实现
- MapReduce 实现k-means聚类
- k-means的MapReduce实现
- 基于MapReduce实现并行化K-means算法
- 基于MapReduce框架的K-means算法实现
- 用java实现K-means算法,k-means聚类算法原理
- K-means算法实现
- K-means算法实现
- java枚举类型
- 打开word2007提示“无法初始化Visual basic环境”
- mahout下的Canopy Clustering实现
- Matlab中提高m文件执行效率的小技巧
- 菜鸟看“电商”
- K-means聚类算法(非MapReduce实现)
- libxml2 tutorial
- memmove的实现
- 消除51系統控制继电器上电瞬间吸和抖动问题(初探,未尝试)
- LibGdx--GearJoint齿轮关节
- js cookie读写
- 把n个同样的苹果放在m个同样的盘子里
- IOS app启动动画的实现
- ProtocolBuffer for Objective-C 运行环境配置