K-means 聚类模型详解

K-means 聚类模型详解

K-means 是一种常用的无监督学习算法,用于将数据集分成 K 个簇。其目标是最小化各个簇内数据点到簇中心的距离平方和。K-means 广泛应用于图像压缩、市场细分、模式识别等领域。

算法步骤
  1. 初始化: 随机选择 K 个初始簇中心(质心)。
  2. 分配: 将每个数据点分配给距离最近的簇中心。
  3. 更新: 重新计算每个簇的质心。
  4. 重复: 重复步骤 2 和 3,直到簇中心不再变化或达到预设的迭代次数。
公式推导

目标函数: 最小化各个簇内的平方误差和(Sum of Squared Errors, SSE)。

( X = { x 1 , x 2 , . . . , x n } ) ( X = \{x_1, x_2, ..., x_n\} ) (X={x1,x2,...,xn}) 为数据集, $ C = {c_1, c_2, …, c_K} $ 为簇中心, $S_i $ 为第 i 个簇中的数据点集合。目标函数为:
J = ∑ i = 1 K ∑ x ∈ S i ∥ x − c i ∥ 2 J = \sum_{i=1}^{K} \sum_{x \in S_i} \|x - c_i\|^2 J=i=1KxSixci2

其中, ∥ x − c i ∥ \|x - c_i\| xci​ 表示数据点 x x x 到簇中心 $ c_i $ 的欧氏距离。

算法步骤

步骤 1: 初始化 C = { c 1 , c 2 , . . . , c K } C = \{c_1, c_2, ..., c_K\} C={c1,c2,...,cK}(随机选择 K 个数据点作为初始簇中心)。

步骤 2: 对每个数据点 $ x_j $​,分配到最近的簇中心:
S i = { x j : ∥ x j − c i ∥ 2 ≤ ∥ x j − c k ∥ 2 , ∀ k , 1 ≤ k ≤ K } S_i = \{x_j : \|x_j - c_i\|^2 \leq \|x_j - c_k\|^2, \forall k, 1 \leq k \leq K\} Si={xj:xjci2xjck2,k,1kK}
步骤 3: 重新计算每个簇的簇中心:
c i = 1 ∣ S i ∣ ∑ x ∈ S i x c_i = \frac{1}{|S_i|} \sum_{x \in S_i} x ci=Si1xSix

步骤 4: 重复步骤 2 和 3,直到簇中心不再变化。

运用示例

下面是一个使用 K-means 算法进行数据聚类的 Python 示例,使用 sklearn 库。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs# 生成示例数据
X, y = make_blobs(n_samples=300, centers=4, random_state=42, cluster_std=0.60)# 可视化数据
plt.scatter(X[:, 0], X[:, 1])
plt.title("Generated Data")
plt.show()# 使用 K-means 进行聚类
kmeans = KMeans(n_clusters=4)
kmeans.fit(X)
y_kmeans = kmeans.predict(X)# 获取簇中心
centers = kmeans.cluster_centers_# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=50, cmap='viridis')
plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.75, marker='X')
plt.title("K-means Clustering")
plt.show()

在这里插入图片描述

解释
  1. 生成数据: 使用 make_blobs 生成 300 个样本点,分成 4 个簇,标准差为 0.60。
  2. 可视化数据: 使用 plt.scatter 绘制生成的数据。
  3. K-means 聚类: 创建 KMeans 对象,设置簇数为 4,并拟合数据。
  4. 获取聚类结果: 使用 predict 方法获取每个数据点的簇标签。
  5. 获取簇中心: 使用 cluster_centers_ 属性获取簇中心坐标。
  6. 可视化聚类结果: 绘制聚类后的数据点,并标记出簇中心。
优缺点

优点:

  • 简单易理解,实现和解释都很直观。
  • 计算效率高,适用于大规模数据集。

缺点:

  • 需要预先指定簇的数量 K K K
  • 对初始值敏感,不同的初始值可能导致不同的结果。
  • 适用于球形簇,不适用于非球形簇或密度不均匀的簇。

总结

K-means 是一种高效的聚类算法,通过迭代优化簇内距离平方和实现数据的自动分组。尽管有一些限制,如需要预先指定簇数和对初始值敏感,但在许多实际应用中仍然非常有用。通过结合实际数据集进行聚类分析,可以更好地理解数据的结构和模式。

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

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

相关文章

Sql入门教程

SQL,全称Structured Query Language,也就是结构化查询语言,它是和数据库沟通的语言。想象一下,数据库是个巨大的仓库,里面放着各种信息,而SQL就是你用来告诉仓库管理员(数据库)你要做…

gulp入门8:serites

在Gulp中,gulp.series 是一个非常重要的函数,它允许你将多个任务(task)组合成一个顺序执行的序列。这对于那些需要按照特定顺序执行的任务特别有用。下面是对 gulp.series 的深入研究,包括其用法、特点以及注意事项。 …

Java中的转换流InputStreamReader 和 OutputStreamWriter

在Java的I/O(输入/输出)库中,InputStreamReader 和 OutputStreamWriter 是两个重要的桥接类,它们被用来在字节流(InputStream 和 OutputStream)和字符流(Reader 和 Writer)之间进行转…

【主题广泛|投稿优惠】2024年区块链、网络与物联网国际会议(BNIT 2024)

2024年区块链、网络与物联网国际会议(BNIT 2024) 2024 International Conference on Blockchain, Networks, and the Internet of Things 【重要信息】 大会地点:深圳 大会官网:http://www.icbnit.com 投稿邮箱:icbni…

k8s cephfs(动态pvc)

