机器学习_18 K均值聚类知识点总结

news2025/5/17 15:55:17

K均值聚类(K-means Clustering)是一种经典的无监督学习算法,广泛应用于数据分组、模式识别和降维等领域。它通过将数据划分为K个簇,使得簇内相似度高而簇间相似度低。今天,我们就来深入探讨K均值聚类的原理、实现和应用。

一、K均值聚类的基本概念

1.1 K均值聚类的目标

K均值聚类的目标是将数据集划分为K个簇,使得每个簇内的数据点尽可能接近,而不同簇之间的数据点尽可能远离。具体来说,K均值聚类最小化以下目标函数:

其中,Ck​ 是第k个簇,μk​ 是第k个簇的质心(均值),xi​ 是数据点。

1.2 K均值聚类的工作原理

K均值聚类通过以下步骤实现:

  1. 初始化质心:随机选择K个数据点作为初始质心。

  2. 分配数据点:计算每个数据点与各个质心的距离,将数据点分配到最近的质心所代表的簇。

  3. 更新质心:重新计算每个簇的质心为该簇所有数据点的均值。

  4. 重复步骤2和3:直到质心不再变化或达到预定义的停止条件(如最大迭代次数)。

二、K均值聚类的实现与案例

2.1 Python实现

以下是使用Python和Scikit-Learn库实现K均值聚类的代码示例:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# 创建示例数据
X = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])

# 创建KMeans对象,指定簇的数量为2
kmeans = KMeans(n_clusters=2)

# 对数据进行聚类
kmeans.fit(X)

# 获得每个样本所属的簇标签
labels = kmeans.labels_

# 获得质心的位置
centroids = kmeans.cluster_centers_

# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.scatter(centroids[:, 0], centroids[:, 1], c='red', marker='x', s=200)
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('K-means Clustering')
plt.show()

2.2 案例分析

假设我们有一组数据,记录了用户的购买行为和消费金额。我们希望通过K均值聚类算法将用户分为不同的群体,以便进行针对性的营销。

  • 数据准备:收集用户的购买行为和消费金额等特征。

  • 模型训练:使用K均值聚类算法对数据进行聚类,选择合适的簇数量K。

  • 结果分析:通过可视化和统计分析,了解每个簇的特征和行为模式。

  • 应用:根据不同簇的用户特征,制定个性化的营销策略。

三、选择K值的方法

3.1 肘部法(Elbow Method)

肘部法通过绘制不同K值下的目标函数(平方误差和)曲线,寻找曲线的“肘点”。肘点是指曲线开始变得平缓的点,表示增加更多的簇对减少误差的帮助较小。

3.2 轮廓系数(Silhouette Coefficient)

轮廓系数衡量了每个样本与其所属簇内其他样本的相似度与最近的其他簇内样本的相异度。选择轮廓系数最大的K值作为最佳簇数量。

3.3 Gap统计量(Gap Statistic)

Gap统计量通过比较数据集的簇内距离与随机生成数据的簇内距离的差异,选择Gap值最大的K值。

四、K均值聚类的局限性与优化

4.1 局限性

  • 对初始质心敏感:不同的初始质心可能导致不同的聚类结果。

  • 需要预先指定簇的数量K:选择合适的K值可能是一个挑战。

  • 对非凸形状簇效果差:K均值聚类假设簇为球形或凸形状,对于非凸形状的簇效果可能较差。

  • 对噪声和离群点敏感:可能会将噪声或离群点错误地分配到簇中。

4.2 优化方法

  • 多次运行:多次运行K均值聚类,选择目标函数值最小的结果。

  • 改进的初始化方法:如K-Means++,通过选择距离较远的初始质心来提高聚类效果。

  • 数据预处理:标准化或归一化数据,减少特征尺度差异的影响。

  • 选择合适的K值:通过肘部法、轮廓系数或Gap统计量选择最优的K值。

五、K均值聚类的应用场景

5.1 数据分组

