【Python】一文详细向您介绍 scipy.cluster.vq.kmeans() 的原理、常见用法和使用场景举例等

【Python】一文详细向您介绍 scipy.cluster.vq.kmeans() 的原理、常见用法和使用场景举例等
 
下滑即可查看博客内容
在这里插入图片描述

🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇

🎓 博主简介985高校的普通本硕,曾有幸发表过人工智能领域的 中科院顶刊一作论文,熟练掌握PyTorch框架

🔧 技术专长: 在CVNLP多模态等领域有丰富的项目实战经验。已累计提供近千次定制化产品服务,助力用户少走弯路、提高效率,近一年好评率100%

📝 博客风采: 积极分享关于深度学习、PyTorch、Python相关的实用内容。已发表原创文章600余篇,代码分享次数逾九万次

💡 服务项目:包括但不限于科研辅导知识付费咨询以及为用户需求提供定制化解决方案

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

🌵文章目录🌵

  • 🤔 一、引言:初识 k-means 算法
  • 🧪 二、k-means 算法原理
  • 💻 三、`scipy.cluster.vq.kmeans()` 函数详解
  • 🌈 四、常见用法示例
  • 🚀 五、使用场景举例
  • 🤔 六、注意事项与进阶
  • 🚀 七、总结与展望

下滑即可查看博客内容

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  

🤔 一、引言:初识 k-means 算法

在数据科学的广阔天地中,聚类分析无疑是一颗璀璨的明珠。它能够在没有标签信息的情况下,将数据集中的样本划分为多个群组(即“簇”),使得同一簇内的样本相似度较高,而不同簇间的样本相似度较低。在众多聚类算法中,k-means 算法以其简洁高效的特点,成为了最为广泛应用的算法之一。今天,我们就来深入探讨 Python 中 scipy.cluster.vq.kmeans() 函数的原理、用法及其实战应用。

🧪 二、k-means 算法原理

k-means 算法的核心思想非常简单:给定一个包含 M 个样本的数据集,以及要划分的簇的数量 k,算法通过迭代的方式,找到 k 个簇的中心点(即“质心”),使得每个样本到其所属簇的质心的距离之和最小。具体步骤如下:

  1. 初始化:随机选择 k 个样本作为初始的质心。
  2. 分配簇:对于数据集中的每一个样本,计算其到 k 个质心的距离,并将其分配到距离最近的质心所在的簇中。
  3. 更新质心:对于每个簇,重新计算其质心(即簇内所有样本的均值)。
  4. 迭代:重复步骤 2 和 3,直到质心的位置不再发生变化或达到预设的迭代次数。

💻 三、scipy.cluster.vq.kmeans() 函数详解

在 Python 的 scipy 库中,scipy.cluster.vq.kmeans() 函数实现了 k-means 算法。该函数的基本参数如下:

  • obs:二维数组,每行是一个观测向量,列是特征。注意,特征通常需要先进行白化处理(即归一化)。
  • k_or_guess:整数或数组,指定簇的数量 k 或初始质心的猜测。
  • iter:整数,最大迭代次数,默认为 20。
  • thresh:浮点数,收敛阈值,默认为 1e-5。如果新旧质心之间的最大距离小于此值,则算法停止。

🌈 四、常见用法示例

下面是一个使用 scipy.cluster.vq.kmeans() 的简单示例,我们将对著名的鸢尾花(Iris)数据集进行聚类分析。

