【机器学习基础】机器学习入门核心算法:K均值(K-Means)

在这里插入图片描述

机器学习入门核心算法:K均值(K-Means)

    • 1. 算法逻辑
    • 2. 算法原理与数学推导
        • 2.1 目标函数
        • 2.2 数学推导
        • 2.3 时间复杂度
    • 3. 模型评估
        • 内部评估指标
        • 外部评估指标(需真实标签)
    • 4. 应用案例
        • 4.1 客户细分
        • 4.2 图像压缩
        • 4.3 文档聚类
    • 5. 面试题及答案
    • 6. 优缺点分析
        • **优点**:
        • **缺点**:
    • 7. 数学证明:为什么均值最小化WCSS?

1. 算法逻辑

K均值是一种无监督聚类算法,核心目标是将n个数据点划分为k个簇(cluster),使得同一簇内数据点相似度高,不同簇间差异大。算法流程如下:

graph TDA[初始化K个质心] --> B[分配数据点到最近质心]B --> C[重新计算质心位置]C --> D{质心是否变化?}D -- 是 --> BD -- 否 --> E[输出聚类结果]

2. 算法原理与数学推导

2.1 目标函数

最小化簇内平方和(Within-Cluster Sum of Squares, WCSS):
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 \mu_i μi 表示第i个簇的质心
  • ∥ x − μ i ∥ \|x - \mu_i\| xμi 表示欧氏距离
2.2 数学推导

步骤1:初始化质心
随机选择k个数据点作为初始质心:
μ 1 ( 0 ) , μ 2 ( 0 ) , . . . , μ k ( 0 ) 其中 μ j ( 0 ) ∈ R d \mu_1^{(0)}, \mu_2^{(0)}, ..., \mu_k^{(0)} \quad \text{其中} \mu_j^{(0)} \in \mathbb{R}^d μ1(0),μ2(0),...,μk(0)其中μj(0)Rd

步骤2:分配数据点
对每个数据点 x i x_i xi,计算到所有质心的距离,分配到最近质心的簇:
C j ( t ) = { x i : ∥ x i − μ j ( t ) ∥ 2 ≤ ∥ x i − μ l ( t ) ∥ 2 ∀ l } C_j^{(t)} = \{ x_i : \|x_i - \mu_j^{(t)}\|^2 \leq \|x_i - \mu_l^{(t)}\|^2 \ \forall l \} Cj(t)={xi:xiμj(t)2xiμl(t)2 l}

步骤3:更新质心
重新计算每个簇的均值作为新质心:
μ j ( t + 1 ) = 1 ∣ C j ( t ) ∣ ∑ x i ∈ C j ( t ) x i \mu_j^{(t+1)} = \frac{1}{|C_j^{(t)}|} \sum_{x_i \in C_j^{(t)}} x_i μj(t+1)=Cj(t)1xiCj(t)xi

步骤4:收敛条件
当满足以下任一条件时停止迭代:
∥ μ j ( t + 1 ) − μ j ( t ) ∥ < ϵ 或 J ( t ) − J ( t + 1 ) < δ \|\mu_j^{(t+1)} - \mu_j^{(t)}\| < \epsilon \quad \text{或} \quad J^{(t)} - J^{(t+1)} < \delta μj(t+1)μj(t)<ϵJ(t)J(t+1)<δ

2.3 时间复杂度
  • 每次迭代: O ( k n d ) O(knd) O(knd)
  • 总复杂度: O ( t k n d ) O(tknd) O(tknd)
    其中k=簇数,n=样本数,d=特征维度,t=迭代次数

3. 模型评估

内部评估指标
  1. 轮廓系数(Silhouette Coefficient)
    s ( i ) = b ( i ) − a ( i ) max ⁡ { a ( i ) , b ( i ) } s(i) = \frac{b(i) - a(i)}{\max\{a(i), b(i)\}} s(i)=max{a(i),b(i)}b(i)a(i)

    • a ( i ) a(i) a(i):样本i到同簇其他点的平均距离
    • b ( i ) b(i) b(i):样本i到最近其他簇的平均距离
    • 取值范围:[-1, 1],越大越好
  2. 戴维森堡丁指数(Davies-Bouldin Index)
    D B = 1 k ∑ i = 1 k max ⁡ j ≠ i ( σ i + σ j d ( μ i , μ j ) ) DB = \frac{1}{k} \sum_{i=1}^k \max_{j \neq i} \left( \frac{\sigma_i + \sigma_j}{d(\mu_i, \mu_j)} \right) DB=k1i=1kj=imax(d(μi,μj)σi+σj)

    • σ i \sigma_i σi:簇i内平均距离
    • d ( μ i , μ j ) d(\mu_i, \mu_j) d(μi,μj):簇中心距离
    • 取值越小越好
