K-means算法分析-提高聚类性能

K-means算法分析

     在上一篇博客中,通过python代码实现了k-means算法,但k-means算法还有如下问题值得思考:

  • k值如何选取
    在该算法中簇的数目(类别数)k是由用户指定的参数,如何才能知道k的选取是否合理呢?
    方法:可以多尝试几个K值,看分成几类的结果更好解释,更符合分析目的。也可以把各种K值算出的SSE做比较,取最小的SSE的K值。
  • 初试k个质心如何选取
    在之前实现的过程中,是通过随机的方式选择的,但是有时候也会存在问题:虽然收敛但是聚类效果不好。即收敛到了局部最小值,而不是全局最小值,只达到了局部最优。这就是初始化质心没做好,如下图:

在这里插入图片描述
方法:为了克服该算法收敛于局部最小值的问题,有人提出了二分k-means(bisecting K-means)算法。这个算法首先将所有点作为一个簇,然后把这个簇一分为二。再选择其中一个簇继续进行划分,选择哪一个簇继续进行划分取决于对其划分是否可以最大程度降低SSE的值。该划分过程一直重复,直至划分的簇的数目与用户指定的簇数目k相等。
关于二分k-means(bisecting K-means)算法的代码实现将单独写在一篇博文中。

度量聚类效果指标—SSE

SSE(Sum of Squared Error),即误差平方和。SSE值越小表示数据点越接近于其质心,聚类效果也越好。
SSE是每个点到自身所归属质心的距离的平方和,即上一篇博客中clusterAssment矩阵的第二列平方之和。
所以我们知道,提高聚类性能就是要想办法减小SSE的值。若生成的簇聚类效果不好,我们可以对其结果进行再处理,将具有最大SSE值的簇划分成两个簇(将最大簇包含的点过滤出来并在这些点上执行k-means算法,将k设为2)。这么做,总的簇的数目会增加,为了保持总的簇的数目不变,需要将某两个簇进行合并。合并的方法:可以合并最近的质心(需要计算所有质心之间的距离,再合并距离最近的两个点);可以合并两个使SSE值增加最少的质心(需要合并两个簇后计算总的SSE,但是要在所有可能的两个簇上进行合并操作,然后找到合并后使总的SSE最小的两个簇合并)。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值