# 导入必要的库  
import matplotlib.pyplot as plt  # 导入matplotlib的pyplot模块,用于绘图  
from scipy.cluster.vq import kmeans, whiten, vq  # 从scipy.cluster.vq导入kmeans, whiten, vq函数  
from sklearn.datasets import load_iris  # 从sklearn.datasets导入load_iris函数,用于加载鸢尾花数据集  
from sklearn.decomposition import PCA  # 从sklearn.decomposition导入PCA类,用于主成分分析  # 加载数据  
iris = load_iris()  # 调用load_iris函数加载鸢尾花数据集,结果存储在iris变量中  
X = iris.data  # 从iris对象中提取特征数据,存储在X变量中  # 数据白化  
X_whitened = whiten(X)  # 对特征数据X进行白化处理,去除数据的尺度和相关性,结果存储在X_whitened中  # PCA降维  
pca = PCA(n_components=2)  # 创建一个PCA实例,设置主成分数量为2  
X_pca = pca.fit_transform(X_whitened)  # 使用PCA实例对白化后的数据进行降维处理,结果存储在X_pca中  # 执行 k-means 聚类,假设我们知道有 3 个簇  
k = 3  # 设置聚类簇的数量为3  
centroid, distortion = kmeans(X_pca, k)  # 对降维后的数据进行k-means聚类,返回质心和畸变值  # 输出质心  
print("质心:")  # 打印提示信息  
print(centroid)  # 打印聚类得到的质心  # 分配簇标签  
labels = vq(X_pca, centroid)[0]  # 使用vq函数将降维后的数据点分配到最近的质心,返回簇标签  # 可视化结果(这里仅展示二维投影,便于理解)  
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=labels, cmap='viridis', marker='o')  # 绘制数据点,颜色根据簇标签分配  
plt.scatter(centroid[:, 0], centroid[:, 1], c='red', s=200, alpha=0.75, marker='x')  # 绘制质心,以红色'x'标记  
plt.title('Iris Dataset K-Means Clustering')  # 设置图表标题  
plt.xlabel('PCA Feature 1')  # 设置x轴标签  
plt.ylabel('PCA Feature 2')  # 设置y轴标签  
plt.show()  # 显示图表

🚀 五、使用场景举例

k-means 算法的应用场景非常广泛,包括但不限于:

  1. 市场细分:根据客户的购买行为、年龄、收入等特征,将客户划分为不同的细分市场,以便制定针对性的营销策略。
  2. 图像分割:在图像处理中,可以将图像中的像素点聚类成不同的区域,实现图像的自动分割。
  3. 文本聚类:对文档集合进行聚类,发现文档之间的相似性,实现文档的自动分类和主题提取。

🤔 六、注意事项与进阶

尽管 k-means 算法在许多场景下表现出色,但使用时仍需注意以下几个问题:

  1. 初始质心的选择:k-means 算法对初始质心的选择非常敏感,不同的初始质心可能导致不同的聚类结果。为了缓解这个问题,可以采用多次运行算法并选择最佳结果的方法,或者使用更复杂的初始化策略,如 k-means++。

  2. 簇的数量 k 的选择:在实际应用中,簇的数量 k 通常是未知的,需要预先指定。选择合适的 k 值对于聚类效果至关重要。一种常用的方法是尝试不同的 k 值,并评估聚类结果的质量(如使用轮廓系数等指标),然后选择最优的 k 值。

  3. 异常值和噪声:数据集中的异常值和噪声可能会对 k-means 算法产生不利影响,导致质心的位置偏离实际簇的中心。在实际应用中,可能需要先对数据进行清洗和预处理,以减少异常值和噪声的影响。

  4. 算法收敛性:虽然 k-means 算法通常能够收敛到局部最优解,但并不能保证收敛到全局最优解。此外,算法的收敛速度也可能受到数据规模、特征维度和初始质心选择等因素的影响。

为了进一步提高 k-means 算法的性能和效果,可以考虑以下进阶策略:

  • 使用加速算法:如 MiniBatchKMeans,该算法通过从数据集中随机选择一部分样本来更新质心,从而加速算法的收敛过程。
  • 结合其他算法:将 k-means 与其他算法(如层次聚类、DBSCAN 等)结合使用,可以弥补各自的不足,提高聚类效果。
  • 特征选择和降维:在聚类之前,通过特征选择和降维技术减少数据的维度和冗余信息,可以提高聚类算法的效率和效果。

🚀 七、总结与展望

通过对 scipy.cluster.vq.kmeans() 函数的详细探讨,我们深入了解了 k-means 算法的原理、用法及其在 Python 中的实现。k-means 算法以其简洁高效的特点,在数据科学领域得到了广泛应用。然而,我们也需要认识到其局限性,如初始质心选择的敏感性、簇数量 k 的选择难题以及异常值和噪声的影响等。

