K-means聚类
2016-04-14 09:35
369 查看
参考 http://www.cnblogs.com/jerrylead
聚类就是将样本{x1,x2,...xnx_1,x_2,...x_n}按照属性分类,注意这里样本的表已经不再是(x,y)了,现在只有属性x,因此聚类属于非监督学习法。
K-means聚类,就是将样本分为k类,其思想是:
1、先随机选择k个聚类中心(即随机选择k个样本)
2、将每个样本划分到与它距离最小的中心所属类别
3、根据2划分的结果重新计算k个聚类中心(每个类别中所有样本的均值)转到2,直至收敛
算法描述如下:
上面k表示我们要将样本分为k类,我们有k个聚类中心,μj\mu_j代表第当前迭代中的j个聚类中心。
上图是2个聚类中心的情况,a是原始样本,b中随机选择了两个聚类中心(这里并没有选取样本来初始化,而是任意选择了两个点),cdef是每次迭代逐渐收敛的过程。
下面我们来看看,k-means是否收敛,定义畸变函数:
J(c,μ)=∑i=1m||x(i)−μc(i)||2J(c,\mu)=\sum_{i=1}^m||x^{(i)}-\mu_{c^{(i)}}||^2
可以看出JJ就是每个类别中所有样本x(i)x^{(i)}到聚类中心μc(i)\mu_{c^{(i)}}的方差和。从上面聚类的算法可以看出,整个算法必然导致JJ越来越小,这说明μ,c\mu,c是收敛的。
由于畸变函数 J 是非凸函数,意味着我们不能保证取得的最小值是全局最小值,也就是说 k-means 对质心初始位置的选取比较感冒,但一般情况下 k-means 达到的局部最优已经满足需求。但如果你怕陷入局部最优,那么可以选取不同的初始值跑多遍 k-means,然后取其中使得J(c,μ)J(c,\mu),以该μ\mu作为初始化的聚类中心,最终得到聚类中心c。
聚类就是将样本{x1,x2,...xnx_1,x_2,...x_n}按照属性分类,注意这里样本的表已经不再是(x,y)了,现在只有属性x,因此聚类属于非监督学习法。
K-means聚类,就是将样本分为k类,其思想是:
1、先随机选择k个聚类中心(即随机选择k个样本)
2、将每个样本划分到与它距离最小的中心所属类别
3、根据2划分的结果重新计算k个聚类中心(每个类别中所有样本的均值)转到2,直至收敛
算法描述如下:
上面k表示我们要将样本分为k类,我们有k个聚类中心,μj\mu_j代表第当前迭代中的j个聚类中心。
上图是2个聚类中心的情况,a是原始样本,b中随机选择了两个聚类中心(这里并没有选取样本来初始化,而是任意选择了两个点),cdef是每次迭代逐渐收敛的过程。
下面我们来看看,k-means是否收敛,定义畸变函数:
J(c,μ)=∑i=1m||x(i)−μc(i)||2J(c,\mu)=\sum_{i=1}^m||x^{(i)}-\mu_{c^{(i)}}||^2
可以看出JJ就是每个类别中所有样本x(i)x^{(i)}到聚类中心μc(i)\mu_{c^{(i)}}的方差和。从上面聚类的算法可以看出,整个算法必然导致JJ越来越小,这说明μ,c\mu,c是收敛的。
由于畸变函数 J 是非凸函数,意味着我们不能保证取得的最小值是全局最小值,也就是说 k-means 对质心初始位置的选取比较感冒,但一般情况下 k-means 达到的局部最优已经满足需求。但如果你怕陷入局部最优,那么可以选取不同的初始值跑多遍 k-means,然后取其中使得J(c,μ)J(c,\mu),以该μ\mu作为初始化的聚类中心,最终得到聚类中心c。
相关文章推荐
- Thread中的实例方法
- 基于Java NIO的Socket通信
- vim编辑器
- 本地项目的jsp跳转到另外一个网站或项目的jsp
- Modbus协议的CRC校验码是高位在前还是低位在前的问题
- 一个电脑双显示屏,用于画板子(有待更新)
- oracle判断一个字符串中是否包含另外一个字符串(想要不论顺序或者不相邻的字符)
- 实现loading动画效果
- Sublime Text [Decode error - output not utf-8]
- UISearchController
- 动态分区分配
- ListView上下线添加
- 2016.04.14
- 大鹏乘风起
- Spring MVC 多个视图解析器配置
- 用户管理and权限管理
- SHELL笔记之管家
- 路在脚下
- reveal使用
- 安装LINUX后要怎么找回WIN7启动项?