机器学习聚类分析建模方法大全

news/2024/12/29 7:12:17/

最近很多私信都在问机器学习的问题,感觉很多都是刚入门的新手,有些概念和问题也相对比较基础,空余时间里我在不断整理一些常用的基础算法模型,写成文章后面有需要的话可以直接阅读即可,有些问题可能直接就迎刃而解了吧。

这里主要是基于经典的鸢尾花iris数据集来开发构建各种类型的聚类算法模型,首先看下效果图:

这里汇总了十余种的聚类算法模型,均基于著名的机器学习库slearn完成。

这里首先对数据进行了简单的可视化分析,如下:

【相关性分析热力图】

接下来对数据进行简单的EDA可视化探索如下:

因为鸢尾花数据集太过于知名,所以这里我也就不再赘述了,直接贴出来原始数据内容,有需要的可以直接拿去存储下来做实验用都行,当然了sklearn的dataset模块也内置了iris数据集,我只是习惯了从文件读取数据集而已,可以根据自己需要来就行了。

一共150条数据,每个类别均包含50个样本数据。

接下来进入正文,开始依次构建不同的聚类分析模型。

一、KMeans聚类模型

with open("data.json") as f:dataset=json.load(f)
X,y=[],[]
for one_list in dataset:X.append(one_list[:-1])y.append(int(one_list[-1]))
X=np.array(X)
y=np.array(y)
print(y)model = KMeans(n_clusters=3)
model.fit(X)
yhat = model.predict(X)
clusters = unique(yhat)
for cluster in clusters:row_ix = where(yhat == cluster)plt.scatter(X[row_ix, 0], X[row_ix, 1])
plt.title("k-Means")
plt.show()

结果如下:

二、Mini-Batch K-Means聚类算法

with open("data.json") as f:dataset=json.load(f)
X,y=[],[]
for one_list in dataset:X.append(one_list[:-1])y.append(int(one_list[-1]))
X=np.array(X)
y=np.array(y)
print(y)model = MiniBatchKMeans(n_clusters=3)
model.fit(X)
yhat = model.predict(X)
clusters = unique(yhat)
for cluster in clusters:row_ix = where(yhat == cluster)plt.scatter(X[row_ix, 0], X[row_ix, 1])
plt.title("Mini-Batch K-Means")
plt.show()

结果如下:

三、MeanShitf均值漂移聚类算法

with open("data.json") as f:dataset=json.load(f)
X,y=[],[]
for one_list in dataset:X.append(one_list[:-1])y.append(int(one_list[-1]))
X=np.array(X)
y=np.array(y)
print(y)model = MeanShift()
yhat = model.fit_predict(X)
clusters = unique(yhat)
for cluster in clusters:row_ix = where(yhat == cluster)plt.scatter(X[row_ix, 0], X[row_ix, 1])
plt.title("MeanShift")
plt.show()

结果如下:

四、DBSCAN 聚类算法

with open("data.json") as f:dataset=json.load(f)
X,y=[],[]
for one_list in dataset:X.append(one_list[:-1])y.append(int(one_list[-1]))
X=np.array(X)
y=np.array(y)
print(y)model = DBSCAN(eps=0.30, min_samples=9)
yhat = model.fit_predict(X)
clusters = unique(yhat)
for cluster in clusters:row_ix = where(yhat == cluster)plt.scatter(X[row_ix, 0], X[row_ix, 1])
plt.title("DBSCAN")
plt.show()

结果如下:

五、BIRCH 聚类算法

with open("data.json") as f:dataset=json.load(f)
X,y=[],[]
for one_list in dataset:X.append(one_list[:-1])y.append(int(one_list[-1]))
X=np.array(X)
y=np.array(y)
print(y)model = Birch(threshold=0.01, n_clusters=3)
model.fit(X)
yhat = model.predict(X)
clusters = unique(yhat)
for cluster in clusters:row_ix = where(yhat == cluster)plt.scatter(X[row_ix, 0], X[row_ix, 1])
plt.title("BIRCH")
plt.show()

结果如下:

六、聚合聚类算法

with open("data.json") as f:dataset=json.load(f)
X,y=[],[]
for one_list in dataset:X.append(one_list[:-1])y.append(int(one_list[-1]))
X=np.array(X)
y=np.array(y)
print(y)model = AgglomerativeClustering(n_clusters=3)
yhat = model.fit_predict(X)
clusters = unique(yhat)
for cluster in clusters:row_ix = where(yhat == cluster)plt.scatter(X[row_ix, 0], X[row_ix, 1])
plt.title("AgglomerativeClustering")
plt.show()

结果如下:

七、亲和力传播聚类算法

with open("data.json") as f:dataset=json.load(f)
X,y=[],[]
for one_list in dataset:X.append(one_list[:-1])y.append(int(one_list[-1]))
X=np.array(X)
y=np.array(y)
print(y)model = AffinityPropagation(damping=0.9)
model.fit(X)
yhat = model.predict(X)
clusters = unique(yhat)
for cluster in clusters:row_ix = where(yhat == cluster)plt.scatter(X[row_ix, 0], X[row_ix, 1])
plt.title("AffinityPropagation")
plt.show()

结果如下:

八、OPTICS 聚类算法

