从零入手人工智能(6)—— 聚类

news2025/4/5 19:01:02

1.小故事

有一家零售连锁店,他们以其精准的市场定位和个性化的顾客服务而闻名,随着市场竞争的加剧和顾客需求的多样化,他们的管理层开始意识到,只有更加深入地了解他们的顾客群体,以便更好地满足他们的需求
在这里插入图片描述

他们定使用人工智能算法帮助他们解决这个问题,他们聘请了一支由数据专家组成的团队,负责开发和实施这个项目。数据专家首先收集了大量的顾客数据,包括购物历史、偏好、地理位置、年龄和性别等。接下来,数据科专家使用了K-means聚类算法处理这些数据,并得到了几个不同的顾客群体。每个群体都具有独特的购物行为和偏好。例如,一个群体主要由年轻女性组成,她们喜欢购买时尚服饰和化妆品;另一个群体则主要由中年男性组成,他们更关注电子产品和家居用品。

有了这些聚类结果,这家零售连锁店的管理层开始重新审视他们的业务策略。他们针对每个顾客群体制定了个性化的营销策略,包括推出定制化的促销活动、优化商品陈列和提供个性化的购物建议。这些策略的实施取得了显著的效果,销售额和顾客满意度都得到了显著提升。此外,他们还利用聚类算法来改进他们的库存管理。他们根据每个顾客群体的购物习惯和偏好,预测了未来一段时间内的商品需求,并据此调整了库存水平。这不仅降低了库存积压和过期损失的风险,还确保了每个门店都能够满足其所在区域内顾客的需求。

通过深入分析顾客数据并利用聚类算法来发现顾客群体之间的相似之处和差异,这家零售连锁店成功地提高了其业务效率和顾客满意度,这证明了聚类算法在现代商业中的重要性。

2.聚类算法

定义:聚类算法是一种无监督学习方法,用于将数据集中的样本划分为若干个不相交的子集,每个子集被称为一个“类”。
无监督学习方法是一种机器学习算法,其特点是在没有标签或已知结果的数据集上进行训练和学习。这种学习方法允许机器从数据本身提取结构和规律,而无需依赖外部的监督或指导,
用于从未标记的数据集中进行分析,发现数据中的隐藏结构关系。
聚类算法是基于数据样本之间的相似性或距离进行的,使得同一簇内的数据样本尽可能相似,而不同簇之间的数据样本尽可能不同。聚类算法不需要预先标注的类别或标签,而是根据数据本身的特性进行自动分类
聚类算法简单的说就像人一样将世间的万物进行分类,下图是人类对各种“猴子”的分类。
在这里插入图片描述

聚类算法的应用
客户分析:在市场营销和电子商务中,聚类算法可以帮助企业识别不同类型的客户,并制定相应的营销策略。
社交网络分析:通过分析社交网络中的用户数据,聚类算法可以帮助识别不同的社交群体或社区。
生物信息学:在基因表达数据分析和蛋白质功能预测中,聚类算法可以帮助识别具有相似功能的基因或蛋白质。
总的来说,聚类算法在机器学习领域扮演着重要的角色,其应用领域涵盖了众多行业和领域
在这里插入图片描述

3.聚类算法分类

聚类算法不需要事先知道数据集的标签信息,它通过数据本身的特征来发现数据中的结构或模式。下面介绍几种常见的聚类算法(由于我们是从零入门,因此只需要了解以下算法既可):

K-均值聚类(K-means Clustering)
K-均值聚类通过选择K个点作为初始的聚类中心,然后将数据集中的每个点分配到最近的聚类中心,形成K个簇。之后,重新计算每个簇的聚类中心(通常是簇内所有点的均值),并重复上述过程,直到聚类中心不再发生变化或达到预设的迭代次数。
请添加图片描述

均值漂移聚类算法(Mean Shift)
均值漂移聚类算法通过计算滑动窗口中的均值来更新中心点的候选框,以此达到找到每个簇中心点的目的。然后在剩下的处理阶段中,对这些候选窗口进行滤波以消除近似或重复的窗口,找到最终的中心点及其对应的簇。
请添加图片描述

