Python中K-means算法的实现步骤详解


在数据科学和机器学习领域,聚类分析是一种重要的无监督学习方法,它能够帮助我们发现数据中的自然分组结构,K-means算法作为最经典、最广泛使用的聚类算法之一,以其简单高效而著称,本文将详细介绍如何在Python中实现K-means算法,旨在为数据科学家和机器学习爱好者提供实用的指导。

Python中的K-means算法怎么实现?

K-means算法概述

K-means算法的核心思想是将数据集划分为预设的K个簇,每个簇由其质心(即簇内所有点的平均值)代表,算法通过迭代地将数据点分配给最近的质心,并重新计算质心位置,直到达到收敛条件(通常是质心位置不再显著变化或达到最大迭代次数),这一过程旨在最小化簇内距离平方和,也就是惯性(inertia)。

Python实现K-means的步骤

准备数据集

确保你的环境中已安装numpyscikit-learn库,这两个是进行K-means聚类分析的基础工具,你可以从文件或数据库中加载数据,这里为了示例,我们将使用scikit-learn内置的数据集生成器创建一些随机数据。

from sklearn.datasets import make_blobs
import numpy as np
# 生成模拟数据
X, _ = make_blob s( #(此处应更正为)make_blobs
    n_samples=300,  # 样本数量
    n_features=2,   # 特征数量
    centers=4,      # 聚类中心数量
    cluster_std=0.60, # 标准差
    random_state=0
)

(更正说明:make_blob s 应为 make_blobs,以下按照正确代码继续)

应用K-means算法

使用scikit-learnKMeans类可以轻松实现K-means算法,你需要指定簇的数量(n_clusters)和其他可选参数,如最大迭代次数、初始质心选择方法等。

from sklearn.cluster import KMeans
# 初始化KMeans实例
kmeans = KMeans(n_clusters=4)
# 拟合模型
kmeans.fit(X)
# 获取聚类结果
labels = kmeans.labels_
centers = kmeans.cluster_centers_

分析结果

聚类完成后,你可以通过访问labels_属性获取每个数据点所属的簇标签,通过cluster_centers_属性获取各簇的质心坐标,评估聚类效果常用的指标有轮廓系数、Calinski-Harabasz指数等,scikit-learn也提供了相应的计算函数。

from sklearn.metrics import silhouette_score
# 计算轮廓系数
score = silhouette_score(X, labels)
print(f"轮廓系数: {score:.2f}")

可视化聚类结果

为了直观地理解聚类效果,你可以使用matplotlib等库将数据点和质心可视化。

import matplotlib.pyplot as plt
plt.scatter(X[:, 0], X[:, 1], c=labels, s=50, cmap='viridis')
plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.75, marker='X')'K-means Clustering')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()

通过上述步骤,我们成功地在Python中实现了K-means算法,并对模拟数据进行了聚类分析,K-means算法因其简洁性和高效性,在市场细分、图像分割、文档分类等多个领域有着广泛的应用,值得注意的是,K-means对初始质心的选择敏感,且假设簇为凸形且大小相近,这些局限性意味着在特定情况下可能需要考虑其他聚类算法,掌握K-means算法的实现和应用是数据科学家必备的技能之一。

未经允许不得转载! 作者:python1991知识网,转载或复制请以超链接形式并注明出处Python1991知识网

原文地址:https://www.python1991.cn/5868.html发布于:2026-05-09