KMeans聚类通过最小化点到簇中心距离平方和将数据划分为K组。使用scikit-learn需安装依赖库,准备数据后选择K值(可用肘部法则),训练模型并可视化结果,注意数据标准化及KMeans对初始值和异常值的敏感性。
在Python中使用KMeans聚类是数据挖掘和机器学习中常见的无监督学习方法,主要用于将数据划分为K个簇。它通过最小化每个点到其所属簇中心的距离平方和来实现聚类。下面介绍如何使用
库中的KMeans进行聚类分析。
1. 安装依赖库
确保已安装必要的库:
pip install scikit-learn numpy matplotlib
2. 基本使用步骤
KMeans聚类的基本流程包括:准备数据、选择簇数K、训练模型、查看结果和可视化。
from sklearn.cluster import KMeansimport numpy as npimport matplotlib.pyplot as plt
示例数据:
立即学习
“
Python免费学习笔记(深入)
”;
# 生成示例数据X = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6],[9, 11], [8, 7], [10, 9], [0.5, 1]])
设置K值并训练模型:
kmeans = KMeans(n_clusters=2, random_state=42)kmeans.fit(X)labels = kmeans.labels_ # 每个样本的类别标签centers = kmeans.cluster_centers_ # 聚类中心
上面代码将数据分为2类,
表示每个点属于哪个簇(0或1),
是两个簇的中心坐标。
Python 3.14.3
微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。
下载
3. 可视化聚类结果
对于二维数据,可以用matplotlib画出聚类效果:
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis', label='Data Points')plt.scatter(centers[:, 0], centers[:, 1], c='red', marker='x', s=200, label='Centroids')plt.legend()plt.title("KMeans Clustering")plt.show()
不同颜色代表不同簇,红色叉号表示聚类中心。
4. 如何选择合适的K值
常用的方法是肘部法则(Elbow Method),通过观察不同K值对应的惯性(inertia,即样本到其簇中心距离的平方和)变化来判断最佳K。
inertias = []K_range = range(1, 6)for k in K_range:km = KMeans(n_clusters=k, randomstate=42)km.fit(X)inertias.append(km.inertia)plt.plot(K_range, inertias, 'bo-', label='Inertia')plt.xlabel('Number of Clusters (k)')plt.ylabel('Inertia')plt.title('Elbow Method')plt.show()
当曲线出现明显“拐点”时,该K值通常较合适。
5. 注意事项
KMeans对初始中心敏感,建议设置
保证结果可复现
数据最好先标准化,特别是各特征量纲差异大时,可用
KMeans假设簇是凸形且大小相近,对非球形或密度差异大的数据效果可能不佳
异常值会影响聚类中心,必要时先做异常检测
基本上就这些。KMeans简单高效,适合初学者上手聚类任务,结合实际业务理解选择K值更重要。不复杂但容易忽略细节。
scikit-learnlabelscentersrandom_stateStandardScaler