DBSCAN聚类算法
DBSCAN聚类算法(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,能够发现任意形状的簇,并识别噪声点。算法通过选择样本点,检查其ε邻域内的点数是否不少于minPts,来判定该点是否为核心点,进而形成簇。

层次聚类算法
层次聚类是一种基于树状结构的聚类方法,分为自下而上(凝聚)和自上而下(分裂)两种。凝聚层次聚类从每个数据点开始为一个簇,不断合并最相似的簇;分裂层次聚类开始时将所有数据点视为一个簇,不断拆分最不相似的簇。

高斯混合模型(GMM)
高斯混合模型是一种基于概率模型的聚类方法,假设数据由多个高斯分布组成,通过期望最大化(EM)算法估计参数。模型初始化每个高斯分布的参数,然后迭代计算每个样本属于每个高斯分布的概率,并根据这些概率更新高斯分布的参数。

4.聚类和分类的误区

前几个章节我们实战了逻辑回归和决策树这两个算法,逻辑回归和决策树都是分类算法,聚类也是将不同的数据进行分类,这不是一回事吗?
误区:聚类算法可以实现数据分类,因此聚类算法和分类算法是一样的。

在这里插入图片描述

聚类分类是数据挖掘和机器学习领域中两个重要概念,它们之间存在显著的差异。聚类是一种无监督学习方法,它不需要事先定义好的类别标签。而分类则是有监督学习,需要使用带有标签的数据集进行训练。

误区在于认为聚类可以像分类那样直接“预测”或“分配”新的数据点到已定义的类别中。实际上,聚类是在未标记数据中(没有已知结果或标签),根据数据点之间的相似性或距离来分组数据,形成自然的类别,而不是将数据点分配给预先定义的类别。
在这里插入图片描述

比如:在远古时代,人类就使用聚类算法将不同的物种进行分类,他们会把温和的食草动物归类为“安全动物”,会把长了4条腿的大型食肉猫科动物划分为“危险动物”。同时他们会把这个不同类型动物的特征告诉给他们的后代,后代会根据这些特征标签来对看到的动物进行分类,判断该动物是否存在危险。
从上面这个例子可知聚类算法其实就是一种抽象方法,聚类算法其可以根据事物之间的特征和关系,对未知实物进行分类定义。而分类算法是根据已有的定义和规则对事务进行分类
分类是人!聚类是神!

5.工具包

本实战依赖了5个工具库:scikit-learn、pandas、matplotlib、numpy 、seaborn
在这里插入图片描述

6.程序流程

本次实战代码的流程包括三个重要步骤:数据预处理、模型构建与训练、模型验证
在这里插入图片描述
数据预处理阶段:完成数据的加载、转换、归一化等步骤。
模型构建与训练阶段:完成模型建立,并通过训练数据来训练模型。
模型验证阶段:评估模型的准确性,可视化结果。

7.入门程序

入门代码自动生成数据进行聚类处理。

import numpy as np  
import matplotlib.pyplot as plt  
from sklearn.cluster import KMeans  
from sklearn.datasets import make_blobs  
  
# 生成样本数据  make_blobs用于生成模拟的聚类数据集  centers为聚类中心的数量
X, y = make_blobs(n_samples=100, centers=5, cluster_std=0.60, random_state=0) 

 # 应用KMeans聚类模型  
kmeans = KMeans(n_clusters=5) 
#训练数据
kmeans.fit(X)  
#使用模型进行预测,y_kmeans 是一个预测结果,它是一个数组,其中的每个元素对应 X 中的一个样本,表示该样本被分配到的聚类中心的索引
y_kmeans = kmeans.predict(X)  
#显示聚类结果
print(y_kmeans)
# centers 是一个数组,其中的每个元素代表一个聚类中心的坐标
centers = kmeans.cluster_centers_  
print(centers)
#显示了5个聚类中心点

在这里插入图片描述

# 可视化结果 
#绘制X0 X1组成的散点图,散点图中的每个点的颜色由y_kmeans 数组中的值指定, cmap='viridis' 指定了一个颜色映射表
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)  
plt.title("KMeans Clustering")  
plt.xlabel("Feature 1")  
plt.ylabel("Feature 2")  
plt.show()

在这里插入图片描述

8.进阶实战

进阶实战代码读取Mall_Customers数据,该数据为一个商城用户数据,使用聚类算法对用户进行分类。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

data = pd.read_csv('Mall_Customers.csv')
print(data.shape)

data.head()
#性别 年龄 收入 得分

在这里插入图片描述

#用户ID对计算无用,去掉改行
data = data.drop('CustomerID',axis = 1 )
data.head()

