1. 什么是K-means算法
K-means算法是一种常用的无监督学习算法,在聚类分析中广泛应用。其基本思想是将n个对象划分为k个类,使得同一类内的对象相似度最大,不同类间的对象相似度最小。
2. K-means算法的基本步骤
2.1 初始聚类中心的选择
在K-means算法中,需要事先确定要聚类的类别个数k,然后从n个对象中随机选取k个作为初始的聚类中心。
2.2 对象与聚类中心的分配
对于每个对象,计算其与每个聚类中心的距离,并将其分配到与其距离最近的聚类中心所属的类别中。
2.3 聚类中心的更新
根据当前的类别划分,重新计算每个类别中对象的平均值,作为新的聚类中心。
2.4 重复步骤2.2和2.3,直到满足停止条件。
停止条件通常包括两种:一种是聚类中心不再改变;另一种是达到最大迭代次数。
3. K-means算法的Python实现
3.1 导入必要的库
import numpy as np
from sklearn.cluster import KMeans
我们需要导入numpy库用于处理数组,以及sklearn库的KMeans类用于实现K-means算法。
3.2 生成数据集
# 生成随机数据
data = np.random.rand(100, 2)
我们首先生成了一个随机数据集,包括100个样本,每个样本有两个属性。
3.3 构建并训练K-means模型
# 构建K-means模型
kmeans_model = KMeans(n_clusters=3)
# 训练模型
kmeans_model.fit(data)
我们通过KMeans类构建了一个包含3个聚类中心的K-means模型,并使用fit方法对数据进行训练。
3.4 获取聚类结果
# 获取聚类结果
labels = kmeans_model.labels_
centers = kmeans_model.cluster_centers_
通过labels_属性可以获取每个对象所属的类别,而通过cluster_centers_属性可以获取聚类中心的坐标。
3.5 可视化聚类结果
# 可视化聚类结果
import matplotlib.pyplot as plt
plt.scatter(data[:, 0], data[:, 1], c=labels)
plt.scatter(centers[:, 0], centers[:, 1], marker='*', s=200, c='r')
plt.show()
最后,我们可以使用matplotlib库将数据集和聚类中心的结果可视化展示出来。
4. 总结
本文对K-means算法的基础知识点进行了介绍,并给出了Python中实现K-means算法的示例代码,包括数据集的生成、模型的构建与训练、聚类结果的获取以及可视化展示。K-means算法是一种简单而有效的聚类方法,在实际应用中具有广泛的应用价值。