K-means聚类算法详解与实战

一、引言

K-means聚类算法是一种无监督学习算法,旨在将数据点划分为K个不同的聚类或群组,使得同一聚类内的数据点尽可能相似,而不同聚类间的数据点尽可能不同。在图像处理、数据挖掘、客户细分等领域有着广泛的应用。本文将通过图文结合的方式,详细介绍K-means聚类算法的原理、步骤,并通过Python代码展示其实现过程。

二、K-means算法原理

K-means算法基于迭代的思想,通过不断迭代优化聚类结果,最终将数据划分为K个聚类。算法的主要步骤如下:

  1. 初始化:随机选择K个数据点作为初始聚类中心(质心)。
  2. 分配数据点到最近的质心:对于每个数据点,计算其与所有质心的距离,并将其分配给距离最近的质心所对应的聚类。
  3. 更新质心:对于每个聚类,计算其内部所有数据点的均值,并将该均值设为新的质心。
  4. 迭代:重复步骤2和3,直到达到预设的迭代次数或聚类结果不再发生显著变化为止。

三、K-means算法实现

1. 数据准备

首先,我们需要准备一些数据来进行聚类。这里我们使用sklearn库中的make_blobs函数生成模拟数据。

from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt# 生成模拟数据
X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)# 绘制原始数据分布
plt.scatter(X[:, 0], X[:, 1], s=50)
plt.show()

2. 使用sklearn的K-means进行聚类

接下来,我们使用sklearn库中的KMeans类来进行K-means聚类。

from sklearn.cluster import KMeans# 设置聚类数量为4
kmeans = KMeans(n_clusters=4)# 拟合数据
kmeans.fit(X)# 获取聚类结果和质心位置
labels = kmeans.labels_
centers = kmeans.cluster_centers_# 绘制聚类结果和质心位置
plt.scatter(X[:, 0], X[:, 1], c=labels, s=50, cmap='viridis')
plt.scatter(centers[:, 0], centers[:, 1], c='black', s=200, alpha=0.5)
plt.show()

3. K-means算法性能评估

对于K-means聚类结果的评估,常用的指标有轮廓系数(Silhouette Coefficient)和Calinski-Harabasz Index等。这里我们使用轮廓系数来评估聚类效果。

from sklearn.metrics import silhouette_score# 计算轮廓系数
score = silhouette_score(X, labels)
print("Silhouette Coefficient: ", score)

四、总结

K-means聚类算法是一种简单而有效的无监督学习算法,适用于数据探索和初步的数据分析。通过调整聚类数量K和迭代次数等参数,我们可以得到不同的聚类结果。然而,K-means算法也有一些局限性,例如对初始质心的选择敏感、对噪声和异常值敏感等。在实际应用中,我们需要根据具体的数据特点和需求选择合适的聚类算法。

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

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

相关文章

sizeof 和 strlen 比较

sizeof 和 strlen 在 C 语言中都是用于获取某种“大小”的,但它们之间有着显著的区别。 sizeof sizeof 是一个运算符,用于计算数据类型或对象在内存中的大小(以字节为单位)。它可以在编译时确定结果,因为它计算的是类…

AcWing 3358:放养但没有完全放养 ← 按位匹配

【题目来源】https://www.acwing.com/problem/content/3361/【题目描述】 一个鲜为人知的事实是,奶牛拥有自己的文字:「牛文」。牛文由 26 个字母 a 到 z 组成,但是当奶牛说牛文时,可能与我们所熟悉的 abcdefghijklmnopqrstuvwxyz…

Origin电源维修高压发生器GEXUS-3 GEXUS-15R-02U

GEXUS-3电源维修 Origin高压发生器维修 Origin电源维修 光电设备电源维修 Origin高压电源维修故障分析应注意两点: 故障分析检测和故障硬件更换,根据高压电源故障提示和工作表现初步判断故障的类型和哪些硬件出了问题,再根据初步判断缩小检测…

java实现持续集成

要使用Java实现Jenkins持续集成,你可以使用Jenkins的Java客户端库来执行一些常见的操作,例如创建任务,触发构建等。下面是一个简单的示例代码,展示了如何使用Java实现Jenkins持续集成: java import com.offbytwo.jenk…

了解Spring的BeanPostProcessor

了解Spring的BeanPostProcessor Spring框架提供了一种机制,允许在Spring容器实例化Bean之前和之后进行自定义的修改。这个机制就是BeanPostProcessor接口。BeanPostProcessor是Spring的核心接口之一,用于在Spring容器创建和初始化Bean的过程中进行干预和…

Java-拼接字符串数组(String.join()方法)

问题引入 刷算法题lc2288的时候遇见的一个小细节,记录一下,有兴趣的朋友可以做一下,练习一下哈哈~ 此题需要使用大家都比较熟悉的split方法将句子按照空格拆分为字符串数组。 然后再在数组中对每一个字符串操作,操作完成后要求…

