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

文章目录

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

  • C i C_i Ci:第 i i i个簇。
  • μ i μ_i μi:第 i i i 个簇的中心点(质心)。
  • ∥ x − μ i ∥ 2 \|x - \mu_i\|^2 xμi2:样本 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μi2xμj2,j}
  • 更新步骤(Update):重新计算质心
    • 计算每个簇中所有点的均值,将该均值作为新的质心。
    • μ i = 1 ∣ C i ∣ ∑ x ∈ C i x \mu_i = \frac{1}{|C_i|} \sum_{x \in C_i} x μi=Ci1xCix

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

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

4. 关键参数

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

  • 初始化方法:

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

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

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

5. 优缺点

  • ✅ 优点:

    • 简单高效:时间复杂度 O ( n ⋅ K ⋅ d ⋅ t ) O(n⋅K⋅d⋅t) O(nKdt),其中 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下降变缓处)
from sklearn.cluster import KMeans
import matplotlib.pyplot as pltsse = []
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表示聚类越好。
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示例

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 μiJ=2xCi(xμi)=0μi=Ci1xCix

12. 总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/78094.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爬虫案例-爬取某企数据

文章目录 1、准备要爬取企业名称数据表2、爬取代码3、查看效果 1、准备要爬取企业名称数据表 企业名称绍兴市袍江王新国家庭农场绍兴市郑杜粮油专业合作社绍兴市越城区兴华家庭农场绍兴市越城区锐意家庭农场绍兴市越城区青甸畈家庭农场绍兴市袍江王新国家庭农场绍兴市袍江月明…

足球 AI 智能体技术解析:从数据采集到比赛预测的全链路架构

一、引言 在足球运动数字化转型的浪潮中,AI 智能体正成为理解比赛、预测赛果的核心技术引擎。本文从工程实现角度,深度解析足球 AI 的技术架构,涵盖数据采集、特征工程、模型构建、实时计算到决策支持的全链路技术方案,揭示其背后…

怎么配置一个kubectl客户端访问多个k8s集群

怎么配置一个kubectl客户端访问多个k8s集群 为什么有的客户端用token也访问不了k8s集群,因为有的是把~/.kube/config文件,改为了~/.kube/.config文件,文件设置成隐藏文件了。 按照kubectl的寻找配置的逻辑,kubectl找不到要访问集群…

[QMT量化交易小白入门]-四十六、年化收益率118%的回测参数,如何用贪心算法挑选50个两两相关性最小的ETF组合

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。 QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。 文章目录 相关阅读准备工作安装所需库导入所需模块下载所有ETF数…

几何编码:启用矢量模式地理空间机器学习

在 ML 模型中使用点、线和多边形,将它们编码为捕捉其空间属性的向量。 自地理信息系统 (GIS) 诞生之初,“栅格模式”和“矢量模式”之间就存在着显著的区别。在栅格模式下,数据以值的形式呈现在规则的网格上。这包括任何形式的图像&#xff0…

Leetcode98、230:二叉搜索树——递归学习

什么是二叉搜索树:右子树节点 > 根节点 > 左子树节点, 二叉搜索树中的搜索,返回给定值val所在的树节点 终止条件为传进来的节点为空、或者节点的值 val值,返回这个节点; 单程递归逻辑:定义一个resu…

每天学一个 Linux 命令(30):cut

​​可访问网站查看,视觉品味拉满: http://www.616vip.cn/30/index.html cut 命令用于从文件或输入流中提取文本的特定部分(如列、字符或字节位置)。它常用于处理结构化数据(如 CSV、TSV)或按固定格式分割的文本。以下是详细说明和示例: 命令格式 cut [选项] [文件...]…

Tauri 2.3.1+Leptos 0.7.8开发桌面应用--Sqlite数据库选中数据的表格输出

在前期工作的基础上(Tauri 2.3.1Leptos 0.7.8开发桌面应用--Sqlite数据库的写入、展示和选择删除_tauri leptos sqlite 选择删除-CSDN博客),实现将选中的数据实时用表格展示出来,效果如下: 1. 后台invoke调用命令 Tau…

