python kmeans聚类_python机器学习之k-means聚类算法(1)

k-means算法是一种无监督的机器学习算法,虽然是机器学习,但它简单易于实现。本篇采用python语言,自主编程实现k-menas算法,当然python用专门的库函数来实现该算法,但本次主要使用该算法阐述编程思想,所以不采用内置函数。采用自主编写的程序的方式。

k-means算法思想原理

本篇同样重在实现,所以对于原理简单介绍。该算法的思想很简单,通过计算数据点到聚类中心的距离来分类。什么是聚类中心呢?其实就是随机产生的一些点(这些点可以是数据点中的点,也可以不是)。

1

如上图,同颜色为一类,三角形为聚类中心。聚类中心开始时,是随机选取的。图中其他所有点到那个点的距离最近就会被归为那一类。所以可见分类情况,当然分类结果并不理想,这时会计算每一类的质点(就是均值点(avg(x),avg(y))。然后将均值点作为聚类中心再次分类,如下图所示:

2

这是可以发现效果明显优于第一次的聚类,但很明显还不是最好的结果,再次计算新分类的质点,并将它作为新的聚类中心,再次分类,结果如下:

3

这时候结果已经很好了,当质点位置变化不大时寻找新质点分类的过程就会结束。或者可以自己限定质点的寻找次数。以上就是其原理了。

几点说明

通过算法的思想叙述可以发现,开始聚类中心的选择,以及分类的类数是该算法的一个难题,当数据非常大,并且分类并非十分明显的时候,如何确定分为几类,以及初始聚类中心的选择将会十分重要,这部分会在后续完善,在本篇不做太多叙述。

1.点之间的距离计算,以及均值计算问题。点之间的距离计算采用欧式距离(两点间距离公式)或者其他距离都可以。2.质点(聚类中心的计算),就是该类中所有点x的均值,和所有点y的均值的点(多维的话,就是每个维度的平均值构成的点)。

代码实现

首先我们做一个算法的流程图:

算法步骤

根据该流程,我们应该现实现一个随机产生k个聚类中心的功能

随机产生分类中心

那么我们还应该有一个读取数据文件的操作,我们也用一个函数实现。

读入数据

我们将这两个功能组合一下,第一个步骤就完成了。

步骤一:初始聚类中心

步骤2,我们需要有这样两个功能,计算每个点到各个聚类中心的距离、根据计算的距离分类。计算每个点到各个聚类中心的距离我们简化成两个步骤,现实现一个计算两点之间的距离的功能,在实现一个计算各个点到聚类中心的距离的功能。

计算两点距离

在计算每个点到聚类中心点的时候我们采取的计算顺序是用第1个点到聚类中心1,第1个点到聚类中心2,……,第1个点到聚类中心n,第2个点到聚类中心1,第1个点到聚类中心2,……,这样的顺序依次进行的。

计算各个点到聚类中心的距离

接下来实现分类的功能:

实现分类

这样第2个步骤的所有内容就都完成了,我们将所有的功能串联起来,如下:

步骤2的功能实现

步骤3,计算新的聚类中心点,这一步基于我们分类的数据集cal,可以很简单的实现:

产生新的聚类中心

步骤4,我们需要一个设置一个阈值来确定,迭代何时结束。并且这个步骤就是要融合上如步骤2和步骤3的功能,所以完全可以把这个最后的步骤写成整个函数的主函数了。在写主函数之前我们还有写一个画图函数,让我们的每次分类过程能够展现出来,画图功能如下:

绘图函数

主函数

导入的python库

结果zhan'shi

以上代码呢基本上就完成了k-means算法的实现了,还有一个损失函数的计算,在这里不在体现代码的编写,最后依旧附上代码讲解视频。

04:57

最后如果需要源程序的可以评论留下邮箱或者信息!如果对你有用,望多加支持。谢谢!

你可能感兴趣的:(python,kmeans聚类)