「AIGC算法」K-means聚类模型

本文主要介绍K-means聚类模型原理及实践demo。

一、原理

K-means聚类是一种经典的、广泛使用的无监督学习算法,主要用于将数据集划分为多个类别或“簇”。其目标是将数据集中的每个点分配到K个聚类中心之一,使得簇内的点尽可能相似,而簇间的点尽可能不同。

K-means算法的基本步骤:

  1. 初始化:选择K个数据点作为初始聚类中心(质心)。
  2. 分配:将每个点分配到最近的聚类中心,形成K个簇。
  3. 更新:重新计算每个簇的聚类中心,通常是簇内所有点的均值。
  4. 迭代:重复步骤2和3,直到满足停止条件,如质心的变化小于某个阈值或达到预设的迭代次数。

K-means算法的关键点:

  • K的选择:K的选择通常是基于经验或使用如肘部法则(Elbow Method)等方法确定的。
  • 初始化方法:可以随机选择,也可以使用如K-means++等更高级的方法以提高性能。
  • 收敛性:K-means算法在局部最优上是收敛的,可能不会找到全局最优解,因此可能需要多次运行以获得最佳结果。
  • 性能度量:使用如轮廓系数(Silhouette Coefficient)等指标来评估聚类效果。

K-means算法的优缺点:

  • 优点

    • 简单、直观,易于实现和理解。
    • 训练速度快,适合处理大型数据集。
    • 对于球形簇表现良好。
  • 缺点

    • 对初始聚类中心敏感,可能导致局部最优解。
    • 需要预先指定K值,但K值的选择通常不是显而易见的。
    • 对噪声和异常值敏感。
    • 只能发现球形簇,对于非球形簇可能效果不佳。

K-means聚类模型的应用场景:

  • 图像分割
  • 市场细分
  • 异常检测
  • 数据压缩
  • 特征提取

K-means聚类是一种强大的工具,但需要根据具体问题和数据特性来适当使用。在实际应用中,可能需要与其他聚类算法或预处理步骤结合使用,以获得最佳效果。

二、举个栗子

使用scikit-learn中的内置数据集Iris来进行聚类。

预期效果

请添加图片描述

核心代码

# 导入必要的库
from sklearn.cluster import KMeans
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt# 加载Iris数据集
iris = load_iris()
X = iris.data# 选择要使用的聚类数目,这里我们选择3个聚类
k = 3# 初始化KMeans对象
kmeans = KMeans(n_clusters=k, random_state=42)# 执行KMeans聚类
kmeans.fit(X)# 输出聚类中心
centroids = kmeans.cluster_centers_# 输出每个数据点的聚类标签
labels = kmeans.labels_# 可视化聚类结果(这里我们取前两个特征进行可视化,因为它们是二维的)
plt.scatter(X[:, 0], X[:, 1], c=labels, s=50, cmap='viridis')
plt.scatter(centroids[:, 0], centroids[:, 1], c='red', s=200, alpha=0.75, marker='X')
plt.title('K-means Clustering of Iris Dataset')
plt.xlabel('Sepal Length')
plt.ylabel('Sepal Width')
plt.show()

Iris数据集是一个非常著名且被广泛使用的多变量数据集,用于测试统计算法和机器学习模型,如分类、聚类和回归。这个数据集包含了150个样本,每个样本有4个特征,这些特征描述了鸢尾花(Iris)的三个不同属(setosa, versicolor, virginica)的度量(测量)。
具体来说,Iris数据集的每个样本包括以下特征:

  1. 花萼长度(Sepal Length):花萼的最大长度,单位通常是厘米。
  2. 花萼宽度(Sepal Width):花萼的宽度,单位是厘米。
  3. 花瓣长度(Petal Length):花瓣的最大长度,单位是厘米。
  4. 花瓣宽度(Petal Width):花瓣的宽度,单位是厘米。

这些特征的测量值是浮点数,范围大致如下:

  • 花萼长度:4.3cm至7.9cm
  • 花萼宽度:2.0cm至4.4cm
  • 花瓣长度:1.0cm至6.9cm
  • 花瓣宽度:0.1cm至2.5cm

除了这些特征外,Iris数据集还包含了每个样本对应的真实类别标签,这使得它成为监督学习算法的绝佳数据集。然而,由于K-means是一种无监督学习算法,它不使用这些标签信息,而是试图根据数据的特征发现数据的内在结构。

Iris数据集由于其简单性、易于理解性以及包含有限数量的类别和特征,常被用作教学和算法测试的基准。它允许研究人员和学生在没有大量数据预处理的情况下,快速地测试和比较不同算法的性能。

三、自定义实例

使用自定义的Excel文档作为数据集进行K-means聚类

预期效果

在这里插入图片描述

核心代码