K均值聚类广泛应用于将数据分为不同的组,例如:

  • 市场细分:根据消费者的购买行为和偏好将市场细分为不同的目标群体。

  • 图像分割:将图像中的像素分为不同的区域,以识别和分离不同的对象。

  • 文档聚类:将文本数据分为不同的主题或类别。

5.2 模式识别

K均值聚类可以用于识别数据中的模式和结构,例如:

  • 异常检测:通过聚类识别数据中的异常点或离群点。

  • 基因数据分析:将基因表达数据分为不同的簇,以发现基因的功能模块。

5.3 特征工程

K均值聚类可以用于特征降维和数据压缩,帮助简化数据并提取关键信息。


👏觉得文章对自己有用的宝子可以收藏文章并给小编点个赞!

👏想了解更多统计学、数据分析、数据开发、数据治理、机器学习算法、深度学习等有关知识的宝子们,可以关注小编,希望以后我们一起成长!

 

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

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

相关文章

从低清到4K的魔法:FlashVideo突破高分辨率视频生成计算瓶颈(港大港中文字节)

论文链接:https://arxiv.org/pdf/2502.05179 项目链接:https://github.com/FoundationVision/FlashVideo 亮点直击 提出了 FlashVideo,一种将视频生成解耦为两个目标的方法:提示匹配度和视觉质量。通过在两个阶段分别调整模型规模…

Nuclei 使用手册

Nuclei 是一个开源的快速、高效的漏洞扫描工具,主要用于网络安全领域的漏洞检测。它由 go 语言开发,设计目的是为了高效地扫描 Web 应用程序、网络服务等目标,帮助安全研究人员、渗透测试人员以及红队成员发现潜在的漏洞。 下载链接&#xf…

python学opencv|读取图像(六十七)使用cv2.convexHull()函数实现图像轮廓凸包标注

【1】引言 前序学习进程中,已经初步探索了对图像轮廓的矩形标注和圆形标注: python学opencv|读取图像(六十五)使用cv2.boundingRect()函数实现图像轮廓矩形标注-CSDN博客 但实际上,这两种标注方法都是大致的&#x…

基于SpringBoot的“高校创新创业课程体系”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“高校创新创业课程体系”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统整体功能图 系统首页界面 个人中心界…

前端带样式导出excel表格,html表格生成带样式的excel表格

众所周知&#xff0c;前端生成表格通常是用xlsx、excel.js等js库&#xff0c;但这些库想要生成时增加excel样式会很麻烦。 有这么一个js库把html表格连样式带数据一并导出为excel表格: html-table-to-excel npm install html-table-to-excel 使用 html表格&#xff1a; <…

【Linux】【网络】Libevent 内核实现简略版

【Linux】【网络】Libevent 内核实现简略版 1 event_base结构–>相当于Reactor 在使用libevent之前&#xff0c;就必须先创建这个结构。 以epoll为例&#xff1a; 1.1evbase void* evbase-->epollop结构体&#xff08;以epoll为例&#xff09; libevent通过一个void…

VScode内接入deepseek包过程(本地部署版包会)

目录 1. 首先得有vscode软件 2. 在我们的电脑本地已经部署了ollama&#xff0c;我将以qwen作为实验例子 3. 在vscode上的扩展商店下载continue 4. 下载完成后&#xff0c;依次点击添加模型 5. 在这里可以添加&#xff0c;各种各样的模型&#xff0c;选择我们的ollama 6. 选…

Ubuntu虚拟机NDK编译ffmpeg

目录 一、ffmpeg源码下载1、安装git(用于下载ffmpeg源码)2、创建源码目录&#xff0c;下载ffmpeg源码 二、下载ubuntu对应的NDK&#xff0c;并解压到opt下1、下载并解压2、配置 ~/.bashrc 三、源码编译、1、创建编译脚本2、脚本文件内容3、设置可执行权限并运行4、编译的结果在…

机器学习:k近邻

所有代码和文档均在golitter/Decoding-ML-Top10: 使用 Python 优雅地实现机器学习十大经典算法。 (github.com)&#xff0c;欢迎查看。 K 邻近算法&#xff08;K-Nearest Neighbors&#xff0c;简称 KNN&#xff09;是一种经典的机器学习算法&#xff0c;主要用于分类和回归任务…

