首页 > 其他分享 >【scikit-learn基础】--『监督学习』之 层次聚类

【scikit-learn基础】--『监督学习』之 层次聚类

时间:2024-01-15 14:36:07浏览次数:32  
标签:axes 策略 -- scikit regs plt learn 聚类 层次

层次聚类算法是机器学习中常用的一种无监督学习算法,它用于将数据分为多个类别或层次。
该方法在计算机科学、生物学、社会学等多个领域都有广泛应用。

层次聚类算法的历史可以追溯到上世纪60年代,当时它主要被用于社会科学中。
随着计算机技术的发展,这种方法在90年代得到了更为广泛的应用。

1. 算法概述

层次聚类的基本原理是创建一个层次的聚类,通过不断地合并或分裂已存在的聚类来实现。
它分为两种策略:

  1. 凝聚策略:初始时将每个点视为一个簇,然后逐渐合并相近的簇
  2. 分裂策略:开始时将所有点视为一个簇,然后逐渐分裂

scikit-learn中,层次聚类的策略有4种

  1. ward:默认策略,也就是最小方差法。它倾向于合并那些使得合并后的簇内部方差最小的两个簇
  2. complete:计算两个簇之间的距离时,考虑两个簇中距离最远的两个样本之间的距离
  3. average:计算两个簇之间的距离时,考虑两个簇中所有样本之间距离的平均值
  4. single:计算两个簇之间的距离时,考虑两个簇中距离最近的两个样本之间的距离

2. 创建样本数据

下面创建月牙形状数据来看看层次聚类的各个策略之间的比较。

from sklearn.datasets import make_moons
import matplotlib.pyplot as plt

ax = plt.subplot()

X, y = make_moons(noise=0.05, n_samples=1000)
ax.scatter(X[:, 0], X[:, 1], marker="o", c=y, s=25, cmap=plt.cm.prism)

plt.show()

image.png
关于各种样本数据的生成,可以参考:TODO

3. 模型训练

用四种不同的策略来训练上面月牙形状的样本数据。

from sklearn.cluster import AgglomerativeClustering

# 定义
regs = [
    AgglomerativeClustering(linkage="ward"),
    AgglomerativeClustering(linkage="complete"),
    AgglomerativeClustering(linkage="single"),
    AgglomerativeClustering(linkage="average"),
]

# 训练模型
for reg in regs:
    reg.fit(X, y)

fig, axes = plt.subplots(nrows=2, ncols=2)
fig.set_size_inches((10, 8))

# 绘制聚类之后的结果
axes[0][0].scatter(
    X[:, 0], X[:, 1], marker="o", c=regs[0].labels_, s=25, cmap=plt.cm.prism
)
axes[0][0].set_title("ward 策略")

axes[0][1].scatter(
    X[:, 0], X[:, 1], marker="o", c=regs[1].labels_, s=25, cmap=plt.cm.prism
)
axes[0][1].set_title("complete 策略")

axes[1][0].scatter(
    X[:, 0], X[:, 1], marker="o", c=regs[2].labels_, s=25, cmap=plt.cm.prism
)
axes[1][0].set_title("single 策略")

axes[1][1].scatter(
    X[:, 0], X[:, 1], marker="o", c=regs[3].labels_, s=25, cmap=plt.cm.prism
)
axes[1][1].set_title("average 策略")

plt.show()

image.png

从结果可以看出,single策略效果最好,它聚类的结果与原始数据的分类情况最为接近。
不过,这并不能说明single策略由于其它策略,只能说明single策略最适合上面的样本数据。

4. 总结

层次聚类在许多场景中都得到了应用,例如图像分割、文档聚类、生物信息学中的基因聚类等。
它特别适合那些需要多层次结构的应用。

层次聚类的最大优势在于它提供了一种层次结构的聚类,这对于许多应用来说是非常自然的,它能够展示数据在不同粒度下的聚类结果。

但它也存在一些缺点
首先,它的计算复杂度相对较高,特别是当数据量很大时;
其次,一旦做出合并或分裂的决策,就不能撤销,这可能导致错误的累积
此外,确定何时停止合并或分裂也是一个挑战。

标签:axes,策略,--,scikit,regs,plt,learn,聚类,层次
From: https://www.cnblogs.com/wang_yb/p/17965293

