用Python进行机器学习(4)K-Means算法

📅 发布时间:2026/8/30 19:05:56
用Python进行机器学习(4)K-Means算法 K-Means算法即K均值算法, 它属于一种经典的聚类算法, 何为聚类算法呢, 就是将数据集中样本划分成若干组, 这里的组又被称作簇, 英文名是。聚类算法是一种无监督学习技术, 故而它无需给数据打标签, 完全依据数据自身的特征来进行分组的。最早于1956年被给出的算法是K-Means算法, 在1967年首次有了“K-Means”这个名称的确定, 很容易造成初学者将KNN和K-Means弄混淆的情况, 这里针对两者的不同来做一下解释:首先, KNN属于监督学习算法, 因而它要借助训练数据预先进行打标签这一操作, 然而, K-Means是依据数据自身所具备的特征去自动开展分类工作的, 它归属于无监督学习算法, 进而, 它是不需要提前进行打标签的。首先, 第二点, KNN常常被运用在分类以及回归方面, 它属于聚类算法, 但是并且, 其所能够抵达的效果也全然不一样, 存在差异。首先, 第三点, KNN里的K, 属于数据周边的K个数据, 其次, K - Means当中的K, 是用于将数据划分成K个簇, 然后, 尽管这两种算法都存在K, 然而, K的意义全然不一样。然后介绍下K-Means算法的基本流程一开始, 随机去初始化K个中心点, 当然这K个中心点不会彼此距离太近, 不然可就很难开展聚类操作了。第二步, 距离概念在此处涉及, 要将每一数据点分配至离其最近的中心点, 如此最初的簇便形成了, 此处所涉及的距离和KNN算法里的距离是同一回事, 例如可选择曼哈顿距离, 或者欧氏距离, 又或者切比雪夫距离等。首先是第三步, 要对每个簇的中心点重新进行计算, 而这个中心点又被叫做质心, 在此处, 乃是借助求均值的操作来达成的, 这也正好就是K-Means中的Means这个名字的由来。瞧, 请来看有一个具体的范例, 比如说, 好像我们打算要去得到四个簇, 接着这里具有 300 个样本, 那么此时我们便能够去使用如同下面这样子的代码:import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import make_blobs from sklearn.cluster import KMeans # 生成示例数据 X, y make_blobs( n_samples300, # 样本数量 centers4, # 簇的数量 cluster_std0.60, # 簇的标准差 random_state0 # 随机种子 ) # 创建 KMeans 模型并拟合数据 kmeans KMeans(n_clusters4, initk-means, max_iter300, n_init10, random_state0) # 训练模型并预测每个样本所属的簇 pred_y kmeans.fit_predict(X) # 可视化聚类结果 plt.scatter(X[:, 0], X[:, 1], cpred_y, s50, cmapviridis) # 绘制聚类中心 plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s200, cred, alpha0.7, labelCluster Centers) plt.title(K-Means Clustering) plt.xlabel(feature 1) plt.ylabel(feature 2) plt.legend() plt.show()因为核心功能全都标注有注释,因而此处便不再阐述代码的用途了。能够瞧见我们生成了四个簇, 那些簇依靠不同颜色展开区分, 并且运用红色对簇的中心予以标明, 情况如下:鉴于K-Means无需预先给数据打标签, 故而它颇适用于大规模数据, 并且其可解释性颇为突出, 毕竟簇的中心即为特征代表, 正因如此该算法适于譬如客户分群、图像分割、异常检测等场景。