外部评估指标(需真实标签)
  • 调整兰德指数(Adjusted Rand Index)
  • Fowlkes-Mallows 指数
  • 互信息(Mutual Information)

4. 应用案例

4.1 客户细分
  • 场景:电商用户行为分析
  • 特征:购买频率、客单价、浏览时长
  • 结果:识别高价值客户群(K=5),营销转化率提升23%
4.2 图像压缩
  • 原理:将像素颜色聚类为K种代表色
  • 步骤
    1. 将图像视为RGB点集(n=像素数,d=3)
    2. 设置K=256(256色图像)
    3. 用簇中心颜色代替原始像素
  • 效果:文件大小减少85%且视觉质量可接受
4.3 文档聚类
  • 场景:新闻主题分类
  • 特征:TF-IDF向量(d≈10,000)
  • 挑战:高维稀疏数据需先降维(PCA/t-SNE)

5. 面试题及答案

Q1:K均值对初始质心敏感,如何改进?
A:采用K-means++初始化:

  1. 随机选第一个质心
  2. 后续质心以概率 D ( x ) 2 / ∑ D ( x ) 2 D(x)^2 / \sum D(x)^2 D(x)2/D(x)2选择
    D ( x ) D(x) D(x)为点到最近质心的距离)

Q2:如何确定最佳K值?
A:常用方法:

  • 肘部法则(Elbow Method):绘制K与WCSS曲线,选拐点
    from sklearn.cluster import KMeans
    distortions = []
    for k in range(1,10):kmeans = KMeans(n_clusters=k)kmeans.fit(X)distortions.append(kmeans.inertia_)
    
  • 轮廓系数法:选择使平均轮廓系数最大的K

Q3:K均值能否处理非凸数据?
A:不能。K均值假设簇是凸形且各向同性。解决方案:

  • 使用谱聚类(Spectral Clustering)
  • 或DBSCAN等基于密度的算法

6. 优缺点分析

优点
  1. 简单高效:时间复杂度线性增长,适合大规模数据
  2. 可解释性强:簇中心代表原型特征
  3. 易于实现:核心代码仅需10行
    def k_means(X, k):centroids = X[np.random.choice(len(X), k)]while True:labels = np.argmin(np.linalg.norm(X[:,None]-centroids, axis=2), axis=1)new_centroids = np.array([X[labels==j].mean(0) for j in range(k)])if np.allclose(centroids, new_centroids): breakcentroids = new_centroidsreturn labels, centroids
    
缺点
  1. 需预先指定K值:实际应用中K常未知
  2. 对异常值敏感:均值易受极端值影响
  3. 仅适用于数值数据:需对类别变量编码
  4. 局部最优问题:不同初始化可能产生不同结果
  5. 假设各向同性:在细长簇或流形数据上效果差

7. 数学证明:为什么均值最小化WCSS?

给定簇 C j C_j Cj,优化目标:
min ⁡ μ j ∑ x i ∈ C j ∥ x i − μ j ∥ 2 \min_{\mu_j} \sum_{x_i \in C_j} \|x_i - \mu_j\|^2 μjminxiCjxiμj2
求导并令导数为零:
∂ ∂ μ j ∑ ∥ x i − μ j ∥ 2 = − 2 ∑ ( x i − μ j ) = 0 \frac{\partial}{\partial \mu_j} \sum \|x_i - \mu_j\|^2 = -2 \sum (x_i - \mu_j) = 0 μjxiμj2=2(xiμj)=0
解得:
μ j = 1 ∣ C j ∣ ∑ x i \mu_j = \frac{1}{|C_j|} \sum x_i μj=Cj1xi
证毕:均值是簇内平方和的最优解。


💡 关键洞察:K均值本质是期望最大化(EM)算法的特例:

  • E步:固定质心,分配数据点(期望)
  • M步:固定分配,更新质心(最大化)

