当前位置: 首页 > news >正文

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

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

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


一、K 均值算法的核心思想

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

二、K 均值算法的步骤

  1. 初始化

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

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

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

    • 重复步骤 2 和步骤 3,直到簇中心不再变化或达到最大迭代次数。

三、K 均值算法的示例

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

数据点X 坐标Y 坐标
A11
B12
C21
D88
E98
F99

步骤 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 均值算法的优缺点

优点:

  1. 简单高效:算法原理简单,计算速度快。
  2. 可扩展性强:适合大规模数据集。
  3. 结果直观:簇中心可以直观地表示每个簇的特征。

缺点:

  1. 需要预先指定 K 值:K 值的选择对结果影响较大。
  2. 对初始簇中心敏感:初始簇中心的选择可能影响最终结果。
  3. 对噪声和离群点敏感:噪声数据可能导致簇中心偏移。
  4. 只能处理凸数据集:对于非凸形状的数据集,效果可能不理想。

五、K 均值算法的改进

  1. K-Means++:优化初始簇中心的选择,减少对初始值的依赖。
  2. Mini-Batch K-Means:使用数据集的子集进行迭代,适合大规模数据集。
  3. Elbow Method(肘部法):通过绘制 SSE(误差平方和)与 K 值的关系图,选择最佳的 K 值。
  4. 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 值选择来提高聚类效果。

相关文章:

  • 嵌入式开发:磁通门传感器开发(4):自然环境中的磁场
  • Pycharm配置ROS开发环境
  • 《Docker 核心概念揭秘:如何让软件开发像烹饪一样简单》
  • 【前端进阶】14 提升编程体验:组件化与模块化
  • 随机选择文件,向后写入文件内容
  • 04_DeepLearning_SVM
  • day3作业
  • 队列的顺序结构—循环队列的判断条件(rear + 1) % MAXSIZE分析
  • intra-mart实现logicDesigner与forma联动
  • AI编程工具-(四)
  • 五种经典算法路径规划—遗传算法、麻雀算法、狼群优化、粒子群算法、差分进化算法(Matlab源码)
  • IO进程线程2
  • maven高级-05.私服
  • 从零开始实现机器臂仿真(UR5)
  • 计算机毕业设计SpringBoot+Vue.js医院挂号就诊系统(源码+文档+PPT+讲解)
  • 【Azure 架构师学习笔记】- Azure Databricks (15) --Delta Lake 和Data Lake
  • Python-07PDF转Word
  • SpringCloud系列教程(十二):网关配置动态路由
  • Netty笔记3:NIO编程
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)示例2: 分页和排序
  • 如何做网站滚动屏幕/google官方下载安装
  • 做网站加入广告联盟/查排名的网站
  • 有什么做ppt的网站吗/社群营销策略有哪些
  • 定制网站多少钱/今天重大新闻头条新闻军事
  • 企业营销微网站建设/百度网站排名搜行者seo
  • 网站建设网页制作教程/网络推广平台有哪些