K-均值聚类算法的原理与实现
聚类是一种无监督的学习,它将相似的对象归到同一个簇中,聚类方法几乎可以应用于所有对象,簇内的对象越相似,聚类的效果越好,本文主要介绍K-均值聚类的算法,之所以称之为K-均值是因为它可以发现k个不同的簇,并且每个簇的中心采用簇中所含的值的均值计算而成
K-均值聚类算法
- 优点:容易实现。
- 缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢
- 适用数据类型:数据型数据
k-均值是发现给定数据集的k个簇的算法,簇个数是由用户给定的,每一个簇通过质心(centroid),即簇中所有店的中心来描述。
k-均值算法的工作流程是这样的,首先,随机确定k个初始点作为质心。然后将数据集中的每个点分配到一个簇中,具体来说,为每个点找其最近的质心,并将其分配给质心所对应的簇,这一步完成后,每个簇的质心更新为该簇所有点的平均值。
上述过程的伪代码表示如下:
创建k个作为起始质心(通常是随机选择)
当任意一个点的簇分配结果发生改变时
对数据集中的每个数据点
对每个质心
计算质心与数据点之间的距离
将数据点分配到距离其最近的簇
对每一个簇,计算簇中所有点的均值并将均值作为质心
k-均值聚类的一般流程
- 收集数据:使用任意方法
- 准备数据:需要数据型数据来计算距离,也可以将标称型数据映射为二值型数据再用于距离计算。
- 分析数据:使用任意方法。
- 训练算法:不适用于无监督学习,即无监督学习没有训练过程。
- 测试算法:应用聚类算法,观察结果。可以使用量化的误差指标如误差平方和来评价算法的结果。
- 使用算法:可以用于所希望的任何应用,通常情况下,簇质心可以代表整个簇的数据来做出决策
上面提到的“最近”质心的说法,意味着需要进行某种距离计算,可以选择任意距离度量方法。这里我们选择利用欧式距离进行度量。数据集上的k-均值算法的性能会受到所选距离计算方法的影响。下面给出k-均值算法的代码实现,首先创建一个名为kMeans.py