实际应用时建议:

  1. 数据标准化:消除量纲影响
  2. 多次运行:取最佳结果(n_init=10
  3. 结合PCA降维:处理高维数据
  4. 对分类型数据用K-mode变种

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

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

相关文章

springboot多模块父pom打包正常,单模块报错

背景&#xff1a;因为项目开发中经常发测试环境&#xff0c;发现使用阿里的插件能一键上传&#xff0c;不用手动上传比较方便。但是多模块有多个启动jar的时候&#xff0c;全局打包太慢&#xff0c;单独打发现报错。这里贴一下我使用这个插件的方式&#xff1a; 附带一个我感觉…

通义灵码2.5——基于MCP打造我的12306火车票智能查询小助手

前沿技术应用全景图 本项目作为通义灵码2.5的标杆实践案例&#xff0c;展现了AI辅助开发在复杂业务系统中的革命性突破。通过深度集成12306 MCP服务体系&#xff0c;我们构建了一个融合智能决策、环境感知和自主优化的新一代火车票查询系统。 #mermaid-svg-4D7QqwJjsQRdKVP7 {…

进程间通信(共享内存)

目录 前置&#xff1a; 一 原理 二 API 1. shmgetr 2. shmctl 3. 指令操作 2. 删除 3. 挂接 4. 断开挂接 三 demo代码 四 共享内存的特征 前置&#xff1a; 1.前面说的不管是匿名管道还是命名管道都是基于文件的思想构建的一套进程间通信的方案&#xff0c;那有没有…

详解GPU

详解GPU GPU&#xff08;图形处理器&#xff09;就像电脑里的 “图形小能手”&#xff0c;原本主要用来画画&#xff08;渲染图形&#xff09;&#xff0c;现在还能帮忙干很多杂活&#xff08;并行计算&#xff09; 一、先认识 GPU 的 “钥匙”&#xff1a;驱动和开发工具 装驱…

体育遇上AI:解读新一代智能阅读产品

在信息过载的今天&#xff0c;体育迷们时常面对这样的困扰&#xff1a;如何从海量赛事新闻、数据分析和深度评论中高效获取自己真正关心的内容&#xff1f;体育AI阅读产品正成为解决这一痛点的关键钥匙——它融合人工智能技术与体育内容生态&#xff0c;为球迷提供智能化、个性…

外网访问可视化工具 Grafana (Linux版本)

Grafana 是一款强大的可视化监控指标的展示工具&#xff0c;可以将不同的数据源数据以图形化的方式展示&#xff0c;不仅通用而且非常美观。它支持多种数据源&#xff0c;如 prometheus 等&#xff0c;也可以通过插件和 API 进行扩展以满足各种需求。 本文将详细介绍如何在本地…

Java开发经验——阿里巴巴编码规范实践解析4

摘要 本文主要介绍了阿里巴巴编码规范中关于日志处理的相关实践解析。强调了使用日志框架&#xff08;如 SLF4J、JCL&#xff09;而非直接使用日志系统&#xff08;如 Log4j、Logback&#xff09;的 API 的重要性&#xff0c;包括解耦日志实现、统一日志调用方式等好处。同时&…

各个链接集合

golang学习&#xff5e;&#xff5e;_从数组中取一个相同大小的slice有成本吗?-CSDN博客 框架 golang学习&#xff5e;&#xff5e;_从数组中取一个相同大小的slice有成本吗?-CSDN博客 golang k8s学习_容器化部署和传统部署区别-CSDN博客 K8S rabbitmq_rabbitmq 广播-CSD…

Cesium 展示——获取鼠标移动、点击位置的几种方法

文章目录 需求分析:这里我们用到了几种常见的鼠标事件1. 获取鼠标移动的位置2. 获取鼠标点击的位置3. 添加面4. 示例代码需求 获取指定断面的 label 分析:这里我们用到了几种常见的鼠标事件 1. 获取鼠标移动的位置 viewer.screenSpaceEventHandler.setInputAction((moveme…

技术分享 | Oracle SQL优化案例一则

本文为墨天轮数据库管理服务团队第70期技术分享&#xff0c;内容原创&#xff0c;作者为技术顾问马奕璇&#xff0c;如需转载请联系小墨&#xff08;VX&#xff1a;modb666&#xff09;并注明来源。 一、问题概述 开发人员反映有条跑批语句在测试环境执行了很久都没结束&…

$3 #12阶段三小结Java se

$3 #12 阶段三小结 Java se 基本没有新学什么知识点 感觉 基础语法 和高级语法 已经学完了 现在就是得学习 一些企业开发的框架 以及项目架构的思维 比如一个产品 从需求分析 到功能模块设计 到接口文档定义 数据库建立 前端接口页面设计 后端接口开发的步骤 然后现在比…

华为云Flexus+DeepSeek征文 | 初探华为云ModelArts Studio:部署DeepSeek-V3/R1商用服务的详细步骤

华为云FlexusDeepSeek征文 | 初探华为云ModelArts Studio&#xff1a;部署DeepSeek-V3/R1商用服务的详细步骤 前言一、华为云ModelArts Studio平台介绍1.1 ModelArts Studio介绍1.2 ModelArts Studio主要特点1.3 ModelArts Studio使用场景1.4 ModelArts Studio产品架构 二、访问…

易经六十四卦象解释数据集分享!智能体知识库收集~

今天给大家分享一个易经六十四卦象解释数据集 &#xff0c;继续来积累AI相关的资料。 六十四卦&#xff0c;记载于《易经》&#xff0c;每一卦的图像均由两个八卦上下组合而成&#xff0c;每一卦各有六个爻。南宋朱熹说&#xff0c;先画八卦于内&#xff0c;后画八卦于外&#…

1 µs = 10⁻⁶ s

1 s 10⁰ s 1 ms 10⁻ s 1 s 10⁻⁶ s 1 ns 10⁻⁹ s 1 ps 10⁻ s 1 fs 10⁻⁵ s ⏱️ 时间单位&#xff08;十进制&#xff09; 符号单位名称10 的幂次s秒&#xff08;second&#xff09;10⁰ms毫秒&#xff08;millisecond&#xff09;10⁻s微秒&#xff08;microseco…

webrtc初了解

1. webrtc的简介 一、WebRTC 是什么&#xff1f; Web Real-Time Communication&#xff08;网页实时通信&#xff09;&#xff0c;是浏览器原生支持的实时音视频通信技术&#xff0c;无需安装插件或客户端&#xff0c;可直接在浏览器之间实现点对点&#xff08;P2P&#xff09…

从数据持久化到网络通信与OpenCV:Qt应用程序开发的深度探索与实战

文章目录 前言一、QSettings&#xff1a;轻量级数据持久化方案1.1 QSettings 主要特点1.2 QSettings 常用函数整理 二、数据库2.1 连接SQLite数据库2.2 建表2.3 增删改 三、网络编程3.1 网络分层3.2 IP地址3.3 端口号3.4 基于TCP的Socket通信3.4 相关接口3.4.1核心类3.4.2 通信…

经典SQL查询问题的练习第一天

首先有三张表&#xff0c;学生表、课程表、成绩表 student:studentId,studentName; course:courseId&#xff0c;courseName,teacher; score:score,studentId,courseId; 接着有以下几道题目&#xff1a; ①查询课程编号为‘0006’的总成绩&#xff1a; 首先总成绩&#x…

企业级网络管理实战:Linux、云与容器的深度融合与优化

在数字化转型浪潮下&#xff0c;企业网络架构日益复杂&#xff0c;Linux系统、云计算与容器技术成为构建高效、灵活网络的核心要素。本文将从技术原理、实践方案、优化策略三个维度&#xff0c;深度解析企业级网络管理中的关键技术&#xff0c;助力企业打造稳定、安全、可扩展的…

信号与系统速成-1.绪论

b站浙大教授虽然讲的比较细&#xff0c;但是太慢了&#xff0c;不适合速成 祖师爷奥本海姆的MIT课程好像和我们教材的版本不太匹配&#xff0c;但是讲的很不错 慕课上也有很多资源&#xff0c;比如信号与系统 - 网易云课堂 同站博主篱笆外的xixi的文章也挺不错 最终我还是选…

缓存架构方案:Caffeine + Redis 双层缓存架构深度解析

在高并发、低延迟的现代互联网系统中&#xff0c;缓存是提升系统性能和稳定性的重要手段。随着业务复杂度的增长&#xff0c;单一缓存方案&#xff08;如仅使用Redis或仅使用本地缓存&#xff09;已难以满足高性能与一致性需求。 本文将围绕 Caffeine Redis 的双层缓存架构展…