【R语言】聚类分析

news2025/4/16 14:35:08

聚类分析是一种常用的无监督学习方法,是将所观测的事物或者指标进行分类的一种统计分析方法,其目的是通过辨认在某些特征上相似的事物,并将它们分成各种类别。R语言提供了多种聚类分析的方法和包。

方法优点缺点适用场景
K-means计算效率高需预设K值球形数据分布
层次聚类可视化直观计算复杂度O(n²)小数据集/层级关系分析
DBSCAN发现任意形状参数敏感噪声数据/密度差异大
PAM对异常值鲁棒计算成本高中小规模数据

一、层次聚类

它是通过计算样本之间的距离来构建一个层次化的聚类结构,结果通常用树状图(dendrogram)来表示。

实现层次聚类的常用函数是R语言内置函数hclust(),还可以用cluter扩展包agens()函数flashClust扩展包hclust()函数

1、hclust()函数

下面用flexclust扩展包中的milk数据集进行讲解,此数据集包含了25种哺乳动物乳汁的成分数据:水分(water)、蛋白质(protein)、乳糖(lactose)、脂肪(fat)和灰分(ash)。

1.1 准备数据

library(flexclust)
# 第1步 准备数据:查看数据
data(milk)
milk

 

1.2 标准化数据 

# 第2步 标准化数据
milk_data <- scale(milk, center=T, scale=T)
milk_data

1.3 计算距离

# 第3步 计算欧几里得距离;也可以选用其它方法
milk_dist <- dist(milk_data, method="euclidean")
milk_dist

1.4 层次聚类

 使用平均距离法进行层次聚类

# 使用平均距离法进行层次聚类
fit_average <- hclust(milk_dist, method="averge")
fit_average

使用离差平和法进行层次聚类

# 使用平均距离法进行层次聚类
fit_average <- hclust(milk_dist, method="ward.D2")
fit_average

1.5 可视化结果

plot(fit_average, hang=-1, cex=1.2,main="平均距离层次聚类")

plot(fit_average, hang = -1, main = "层次聚类树状图", xlab = "样本", sub = "")
# 用矩形标出3个聚类
rect.hclust(fit_average, k = 3, border = 2:4)  

 1.6 切割聚类并评估

使用flexclust扩展包中的cuttree()函数将聚类结果分为3类(为什么分为3类,在此不细究,可上网查询方法)。

clusters <- cutree(fit_average, k=3)
# 可视化结果
plot(fit_average, hang=-1, cex=1, main="平均距离层次最终聚类")
rect.hclust(fit_average, k=3)

二、K-均值聚类 

1、kmeans()函数

层次聚类是一次性的,即样本点一旦被划分道一个类中,就不会再被分配到其它的类中,而且当样本量达到数百甚至数千时,层次聚类会很难处理。

R语言中最常用的K-均值聚类函数时kmeans()函数。

1.1 数据准备

用R语言内置的iris数据集为例。首先需要将类别信息去除。

head(iris)
iris_data <- iris[, 1:4]
head(iris_data)

1.2 标准化数据

# 标准化数据,消除量纲的影响
iris_scaled <- scale(iris_data, center=T, scale=TRUE)
head(iris_scaled)

 1.3 选择最佳K值

使用肘部法选择最佳的K值:通过计算不同聚类数k对应的总组内平方和(Total Within-Cluster Sum of Squares, WSS),找到WSS下降速度显著变缓的“肘部”点,该点对应的k即为最佳聚类数。

wss <- numeric(10)
for (k in 1:10) {
  kmeans_model <- kmeans(iris_scaled, centers = k, nstart = 25)
  wss[k] <- kmeans_model$tot.withinss
}
plot(1:10, wss, type = "b", pch = 19, 
     main = "肘部法选择最佳k值", 
     xlab = "聚类数k", ylab = "总组内平方和(WSS)")

从下面的截图可知,当k=3时,下降速度明显变缓。 

 1.4 K-均值聚类

centers:聚类数k。