展望未来,随着数据量的不断增长和聚类需求的日益复杂化,k-means 算法将面临更多的挑战和机遇。为了应对这些挑战,我们需要不断探索新的算法和技术,如结合深度学习、强化学习等先进方法,以提高聚类算法的准确性、鲁棒性和可扩展性。同时,我们也需要关注数据预处理和特征工程等基础工作,为聚类算法提供更高质量的数据支持。相信在不久的将来,聚类分析将会在数据科学领域发挥更加重要的作用。

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

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

相关文章

python简单学习笔记

1. print 输出 print(2024, 年,我要想娘) # sep:设置打印多个内容的分隔符,默认值为空格 print(2024, 年,我要想娘, sep, end\n) # end:设置print执行结束后的操作,默认值为换行格式化输出 print(格式化字符串 % (变量1, 变量…

org.springframework.jdbc.BadSqlGrammarException异常

Bug 记录 概述 在执行定时任务更新电子书统计信息时,遇到了 org.springframework.jdbc.BadSqlGrammarException 异常,具体表现为 SQL 函数 count 被错误地解析为自定义函数 wiki.count,导致数据库更新操作失败。 详细描述 错误信息&#x…

计算机视觉之SSD目标检测

模型简介 SSD是一种单阶段目标检测算法,通过卷积神经网络进行特征提取,并在不同的特征层进行检测输出,实现多尺度检测。它采用了anchor的策略,预设不同长宽比例的anchor,并在每个输出特征层上预测多个检测框。SSD框架…

C#变量、常量与运算符

文章目录 变量变量定义命名规则作用域和生命周期 常量特殊字符常量 运算符算术运算符关系运算符逻辑运算符位运算符赋值运算符其他运算符 变量 变量就是一个存储空间的名字&#xff0c;变量是什么类型&#xff0c;这个空间里面存储的就是什么类型的数据。 变量定义 <data_t…

Swift 基于Codable协议使用

Codable协议 继承自 Decodable & Encodable // // Test1.swift // TestDemo // // Created by admin on 2024/7/9. // import Foundationstruct Player{var name:Stringvar highScore:Int 0var history:[Int] []var address:Address?var birthday:Date?init(name: St…

uniapp进行微信小程序开发,使用navigateBack返回到上一个页面时候,接口未刷新。

代码背景&#xff1a; 使用uniapp进行微信小程序开发时&#xff0c;有a和b两个页面&#xff0c;从a进入b页面后&#xff0c;通过uni.navigateBack()方法返回a页面时候&#xff0c;无法触发a页面的onShow函数里面的接口调用。 解决思路 uniapp官网页面通信 1.通过EventChann…

【JavaScript脚本宇宙】浏览器特性尽在掌握:JavaScript工具库全面解析

提升网页质量&#xff1a;六款神奇JavaScript工具库解析 前言 随着移动设备和互联网的普及&#xff0c;用户使用不同的设备、操作系统和浏览器来访问网页已成为常态。为了更好地适应不同环境下的用户体验需求&#xff0c;开发人员需要使用工具库来识别客户端的特征信息。本文…

Java数值操作

文章目录 1.数值数据类型和操作1.1 数值类型1.2 从键盘读取数值1.3 数值操作符 2.数值型字面值2.1 整形字面值2.2 浮点型字面值2.3 科学记数法 示例&#xff1a;显示当前时间3.增强赋值运算符4.自增和自减操作符5.数值类型转换 1.数值数据类型和操作 1.1 数值类型 类型名范围…

什么是面向对象编程

什么是面向对象编程&#xff1f;&#xff08;OOP&#xff09; ● 面向对象编程是一种基于对象概念的编程范式&#xff1b;&#xff08;所谓的编程范式&#xff0c;就是代码风格&#xff0c;我们“如何”编写和组织代码&#xff09;&#xff1b; ● 我们使用对象来模拟&#xf…

【Cesium开发实战】飞行漫游功能的实现,可设置漫游路径,漫游高度,暂停,继续,删除路径

Cesium有很多很强大的功能&#xff0c;可以在地球上实现很多炫酷的3D效果。今天给大家分享一个可自定义的漫游飞行功能。 1.话不多说&#xff0c;先展示 漫游 2.设计思路 项目需求&#xff0c;可自定义漫游路径&#xff0c;并且设置高度&#xff0c;暂停&#xff0c;继续&…

