K-means聚类算法详解与Python实现

需积分: 10 4 下载量 123 浏览量 更新于2024-08-05 1 收藏 16KB DOCX 举报
"K-means算法简介及代码过程" K-means算法是一种常见的无监督学习方法,主要用于数据聚类。在机器学习和数据挖掘领域,它因其简单性和效率而被广泛使用。K-means的主要目标是将数据集中的样本点分成K个不同的类别,使得同一类别内的样本点相互接近,而不同类别间的样本点相距较远。 一、算法原理 1. 初始化:首先,我们需要选择K个初始聚类中心。这些中心通常是随机从数据集中选取的。在本例中,K设置为2,意味着我们将数据分为两组。 2. 分配:接着,计算每个样本点到这K个聚类中心的距离,通常使用欧氏距离。将每个样本点分配给最近的聚类中心所在的类别。 3. 更新:基于当前的样本分配,重新计算每个类别的聚类中心。新的聚类中心是该类别内所有样本点的几何中心,即平均值。 4. 迭代:重复步骤2和3,直到满足停止条件。这可能包括聚类中心不再改变,样本点分配不再变动,或者达到预设的最大迭代次数。在实际应用中,通常使用误差平方和(Sum of Squared Errors, SSE)作为优化指标,当SSE达到局部最小值时,算法结束。 二、代码实现 在Python中,我们可以利用scikit-learn库的KMeans类来实现K-means算法。在给定的示例中,创建了一个二维数据集,其中包含20个样本,每个样本有2个特征。通过scikit-learn的KMeans模型,我们能够对数据进行聚类,并将结果可视化。 ```python import numpy as np from sklearn.cluster import KMeans import matplotlib.pyplot as plt # 创建示例数据 X = np.array([...]) # 实例化KMeans模型,设置K=2 kmeans = KMeans(n_clusters=2) # 训练模型并进行预测 result = kmeans.fit_predict(X) # 输出分类结果 print(result) # 设置绘图参数 plt.rcParams['font.family'] = ['sans-serif'] plt.rcParams['font.sans-serif'] = ["SimHei"] # 绘制散点图,不同颜色表示不同类别 plt.scatter(X[:, 0], X[:, 1], c=result) plt.show() ``` 在这个例子中,`fit_predict`函数同时完成了模型的训练和样本的预测,返回的结果`result`是一个整数序列,指示每个样本所属的类别。最后,我们用matplotlib库画出散点图,颜色区分不同的聚类,以便直观地查看聚类效果。 通过调整K值,K-means算法可以用于处理不同数量的类别。然而,它有一些局限性,例如对初始聚类中心敏感,可能会陷入局部最优解,以及对于非凸形状的聚类效果不佳。尽管如此,K-means仍然是实践中常用且实用的聚类工具,尤其适用于大数据集的快速处理。