官方参考文档:GitHub - ceph/ceph-csi at v3.9.0 测试版本 Ceph Version Ceph CSI Version Container Orchestrator Name Version Tested v17.2.7 v3.9.0 Kubernetes v1.25.6 安装Ceph-csi Step 1 Download GitHub - ceph/ceph-csi at v3.9.0 rootsd-k8s…

揭秘智慧校园:可视化技术引领教育新篇章

随着科技的飞速发展,我们的生活方式正在经历一场前所未有的变革。而在这场变革中,学校作为培养未来人才的重要基地,也在不断地探索与创新。 一、什么是校园可视化? 校园可视化,就是通过先进的信息技术,将学…

永久免费SSL证书领取流程

一、SSL证书的前世今生 起源: SSL证书起源于1994年,当时网景公司(Netscape)推出了安全套接字层(SSL,Secure Sockets Layer)协议,这是一种加密通信协议,用于在客户端和服…

武汉城投城更公司与竹云科技签署战略协议,携手构建智慧城市新未来!

2024年5月16日,武汉城投城更公司与深圳竹云科技股份有限公司(以下简称“竹云”)签订战略合作协议,双方将深入推进产业项目合作。 签约现场,双方围绕产业项目合作方向、路径和内容等进行了全面深入交流。城投城更公司党…

第五届武汉纺织大学ACM程序设计竞赛 个人题解(待补完)

前言: 上周周日教练要求打的一场重现赛,时长五个小时,题目难度还行,除了部分题目前我还写不出来之外,大部分题都写完或补完了,这边给出比赛链接和我的代码(有些是队友的)和题解。 正…

这些项目,我当初但凡参与一个,现在也不至于还是个程序员

10年前,我刚开始干开发不久,我觉得这真是一个有前景的职业,我觉得我的未来会无限广阔,我觉得再过几年,我一定工资不菲。于是我开始像很多大佬说的那样,开始制定职业规划,并且坚决执行。但过去这…

Midjourney设计服装5步实操分享!(实操干货系列)

2k字讲清楚如何在有限素材的基础上,用MJ随机生成设计服装,附本人实操步骤图~ 灵感来源:既然Midjourney(MJ)能够参考图片进行绘图,那么,提供一些素材,借由MJ的随机成图来寻找一些服装…

香橙派Kunpeng Pro评测

有幸受邀评测香橙派与华为鲲鹏在2024年5月12刚刚联合发布的新品香橙派Kunpeng Pro。 本文将从软硬件、AI算法测试等角度简单分享一下博主拿到板子以来感受与所做的评测。 一、硬件 香橙派Kunpeng Pro实物图 处理器方面,香橙派Kunpeng Pro采用了4核64位armv8架构处…

gulp入门6:watch

当使用Gulp进行前端开发自动化时,gulp.watch 是一个非常有用的功能,用于监视文件或文件夹的变化,并在这些文件或文件夹发生变化时执行特定的任务。以下是关于 gulp.watch 的深入讲解: 1. gulp.watch 的基本用法 gulp.watch 的基…

生产者延迟消息和重试机制

messageDelayLevel1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h 延迟消息级别public PutMessageResult putMessage(final MessageExtBrokerInner msg) {//事务消息处理if (tranType MessageSysFlag.TRANSACTION_NOT_TYPE|| tranType MessageSysFlag.TRANSACT…

Android manifest清单文件意外权限来源和合并规则

问题背景 当自写APP发现无缘无故多申请了多个权限,其中一个就是:android.permission.WAKE_LOCK. 一想就知道如果并非自己在APP main中引入的,那就是依赖的库清单文件导入进来的. 定位问题 定位手段 1.manifest-merger-buildVariant-report.txt 根据其内容可知, WAKE_LOCK 权…

揭秘!编写高质量代码的关键:码农必知的黄金法则!

文章目录 一、保持代码的简洁与清晰二、遵循良好的命名规范三、注重代码的可读性四、利用抽象与封装五、遵循SOLID原则六、关注代码性能七、确保代码安全性《码农修行:编写优雅代码的32条法则》编辑推荐内容简介目录前言/序言 在编程的世界里,每一位码农…

源达投顾的客户服务质量怎么样?

在金融服务行业中,客户服务质量是衡量一个公司成功与否的关键因素之一。源达投顾作为一家专业的投资顾问机构,其客户服务质量一直备受关注。那么,源达投顾的客户服务质量怎么样? 一、客户满意度调查方法 为了全面、客观地了解源…

如何使低版本浏览器支持HTML5标签,以及如何实现布局中的左边固定宽度、右边自适应,并设置滚动条自动选择最高的那个

要让低版本浏览器支持HTML5标签,可以使用以下方法: 1:使用 HTML5 Shiv 库: HTML5 Shiv 是一个 JavaScript 库,可以让低版本的 IE 浏览器(IE6-IE9)识别和渲染 HTML5 标签。使用方法如下: <!--[if lt IE 9]><script src="https://cdnjs.cloudflare.com/ajax/lib…

通讯录恢复怎么办?保护珍贵联系信息的2个必备技能!

手机通讯录扮演着重要的角色&#xff0c;它不仅仅是一个简单的联系方式列表&#xff0c;更是我们与亲朋好友、同事、业务伙伴等之间关系的见证。万一不慎丢失或误删通讯录&#xff0c;学会通讯录恢复的技能变得非常重要。本文将为你介绍几种保护珍贵联系信息的必备技能&#xf…

长文总结 | Python基础知识点,建议收藏

测试基础-Python篇 基础① 变量名命名规则 - 遵循PEP8原则 普通变量&#xff1a;max_value 全局变量&#xff1a;MAX_VALUE 内部变量&#xff1a;_local_var 和关键字重名&#xff1a;class_ 函数名&#xff1a;bar_function 类名&#xff1a;FooClass 布尔类型的变量名…