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

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 snsdata = 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://xiahunao.cn/news/3266299.html

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

相关文章

文件包含漏洞--pyload

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 一.PHP伪协议利用 php://协议 php://filter :用于在读取和写入文件时进行过滤和转换操作。 通常利用文件包含执行php://filter伪协议读取的源码会被服务器执行从而不会显示&#xf…

重塑生态体系 深挖应用场景 萤石诠释AI时代智慧生活新图景

7月24日,“智动新生,尽在掌控”2024萤石夏季新品发布会在杭州举办。来自全国各地的萤石合作伙伴、行业从业者及相关媒体,共聚杭州,共同见证拥抱AI的萤石,将如何全新升级,AI加持下的智慧生活又有何不同。 发…

MATLAB学习日志DAY16

16.数组类型(1) 16.1多维数组 MATLAB 环境中的多维数组是具有多个下标的数组。创建多维数组的一种方法是调用具有多个参数的 zeros、ones、rand 或 randn。 R randn(3,4,5); 创建一个 345 数组,共包含 3*4*5 60 个正态分布的随机元素。…

【Golang 面试基础题】每日 5 题(七)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…

升腾c92刷bios(一)

一、刷机bios 原机的bios是不允许设备通过usb接口进行系统更换,需要输入boot的正好和密码才可以,可惜的是我们并不知道原机的密码是什么。 步骤如下: 1、u盘进行格式化为fat32格式 2、将c92的bios程序进行备份和升级(文章结尾提…

Mindspore框架循环神经网络RNN模型实现情感分类|(三)RNN模型构建

Mindspore框架循环神经网络RNN模型实现情感分类 Mindspore框架循环神经网络RNN模型实现情感分类|(一)IMDB影评数据集准备 Mindspore框架循环神经网络RNN模型实现情感分类|(二)预训练词向量 Mindspore框架循环神经网络RNN模型实现…

数据集成工具之kettle

Kettle 是一个用于数据集成的开源工具,由 Pentaho 开发,现已由 Hitachi Vantara 维护。Kettle 的全名是 Pentaho Data Integration (PDI),主要用于数据提取、转换和加载(ETL)过程。 1. 核心组件 Spoon: 图形化的设计工…

Java | Leetcode Java题解之第283题移动零

题目&#xff1a; 题解&#xff1a; class Solution {public void moveZeroes(int[] nums) {int n nums.length, left 0, right 0;while (right < n) {if (nums[right] ! 0) {swap(nums, left, right);left;}right;}}public void swap(int[] nums, int left, int right)…

【Spring Boot教程:从入门到精通】掌握Spring Boot开发技巧与窍门(三)-配置git环境和项目创建

主要介绍了如何创建一个Springboot项目以及运行Springboot项目访问内部的html页面&#xff01;&#xff01;&#xff01; 文章目录 前言 配置git环境 创建项目 ​编辑 在SpringBoot中解决跨域问题 配置Vue 安装Nodejs 安装vue/cli 启动vue自带的图形化项目管理界面 总结 前言 …

k8s核心知识总结

写在前面 时间一下子到了7月份尾&#xff1b;整个7月份都乱糟糟的&#xff0c;不管怎么样&#xff0c;日子还是得过啊&#xff0c; 1、7月份核心了解个关于k8s&#xff0c;iceberg等相关技术&#xff0c;了解了相关的基础逻辑&#xff0c;虽然和数开主线有点偏&#xff0c;但是…

【b站-湖科大教书匠】5 运输层 - 计算机网络微课堂

课程地址&#xff1a;【计算机网络微课堂&#xff08;有字幕无背景音乐版&#xff09;】 https://www.bilibili.com/video/BV1c4411d7jb/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 5 运输层 5.1 运输层概述 5.2 运输层端口号、复用与分用…

三维重建 概论

三维重建的方式 通俗来讲,三维重建就是将2D的数据生成3D的模型。 首先将2D的物体,通过各种方法,算法形成几何网格对象,同时用深度信息,处理远近,遮罩等关系,形成最终的3D模型。 在计算机视觉中,三维重建是指根据单视图或者多视图图像重建原始三维信息的过程。 单视图缺…

简单使用nginx

打开下载的nginx文件夹下的。。具体地址 打开并编辑nginx.conf文件 server {listen 8089;//访问端口号server_name localhost;//访问地址#charset koi8-r;#access_log logs/host.access.log main;location / {root D:/development/dist/;//dist包地址index index.h…

论文阅读:面向自动驾驶场景的多目标点云检测算法

论文地址:面向自动驾驶场景的多目标点云检测算法 概要 点云在自动驾驶系统中的三维目标检测是关键技术之一。目前主流的基于体素的无锚框检测算法通常采用复杂的二阶段修正模块,虽然在算法性能上有所提升,但往往伴随着较大的延迟。单阶段无锚框点云检测算法简化了检测流程,…

littlefs文件系统的移植和测试

简介 LittleFS 由ARM官方发布&#xff0c;ARM mbedOS的官方推荐文件系统&#xff0c;具有轻量级&#xff0c;掉电安全的特性。主要用在微控制器和flash上 掉电恢复&#xff0c;在写入时即使复位或者掉电也可以恢复到上一个正确的状态。 擦写均衡&#xff0c;有效延长flash的使…

基于JSP、java、Tomcat三者的项目实战--校园交易网(1)-项目搭建(前期准备工作)

这是项目的初始页面 接下来我先写下我的初始项目搭建 技术支持&#xff1a;JAVA、JSP 服务器&#xff1a;TOMCAT 7.0.86 编程软件&#xff1a;IntelliJ IDEA 2021.1.3 x64 首先我们打开页面&#xff0c;准备搭建项目的初始准备 1.New Project 2.随后点击Next&#xff0c;勾…

C++ | Leetcode C++题解之第287题寻找重复数

题目&#xff1a; 题解&#xff1a; class Solution { public:int findDuplicate(vector<int>& nums) {int slow 0, fast 0;do {slow nums[slow];fast nums[nums[fast]];} while (slow ! fast);slow 0;while (slow ! fast) {slow nums[slow];fast nums[fast]…

栈与递归

1.递归定义的数学函数 2.具有递归特性的数据结构 3.

vue3前端开发-小兔鲜项目-登录功能的业务接口调用

vue3前端开发-小兔鲜项目-登录功能的业务接口调用!这次&#xff0c;正式调用远程服务器的登录接口了。大家要必须使用测试账号密码&#xff0c;才能验证我们的代码。 测试账号密码是&#xff1a;账号&#xff08;xiaotuxian001&#xff09;&#xff1b;密码是&#xff08;1234…

Pytorch使用教学7-张量的广播

PyTorch中的张量具有和NumPy相同的广播特性&#xff0c;允许不同形状的张量之间进行计算。 广播的实质特性&#xff0c;其实是低维向量映射到高维之后&#xff0c;相同位置再进行相加。我们重点要学会的就是低维向量如何向高维向量进行映射。 相同形状的张量计算 虽然我们觉…