机器学习(7)——K均值聚类

文章目录

  • [1. K均值(K-means)聚类是什么算法?](#1. K均值(K-means)聚类是什么算法?)
  • [2. 核心思想](#2. 核心思想)
  • [2. 数学目标](#2. 数学目标)
  • [3. 算法步骤](#3. 算法步骤)
    • [3.1. 选择K个初始质心:](#3.1. 选择K个初始质心:)
    • 3.2.迭代优化
    • [3.3. 重复步骤2和步骤3:](#3.3. 重复步骤2和步骤3:)
  • [4. 关键参数](#4. 关键参数)
  • [5. 优缺点](#5. 优缺点)
  • [6. 改进变种](#6. 改进变种)
  • [7. K值选择方法](#7. K值选择方法)
  • [8. Python示例](#8. Python示例)
  • [9. 应用场景](#9. 应用场景)
  • [10. 注意事项](#10. 注意事项)
  • [11. 数学推导(质心更新)](#11. 数学推导(质心更新))
  • [12. 总结](#12. 总结)

1. K均值(K-means)聚类是什么算法?

K均值(K-means)聚类算法是一种广泛使用的无监督学习算法,用于将数据集分成多个簇(clusters)。每个簇代表数据集中的一种内在结构,其中簇内的数据点相似度较高,而簇与簇之间的相似度较低。K均值算法的目标是最小化簇内数据点的平方误差(即簇内的方差)

2. 核心思想

K均值是一种无监督学习算法,用于将数据划分为K个簇(Cluster),目标是最小化簇内样本的平方误差和(Sum of Squared Errors, SSE)。其核心思想是:

簇内相似度高:同一簇的样本尽可能接近。

簇间相似度低:不同簇的样本尽可能远离。

2. 数学目标

最小化损失函数(SSE):
J = ∑ i = 1 K ∑ x ∈ C i ∥ x − μ i ∥ 2 J = \sum_{i=1}^{K} \sum_{x \in C_i} \|x - \mu_i\|^2 J=i=1∑Kx∈Ci∑∥x−μi∥2

  • C i C_i Ci:第 i i i个簇。
  • μ i μ_i μi:第 i i i 个簇的中心点(质心)。
  • ∥ x − μ i ∥ 2 \|x - \mu_i\|^2 ∥x−μi∥2:样本 x x x到质心的欧氏距离平方。

3. 算法步骤

3.1. 选择K个初始质心:

  • 随机选择K个数据点作为初始质心 μ 1 , μ 2 , ... , μ K μ_1,μ_2,...,μ_K μ1,μ2,...,μK。

3.2.迭代优化

  • 分配步骤(Assignment) : 分配每个数据点到最近的质心
    • 对于数据集中的每一个点,计算它与K个质心的距离,并将该点分配到距离其最近的质心所对应的簇。
    • C i = { x : ∥ x − μ i ∥ 2 ≤ ∥ x − μ j ∥ 2 , ∀ j } C_i = \{x : \|x - \mu_i\|^2 \leq \|x - \mu_j\|^2, \forall j\} Ci={x:∥x−μi∥2≤∥x−μj∥2,∀j}
  • 更新步骤(Update) :重新计算质心
    • 计算每个簇中所有点的均值,将该均值作为新的质心。
    • μ i = 1 ∣ C i ∣ ∑ x ∈ C i x \mu_i = \frac{1}{|C_i|} \sum_{x \in C_i} x μi=∣Ci∣1x∈Ci∑x

3.3. 重复步骤2和步骤3:

  • 迭代分配数据点并更新质心,直到质心不再变化或者变化非常小(通常有设定的最大迭代次数或者误差容忍度)

4. 关键参数

  • K值(簇数量):需预先指定,可通过肘部法则(Elbow Method)或轮廓系数(Silhouette Score)选择。

  • 初始化方法:

    • 随机初始化(可能陷入局部最优)。

    • K-Means++(优化初始质心选择,默认方法)。

  • 距离度量:通常用欧氏距离,也可用曼哈顿距离等。

5. 优缺点

  • ✅ 优点:

    • 简单高效:时间复杂度 O ( n ⋅ K ⋅ d ⋅ t ) O(n⋅K⋅d⋅t) O(n⋅K⋅d⋅t),其中 n n n 是样本数, d d d 是特征维度, t t t是迭代次数。

    • 可扩展性强:适合大规模数据。

    • 解释性强:簇中心可直接表示簇特征。

  • ❌ 缺点:

    • 需预先指定K值。

    • 对初始质心敏感(可能收敛到局部最优)。

    • 仅适用于凸形簇(对非球形簇效果差)。

    • 对噪声和异常值敏感。

6. 改进变种

  • K-Means++:优化初始质心选择,减少局部最优风险。

  • Mini-Batch K-Means:用数据子集加速计算,适合大数据。

  • K-Medoids(PAM):用实际样本点(而非均值)作为中心,对噪声更鲁棒。

  • Fuzzy C-Means:允许样本属于多个簇(软聚类)。

7. K值选择方法

  • 肘部法则(Elbow Method):

    • 绘制不同K值对应的SSE曲线,选择拐点(SSE下降变缓处)
python 复制代码
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

sse = []
for k in range(1, 10):
    kmeans = KMeans(n_clusters=k).fit(X)
    sse.append(kmeans.inertia_)
plt.plot(range(1, 10), sse, marker='o')
plt.xlabel('K')
plt.ylabel('SSE')
plt.show()
  • 轮廓系数(Silhouette Score):

    • 衡量样本与同簇和其他簇的相似度,值越接近1表示聚类越好。
python 复制代码
from sklearn.metrics import silhouette_score
scores = []
for k in range(2, 10):
    kmeans = KMeans(n_clusters=k).fit(X)
    scores.append(silhouette_score(X, kmeans.labels_))
plt.plot(range(2, 10), scores, marker='o')

8. Python示例

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, random_state=42)

# 训练K-Means(K=4)
kmeans = KMeans(n_clusters=4, init='k-means++', random_state=42)
kmeans.fit(X)
labels = kmeans.labels_
centers = kmeans.cluster_centers_

# 可视化
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.scatter(centers[:, 0], centers[:, 1], c='red', marker='X', s=200)
plt.title("K-Means Clustering")
plt.show()

9. 应用场景

  • 客户分群(如电商用户细分)。

  • 图像压缩(用簇中心代表颜色)。

  • 异常检测(远离簇中心的样本可能是异常值)。

  • 文本聚类(如新闻主题分类)。

10. 注意事项

  • 数据标准化:K均值对特征尺度敏感,需标准化(如StandardScaler)。

  • 处理异常值:可用K-Medoids或DBSCAN替代。

  • 非凸簇问题:尝试谱聚类或高斯混合模型(GMM)。

11. 数学推导(质心更新)

质心 μ i μ_i μi的更新是损失函数
J J J 的最小化过程:
∂ J ∂ μ i = − 2 ∑ x ∈ C i ( x − μ i ) = 0    ⟹    μ i = 1 ∣ C i ∣ ∑ x ∈ C i x \frac{\partial J}{\partial \mu_i} = -2 \sum_{x \in C_i} (x - \mu_i) = 0 \implies \mu_i = \frac{1}{|C_i|} \sum_{x \in C_i} x ∂μi∂J=−2x∈Ci∑(x−μi)=0⟹μi=∣Ci∣1x∈Ci∑x

12. 总结

K均值是聚类任务的基础算法,核心在于迭代优化质心位置。尽管有局限性(如需预设K值),但其高效性和易实现性使其在实践中广泛应用。改进方法(如K-Means++)和评估技巧(肘部法则)可进一步提升效果。

相关推荐
极客学术工坊1 天前
2022年第十二届MathorCup高校数学建模挑战赛-D题 移动通信网络站址规划和区域聚类问题
机器学习·数学建模·启发式算法·聚类
领航猿1号1 天前
Pytorch 内存布局优化:Contiguous Memory
人工智能·pytorch·深度学习·机器学习
hakuii1 天前
SVD分解后的各个矩阵的深层理解
人工智能·机器学习·矩阵
这张生成的图像能检测吗1 天前
(论文速读)基于图像堆栈的低频超宽带SAR叶簇隐蔽目标变化检测
图像处理·人工智能·深度学习·机器学习·信号处理·雷达·变化检测
Blossom.1181 天前
大模型在边缘计算中的部署挑战与优化策略
人工智能·python·算法·机器学习·边缘计算·pygame·tornado
无风听海1 天前
神经网络之奇异值分解
神经网络·线性代数·机器学习
MicroTech20251 天前
微算法科技(NASDAQ MLGO)采用动态层次管理和位置聚类技术,修改pBFT算法以提高私有区块链网络运行效率
科技·算法·聚类
HelloRevit1 天前
机器学习、深度学习、大模型 是什么关系?
人工智能·深度学习·机器学习
woshihonghonga1 天前
Dropout提升模型泛化能力【动手学深度学习:PyTorch版 4.6 暂退法】
人工智能·pytorch·python·深度学习·机器学习
机器学习ing.1 天前
Vision Transformer(ViT)保姆级教程:从原理到CIFAR-10实战(PyTorch)!
人工智能·深度学习·机器学习