data.info()

在这里插入图片描述

sns.pairplot(data)

在这里插入图片描述

fig, axis = plt.subplots(figsize=(5, 5))
#Genre  Male 转换成 1 , Female 转换成  0
data['Genre'] = data['Genre'].map({'Male': 1, 'Female': 0}) 
#corr() 函数计算的是皮尔逊相关系数它衡量的是两个变量之间的线性相关程度。相关系数的值范围从-11,其中:
#1 表示完全正相关,即当一个变量增加时,另一个变量也增加。
#-1 表示完全负相关,即当一个变量增加时,另一个变量减少。
#0 表示没有线性相关。
corr = data.corr()
#显示数据中的变量之间的相关程度热力图
sns.heatmap(corr, annot=True, cmap='magma', fmt=".2f", linewidths=.5) 

在这里插入图片描述

x = data.iloc[:, [2, 3]].values
from sklearn.cluster import KMeans
#改变聚类数K,然后进行聚类,计算损失函数,拐点处即为推荐的聚类数 (即通过此点后,聚类数的增大也不会对损失函数的下降带来很大的影响,所以会选择拐点) 
wcss = []
for i in range(1, 11):
  km = KMeans(n_clusters = i, init = 'k-means++', max_iter = 300, n_init = 10, random_state = 0)
  km.fit(x)
  wcss.append(km.inertia_)
  
plt.plot(range(1, 11), wcss)
plt.title('The Elbow Method')
plt.xlabel('No. of Clusters')
plt.ylabel('wcss')
plt.show()
#拐点处为5,因此聚类数设置为5

在这里插入图片描述

#建立聚类模型 ,聚类数设置为5
km = KMeans(n_clusters = 5, init = 'k-means++', max_iter = 300, n_init = 10, random_state = 0)
y_means = km.fit_predict(x)

#可视化数据
plt.scatter(x[:, 0], x[:, 1], c=y_means, s=50, cmap='viridis')  
plt.scatter(km.cluster_centers_[:,0], km.cluster_centers_[:,1], c='red', s=200, alpha=0.75) 
plt.title('K Means Clustering')
plt.xlabel('Annual Income')
plt.ylabel('Spending Score')
plt.show()

在这里插入图片描述

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

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

相关文章

渗透测试——利用公网反弹shell到本地的两种方式,vmware虚拟机与主机的端口转发,本地ssh无法上线的问题解决

解决问题: 因长期使用本地模拟靶场,实战护网时并非模拟靶场,shell反弹需要利用公网测试。解决目标站无法反弹到本地的情况。解决本地是windows,虚拟机是kail、linux,无法相互转换流量的情况。 环境搭建 靶机 centOS7 …

HarmonyOS(45) 控件拖动或者拖拽PanGesture

PanGesture实现控件拖动的效果,通过拖动的坐标位置调用position或者translate方法来更新UI的位置。效果见下图: 具体代码如下: // xxx.ets Entry Component struct PanGestureExample {State offsetX: number 0State offsetY: number 0pos…

做视频混剪都是去哪里找高清素材的?分享10个高清视频素材库

提升视频混剪质感的10个高清素材库推荐 在这个视觉体验至上的时代,视频的视觉质量对吸引观众至关重要。如果你正在寻找高清素材以提升视频混剪作品的层次,那么你来对地方了。今天,我将为你揭秘10个视频混剪达人常用的高清素材库,…

html+css+js前端作业 王者荣耀官网5个页面带js

htmlcssjs前端作业 王者荣耀官网5个页面带js 下载地址 https://download.csdn.net/download/qq_42431718/89574989 目录1 目录2 目录3 项目视频 王者荣耀5个页面(带js) 页面1 页面2 页面3 页面4 页面5

大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

前端文件下载word乱码问题

记录一次word下载乱码问题: 用的请求是axios库,然后用Blob去接收二进制文件 思路:现在的解决办法有以下几种,看看是对应哪种,可以尝试解决 1.将响应类型设为blob,这也是最重要的,如果没有解决…

LeetCode 2766题: 重新放置石块(原创)

【题目描述】 给你一个下标从 0 开始的整数数组 nums ,表示一些石块的初始位置。再给你两个长度 相等 下标从 0 开始的整数数组 moveFrom 和 moveTo 。 在 moveFrom.length 次操作内,你可以改变石块的位置。在第 i 次操作中,你将位置在 moveF…

