K-Means 算法详解

K-Means 算法详解

K-Means 是一种流行的聚类算法,用于将数据划分为预定数量的簇(clusters)。

K-Means 算法的基本步骤

1. 初始化

  • 随机选择 k k k 个数据点作为初始质心(centroids)。

2. 分配数据点

  • 将每个数据点分配到最近的质心,形成 k k k 个簇。

3. 更新质心

  • 对于每个簇,计算所有数据点的均值,并将该均值作为新的质心。

4. 迭代

  • 重复步骤 2 和 3 直到满足停止条件(如质心不再显著变化或达到最大迭代次数)。

数学原理

1. 距离度量

  • 通常使用欧氏距离来度量数据点与质心之间的距离:

    Distance = ∑ i = 1 n ( x i − y i ) 2 \text{Distance} = \sqrt{\sum_{i=1}^{n} (x_i - y_i)^2} Distance=i=1∑n(xi−yi)2

    其中 x i x_i xi 和 y i y_i yi 是两点在第 i i i 维的坐标。

2. 目标函数

  • K-Means 的目标是最小化所有簇内数据点与其质心的距离之和:

    J = ∑ j = 1 k ∑ i = 1 n j ∣ ∣ x i ( j ) − c j ∣ ∣ 2 J = \sum_{j=1}^{k} \sum_{i=1}^{n_j} ||x_i^{(j)} - c_j||^2 J=j=1∑ki=1∑nj∣∣xi(j)−cj∣∣2

    其中 n j n_j nj 是第 j j j 个簇中的数据点数, x i ( j ) x_i^{(j)} xi(j) 是簇 j j j 中的第 i i i 个数据点, c j c_j cj 是簇 j j j 的质心。

代码

python 复制代码
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt

# 生成模拟数据
X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)

# 创建KMeans实例
kmeans = KMeans(n_clusters=4)

# 训练模型
kmeans.fit(X)

# 预测簇标签
y_kmeans = kmeans.predict(X)

# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=50, cmap='viridis')
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='black', s=200, alpha=0.5)
plt.title("K-Means Clustering")
plt.show()

在这个示例中,我们首先生成了一组模拟数据,然后创建了一个KMeans实例并指定簇的数量。接着,我们训练了模型并预测了每个数据点的簇标签。最后,我们使用Matplotlib可视化了聚类

K-Means 与 C-Means 的区别

K-Means

  • 硬聚类方法,每个数据点只属于一个簇。
  • 使用欧氏距离作为距离度量。
  • 更简单和快速。

C-Means(模糊C-Means)

  • 软聚类方法,每个数据点以一定程度属于所有簇。
  • 数据点对簇的隶属度是模糊的,由隶属函数给出。
  • 更适用于簇的边界不清晰的情况。

C-Means 为数据点提供了更多的灵活性,允许它们以不同程度属于多个簇,这在一些应用中可能更为合适。

相关推荐
成都易yisdong16 小时前
高程异常计算器:一款集成Geoid、重力场与地磁场的专业工具
算法
王老师青少年编程16 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【反悔贪心】:种树
c++·算法·贪心·反悔贪心·csp·信奥赛·种树
南宫萧幕16 小时前
基于 PSO 的 HEV 能量管理策略:从联合仿真建模到排错实战
开发语言·python·算法·matlab·控制
Mr数据杨16 小时前
埃姆斯住宅房价预测与自动化估值建模
运维·机器学习·数据分析·自动化·kaggle
帅次16 小时前
Android AI 面试速刷版
人工智能·深度学习·神经网络·机器学习·语言模型·自然语言处理·数据分析
生物信息与育种16 小时前
全基因组重测序及群体遗传与进化分析技术服务指南
人工智能·深度学习·算法·数据分析·r语言
MediaTea16 小时前
Scikit-learn:preprocessing 模块
人工智能·深度学习·机器学习·计算机视觉·scikit-learn
AI人工智能+电脑小能手16 小时前
【大白话说Java面试题】【Java基础篇】第23题:ConcurrentHashMap的底层原理是什么
java·开发语言·算法·哈希算法·散列表·hash
葳_人生_蕤16 小时前
hot100——回溯和DFS、BFS
算法·深度优先
Eloudy16 小时前
Steane码的稳定子的生成元集计算过程
算法