【机器学习】K-Means算法详解:从原理到实践


鑫宝Code

🌈个人主页: 鑫宝Code
🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础
💫个人格言: "如无必要,勿增实体"


文章目录

  • K-Means算法详解:从原理到实践
    • 引言
    • 1. 基本原理
      • 1.1 簇与距离度量
      • 1.2 初始化与迭代
    • 2. 算法流程
    • 3. 参数选择与优化
    • 4. 优缺点分析
      • 优点
      • 缺点
    • 5. 实际应用案例
      • 5.1 客户细分
      • 5.2 文档分类
      • 5.3 图像分割
    • 6. 结语

K-Means算法详解:从原理到实践

在这里插入图片描述

引言

K-Means是一种广泛应用于数据挖掘、机器学习领域的无监督学习算法,主要用于聚类分析。它的核心思想是将数据集划分为K个簇(cluster),每个簇内的数据相似度较高,而不同簇间的数据相似度较低。本文将深入浅出地介绍K-Means算法的基本原理、算法流程、优缺点、参数选择、优化方法以及实际应用案例,帮助读者全面理解和掌握这一经典算法。

1. 基本原理

1.1 簇与距离度量

  • :K-Means的目标是将数据集分割成K个互不相交的子集,每个子集即为一个簇。
  • 距离度量:衡量数据点间相似度的标准,常用欧氏距离。对于高维数据,也可以采用其他距离度量方法,如曼哈顿距离、余弦相似度等。

1.2 初始化与迭代

  • 初始化:随机选择K个数据点作为初始聚类中心。
  • 迭代过程
    1. 分配:将每个数据点分配给最近的聚类中心所在的簇。
    2. 更新:根据每个簇内数据点的均值(对于连续属性)或众数(对于离散属性)重新计算聚类中心。
  • 终止条件:当聚类中心不再发生显著变化或达到预设的最大迭代次数时停止。

2. 算法流程

1. 设定聚类数量K,随机选取K个数据点作为初始质心。
2. 对于数据集中的每个数据点,计算其与所有质心的距离,将其归入最近的质心所代表的簇。
3. 重新计算每个簇的质心,方法是取簇中所有点的均值。
4. 检查质心是否发生变化。如果质心有变化,则返回步骤2;否则,结束,输出最终的簇划分结果。

以下是一个使用Python和scikit-learn库实现K-Means聚类算法的示例代码。这个例子包括了从数据准备、模型训练到结果可视化的基本流程。

首先,请确保已经安装了numpy, matplotlib, 和 scikit-learn 这几个必要的库。如果没有安装,可以通过运行 pip install numpy matplotlib scikit-learn 来安装它们。以下代码仅供参考🐶

# 导入所需库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs# 生成模拟数据集
# make_blobs 用于创建带有标签的数据集,这里我们忽略真实标签,仅用于演示
X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)# 使用KMeans进行聚类
kmeans = KMeans(n_clusters=4) # 设置聚类数量为4
kmeans.fit(X)# 预测每个样本的簇标签
labels = kmeans.predict(X)# 可视化聚类结果
plt.figure(figsize=(8, 6))
colors = ['r', 'g', 'b', 'y']
for i in range(4):plt.scatter(X[labels == i, 0], X[labels == i, 1], c=colors[i], label=f'Cluster {i+1}')# 绘制聚类中心
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='black', marker='x', s=200, label='Centroids')plt.title('K-Means Clustering')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend()
plt.show()# 输出每个聚类中心的位置
print("Cluster Centers:")
print(kmeans.cluster_centers_)

这段代码首先生成了一个包含四个明显簇的数据集,然后使用KMeans类对其进行聚类,并通过颜色区分不同的簇。最后,它还绘制了每个簇的中心点。通过调整参数,您可以应用于自己的数据集上进行聚类分析。

3. 参数选择与优化

  • K的选择:肘部法则、轮廓系数、Calinski-Harabasz指数等方法可以帮助确定最优的K值。
  • 初始化方法:除了随机选择,还可以采用K-Means++策略,以提高算法的稳定性和收敛速度。
  • 避免局部最优:多次运行算法并选择最佳聚类结果,或采用Mini-Batch K-Means等变体来探索更多解空间。

4. 优缺点分析

优点

  • 简单直观:易于理解和实现。
  • 效率高:对于大规模数据集尤其有效,时间复杂度为O(nKI),其中n是数据点数量,I是迭代次数。
  • 可解释性强:输出直观,便于分析。

缺点

  • 对初始质心敏感:不同的初始质心可能导致完全不同的聚类结果。
  • 需要预先设定K值:实际应用中K的选择往往依赖经验或试错。
  • 假设各簇为凸形状且大小相近:对于非球形簇或大小差异大的数据集表现不佳。
  • 对异常值敏感:异常值可能会严重影响聚类中心的计算。

5. 实际应用案例

5.1 客户细分

电商平台通过分析用户的购买行为、浏览记录等数据,利用K-Means算法对用户进行分群,为不同群体提供个性化推荐和服务,提升用户体验和销售转化率。

5.2 文档分类

在文本挖掘领域,K-Means可以用来对文档集合进行主题分类。通过将文档转换为TF-IDF向量表示,然后应用K-Means算法,可以自动将相似主题的文档归为一类。
在这里插入图片描述

5.3 图像分割

在图像处理中,K-Means可用于图像分割,通过对像素颜色值进行聚类,可以识别出图像中的不同区域,适用于背景去除、图像简化等场景。
在这里插入图片描述

6. 结语

K-Means算法以其简单高效的特点,在众多领域展现了强大的实用价值。然而,针对其存在的局限性,研究人员不断提出改进方法,如二分K-Means、谱聚类等,以适应更复杂的数据结构和应用场景。掌握K-Means不仅是数据科学基础的重要组成部分,也是进一步探索高级聚类技术的基石。希望本文能为读者理解并应用K-Means算法提供有益的指导。

End

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

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

相关文章

Android C++系列:JNI中发送Http网络请求

1. 背景 之前Linux网络编程的文章下有小伙帮咨询jni中发送http请求的示例,本文基于libcurl库实现http网络请求发送功能。 2. libcurl库介绍 libcurl是一个免费和易于使用的客户端URL传输库,支持DICT, FILE, FTP, FTPS, GOPHER, gopers, HTTP, HTTPS, IMAP, IMAPS, LDAP, L…

预编译指令#error检查宏

使用预编译指令#error来检查LOG_DEBUG宏是否真的没有被定义。例如,在检查LOG_DEBUG宏的代码附近添加如下代码: #ifndef LOG_DEBUG#error "LOG_DEBUG is not defined"#endif如果编译过程中报错,则说明在此之前LOG_DEBUG确实没有被定…

JLPT历年真题刷题小程序:Navi日语社全新升级,更新至2024年真题!

Navi日语社小程序专为日语能力考试设计,提供全网最全的JLPT备考真题资源,包括日语N1-N5等级考试的历年真题,2024年真题将在7月底更新。无论你是日语新手准备参加N3考试练练手,还是准备冲刺N1最高等级,都能在这个小程序…

基于Java微信小程序火锅店点餐系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟感兴趣的可以先收藏起来,还…

动态规划数字三角形模型——AcWing 275. 传纸条

动态规划数字三角形模型 定义 动态规划数字三角形模型是在一个三角形的数阵中,通过一定规则找到从顶部到底部的最优路径或最优值。 运用情况 通常用于解决具有递推关系、需要在不同路径中做出选择以达到最优结果的问题。比如计算最短路径、最大和等。 计算其他…

惯性级惯导的定位漂移估算

一般来说,惯性级陀螺仪指的是0.01度/小时的零偏稳定性(是否可以作为等效常值漂移呢?),其定位误差大约为1海里每小时,其具体估算方法可见秦永元老师的《惯性导航》一书中静基座下系统误差传播特性分析一节内…

个人开发笔记

