您的位置:首页 > 其它

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: