k-means

简介

K-均值算法的基本思想是首先从含有N个数据对象的数据集中随机选择K个数据对象作为初始中心,然后计算每个数据对象到各中心的距离,根据最近邻原则,所有数据对象将会被划分到离它最近的那个中心所代表的簇中,接着分别计算新生成的各个簇中数据对象的均值作为各簇新的中心,比较新的中心和上一次得到的中心,如果新的中心没有发生变化,则算法收敛,输出结果,如果新的中心和上一次的中心相比发生变化,则要根据新的中心对所有数据对象重新进行划分。直到满足算法的收敛条件为止。

K-means算法的过程可以描述为:
算法:划分并计算基于簇中对象的平均值。 
输入:簇的数目K和包含N个对象的数据。 
输出:平方误差总和最小条件下的K个簇。 
方法:
1) 任意选择K个对象作为初始的簇中心; 
2) 分别计算数据集中每个元素与所选簇的中心计算距离(一般采用欧式距离),根据最近邻原则,将元素划分到相应的簇中; 
3) 计算每个簇中对象的平均值,更新簇的中心; 
4) 重复上面的步骤,直至更新的簇的中心与原簇的中心的差值在预定范围内或者达到预设的迭代次数; 
5) 输出K个簇中心。 

K-means 方法的时间复杂度为O(NKT),N代表总元素个数,K代表簇中心个数,T代表迭代次数。K-means算法是一种硬性划分的聚类,即每个数据点唯一地分配给一个聚类,由于事先不知道实际的聚类情况,因此可能是一种严重的局限。该算法对初始中心的选取非常敏感,初始中心随机选取,导致结果波动较大,稳定性较差。同时该算法对噪声数据和孤立点数据较为敏感。该算法通常采用欧式距离作为数据样本之间的度量方式,导致该算法对球状的簇有比较好的聚类效果,但是很难发现其他形状的簇。

随机初始化

K均值算法执行开始时,通常随机初始化聚类中心点,即:随机选择K个训练实例,然后令K个聚类中心分别等于这K个训练实例。这就使得Kmeans算法存在一个缺陷:最后结果会依赖于初始化的情况,并且有可能使得代价函数停留在局部最小值处。
为了解决该问题,我们通常需要多次(50到1000次)运行K均值算法,每一次都重新进行初始化,最后再比较多次运行K-均值的结果,选择代价函数最小的结果。通常这种方法在K较小的时候(2-10)还是可行的;但是K较大,这么做可能不会有明显的改善,并且K较大时,通常第一次执行K均值也会得到一个不错的结果。

选择聚类数K

没有所谓最好的选择聚类数的方法,通常是需要根据不同的问题,人工的进行选择。但是,当你想要确定最优聚类数K时,有一个值得一试的方法 - “肘部法则(Elbow method)”。该方法所做的就是不断的改变K值(from 1 to x),执行k-均值,然后画出代价函数与K值的变化曲线,选择“肘点处”的值作为K的取值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值