讯飞唤醒+VOSK语音识别+DEEPSEEK大模型+讯飞离线合成实现纯离线大模型智能语音问答。

在信息爆炸的时代&#xff0c;智能语音问答系统正以前所未有的速度融入我们的日常生活。然而&#xff0c;随着数据泄露事件的频发&#xff0c;用户对于隐私保护的需求日益增强。想象一下&#xff0c;一个无需联网、即可响应你所有问题的智能助手——这就是纯离线大模型智能语音…

Day4 25/2/17 MON

【一周刷爆LeetCode&#xff0c;算法大神左神&#xff08;左程云&#xff09;耗时100天打造算法与数据结构基础到高级全家桶教程&#xff0c;直击BTAJ等一线大厂必问算法面试题真题详解&#xff08;马士兵&#xff09;】https://www.bilibili.com/video/BV13g41157hK?p4&v…

HTML【详解】input 标签

input 标签主要用于接收用户的输入&#xff0c;随 type 属性值的不同&#xff0c;变换其具体功能。 通用属性 属性属性值功能name字符串定义输入字段的名称&#xff0c;在表单提交时&#xff0c;服务器通过该名称来获取对应的值disabled布尔值禁用输入框&#xff0c;使其无法被…

Jvascript网页设计案例:通过js实现一款密码强度检测,适用于等保测评整改

本文目录 前言功能预览样式特点总结&#xff1a;1. 整体视觉风格2. 密码输入框设计3. 强度指示条4. 结果文本与原因说明 功能特点总结&#xff1a;1. 密码强度检测2. 实时反馈机制3. 详细原因说明4. 视觉提示5. 交互体验优化 密码强度检测逻辑Html代码Javascript代码 前言 能满…

用React实现一个登录界面

使用React来创建一个简单的登录表单。以下是一个基本的React登录界面示例&#xff1a; 1. 设置React项目 如果你还没有一个React项目&#xff0c;你可以使用Create React App来创建一个。按照之前的步骤安装Create React App&#xff0c;然后创建一个新项目。 2. 创建登录组…

图论:tarjan 算法求解强连通分量

题目描述 有一个 n n n 个点&#xff0c; m m m 条边的有向图&#xff0c;请求出这个图点数大于 1 1 1 的强连通分量个数。 输入格式 第一行为两个整数 n n n 和 m m m。 第二行至 m 1 m1 m1 行&#xff0c;每一行有两个整数 a a a 和 b b b&#xff0c;表示有一条…

Java:单例模式(Singleton Pattern)及实现方式

一、单例模式的概念 单例模式是一种创建型设计模式&#xff0c;确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问该实例&#xff0c;是 Java 中最简单的设计模式之一。该模式常用于需要全局唯一实例的场景&#xff0c;例如日志记录器、配置管理、线程池、数据库…

Python爬虫实战:股票分时数据抓取与存储 (1)

在金融数据分析中&#xff0c;股票分时数据是投资者和分析师的重要资源。它能够帮助我们了解股票在交易日内的价格波动情况&#xff0c;从而为交易决策提供依据。然而&#xff0c;获取这些数据往往需要借助专业的金融数据平台&#xff0c;其成本较高。幸运的是&#xff0c;通过…

将图片base64编码后,数据转成图片

将图片数据进行base64编码后&#xff0c;可以在浏览器上查看图片&#xff0c;只需在前端加上data:image/png;base64,即可 在线工具&#xff1a; Base64转图片 - 加菲工具

天翼云910B部署DeepSeek蒸馏70B LLaMA模型实践总结

一、项目背景与目标 本文记录在天翼云昇腾910B服务器上部署DeepSeek 70B模型的全过程。该模型是基于LLaMA架构的知识蒸馏版本&#xff0c;模型大小约132GB。 1.1 硬件环境 - 服务器配置&#xff1a;天翼云910B服务器 - NPU&#xff1a;8昇腾910B (每卡64GB显存) - 系统内存&…