如何制作文件的二维码?支持设置文件下载功能

现在为了能够更快的将文件分享给其他人查看&#xff0c;会选择将文件转换二维码的方式&#xff0c;用户可以通过扫描二维码在手机上预览或者下载文件到本地&#xff0c;能够有效的减少文件对内存的占用&#xff0c;在很多场景下都有所应用&#xff0c;那么文件转二维码具体该怎…

TCP/IP模型和OSI模型的区别(面试题)

OSI模型&#xff0c;是国际标准化组织ISO制定的用于计算机或通讯系统间互联的标准化体系&#xff0c;主要分为7个层级&#xff1a; 物理层数据链路层网络层传输层会话层表示层应用层 虽然OSI模型在理论上更全面&#xff0c;但是在实际网络通讯中&#xff0c;TCP/IP模型更加实…

LabVIEW电子水泵性能测试平台

开发了一种车用电子水泵性能测试平台&#xff0c;该平台以工控机为载体&#xff0c;利用LabVIEW开发上位机软件&#xff0c;采用PLC控制阀门和水泵等电气元件&#xff0c;通过RS485进行数据采集并传输到上位机。通过上位机与下位机的协同控制&#xff0c;实现了数据交互处理和性…

LeetCode题练习与总结:寻找旋转排序数组中的最小值Ⅱ--154

一、题目描述 已知一个长度为 n 的数组&#xff0c;预先按照升序排列&#xff0c;经由 1 到 n 次 旋转 后&#xff0c;得到输入数组。例如&#xff0c;原数组 nums [0,1,4,4,5,6,7] 在变化后可能得到&#xff1a; 若旋转 4 次&#xff0c;则可以得到 [4,5,6,7,0,1,4]若旋转 …

基于Java Web的考编论坛网站的设计与实现+lw+源码+讲解+调试+视频演示

第3章 系统分析 用户的需求以及与本系统相似的在市场上存在的其它系统可以作为系统分析中参考的资料&#xff0c;分析人员可以根据这些信息确定出本系统具备的功能&#xff0c;分析出本系统具备的性能等内容。 3.1可行性分析 尽管系统是根据用户的要求进行制作&#xff0c;但…

聚鼎贸易:装饰画生意能不能做起来2024

在2024年&#xff0c;随着人们对家居美学和个性化表达的需求日益增长&#xff0c;装饰画作为一种简单而直接的方式&#xff0c;来提升空间品味及展示个人风格的市场需求也随之扩大。许多人都对涉足这一行业抱有浓厚的兴趣&#xff0c;但究竟这门生意能否成功做大&#xff0c;需…

Unity 资源 之 战斗魔法咒语 - 第二卷(Combat Magic Spells - Volume II)

&#x1f389;Unity Asset Store 宝藏免费资源&#xff1a;战斗魔法咒语 - 第二卷 前言资源包内容领取兑换码 前言 各位游戏开发爱好者、Unity 开发者们&#xff0c;今天要给大家带来一个超棒的消息&#xff01;在 Unity Asset Store 上&#xff0c;全新的免费资源“战斗魔法咒…

Java高级重点知识点-27-Java反射机制

文章目录 Java反射机制概述理解Class类并获取Class的实例Class 类 类的加载与ClassLoader类加载过程类的初始化触发条件类加载器的作用ClassLoader 创建运行时类的对象获取运行时类的完整结构调用运行时类的指定结构反射的应用&#xff1a;动态代理Proxy类AOP&#xff08;Aspec…

JavaWeb系列二十一: 数据交换和异步请求(JSON, Ajax)

文章目录 官方文档official documents官方文件官方文件official documentsJSON介绍JSON快速入门JSON对象和字符串对象转换应用案例注意事项和细节 JSON在java中使用说明JSON在Java中应用场景应用实例 Ajax基本介绍Ajax是什么Ajax经典应用场景 Ajax原理示意图传统的web应用Ajax原…

Vue3打包发布,刷新出现的空白页面和错误

Vue3打包发布出现的错误&#xff1a;Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of text/html. Strict MIME type checking is enforced for module scripts per HTML spec. 第一次点击访问到这个路径&…