# 导入必要的库
import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt# 加载CSV数据集
# 假设CSV文件有两列,分别是Sepal Length和Sepal Width
# 请根据你的CSV文件的实际列名进行调整
df = pd.read_csv('demoDB.csv')
X = df.values# 选择要使用的聚类数目,这里我们选择3个聚类
k = 3# 初始化KMeans对象
kmeans = KMeans(n_clusters=k, random_state=42)# 执行KMeans聚类
kmeans.fit(X)# 输出聚类中心
centroids = kmeans.cluster_centers_# 输出每个数据点的聚类标签
labels = kmeans.labels_# 可视化聚类结果(这里我们取前两个特征进行可视化)
plt.scatter(X[:, 0], X[:, 1], c=labels, s=50, cmap='viridis')
plt.scatter(centroids[:, 0], centroids[:, 1], c='red', s=200, alpha=0.75, marker='X')
plt.title('K-means Clustering of Custom Dataset')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()

数据源

demoDB.csv
在这里插入图片描述

解决方案

K-means聚类算法可以应用于生活中的许多实际问题,尤其是在需要将数据分组或分类,但又没有明确分组标签的情况下。以下是一些例子,展示了如何使用K-means聚类算法解决实际问题:

1. 市场细分

企业经常使用K-means聚类来对客户进行细分,以便更好地了解他们的行为和偏好。通过分析客户的购买历史、年龄、性别和收入等特征,K-means可以帮助企业识别不同的客户群体,并为每个群体定制营销策略。

2. 社交网络分析

在社交网络分析中,K-means可以用来识别社区结构,即在社交网络中分组紧密连接的用户。通过分析用户的互动、兴趣和行为,K-means可以揭示社交网络中的不同社区。

3. 基因表达分析

在生物信息学中,K-means聚类可以用于基因表达数据的分析,以识别具有相似表达模式的基因。这有助于理解不同基因的功能和它们在疾病中的作用。

4. 图像压缩

K-means聚类可以用于图像压缩技术,如颜色量化。通过将图像的颜色聚类为几个代表颜色,K-means可以减少图像文件的大小,同时尽量保持其视觉质量。

5. 异常检测

在许多领域,如金融交易、网络安全或工业系统监控中,K-means可以用来检测异常或欺诈行为。通过分析正常行为的模式,K-means可以识别那些不符合常规模式的异常点。

应用实例:市场细分

假设我们想要使用K-means聚类算法对客户进行细分。以下是基于前面提供的代码模板,针对市场细分问题的示例:

# 导入必要的库
import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt# 加载CSV数据集
# 假设CSV文件包含了客户的年龄、收入和购买频率等特征
df = pd.read_csv('customer_data.csv')
X = df.values  # 假设所有列都是数值型特征# 选择要使用的聚类数目,这里我们选择3个聚类,根据业务需求调整
k = 3# 初始化KMeans对象
kmeans = KMeans(n_clusters=k, random_state=42)# 执行KMeans聚类
kmeans.fit(X)# 输出聚类中心
centroids = kmeans.cluster_centers_# 输出每个数据点的聚类标签
labels = kmeans.labels_# 可视化聚类结果,这里我们取年龄和收入进行可视化
plt.figure(figsize=(10, 6))
plt.scatter(X[:, 0], X[:, 1], c=labels, s=50, cmap='viridis')  # 假设第0列是年龄,第1列是收入
plt.scatter(centroids[:, 0], centroids[:, 1], c='red', s=200, alpha=0.75, marker='X')
plt.title('K-means Clustering for Customer Segmentation')
plt.xlabel('Age')
plt.ylabel('Income')
plt.show()

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【SRC实战】信息泄露管理员token

【SRC实战】信息泄露管理员token 原创 挖个洞先 挖个洞先 2024-05-12 17:04 湖北 “ 以下漏洞均为实验靶场,如有雷同,纯属巧合 ” 01 — 漏洞证明 1、使用灯塔收集到config.js,存在VUE_APP_USERTOKEN参数 灯塔ARL https://github.com/Top…

日本率先研发成功6G设备,刺痛了谁?为何日本能率先突破?

日本率先研发成功6G设备,无线数据速率是5G的百倍,这让日本方面兴奋莫名,毕竟日本在科技方面从1990年代以来太缺少突破的创新了,那么日本为何如今在6G技术上能率先突破呢? 日本在1980年代末期达到顶峰,它的科…

研究生学习---找工作

规划 研一~研二上学期完成小论文,实习,秋招 竞赛:kaggle? 面试题一般简单且为原题,笔试题目很难,不会出原题 项目 找工作软件

立创EDA绘制PCB电路板

1、绘制好原理图后,点击设计---原理图转PCB,生成PCB文件 2、将元器件拖入电路板方框内,摆放布局并使用工具栏布线、放置过孔及丝印 3、然后顶层和底层铺铜 4、后面就可以生成制板文件发送嘉立创制板了。

Java为什么会成为现在主流的编程语言

Java为什么会成为现在的主流语言 前言一、Java语言概述Java是什么为什么大多数人会选择从事Java为什么从事Java的工作者数量从年递减 二、Java语言的特点简单性面向对象分布式(微服务)健壮性安全性体系结构中立可移植性解释型高性能多线程动态性 三、Jav…