nstart:随机初始中心点的次数(建议设为25以减少局部最优影响)。

iter.max:最大迭代次数(默认10)。

set.seed(123)
# 进行K-均值聚类
fit_means <- kmeans(iris_scaled, centers=3, iter.max=100, nstart=25)

1.5 可视化结果

library(factoextra)
fviz_cluster(fit_means, data = iris_scaled, 
             palette = "jco",  # 配色方案
             geom = "point",   # 仅显示点
             ellipse.type = "norm",  # 添加正态分布椭圆
             ggtheme = theme_minimal())

 

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

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

相关文章

LVS相关原理

一、LVS集群的体系结构 1.1 LVS简介 LVS 是 Linux Virtual Server 的简称&#xff0c;也就是 Linux 虚拟服务器 , 是一个由章文嵩博士发起的自由软件项目&#xff0c;它的官方站点是 www.linuxvirtualserver.org 。现在 LVS 已经是 Linux标准内核的一部分&#xff0c;在Linux2…

linux--关于makefile

makefile文件 可以指定编译顺序&#xff0c;这样方便一个项目的多个文件要编译的挨个操作的麻烦。 makefile文件的命名&#xff1a;makefile 或者 Makefile 必须是这俩&#xff0c;系统才能识别 规则的书写语法如下&#xff1a; 一个makefile内可以有多个规则 目标:依赖a 依…

Java发展史

JavaEE的由来 语言的诞生 Java的前身是Oak语言&#xff0c;其目的是搞嵌入式开发开发智能面包机 叮~~~&#x1f35e;&#x1f35e;&#x1f35e; 产品以失败告终 巅峰 网景公司需要网景浏览器打开网页&#xff0c;Oak->Java&#xff0c;进行前端开发&#xff08;相关技…

Jenkins 新建配置 Freestyle project 任务 六

Jenkins 新建配置 Freestyle project 任务 六 一、新建任务 在 Jenkins 界面 点击 New Item 点击 Apply 点击 Save 回到任务主界面 二、General 点击左侧 Configure Description&#xff1a;任务描述 勾选 Discard old builds Discard old builds&#xff1a;控制何时…

Electron视图进程和主进程通讯

快速创建基于vue的electron项目&#xff1a;quick-start/create-electron - npm 视图线程也就index.html是无法直接访问这个api的&#xff08;如果没有开启视图层访问nodejs的功能&#xff0c;现在几乎没法直接开启&#xff0c;开启了一堆警告提示&#xff09; 所以需要通过r…

【湖南-益阳】《益阳市市本级政府投资信息化项目预算编制与财政评审工作指南》益财评〔2024〕346号-省市费用标准解读系列40

《益阳市市本级政府投资信息化项目预算编制与财政评审工作指南&#xff08;试行&#xff09;》&#xff08;益财评〔2024〕346号&#xff09;由益阳市财政局主编&#xff0c;2024年10月17日起正式执行&#xff0c;本指南主要规定了政府投资信息化项目费用的构成、测量过程和方法…

具身智能在智能巡检机器人中的应用——以开关柜带电操作机器人为例

随着机器人技术和人工智能的迅速发展&#xff0c;具身智能在各行业的应用日益广泛&#xff0c;尤其是在电力行业中的智能巡检领域。传统的电力巡检和维护工作通常需要人工操作&#xff0c;存在着高温、高压、强电磁场等危险环境&#xff0c;且效率较低。开关柜带电操作机器人作…

nuxt中引入element-ui组件控制台报错问题

在使用element-ui组件的外层加一层 <client-only placeholder"Loading..."><van-button type"primary">主要按钮</van-button> </client-only> 实际使用&#xff1a; <div class"tab"><client-only placehol…

Java面试第二山!《计算机网络》!

在 Java 面试里&#xff0c;计算机网络知识是高频考点&#xff0c;今天就来盘点那些最容易被问到的计算机网络面试题&#xff0c;帮你轻松应对面试&#xff0c;也方便和朋友们一起探讨学习。 一、HTTP 和 HTTPS 的区别 1. 面试题呈现 HTTP 和 HTTPS 有什么区别&#xff1f;在…