with open("data.json") as f:dataset=json.load(f)
X,y=[],[]
for one_list in dataset:X.append(one_list[:-1])y.append(int(one_list[-1]))
X=np.array(X)
y=np.array(y)
print(y)model = OPTICS(eps=0.8, min_samples=10)
yhat = model.fit_predict(X)
clusters = unique(yhat)
for cluster in clusters:row_ix = where(yhat == cluster)plt.scatter(X[row_ix, 0], X[row_ix, 1])
plt.title("OPTICS")
plt.show()

结果如下:

九、光谱聚类算法

with open("data.json") as f:dataset=json.load(f)
X,y=[],[]
for one_list in dataset:X.append(one_list[:-1])y.append(int(one_list[-1]))
X=np.array(X)
y=np.array(y)
print(y)model = SpectralClustering(n_clusters=3)
yhat = model.fit_predict(X)
clusters = unique(yhat)
for cluster in clusters:row_ix = where(yhat == cluster)plt.scatter(X[row_ix, 0], X[row_ix, 1])
plt.title("SpectralClustering")
plt.show()

结果如下:

十、高斯混合聚类算法

with open("data.json") as f:dataset=json.load(f)
X,y=[],[]
for one_list in dataset:X.append(one_list[:-1])y.append(int(one_list[-1]))
X=np.array(X)
y=np.array(y)
print(y)model = GaussianMixture(n_components=3)
model.fit(X)
yhat = model.predict(X)
clusters = unique(yhat)
for cluster in clusters:row_ix = where(yhat == cluster)plt.scatter(X[row_ix, 0], X[row_ix, 1])
plt.title("GaussianMixture")
plt.show()

结果如下:

感兴趣的话可以很方便地替换成自己的数据集即可构建自己的聚类分析模型了

实际开发实践过程中发现,不同模型的表现差异还是很大,有的需要预设类别数目比如:K-Means算法、光谱聚类、Mini-Batch K-Means算法、BIRCH 聚类算法、聚合聚类算法,其余的则不需要,实际预测出来的效果也是差异挺大的,主要是跟模型的构建原理有关,这里没有过多去涉及原理相关的内容,感兴趣的话可以自行查阅相关的资料即可。


http://www.ppmy.cn/news/27280.html

相关文章

国内知名插画培训机构有哪些,学习插画怎么选培训班

国内知名插画培训机构有哪些?给大家梳理了国内5家专业的插画师培训班,最新无大插画班排行榜,各有优势和特色! 一:国内知名插画培训机构排名 1、轻微课(五颗星) 主打课程有日系插画、游戏原画…

初识MySQL下载与安装【快速掌握知识点】

目录 前言 MySQL版本 MySQL类型 MySQL官网有.zip和.msi两种安装形式; MySQL 下载 1、MySQL 属于 Oracle 旗下产品,进入Oracle官网下载 2、点击产品,找到MySQL 3、进入MySQL页面 4、点击Download(下载)&#x…

关于Kubernetes不兼容Docker

本博客地址:https://security.blog.csdn.net/article/details/129153459 参考文献:https://www.cnblogs.com/1234roro/p/16892031.html 一、总结 总结起来就是一句话: k8s只是弃用了dockershim,并不是弃用了整个Docker&#xf…

基于SpringBoot的外卖项目(详细开发过程)

基于SpringBootMyBatisPlus的外卖项目1、软件开发整体介绍软件开发流程角色分工2、外卖项目介绍项目介绍产品展示后台系统管理移动端技术选型功能结构角色3、开发环境的搭建开发环境说明建库建表Maven项目搭建项目的目录结构pom.xmlapplication.ymlReggieApplication启动类配置…

whistle+SwitchyOmega配置代理解决白名单跨越

文章目录whistleSwitchyOmega配置代理什么是whistle什么是SwitchyOmega示例:作用为什么不直接使用SwitchyOmega代理whistleSwitchyOmega配置代理 什么是whistle whistle主要用于查看、修改HTTP、HTTPS、Websocket的请求、响应,也可以作为HTTP代理服务器…

ideal创建maven项目

前置工作本机安装mavenIdea 设置使用本机maven 工具Settings--->Maven开始创建maven项目创建maven项目,勾选通过模板创建,选择 maven-archetype-webapp 模板GroupId: 公司名倒序ArtifactId: 项目名设置本地maven仓库配置项目文件显示名,和…

C语言——柔性数组

目录0. 前言1. 思维导图2. 柔性数组的特点3. 柔性数组的使用4. 柔性数组的优势5. 结语0. 前言 柔性数组是在C99标准时引入: 结构中的最后一个元素允许是未知大小的数组,这就叫柔性数组成员。 代码示例: typedef struct flexible_arr {int a…

FPGA纯vhdl实现MIPI CSI2 RX视频解码输出,OV13850采集,提供工程源码和技术支持

目录1、前言2、Xilinx官方主推的MIPI解码方案3、纯Vhdl方案解码MIPI4、vivado工程介绍5、上板调试验证6、福利:工程代码的获取1、前言 FPGA图像采集领域目前协议最复杂、技术难度最高的应该就是MIPI协议了,MIPI解码难度之高,令无数英雄竞折腰…