【尚庭公寓SpringBoot + Vue 项目实战】预约看房与租约管理(完结)

【尚庭公寓SpringBoot Vue 项目实战】预约看房与租约管理(完结) 文章目录 【尚庭公寓SpringBoot Vue 项目实战】预约看房与租约管理(完结)1、业务说明2、接口开发2.1、预约看房管理2.1.1.保存或更新看房预约2.1.2. 查询个人预约…

【linux】shell脚本中设置字体颜色,背景颜色详细攻略

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

Nginx Proxy 代理测试

目录 https://blog.csdn.net/Lzcsfg/article/details/139781909 一. 实验准备 二. 配置反向代理 三. 配置二层代理 解释流程 一. 实验准备 关闭防火墙和selinux,准备三台同一网段的虚拟机 localhostRoucky_linux9.4192.168.226.20localhostRoucky_linux9.419…

高校新闻头条系统

摘 要 随着互联网技术的快速发展,网络几乎成为了人们搜集信息和交流沟通最方便、快捷的通道,科技创新一直在影响着人们的生活,人们的衣食住行也在不断变化,与此同时,也大大改变了人们获取信息的方式,人们获…

Unity的渲染管线

渲染管线 概念 Unity的渲染管线是在图形学渲染管线的基础上,加上了高度可配置可扩展的框架,允许开发者自定义渲染流程。 渲染管线(渲染流水线)概述:将数据分阶段的变为屏幕图像的过程。 数据指的是模型、光源和摄像…

『FPGA通信接口』LVDS接口(4)LVDS接收端设计

文章目录 1.LVDS接收端概述2逻辑框图3.xapp855训练代码解读4.接收端发送端联调5.传送门 1.LVDS接收端概述 接收端的传输模型各个属性应该与LVDS发送端各属性一致,例如,如果用于接收CMOS图像传感器的图像数据,则接收端程序的串化因子、通道个…

最新版ChatGPT对话系统源码 Chat Nio系统源码

最新版ChatGPT对话系统源码 Chat Nio系统源码 支持 Vision 模型, 同时支持 直接上传图片 和 输入图片直链或 Base64 图片 功能 (如 GPT-4 Vision Preview, Gemini Pro Vision 等模型) 支持 DALL-E 模型绘图 支持 Midjourney / Niji 模型的 Imagine / Upscale / Variant / Re…

springboot 搭建一个 测试redis 集群连通性demo

背景&#xff1a;我需要用 springboot 建一个测试 redis 集群连通性的 demo 废话不多说直接上代码&#xff1a; 1.pom </dependency><!-- Spring Boot Starter Data Redis --><dependency><groupId>org.springframework.boot</groupId><arti…

【for循环】最大跨度

【for循环】最大跨度 时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】 【参考代码】 #include <iostream> using namespace std; int main(){ int n;int max 0, min 100;cin>>n;for(int i1; i<n; i1){int a;cin>>a;if(a>max){max a;}i…

VTABLE 基本表和透视表的分页功能

基本表和VTable数据分析透视表支持分页&#xff0c;但透视组合图不支持分页。 配置项&#xff1a; pagination.totalCount&#xff1a;数据项的总数。数据透视表中的VTable字段将被自动补充&#xff0c;以帮助用户获取数据项的总数。pagination.perPageCount&#xff1a;显示每…

STM32通过SPI硬件读写W25Q64

文章目录 1. W25Q64 2. 硬件电路 3. 软件/硬件波形对比 4. STM32中的SPI外设 5. 代码实现 5.1 MyI2C.c 5.2 MyI2C.h 5.3 W25Q64.c 5.4 W25Q64.h 5.5 W25Q64_Ins.h 5.6 main.c 1. W25Q64 对于SPI通信和W25Q64的详细解析可以看下面这篇文章 STM32单片机SPI通信详解-C…

Java宝藏实验资源库(8)多态、抽象类和接口

一、实验目的 理解面向对象程序的基本概念。掌握类的继承和多态的实现机制。熟悉抽象类和接口的用法。 二、实验内容、过程及结果 **1.Using the classes defined in Listing 13.1, 13.2, 13.3, write a test program that creates an array of some Circle and Rectangle in…

轨道地铁智能录音无线通信解决方案

一、行业背景 随着社会经济和通信行业的迅速发展&#xff0c;电话已成为企业运作中必不可少的联络手段。但电话作为即时沟通手段&#xff0c;往往无法进行事后追溯和复盘&#xff0c;容易造成不必要的麻烦。尤其在交通轨交行业领域&#xff0c;对语音工作的发生过程更需要有个…

System.getProperty()方法总结

System.getProperty()方法总结 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;System.getProperty()方法是Java中用于获取系统属性的方法之一。它允许我们访问J…