RocketMQ 5.0安装部署

0.前言 在微服务架构逐渐成为主流的今天&#xff0c;消息队列如同数字世界的快递员&#xff0c;承担着系统间高效通信的重要使命。 Apache RocketMQ 自诞生以来&#xff0c;因其架构简单、业务功能丰富、具备极强可扩展性等特点被众多企业开发者以及云厂商广泛采用。历经十余…

俄罗斯方块游戏完整代码示例

以下是一个基于Cocos Creator引擎开发的俄罗斯方块游戏的完整代码示例。该游戏实现了俄罗斯方块的基本功能&#xff0c;并且代码整合在单个文件中&#xff0c;无需任何外部依赖&#xff0c;可以直接在浏览器中运行。 1. 创建Cocos Creator项目 首先&#xff0c;确保你已经安装了…

Ubuntu22.04配置cuda/cudnn/pytorch

Ubuntu22.04配置cuda/cudnn/pytorch 安装cuda官网下载.run文件并且安装/etc/profile中配置cuda环境变量 cudnn安装官网找cuda版本对应的cudnn版本下载复制相应文件到系统文件中 安装pytorch官网找cuda对应版本的pytorchpython代码测试pytorch-GPU版本安装情况 安装cuda 官网下…

【九】Golang 数组

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 数组数组初始化默认初始化显式初始化省略长度初始化索…

百达翡丽(Patek Philippe):瑞士制表的巅峰之作(中英双语)

百达翡丽&#xff08;Patek Philippe&#xff09;&#xff1a;瑞士制表的巅峰之作 在钟表界&#xff0c;百达翡丽&#xff08;Patek Philippe&#xff09; 一直被誉为“世界三大名表”之一&#xff0c;并且常被认为是其中的至高存在。一句“没人能真正拥有一枚百达翡丽&#x…

【学习】软件测试中的分类树法介绍

分类树法是一种软件测试设计技术&#xff0c;它通过构建一个树状结构来组织和展示输入数据的多种组合。这种方法有助于系统地识别和分析可能的测试情况&#xff0c;从而确保对软件进行全面而详尽的测试。分类树法特别适用于具有多个选择或条件的复杂系统&#xff0c;它可以有效…

打造智能语料库:通过Coco AI Server 实现 Notion 笔记 RAG 检索功能

本文将详细介绍如何将 Notion 作为语料库&#xff0c;部署 Coco Server 的 RAG&#xff08;Retrieval-Augmented Generation&#xff09;功能。我们将使用 Easysearch 作为语料库存储 Notion 素材&#xff0c;并通过 ollama 进行 LLM 推理。 1. 环境准备 1.1 启动 Easysearch…

SP字体UI放大代码

代码&#xff1a; echo off set QT_SCALE_FACTOR放大倍数 start "" "你的SP.exe启动路径"

动手学Agent——Day2

文章目录 一、用 Llama-index 创建 Agent1. 测试模型2. 自定义一个接口类3. 使用 ReActAgent & FunctionTool 构建 Agent 二、数据库对话 Agent1. SQLite 数据库1.1 创建数据库 & 连接1.2 创建、插入、查询、更新、删除数据1.3 关闭连接建立数据库 2. ollama3. 配置对话…

「软件设计模式」适配器模式(Adapter)

软件设计模式深度解析&#xff1a;适配器模式&#xff08;Adapter&#xff09;&#xff08;C实现&#xff09; 一、模式概述 适配器模式&#xff08;Adapter Pattern&#xff09;是结构型设计模式中的"接口转换器"&#xff0c;它像现实世界中的电源适配器一样&#…

Dify平台搭建面试机器人

无代码搭建面试机器人 什么是Dify 什么是Dify Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务&#xff08;Backend as Service&#xff09;和 LLMOps 的理念&#xff0c;使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员&#xff0c;也能…