最近在学习K-means算法,在GitHub上找了一个源代码自己敲看看。
引用别人的话来解释K-means的思想:
K-means是一种将输入数据划分成k个簇的聚类算法。K-means反复提炼
初始评估的类的中心,步骤如下:
- 以随机或猜想的方式初始化类中心Ui:i= 1....K
- 将所有的数据点归并到离它距离最近的类中心所属的类ci
- 对所有属于该类的数据点求平均,将平均值作为新的类中心
- 重复步骤2,3直到收敛(判断依据是中心点变化的差值大小)
对于算法的实现,是我们建立一个聚类算法对象,我们需要不断的用到2,3步骤的操作,可以将其写成一个方法,来供我们一直调用。
- 步骤2可以写一个
assign_to_cluster()
函数 - 步骤3可以写一个
compute_mean()
函数 - 除此之外,我们还得对步骤1进行实现,可以由一个函数
initial_means()
完成,但是要生成K个随机点中心,我们可以再用一个next_mean_center()
函数来生成一个中心点 - 这样我们就需要四个函数,完成数据处理,但是我们需要一个类似主函数的方法,来实现整个流程的控制。
- 展示数据方面,我们也需要对聚类对象的数据进行打印,如打印其中心点集合
print_mean()
还有打印各个类的元素的函数print_clusters()
最后附上github上的源码:github源码