机器学习(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++)和评估技巧(肘部法则)可进一步提升效果。

相关推荐
小墙程序员3 小时前
机器学习入门(二)线性回归
机器学习
追逐☞4 小时前
机器学习(9)——随机森林
人工智能·随机森林·机器学习
云天徽上6 小时前
【数据可视化-28】2017-2025 年每月产品零售价数据可视化分析
机器学习·信息可视化·数据挖掘·数据分析·零售
硅谷秋水6 小时前
CoT-Drive:利用 LLM 和思维链提示实现自动驾驶的高效运动预测
人工智能·机器学习·语言模型·自动驾驶
IT古董7 小时前
【漫话机器学习系列】214.停用词(Stop Words)
人工智能·机器学习
云天徽上8 小时前
【数据可视化-27】全球网络安全威胁数据可视化分析(2015-2024)
人工智能·安全·web安全·机器学习·信息可视化·数据分析
硅谷秋水8 小时前
ORION:通过视觉-语言指令动作生成的一个整体端到端自动驾驶框架
人工智能·深度学习·机器学习·计算机视觉·语言模型·自动驾驶
小墙程序员8 小时前
机器学习入门(一)什么是机器学习
机器学习
豆芽8199 小时前
强化学习(Reinforcement Learning, RL)和深度学习(Deep Learning, DL)
人工智能·深度学习·机器学习·强化学习