C++STL详解(一)——String接口详解(上)!!!

目录 一.string类介绍 二.string类的构造赋值 2.1string类的拷贝和构造函数 2.2深拷贝 三.string类的插入 3.1push_back 3.2append 3.3操作符 3.4insert 四.string的删除 4.1pop_back 4.2erase 五.string的查找 5.1find 5.2rfind 六.string的比较 6.1compare函…

LeetCode 热题 HOT 100 (011/100)【宇宙最简单版】

【图论】No. 0200 岛屿数量 【中等】👉力扣对应题目指路 希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#xf…

使用AOP优化Spring Boot Controller参数:自动填充常用字段的技巧

欢迎来到我的博客,代码的世界里,每一行都是一个故事 🎏:你只管努力,剩下的交给时间 🏠 :小破站 使用AOP优化Spring Boot Controller参数:自动填充常用字段的技巧 前言为什么使用AOP为…

web网站组成

web网站由四部分组成:浏览器 前端服务器 后端服务器 数据库服务器 流程: 1.浏览器输入网站后,向前端服务器发送请求,前端服务器响应,静态的数据给浏览器。 2.前端代码中script中有url,这个是向后台发送请求的网…

项目标红,识别不了maven项目,解决办法

首先,检查 preferences 其次,检查IDEA 的 jdk。File-》Project Structure 最后: 1. 2. mvn clean install -Dmaven.test.skiptrue 跳过单元测试 maven跳过单元测试-maven.test.skip和skipTests的区别-CSDN博客

vue3+g2plot实现词云图

词云图 效果预览: 核心代码: import {WordCloud } from @antv/g2plot;fetch(https://gw.alipayobjects.com/os/antfincdn/jPKbal7r9r/mock.json).then((res) => res.json()).then((data) => {const wordCloud = new WordCloud(container, {data,wordField: x,weigh…

细说MCU用DMA实现DAC输出的方法

目录 一、建立新工程 1.项目依赖的硬件 2.配置DAC 3.配置DMA 4.配置TIM3 5.选择时钟源和Debug 6.配置系统时钟 二、代码修改 1. 启动定时器和DMA 2.定义输出波形数据 3.通过MATLAB产生这个波形数据的方法 三、查看结果 用DMA的方式将位于存储器(数组)中的数据传递…

centos中zabbix安装、卸载及遇到的问题

目录 Zabbix简介Zabbix5.0和Zabbix7.0的区别监控能力方面模板和 API 方面性能、速度方面 centos7安装Zabbix(5.0)安装zabbix遇到的问题卸载Zabbix Zabbix简介 Zabbix 是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix 能监视各种网络参…

三分钟带你了解Python文件操作与IO流

在探索编程世界的奇幻旅程中,文件操作和IO(输入/输出)流是每一个探险者必须掌握的基础技能。在Python的世界中,这些技能尤为关键,它们像是巫师手中的魔杖,能让我们与文件进行深度的交流。本文将带你快速了解…

springboo 整合 redis

springBoot 整合 redis starter启动依赖。—包含自动装配类—完成相应的装配功能。 引入依赖 <!--引入了redis整合springboot 的依赖--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis&…

泵浦光与斯托克斯光相遇耦合效应的matlab模拟与仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1拉曼散射基础 4.2非线性耦合方程 5.完整程序 1.程序功能描述 泵浦光与斯托克斯光相遇耦合效应的matlab模拟与仿真. 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 &#xff0…

面试场景题系列--(2)短 URL 生成器设计:百亿短 URL 怎样做到无冲突?--xunznux

文章目录 面试场景题&#xff1a;短 URL 生成器设计&#xff1a;百亿短 URL 怎样做到无冲突&#xff1f;1. 需求分析2. 短链接生成算法2.1 自增法2.2 散列函数法2.3 预生成法 3. 部署模型3.1 其他部署方案 4. 设计4.1 重定向响应码4.2 短 URL 预生成文件及预加载4.3 用户自定义…

redis 基础命令

1.数据库命令 select 库名&#xff1b;切换库 flushdb 清空库 flushall 清空所有库 redis支持的数据类型有很多&#xff0c;使用最频繁的有String 字符串类型&#xff0c;List队列&#xff0c;Hash&#xff0c;Zset有序集合&#xff0c;Set集合。 2.字符串类型命令 表示k…