开发笔记 开发常见问题Vue开发中页面flex滚动布局,内容置顶问题功能快捷键 开发常见问题 Vue开发中页面flex滚动布局,内容置顶问题 直接操作路由: const router createRouter({routes: routes,history: createWebHashHistory(),scrollBeha…

该方法通过基于 cv2.VideoCapture 能够获取视频流入(rtmp/rtsp等)实时帧,能够解决由于图像处理速度不够等原因造成帧堆积的问题。

class ThreadedCamera(object): def __init__(self, source0): global cap self.capture cv2.VideoCapture(source) self.thread Thread(targetself.update, args()) self.thread.daemon True # 防止主线程挂掉,子线变成…

在Ubuntu 14.04上如何导入和导出MongoDB数据库

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 MongoDB 是最流行的 NoSQL 数据库引擎之一。它以可扩展、强大、可靠和易于使用而闻名。在本文中,我们将向您展示如何导入和导…

IBM Spectrum LSF Data Manager,独立于群集工作负载进行数据传输管理,以提高吞吐量并优化计算资源的使用

IBM Spectrum LSF Data Manager,独立于群集工作负载进行数据传输管理,以提高吞吐量并优化计算资源的使用 亮点 ● 独立于群集工作负载管理数据传输,提高吞吐量,优化计算资源的使用; ● 利用智能托管缓存消除重复数据传输&#xf…

【龙晰 离线安装openssl-devel】openssl-devel rpm 离线安装 需要下载哪些安rpm 包

进入龙晰镜像源地址下载 http://mirrors.openanolis.cn/anolis/8/BaseOS/x86_64/os/Packages/(base) [rootAI lib64]# yum install openssl-devel Last metadata expiration check: 14:03:32 ago on Fri 21 Jun 2024 07:26:56 AM CST. Dependencies resolved. Package …

公交车安全监控的智能化革新:4G车载视频监控与GPS卫星定位技术的融合

随着科技的快速发展,智能化监控技术在交通管理领域的应用日益广泛。特别是对于公交车这类公共交通工具,其安全监控的智能化、实时化、全面化显得尤为重要。综合运用最新的4G车载视频监控技术及GPS卫星定位技术,对公交车进行全方位、立体化、智…

北邮《计算机网络》英文选择题课堂小测

课堂小测验及答疑汇总 2020年 5 月 12 日 Q1. Which is the network address after aggregation of following 3 networks: 200.2.50.0/23, 200.2.52.0/22 and 200.2.56.0/22? A. 200.2.48.0/20 B. 200.2.50.0/20 C. 200.2.48.0/21 D. 200.2.50.0/21 Answer: A Q…

MySQL索引优化解决方案--索引测试--explain(2)

索引测试 通过存储过程往数据库中插入300w 条数据分别测试使用索引和没有使用索引的情况下,where 查询的一个效率对比。 -- 创建表 DROP TABLE IF EXISTS person; CREATE TABLE person( PID int(11) auto_increment comment 编号, PNAME varchar(50) comment 姓名…

正则表达式以及文本三剑客grep、sed、awk

正则表达式匹配的是文本内容,文本三剑客都是针对文本内容。 grep:过滤文本内容 sed:针对文本内容进行增删改查 awk:按行取列 一、grep grep的作用使用正则表达式来匹配文本内容 1、grep选项 -m:匹配几次之后停止…

【论文解读】通过多标记预测建立更好更快的大型语言模型

Meta 的这篇多标记预测论文显示,与当前的下一标记预测器相比,多头预测器内存效率高、性能更好、训练速度更快。 https://arxiv.org/pdf/2404.19737 主要收获: 多标记预测是对 LLM 训练的一种简单而强大的修改,可提高样本效率和各种任务的性能。这种方法在大规模应用中尤为…

从 Hadoop 迁移,无需淘汰和替换

我们仍然惊讶于有如此多的客户来找我们,希望从HDFS迁移到现代对象存储,如MinIO。我们现在以为每个人都已经完成了过渡,但每周,我们都会与一个决定进行过渡的主要、高技术性组织交谈。 很多时候,在这些讨论中&#xff…

安卓 jetpack compose

以下是 Jetpack Compose 中常用的一些组件的列表: 组件名称描述Text用于显示文本内容。Button可点击的按钮组件,常用于触发事件。TextField用于输入文本的文本框组件。Image用于展示图片。Column垂直布局容器,可以在其中垂直排列子组件。Row…

Mac环境 aab包转apks,并安装apks

一、下载下载bundletool工具 Releases google/bundletool GitHub 二、将下载bundletool.jar包、aab、keystore文件全部放到同一个目录下 例如我全部放到download目录下 转换命令行: java -jar bundletool-all-1.16.0.jar build-apks --modeuniversal --bundle…

java运维交接项目逆向工程

​ 背景 有承接过Java项目运维的团队估计都处理过的一件事情,就是同步生产代码跟本地代码,条件再差些甚至要直接基于生产部署包逆向本地源码工程。而哪怕是原运维团队交接了源码,往往也会历史久远的原因,给了一份不太可靠的源码…