使用Tauri 2.3.1+Leptos 0.7.8开发桌面小程序汇总

近期断断续续学习了Rust编程,使用Tauri 2.3.1Leptos 0.7.8开发了一个自用的桌面小程序。Win10操作系统,使用VS Code及rust analyzer插件搭建的开发环境,后期开始使用Roo Code绑定DeepSeek API 辅助编程,对我这个初学者编程帮助很大…

考研英一学习笔记

2024 年全国硕士研究生招生考试 英语(一)试题 (科目代码:201) Section Ⅰ Use of English Directions: Read the following text. Choose the best word(s) for each numbered blank and mark A, B, C or D on the ANS…

【技术笔记】Cadence实现Orcad与Allegro软件交互式布局设置

【技术笔记】Cadence实现Orcad与Allegro软件交互式布局设置 更多内容见专栏:【硬件设计遇到了不少问题】、【Cadence从原理图到PCB设计】 在做硬件pcb设计的时候,原理图选中一个元器件,希望可以再PCB中可以直接选中。 为了达到原理图和PCB两两…

卷积神经网络(CNN)详解

文章目录 引言1.卷积神经网络(CNN)的诞生背景2.卷积神经网络(CNN)介绍2.1 什么是卷积神经网络?2.2 卷积神经网络(CNN)的基本特征2.2.1 局部感知(Local Connectivity)2.2.…

8051单片机所有Keil C51汇编伪指令和C语言关键字大全

8051单片机所有Keil C51汇编伪指令和C语言关键字大全 作者将狼才鲸创建日期2025-04-21 CSDN阅读地址:8051单片机所有Keil汇编伪指令和C语言关键字的详细解释 8051单片机所有Keil汇编伪指令和C语言关键字的详细解释,在Keil已安装文件夹D:\Keil_v5\C51\H…

机器视觉的智能手机屏贴合应用

在智能手机制造领域,屏幕贴合工艺堪称"微米级的指尖芭蕾"。作为影响触控灵敏度、显示效果和产品可靠性的关键工序,屏幕贴合精度直接决定了用户体验。传统人工对位方式已无法满足全面屏时代对极窄边框和超高屏占比的严苛要求,而Mast…

运维打铁:网络基础知识

文章目录 一、网络架构1. 网络架构图2. 各层级功能3. 机房网络常见问题及解决方案 二、交换技术1. 交换技术基础2. 交换技术分类3. 广播域相关概念4. ARP 协议5. 三层交换机6. VLAN(虚拟局域网) 三、路由技术1. 路由器端口类型及功能2. 路由器功能3. 路由…

使用C#和FFmpeg开发RTSP视频播放器的完整指南

RTSP(Real Time Streaming Protocol)是流媒体技术中广泛使用的协议,广泛应用于视频监控、视频会议和在线直播等领域。本文将详细介绍如何使用C#和FFmpeg开发一个功能完整的RTSP视频播放器,涵盖从环境搭建到核心功能实现的全部过程。 一、开发环境准备 …

前端基础之《Vue(9)—混入》

一、什么是混入 1、是一种代码复用的技巧 Vue组件是由若干选项组成的,向组件中混入可复用的选项。 2、作用 比如我封装两个组件,一个是A组件,一个是B组件,发现它里面有相同的选项,就可以用混用的方式来复用它。 二、…

Anything V4/V5 模型汇总

​​​​​​二次元风格生成扩散模型-anything-v4.0Stable Diffusion anything-v5-PrtRE模型介绍及使用深度探索 Anything V5:安装与使用全攻略anything-v5x0.25少儿插画_v1xyn-ai/anything-v4.0

一天学完Servlet!!!(万字总结)

文章目录 前言Servlet打印Hello ServletServlet生命周期 HttpServletRequest对象常用api方法请求乱码问题请求转发request域对象 HttpServletResponse对象响应数据响应乱码问题请求重定向请求转发与重定向区别 Cookie对象Cookie的创建与获取Cookie设置到期时间Cookie注意点Cook…