【机器学习】简单易懂的聚类算法K-Means

文章目录

    • 概述
      • 算法原理
      • 算法步骤
      • K-Means++ 初始化
      • 算法局限性
      • 应用场景
      • 评估指标
    • scikit-learn 实现k-means算法
      • 步骤 1: 导入必要的库
      • 步骤 2: 准备数据集
      • 步骤 3: 文本向量化
      • 步骤 4: 应用K-means聚类
      • 步骤 5: 分析结果
      • 步骤 6: 评估模型
    • 相关文献

概述

K-Means 是一种广泛使用的聚类算法,其目的是将数据集分成 K 个聚类,其中每个数据点都属于最近的均值(质心)所代表的聚类。K-Means 算法的执行过程简单明了,但也有一些局限性。下面详细介绍 K-Means 算法的原理和步骤:

算法原理

K-Means 算法通过迭代的方式寻找数据的聚类中心,使得每个数据点到其聚类中心的距离之和最小。这里的“距离”通常是指欧几里得距离,但也可以使用其他距离度量。

算法步骤

  1. 选择初始质心

    • 随机选择 K 个数据点作为初始的聚类中心(质心)。
  2. 分配数据点到最近的质心

    • 对于数据集中的每个点,计算其与各个质心的距离,并将其分配给最近的质心,形成 K 个聚类。
  3. 重新计算质心

    • 对于每个聚类,计算所有属于该聚类的数据点的均值,并更新该聚类的质心。
  4. 重复步骤 2 和 3

    • 直到满足某个停止条件,如质心的变化小于某个阈值、达到预设的迭代次数,或者数据点的分配不再发生变化。
  5. 输出聚类结果

    • 算法结束后,每个数据点都被分配到一个聚类中,每个聚类由其质心代表。

K-Means++ 初始化

K-Means++ 是一种改进的初始化方法,用于选择更好的初始质心,从而提高聚类的质量:

  1. 从数据集中随机选择第一个质心。
  2. 对于数据集中的每个点,计算其到已选择的最近质心的距离。
  3. 选择下一个质心,其概率与到最近质心的距离的平方成正比。

算法局限性

  • 对初始质心敏感:不同的初始质心可能导致不同的聚类结果。
  • 对异常值敏感:异常值可以严重影响聚类中心的位置。
  • 假设聚类是凸形的:K-Means 假设聚类的形状是凸形的,且大小相似,这在现实世界的数据集中并不总是成立。
  • 需要预先指定 K 值:K-Means 需要用户预先指定聚类的数量 K,这在实际应用中可能难以确定。

应用场景

尽管存在局限性,K-Means 由于其简单和高效,在许多领域都有广泛的应用,包括市场细分、社交网络分析、图像分割、文档聚类等。

评估指标

评估 K-Means 聚类效果的常用指标包括:

  • Within-Cluster Sum of Squares (WCSS):簇内误差平方和,即每个点到其质心的距离的平方和。
  • 轮廓系数 (Silhouette Coefficient):衡量聚类的紧密度和分离度。

K-Means 算法因其直观和易于实现而受到欢迎,但在使用时需要考虑其局限性,并可能需要尝试不同的 K 值和初始化方法以获得最佳结果。

scikit-learn 实现k-means算法

在Python中使用scikit-learn库进行文本聚类是一个常见的任务,尤其是当你想要根据某些特征(如词汇频率)来自动组织文档时。下面是如何使用K-means算法通过scikit-learn对文本数据进行聚类的一个示例。

首先,确保你的环境中已安装了scikit-learn。如果没有安装,可以通过运行pip install -U scikit-learn来安装。

步骤 1: 导入必要的库

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
import pandas as pd

步骤 2: 准备数据集

这里我们创建一个简单的文本数据列表作为示例。在实际应用中,这可以是任何文本数据源,比如文件、数据库或API调用的结果。

documents = ["I love programming in Python","Python is the best for data science","Java is also a good programming language","JavaScript is widely used for web development","Web developers often use HTML, CSS, and JavaScript"
]

步骤 3: 文本向量化

使用TF-IDF(Term Frequency-Inverse Document Frequency)方法将文本转换为数值型数据,这是机器学习模型可以处理的形式。

vectorizer = TfidfVectorizer(stop_words='english')
X = vectorizer.fit_transform(documents)

步骤 4: 应用K-means聚类