MySQL、JDBC复盘及规划

数据库仍有习题尚未做完,策略从一天做完改为每天5到10题,以此达到掌握和复习的效果,JDBC的六部仍需每天练习,从明天开始正式进行JavaWeb的学习,预计持续到七月中旬,还会完成一个书城项目,六月底…

深入理解MySQL三大日志:redo log、binlog、undo log

前言 MySQL是一个功能强大的关系型数据库管理系统,它的高可靠性、高性能和易用性使得它成为众多企业和开发者的首选。在MySQL内部,为了保证数据的完整性、恢复能力和并发性能,设计了一套复杂的日志系统。其中,redo log、bin log和…

python实现读取串口数据-使用LibModbus库实现一个实时读取串口数据

在工业自动化领域,Modbus协议因其简单、可靠和广泛支持而备受青睐。其中,Modbus RTU(串行通信)以其低成本和易实施性在许多场景中发挥着重要作用。 01 Modbus RTU协议简介 Modbus RTU是一种基于串行通信的Modbus协议,…

秋招算法——AcWing101——拦截导弹

文章目录 题目描述思路分析实现源码分析总结 题目描述 思路分析 目前是有一个笨办法,就是创建链表记录每一个最长下降子序列所对应的节点的链接,然后逐个记录所有结点的访问情况,直接所有节点都被访问过。这个方法不是很好,因为需…

量化交易策略:经典量化交易策略大汇总(内附开通方法)

01、什么是量化交易? 量化交易是一种依赖于先进的数学模型和计算机技术的交易方式,旨在制定能带来超额收益的多种“大概率”事件策略。 这个过程从大量的历史数据中筛选,极大地减少了投资者情绪波动的影响,避免了在市场极度狂热或…

视频号小店是个风口吗?今年去做是明智的选择吗?一篇详解!

大家好,我是电商小V 视频号才刚刚推出一年半的时间,可以说自从推出之后这个项目的知名度一直是处于飙升的状态,一直处于爆火的状态,也是吸引了很多想做电商,想去创业的小伙伴,最主要的就是视频号小店背靠的…

nginx 发布静态资源

一. nginx 发布静态资源 在nginx中nginx.conf配置文件中添加内容如下: server {listen 90;server_name localhost;# 配置静态资源文件,就可以访问了location / {root /home/fooie-shop;index index.html;}# 配置音频和图片资源location /imoo…

香港电讯高效网络,助力新消费品牌抓住拓展香港市场新风口

自今年初香港与内地全面恢复通关,两地同胞跨境消费热潮持续升温。港人“北上”消费掀起风潮的同时,香港市场也成为内地新消费品牌拓展的热门目标。从糕点、茶饮、连锁餐饮到服饰,越来越多内地品牌进驻香港。新消费品牌要想在香港开设门店&…

基于火山引擎云搜索的混合搜索实战

在搜索应用中,传统的 Keyword Search 一直是主要的搜索方法,它适合精确匹配查询的场景,能够提供低延迟和良好的结果可解释性,但是 Keyword Search 并没有考虑上下文信息,可能产生不相关的结果。最近几年,基…

PyCharm2024安装教程

PyCharm是一款功能强大的Python集成开发环境(IDE),它提供了许多工具和功能来帮助开发者编写、调试和测试Python代码。以下是使用PyCharm的基本步骤: 安装PyCharm:首先,你需要从JetBrains官方网站下载并安装…

【信息论系列1】一文搞定各种奇奇怪怪信道的信道容量C计算(含多角度理解推导)

引言 信息论中,通信信道是一个描述给定信道输入X条件下信道输出Y的条件概率分布,也就是P(Y|X) 维恩图 两个圆分别表示X和Y的信息熵,即观测相应随机变量所能确认的信息量/相应随机变量蕴含的不确定性两个圆求并集得到联合熵H(X,Y),因为观测联合事件需要同时确认两个随机变…

Unity 2021 升级至团结引擎

UnityWebRequest 报错 InvalidOperationException: Insecure connection not allowed 解决方法 不兼容jdk 8 需要安装 JDK11 64bit 必须JDK 11,高版本也不行 安卓环境hub 未给我安装完全。 Data\PlaybackEngines\AndroidPlayer 并没有NDK,SDK。但是 HUB 显示已经…

8.微服务项目结合SpringSecurity项目结构

项目结构 acl_parent:创建父工程用来管理依赖版本 common service_base&#xff1a;工具类 spring_security: Spring Security相关配置 infrastructure api_gateway: 网关 service service_acl: 实现权限管理功能代码 acl_parent的pom.xml <?xml version"1.0" …

MySQL表的基本操作

表 创建表 comment是添加一个注释 语法&#xff1a; 说明&#xff1a; field 表示列名 datatype 表示列的类型 character set 字符集&#xff0c;如果没有指定字符集&#xff0c;则以所在数据库的字符集为准 collate 校验规则&#xff0c;如果没有指定校验规则&#xff0c;则…

【原创】java+springboot+mysql企业邮件管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…