K-Means聚类算法与Python实现

需积分: 5 1 下载量 109 浏览量 更新于2024-10-25 收藏 11KB ZIP 举报
资源摘要信息:"K-Means聚类算法+python" K-Means聚类算法是一种常用的无监督学习算法,主要应用于数据挖掘领域中的数据聚类分析,其目的是将数据集中的样本点按照其特征划分为若干个类别,使得同一类别内的样本点尽可能相似,而不同类别之间的样本点差异较大。该算法的核心思想是通过迭代的方式不断调整每个类别质心的位置,直至满足预设的停止条件,从而得到较为稳定的聚类结果。 K-Means算法的基本步骤如下: 1. 首先随机选择k个初始点作为聚类中心(质心)。 2. 然后根据每个样本点到各个质心的距离将其分配到最近的质心所代表的类别中。 3. 接着更新每个类别的质心位置,即将同一类别中所有样本点的特征值求平均,得到新的质心。 4. 重复步骤2和3,直到质心位置不再发生变化或变化小于某个阈值,或者达到最大迭代次数,算法停止。 K-Means算法的优缺点如下: 优点: - 简单易懂,实现起来方便快捷。 - 收敛速度相对较快,特别适合处理大数据集。 - 对于处理球形或圆形的簇效果较好。 缺点: - 需要预先指定类别数目k,而实际应用中往往很难预先确定一个合适的k值。 - 对异常值敏感,异常值可以显著影响质心位置,从而影响聚类结果。 - 只适用于数值型数据,对非数值型数据需要进行转换或编码。 - 算法容易收敛至局部最优解,可能需要多次运行以获得最优的聚类结果。 在Python中实现K-Means算法,我们通常会使用到`sklearn`库中的`KMeans`类。`sklearn`即Scikit-learn,是一个开源的机器学习库,提供了大量用于数据挖掘和数据分析的工具。使用`sklearn`可以很方便地调用K-Means算法,并且`sklearn`中的`KMeans`类支持多种参数设置,如初始化质心的方法、迭代次数、评估聚类效果的指标等。 以下是使用Python的`sklearn`库实现K-Means聚类算法的一个简单示例代码(对应文件KMeans_demo.py): ```python from sklearn.cluster import KMeans import numpy as np # 创建一个简单的数据集,这里以二维数据为例 X = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]]) # 实例化KMeans对象,指定聚类数目为2 kmeans = KMeans(n_clusters=2) # 使用fit方法进行模型训练 kmeans.fit(X) # 打印每个样本点所属的类别 print(kmeans.labels_) # 打印每个类别的质心位置 print(kmeans.cluster_centers_) # 使用predict方法预测新的样本点所属的类别 new_samples = np.array([[0, 0], [12, 3]]) print(kmeans.predict(new_samples)) ``` 在上述代码中,我们首先导入`sklearn.cluster`模块下的`KMeans`类和`numpy`模块。然后创建了一个简单的二维数据集`X`。接下来实例化一个`KMeans`对象,并指定聚类数目为2。通过调用`fit`方法,算法会在数据集`X`上进行训练,并根据样本点与质心的距离分配类别。最后,我们打印出每个样本点所属的类别标签、每个类别的质心位置,以及对新的样本点进行类别预测的结果。 K-Means聚类算法由于其简洁性和实用性,在很多实际场景中都有应用,如市场细分、社交网络分析、图像分割、文档聚类等。掌握K-Means算法对于数据科学家和机器学习工程师来说是一个非常重要的技能。通过结合Python和`sklearn`库,我们能够高效地实现并应用K-Means算法来解决各种数据挖掘问题。