主页 > 游戏开发  > 

通俗易懂的聚类算法之K均值详解

通俗易懂的聚类算法之K均值详解

K 均值聚类算法(K-Means Clustering) 是一种常用的无监督学习算法,用于将数据集划分为 K 个簇(Cluster)。它的核心思想是通过迭代优化,将数据点分配到最近的簇中心,并更新簇中心,直到簇中心不再变化或达到最大迭代次数。

以下是对 K 均值算法的通俗易懂的详解:


一、K 均值算法的核心思想 目标:将数据集划分为 K 个簇,使得每个数据点都属于离它最近的簇中心。簇中心:每个簇的中心点(质心)是该簇中所有数据点的平均值。距离度量:通常使用欧氏距离(Euclidean Distance)来计算数据点与簇中心的距离。
二、K 均值算法的步骤

初始化:

随机选择 K 个数据点作为初始簇中心。或者使用其他初始化方法(如 K-Means++)来优化初始簇中心的选择。

分配数据点:

对于每个数据点,计算它与所有簇中心的距离。将数据点分配到距离最近的簇中心所属的簇。

更新簇中心:

对于每个簇,重新计算其簇中心(即该簇中所有数据点的平均值)。

迭代:

重复步骤 2 和步骤 3,直到簇中心不再变化或达到最大迭代次数。
三、K 均值算法的示例

假设有以下二维数据集,我们希望将其划分为 2 个簇(K=2):

数据点X 坐标Y 坐标A11B12C21D88E98F99 步骤 1:初始化 随机选择两个数据点作为初始簇中心,例如: 簇中心 1:A (1, 1)簇中心 2:D (8, 8) 步骤 2:分配数据点

计算每个数据点到两个簇中心的距离:

A 到簇中心 1:0,A 到簇中心 2:√(7² + 7²) ≈ 9.9 → A 属于簇 1。B 到簇中心 1:1,B 到簇中心 2:√(7² + 6²) ≈ 9.2 → B 属于簇 1。C 到簇中心 1:1,C 到簇中心 2:√(6² + 7²) ≈ 9.2 → C 属于簇 1。D 到簇中心 1:9.9,D 到簇中心 2:0 → D 属于簇 2。E 到簇中心 1:√(8² + 7²) ≈ 10.6,E 到簇中心 2:1 → E 属于簇 2。F 到簇中心 1:√(8² + 8²) ≈ 11.3,F 到簇中心 2:√(1² + 1²) ≈ 1.4 → F 属于簇 2。

分配结果:

簇 1:A, B, C簇 2:D, E, F 步骤 3:更新簇中心 重新计算簇中心: 簇中心 1:( (1+1+2)/3, (1+2+1)/3 ) = (1.33, 1.33)簇中心 2:( (8+9+9)/3, (8+8+9)/3 ) = (8.67, 8.33) 步骤 4:迭代 重复步骤 2 和步骤 3,直到簇中心不再变化。
四、K 均值算法的优缺点 优点: 简单高效:算法原理简单,计算速度快。可扩展性强:适合大规模数据集。结果直观:簇中心可以直观地表示每个簇的特征。 缺点: 需要预先指定 K 值:K 值的选择对结果影响较大。对初始簇中心敏感:初始簇中心的选择可能影响最终结果。对噪声和离群点敏感:噪声数据可能导致簇中心偏移。只能处理凸数据集:对于非凸形状的数据集,效果可能不理想。
五、K 均值算法的改进 K-Means++:优化初始簇中心的选择,减少对初始值的依赖。Mini-Batch K-Means:使用数据集的子集进行迭代,适合大规模数据集。Elbow Method(肘部法):通过绘制 SSE(误差平方和)与 K 值的关系图,选择最佳的 K 值。DBSCAN:基于密度的聚类算法,适合处理噪声和非凸数据集。
六、K 均值算法的代码实现(Python)

以下是使用 Python 的 scikit-learn 库实现 K 均值算法的示例:

from sklearn.cluster import KMeans import numpy as np # 示例数据 data = np.array([ [1, 1], [1, 2], [2, 1], [8, 8], [9, 8], [9, 9] ]) # 创建 KMeans 模型 kmeans = KMeans(n_clusters=2, random_state=0) # 训练模型 kmeans.fit(data) # 输出结果 print("簇中心:", kmeans.cluster_centers_) print("数据点所属簇:", kmeans.labels_)

输出结果:

簇中心: [[1.33333333 1.33333333] [8.66666667 8.33333333]] 数据点所属簇: [0 0 0 1 1 1]
七、总结 K 均值算法是一种简单高效的聚类算法,适合处理大规模数据集。通过迭代优化,将数据点分配到最近的簇中心,并更新簇中心。需要预先指定 K 值,且对初始簇中心敏感。可以通过改进算法(如 K-Means++)和优化 K 值选择来提高聚类效果。
标签:

通俗易懂的聚类算法之K均值详解由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“通俗易懂的聚类算法之K均值详解