相关文章

  • WSL2 配置 ArchLinux 初始化环境
    这篇文章针对的是在Win11系统的WSL2下安装ArchLinux系统,网上很多中文教程都是使用LxRunOffline去做的,但是实际上该方法已经过时了,目前有更加先进的ArchWSL方式。基于LxRunOffline安装ArchLinux教程:Here如果用的是wsl1,不保证本教程可以适用。安装ArchLinux子系统......
  • IDEA画图神器 PlantUML
    PlantUML是一款开源的UML图绘制工具,支持通过文本来生成图形,使用起来非常高效。可以支持时序图、类图、对象图、活动图、思维导图等图形的绘制。下面使用PlantUML来绘制一张流程图,可以实时预览,速度也很快!在线安装首先在IDEA的插件市场中搜索PlantUML,安装这个排名第一的插件;......
  • ai文章创作助手,大模型原创助手,已对接rpcms
    AI的红利吃到了吗?天天看视频说AI这个好,那个好,使用了吗?想用chatGPT,需要有梯子,国内目前就文心一言一家,倒是能用。但如果想对接到自己系统上,需要开通API(不管chatGPT还是一言都是),关键还不是免费的(官方网页版免费使用)。这里偷偷告诉你,我有API,还不贵(别老想着免费,开发不需要成本哈)。......
  • 最高法-1. 挂靠关系下挂靠人向被挂靠人主张挂靠费用的,不予支持;2. 在相对人不知晓挂靠
    (2020)最高法民终576号  河南东方建设集团发展有限公司、黄建国建设工程施工合同纠纷二审民事判决书【经典判例】上诉人主张:【东方公司】(一)黄建国系东方公司内部工作人员,东方公司一直为其正常缴纳社会保险。《工程施工内部承包协议书》是东方公司与黄建国之间签订的独立合同,东......
  • 我跟你不一样,我的人生是一栋只能建造一次的楼房,我必须让它精确无比,不能有一厘米的差池
    万丈高楼平地起  “合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。”事物都来自点滴的积累,有一个完善的过程,不是一蹴而就的。 《我们不一样》我们不一样每个人都有不同的境遇 ​他的世界里,只有学业、奋斗、事业、成功这样的字眼。所以他说出了:“我跟你不一样,我的......
  • 用MATLAB创建一个矩阵,包含颗粒的ID,type,直径,密度,坐标等信息,并填充一个矩形的空间
    LIGGGHTS可以read_data命令通过读取.txt文件中的颗粒信息。.txt的内容参考链接:liggghts通过.txt文件导入颗粒信息。下面的MATLAB代码可以根据需要生成一系列的颗粒信息,包括颗粒的ID,type,diameter,density,coordinate等。颗粒数量为8000,并且能够填充一个范围在(x_min,y_min,z_min)到(......
  • 企业图纸加密的三种方法和技巧
    图纸加密是保护企业核心资产、避免知识产权和经济损失的重要措施。以下是三种常见的图纸加密方法和相应的技巧:1.使用文件属性进行加密基本步骤:右键点击CAD图纸文件。选择“属性”。勾选“只读”选项。点击“确定”保存设置。技巧:将文件设置为只读模式后,其他人只能查......
  • HTTP 协议
    HTTP协议HTTP是超文本传输协议(HyperTextTransferProtocol)的缩写,属于应用层协议,默认使用传输层的80/tcp端口。HTTP协议定义了客户端和服务器之间数据交换的规则和格式,用于实现客户端和服务器之间的超文本数据传输。超文本:不限于纯文本内容,还可以包含图像、视频、音频和动画......
  • npm 安装cnpm 设置淘宝镜像报错 4048
    npmERR!codeEPERMnpmERR!syscallrenamenpmERR!pathD:\programfiles\nodejs\node_global\node_modules\cnpm\node_modules\npm\node_modules.node-gyp.DELETE\node_modules@npmclinpmERR!destD:\programfiles\nodejs\node_global\node_modules\cnp......
  • 前端歌谣-第六拾课-express安装
    前言我是歌谣微信公众号关注前端小歌谣一起学习前端知识今天继续给大家讲解获取静态资源的讲解安装npminit-ynpmiexpress案例constexpress=require("express")constapp=express()app.get("/",(req,res)=>{res.write("hellogeyao")res.end()})app.listen......