原理解析
今天,我们来讲一下Kmeans,一种无监督聚类算法,也是最为经典的基于划分的聚类方法,它的思想是:对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。
实现流程如下:
1、先确定数据集聚类个数k;
2、在数据集中随机选取k个数据,作为初始质心;
3、计算数据集中每个样本到每个质心的距离,把样本划分到
距离最小的质心所属的类别;
4、根据聚类结果,重新计算质心,当本次计算的质心与上一次质心完全一样(或者收敛)时,停止迭代;
否则更新质心,继续执行步骤2、3、4。
流程比较简单,这里要说的是注意几个问题:
1、步骤1确定数据集聚类个数k,很显然,当数据集D是高维数据时,没办法很快确定合适的k;
2、步骤2随机选取数据作为初始质心,可以想象,当质心之间距离很近的时候,将需要迭代很多次,会影响收敛速度,甚至不能收敛,只能得到局部最小值;
3、步骤3中计算距离,我们应该想到,距离受到量纲的影响,在使用时,需要考虑一下标准化;
然后就是基于所有样本,因此会对异常数据比较敏感;
4、当数据集很大时,计算的时间复杂度很高。
可见优化的点很多(优化部分我们明天再写,今天只实现最基础的Kmeans)。