k-means算法

五迷三道 提交于 2020-01-24 02:07:35

k-means算法为常见的聚类算法。
算法的大致思路为:
首先指定要分多少类(k),然后指定k个类中心点的初始坐标。
线性扫描所有的点,计算其至各中心点的距离,选择最小距离使自己归于此类。然后更新各个类中心点的坐标。
迭代上述步骤直至达到收敛条件。
伪码如下:
在这里插入图片描述
但是,k初始以及中心点坐标初始值的随机选定可能会对结果造成影响。
k初始值我们可以采用手肘法
在这里插入图片描述
(图片取自知乎@是泽哥啊)
取每个点至其所在类中心点的总距离,然后取其拐点(3)。
还可以采用蒙特卡洛模拟,自动取得k值。
解决随机选取中心点的坐标的问题可以采用**k-means++**算法。

但是,每次都要线性扫描所有的比较耗时。
为了提高效率,我们可以采用kd树

kd树即在n维空间(坐标为n维时),以垂直于坐标轴的方法进行空间切分。且切分位置为其坐标的中位数,如下图所示:

kd树为二叉树,初始时,二叉树的根节点为整个坐标空间,然后左右子树为被其切分的两个区域,重复,直到切分到区域中没有坐标点为止。
在这里插入图片描述
在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!