选择合适的聚类数量(例如,这里假设我们想要找到3个不同的群组)。然后训练模型并预测每个文档所属的类别。

num_clusters = 3
model = KMeans(n_clusters=num_clusters, init='k-means++', max_iter=100, n_init=10)
model.fit(X)

步骤 5: 分析结果

查看每个文档被分配到哪个集群,以及这些集群的中心点是什么。

order_centroids = model.cluster_centers_.argsort()[:, ::-1]
terms = vectorizer.get_feature_names_out()for i in range(num_clusters):print(f"Cluster {i}:")for ind in order_centroids[i, :10]:print(' %s' % terms[ind])print()

步骤 6: 评估模型

可以使用轮廓系数(Silhouette Coefficient)来评估聚类的质量。值范围从-1到1,值越大表示聚类效果越好。

predictions = model.predict(X)
print("Silhouette Score: ", silhouette_score(X, predictions))

以上就是使用scikit-learn中的K-means进行文本聚类的基本流程。这个过程包括准备数据、向量化文本、应用聚类算法、分析结果和评估模型性能。希望这段代码对你有所帮助!如果你有任何具体的问题或者需要进一步的帮助,请随时提问。

相关文献

【机器学习】机器学习入门篇

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

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

相关文章

csdn要打开或者无法刷新内容管理,文章无法发布或者未保存成功(服务器超时)-->先保存在自己的电脑里

今天突然想到以前看网页小说的时候改变网页链接后面的页数能够直接跳转,那么能不能不能改一下1000.2115.3001.5448 https://mp.csdn.net/mp_blog/manage/article?spm1000.2115.3001.5448 https://mp.csdn.net/mp_blog/manage/article?spm1000.2115.3001.5448 后…

计算机使用梯子后关机,再次使用计算机时未开启梯子,无法正常上网

问题:使用计算机时开启了梯子,使用完毕后关闭计算机,再次打开计算机但是没有开启梯子时无法正常上网; 原因:使用梯子时可能将手动设置代理处设置成了梯子的代理服务器地址,所以再次使用计算机但是没有使用…

报表系统-连接数据库操作

本专栏用于解析自己开源的项目代码,作为复盘和学习使用。欢迎大家一起交流 本样例说明源码开源在: ruoyi-reoprt gitee仓库 ruoyi-report github仓库 欢迎大家到到项目中多给点star支持,对项目有建议或者有想要了解的欢迎一起讨论 连接数据库…

初学者指南:软件测试

目录 初学者软件开发流程中的测试指南一、什么是软件测试?二、软件测试的重要性三、软件测试的类型四、软件测试的流程五、软件测试工具六、软件测试工程师的技能要求七、如何上手软件测试八、结语 初学者软件开发流程中的测试指南 欢迎来到软件测试的世界&#xf…

公司章程拟定,定制公司章程

公司章程是指公司依法制定的、规定公司名称、住所、经营范围、经营管理制度等重大事项的基本文件,也是公司必要的规定公司组织及活动基本规则的书面文件。公司章程是股东共同一致的意思表示,载明了公司组织和活动的基本准则,是公司的宪章。关…

基于HEC-Ras及ArcGIS的泥石流数值模拟与灾害风险评估典型案例

泥石流是一种破坏性极强的自然灾害,对人类社会和自然环境都构成了巨大的威胁。由于泥石流的发生通常突然且难以预测,因此,采取有效的预防措施和进行科学的风险评估显得尤为重要。为了减少泥石流可能带来的损害,可以建立高效的监测…

LVGL第二篇-组件创建与显示(以slider为例)

一、LVGL 中组件加载步骤 分配内存与初始化: 首先,通过调用相应组件的创建函数来分配内存并初始化组件对象。例如,若要创建一个按钮组件,可使用lv_XXX_create函数。这些创建函数会返回一个指向新创建组件对象(lv_obj_t…

百度文心一言接入流程-java版

百度文心一言接入流程-java版 一、准备工作二、API接口调用-java三、百度Prompt工程参考资料: 百度文心一言:https://yiyan.baidu.com/百度千帆大模型:https://qianfan.cloud.baidu.com/百度千帆大模型文档:https://cloud.baidu.com/doc/WENXINWORKSHOP/index.html千tokens…

Modbus TCP报错:Response length is only 0 bytes

问题描述: 使用modbus_tk库,通过Modbus tcp连接PLC时,python中的一个报错信息: Response length is only 0 bytes报错原因: 与Modbus TCP 服务端建立连接后没有断开,继续作为长连接使用,客户端…

时序数据库 TDengine 支持集成开源的物联网平台 ThingsBoard

Thingsboard 中“设备配置”和“设备”的关系是一对多的关系,通过设备配置为每个设备设置不同的配置,每个设备都会有一个与其关联的设备配置文件。等等,这不就是TDengine 中超级表的概念: 超级表是一种特殊的表结构,用…

Unity3D学习FPS游戏(4)重力模拟和角色跳跃

前言:前面两篇文章,已经实现了角色的移动和视角转动,但是角色并没有办法跳跃,有时候还会随着视角移动跑到天上。这是因为缺少重力系统,本篇将实现重力和角色跳跃功能。觉得有帮助的话可以点赞收藏支持一下!…

Spring Cloud:构建高可用分布式系统的利器

摘要:本文将介绍Spring Cloud,一个基于Spring Boot的开源微服务架构工具集。我们将探讨Spring Cloud的核心组件、特性以及如何使用Spring Cloud构建高可用、分布式系统。通过本文,读者将了解到Spring Cloud在实现微服务架构中的应用和优势。 …

ResNet-RS 乳腺癌识别

一、模型结构 1.1 模型思路 ResNet-RS是一种改进的ResNet架构,它在2021年由谷歌大脑和UC Berkeley的研究者们提出。ResNet-RS的提出基于对现有ResNet架构的深入研究,研究者们重新审视了ResNet的结构、训练方法以及缩放策略,并提出了一些改进…

git入门操作(2)

文章目录 git入门操作(2)git diff 查看差异git diff gitignore忽略文件1.在代码仓库创建这个文件2.添加对 log 文件过滤 连接远程仓库与ssh配置远程仓库和本地仓库关联步骤分支基本操作步骤命令: 合并冲突分支合并逻辑1.新建分支 dev&#xf…

MySQL查看当前客户端连接数的方法

每当有客户端连接到 MySQL 时,MySQL 会为该连接创建一个新的线程来处理所有与该连接相关的查询和操作。所以通过查看MySQL当前的连接线程数量就可以知道有多少客户端连接到MySQL。 方法一 Threads_connected 仅显示活跃的客户端连接数 SHOW STATUS LIKE Threads_…

H7-TOOL的LUA小程序教程第15期:电压,电流,NTC热敏电阻以及4-20mA输入(2024-10-21,已经发布)

LUA脚本的好处是用户可以根据自己注册的一批API(当前TOOL已经提供了几百个函数供大家使用),实现各种小程序,不再限制Flash里面已经下载的程序,就跟手机安装APP差不多,所以在H7-TOOL里面被广泛使用&#xff…

Go语言中三个输入函数(scanf,scan,scanln)的区别

Go语言中三个输入函数(scanf,scan,scanln)的区别 在 Go 语言中,fmt 包提供了三种输入函数:Scanf、Scan 和 Scanln。这三个函数都是用于从标准输入读取数据并存储到变量中,但是它们在处理输入的方式上有所不同。下面详细解读每个函数的特点和…

网站被浏览器提示“不安全”,如何快速解决

当网站被浏览器提示“不安全”时,这通常意味着网站存在某些安全隐患,需要立即采取措施进行解决。 一、具体原因如下: 1.如果网站使用的是HTTP协议,应立即升级HTTPS。HTTPS通过使用SSL证书加密来保护数据传输,提高了网…

CSS设置层叠样式时报红(identifier expected css/selector expected css)

不规范语法 如上图所示,在一个 css 文件中添加层叠样式时报红:at-rule or selector expected,意思就是说我们的语句不符合 css 的语法书写规范,虽然不会导致启动报错并且还能达到预期的样式效果,但是对于有强迫症的同学…

养狗为什么需要宠物空气净化器?宠物空气净化器排行榜公布!

刚开始养狗时候怎么没人跟我说要买宠物空气净化器呢?那时候什么都不懂,只买了狗粮、喂食碗、狗笼、狗窝、便盆、牵引绳以及一些狗狗玩具。结果一个星期就家里就被搞得狗毛乱飞、臭味熏天。最后在养狗博主的建议下买了一台宠物空气净化器,开了…