R语言聚类分析-K均值聚类与系统聚类法

一、数据集为firm.csv,给出了22家美国公用事业公司的相关数据集,各数据集变量的名称和含义如下:X1为固定费用周转比(收入/债务),X2为资本回报率,X3为每千瓦容量成本,X4为年载荷因子,X5为1974-1975年高峰期千瓦时增长需求,X6为销售量(年千瓦时用量),X7为核能所占百分比。

X1X2X3X4X5X6X7
1.069.215154.41.690770
0.8910.320257.92.2508825.3
1.4315.4113533.492120
1.0211.2168560.3642334.3
1.498.819251.21330015.6
1.3213.511160-2.21112722.5
1.2212.217567.62.276420
1.19.2245573.3130820
1.341316860.47.284060
1.1212.4197532.7645539.2
0.757.517351.56.5174410
1.1310.9178623.761540
1.1512.719953.76.4717950.2
1.09129649.81.496730
0.967.616462.2-0.164680.9
1.169.9252569.2159910
0.766.413661.9957148.3
1.0512.615056.72.7101400
1.1611.710454-2.1135070
1.211.814859.93.5728741.1
1.048.6204613.566500
1.079.317454.35.91009326.6

二、导入分析包和数据集,指定数据集的变量类型

library(ggplot2)
library(ggpubr)
install.packages('ggpubr')
library(ggpubr)
firm<-read.csv('f:\\桌面\\firm.csv',colClasses = c(rep('numeric',7)))
firm

三、对数据进行标准化

stdfirm<-scale(firm,center=T,scale=T)
stdfirm

运行得到:

stdfirm<-scale(firm,center=T,scale=T)
> stdfirmX1          X2           X3          X4          X5          X6         X7[1,] -0.29315791 -0.68463896 -0.417122002 -0.57771516 -0.52622751  0.04590290 -0.7146294[2,] -1.21451134 -0.19445367  0.821002037  0.20683629 -0.33381191 -1.07776413  0.7920476[3,]  1.71214073  2.07822360 -1.339645796 -0.89153574  0.05101929  0.08393124 -0.7146294[4,] -0.50994695  0.20660702 -0.004413989 -0.21906307 -0.94312798 -0.70170610  1.3280197[5,]  2.03732429 -0.86288816  0.578232617 -1.29501935 -0.71864311 -1.58142837  0.2143888[6,]  1.11597086  1.23153991 -1.388199680  0.67756716 -1.74485965  0.62337028  0.6253007[7,]  0.57399826  0.65223002  0.165524604  2.38116460 -0.33381191 -0.35832428 -0.7146294[8,] -0.07636887 -0.68463896  1.864910540  0.00509449  0.01895002  1.17407698 -0.7146294[9,]  1.22436538  1.00872841 -0.004413989  0.76723019  1.26965142 -0.14311204 -0.7146294
[10,]  0.03202565  0.74135462  0.699617327 -0.89153574 -0.17346558 -0.69269198  1.6198267
[11,] -1.97327298 -1.44219805  0.116970720 -1.22777208  1.04516655  2.40196983 -0.7146294
[12,]  0.08622291  0.07292013  0.238355430  1.12588228  0.14722709 -0.77748109 -0.7146294
[13,]  0.19461744  0.87504152  0.748171211 -0.73462545  1.01309729 -0.48874740  2.2749037
[14,] -0.13056613  0.56310542 -1.752353809 -1.60883993 -0.59036605  0.21379097 -0.7146294
[15,] -0.83513051 -1.39763576 -0.101521757  1.17071379 -1.07140505 -0.68902999 -0.6610322
[16,]  0.24881470 -0.37270287  2.034849134 -0.21906307  1.91103676  1.99351729 -0.7146294
[17,] -1.91907572 -1.93238335 -0.781276132  1.10346652  1.84689822 -0.90142531 -0.2203441
[18,] -0.34735517  0.83047922 -0.441398944 -0.06215278 -0.17346558  0.34534086 -0.7146294
[19,]  0.24881470  0.42941852 -1.558138274 -0.66737818 -1.71279038  1.29379583 -0.7146294
[20,]  0.46560374  0.47398082 -0.489952828  0.65515141  0.08308855 -0.45832473  1.7329764
[21,] -0.40155243 -0.95201276  0.869555920  0.90172472  0.08308855 -0.63776215 -0.7146294
[22,] -0.23896065 -0.64007666  0.141247662 -0.60013092  0.85275095  0.33210137  0.8694658
attr(,"scaled:center")X1          X2          X3          X4          X5          X6          X7 1.114091   10.736364  168.181818   56.977273    3.240909 8914.045455   12.000000 
attr(,"scaled:scale")X1           X2           X3           X4           X5           X6           X7 0.1845112    2.2440494   41.1913495    4.4611478    3.1182503 3549.9840305   16.7919198 

四、进行K均值聚类分析

指定类别K=3,最低迭代次数为99次,进行25次随机初始化。

stdfirm.kmeans<-kmeans(stdfirm,centers=3,iter.max=99,nstart = 25)

查看聚类的结果:

names(stdfirm.kmeans)

1、stdfirm.kmeans$cluster

得到聚类结果:

stdfirm.kmeans$cluster[1] 3 3 2 3 3 2 3 1 3 3 1 3 3 2 3 1 3 2 2 3 3 3

2、stdfirm.kmeans$centers

得到聚类后的3个中心

stdfirm.kmeans$centersX1         X2        X3         X4          X5         X6         X7
1 -0.6002757 -0.8331800  1.338910 -0.4805802  0.99171778  1.8565214 -0.7146294
2  0.5198010  1.0265533 -1.295947 -0.5104679 -0.83409247  0.5120458 -0.4466434
3 -0.0570127 -0.1880876  0.175929  0.2852914  0.08537922 -0.5806995  0.3126504

3、stdfirm.kmeans$totss

得到总平方和

stdfirm.kmeans$totss
[1] 147

4、stdfirm.kmeans$tot.withinss

得到组内平方和

 stdfirm.kmeans$tot.withinss
[1] 92.53055

5、stdfirm.kmeans$betweenss

得到组间平方和

6、stdfirm.kmeans$size

得到各类别的观测数

stdfirm.kmeans$size
[1]  3  5 14

7、将聚类结果保存在原始数据集firm.csv中

stdfirm.kmeans.cluster<-stdfirm.kmeans$cluster
stdfirmcluster<-data.frame(firm,cluster=stdfirm.kmeans.cluster)
stdfirmcluster

运行得到:

7、聚类结果可视化

绘制出变量X1和X2,X3和X4,X5和X6样本散点图,并保存在文档中。

本次聚类分析中指定了聚类中心为K=3

pdf('f:/桌面/stdfirm.kmeans.pdf')
p1<-ggplot(stdfirmcluster,aes(x=X1,y=X2,shape=as.factor(cluster)))+
geom_point()+scale_shape_manual(values = c('circle','square','triangle'))
p2<-ggplot(stdfirmcluster,aes(x=X3,y=X4,shape=as.factor(cluster)))+
  geom_point()+scale_shape_manual(values = c('circle','square','triangle'))
p3<-ggplot(stdfirmcluster,aes(x=X5,y=X6,shape=as.factor(cluster)))+
  geom_point()+scale_shape_manual(values = c('circle','square','triangle'))
ggarrange(p1,p2,p3,ncol=2,nrow = 2,common.legend=T)
dev.off()

运行得到:

五、进行系统聚类分析

1、使用系统聚类函数hclust()进行聚类分析,默认使用各样本的距离矩阵,指定使用平均距离法

firm_hclust<-hclust(dist(stdfirm),method='average')

2、绘制聚类树形图:

plot(firm_hclust)

3、指定聚类数为3,并在聚类树中标注出来

firm.hlust.cluster<-cutree(firm_hclust,k=3)
rect.hclust(firm_hclust,k=3)

4、得到聚类结果

 firm.hlust.cluster<-cutree(firm_hclust,k=3)
> firm.hlust.cluster[1] 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 3 1 1 1 1 1

5、将聚类结果加到原始数据集中

firmhlustcluster<-data.frame(firm,cluster=firm.hlust.cluster)
firmhlustcluster

6、聚类结果可视化

绘制出变量X1和X2,X3和X4,X5和X6样本散点图,并保存在文档中。

pdf('f:/桌面/firm_cluster.pdf')
p4<-ggplot(firmhlustcluster,aes(x=X1,y=X2,shape=as.factor(cluster)))+
  geom_point()+scale_shape_manual(values=c('circle','square','triangle'))
p5<-ggplot(firmhlustcluster,aes(x=X3,y=X4,shape=as.factor(cluster)))+
  geom_point()+scale_shape_manual(values=c('circle','square','triangle'))
p6<-ggplot(firmhlustcluster,aes(x=X5,y=X6,shape=as.factor(cluster)))+
  geom_point()+scale_shape_manual(values=c('circle','square','triangle'))
ggarrange(p4,p5,p6,ncol=2,nrow = 2,common.legend=T)
dev.off()

六、使用R软件程序包NbClust进行聚类分析,程序包中的NbClust()函数提供最佳类别数的30种统计方法,综合各种最佳类别数的统计指标来给出最佳类别数的判断,下面是初步的介绍。

这里的聚类方法可以是Kmeans,也可以是系统聚类法中的average。

install.packages('NbClust')
library(NbClust)

1、NbClust()函数进行K均值聚类分析

firm.nbclust.kmeans<-NbClust(stdfirm,method='kmeans')

运行得到:

firm.nbclust.kmeans<-NbClust(stdfirm,method='kmeans')
*** : The Hubert index is a graphical method of determining the number of clusters.In the plot of Hubert index, we seek a significant knee that corresponds to a significant increase of the value of the measure i.e the significant peak in Hubertindex second differences plot. *** : The D index is a graphical method of determining the number of clusters. In the plot of D index, we seek a significant knee (the significant peak in Dindexsecond differences plot) that corresponds to a significant increase of the value ofthe measure. ******************************************************************* 
* Among all indices:                                                
* 4 proposed 2 as the best number of clusters 
* 4 proposed 3 as the best number of clusters 
* 6 proposed 4 as the best number of clusters 
* 1 proposed 5 as the best number of clusters 
* 1 proposed 6 as the best number of clusters 
* 1 proposed 8 as the best number of clusters 
* 1 proposed 13 as the best number of clusters 
* 5 proposed 15 as the best number of clusters ***** Conclusion *****                            * According to the majority rule, the best number of clusters is  4 ******************************************************************* 
Warning messages:
1: In pf(beale, pp, df2) : 产生了NaNs
2: In pf(beale, pp, df2) : 产生了NaNs
3: In pf(beale, pp, df2) : 产生了NaNs

上面的说明According to the majority rule, the best number of clusters is 4,大多数的类别判别指标给出的类别结果为4个类别。

需要说明的是Hubert index和 D index可以使用图形来进行类别判别,运行得到的图像为:

第二张图即为这两个指标的二阶差分图,从判别指标的二阶差分图中的峰值即可判别最佳类别数为4个类别。

2、查看firm.nbclust.kmeans均值聚类分析的结果

names(firm.nbclust.kmeans)

运行得到:

names(firm.nbclust.kmeans)
[1] "All.index"          "All.CriticalValues" "Best.nc"            "Best.partition"   

firm.nbclust.kmeans$All.index

该命令给出了各类别判别指标在各类别下的指标值。

firm.nbclust.kmeans$Best.nc

该命令给出了各判别指标给出了具体的最佳类别判别数和在该类别下的判别指标值

irm.nbclust.kmeans$Best.partition

给出来最佳判别数下的给样本所属的类别

firm.nbclust.kmeans$Best.partition[1] 2 1 2 1 1 2 4 3 4 1 3 4 1 2 4 3 4 2 2 1 4 1

3、把聚类结果加入到原始数据中

firm.nbclust.kmeans.cluster<-firm.nbclust.kmeans$Best.partition
firmnbclusterkmeans<-data.frame(firm,cluster=firm.nbclust.kmeans.cluster)
firmnbclusterkmeans

4、使用NbClust()函数进行系统聚类分析

firm.nbclust.average<-NbClust(stdfirm,method='average')

 According to the majority rule, the best number of clusters is  3 

此次进行聚类分析,得到最佳的类别为3个类别。

把距离结果加入在原始数据中

firm.nbclust.average.cluster<-firm.nbclust.average$Best.partition
firmnbclusteraverage<-data.frame(firm,cluster=firm.nbclust.average.cluster)
firmnbclusteraverage

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

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

相关文章

Etcd 介绍与使用(入门篇)

etcd 介绍 etcd 简介 etc &#xff08;基于 Go 语言实现&#xff09;在 Linux 系统中是配置文件目录名&#xff1b;etcd 就是配置服务&#xff1b; etcd 诞生于 CoreOS 公司&#xff0c;最初用于解决集群管理系统中 os 升级时的分布式并发控制、配置文件的存储与分发等问题。基…

使用 GitHub Actions 通过 CI/CD 简化 Flutter 应用程序开发

在快节奏的移动应用程序开发世界中&#xff0c;速度、可靠性和效率是决定项目成功或失败的关键因素。持续集成和持续部署 (CI/CD) 实践已成为确保满足这些方面的强大工具。当与流行的跨平台框架 Flutter 和 GitHub Actions 的自动化功能相结合时&#xff0c;开发人员可以创建无…

MySQL_数据库图形化界面软件_00000_00001

目录 NavicatSQLyogDBeaverMySQL Workbench可能出现的问题 Navicat 官网地址&#xff1a; 英文&#xff1a;https://www.navicat.com 中文&#xff1a;https://www.navicat.com.cn SQLyog 官网地址&#xff1a; 英文&#xff1a;https://webyog.com DBeaver 官网地址&…

RabbitMQ——死信队列和延迟队列

文章目录 RabbitMQ——死信队列和延迟队列1、死信队列2、基于插件的延迟队列2.1、安装延迟队列插件2.2、代码实例 RabbitMQ——死信队列和延迟队列 1、死信队列 死信队列&#xff08;Dead Letter Queue&#xff0c;DLQ&#xff09;是 RabbitMQ 中的一种重要特性&#xff0c;用…

【HTML】HTML表单8.2(表单标签2)

目录 接上期&#xff0c;大致实现效果 文章简要 注释&#xff1a;这一次介绍的很多效果需要后期与服务器配合&#xff0c;但我们这里先只介绍效果 ①提交按钮 ②获取验证码 ③上传文件 ④还原所有表单内容 ⑤下拉表单 ⑥文字域 接上期&#xff0c;大致实现效果 文章简要 注…

matlab中Signal Editor定义梯形信号输出矩形信号

matlab中Signal Editor定义梯形信号输出矩形信号&#xff0c;可以通过如下勾选差值数据实现梯形信号输出。

GPT-1, GPT-2, GPT-3, InstructGPT / ChatGPT and GPT-4 总结

1. GPT-1 What the problem GPT-1 solve? 在 GPT-1 之前&#xff0c;NLP 通常是一种监督模型。 对于每个任务&#xff0c;都有一些标记数据&#xff0c;然后根据这些标记数据开发监督模型。 这种方法存在几个问题&#xff1a;首先&#xff0c;需要标记数据。 但 NLP 不像 CV&…

云原生部署手册02:将本地应用部署至k8s集群

&#xff08;一&#xff09;部署集群镜像仓库 1. 集群配置 首先看一下集群配置&#xff1a; (base) ➜ ~ multipass ls Name State IPv4 Image master Running 192.168.64.5 Ubuntu 22.04 LTS1…

一. 并行处理与GPU体系架构-GPU并行处理

目录 前言0. 简述1. 这个小节会涉及到的关键字2. CPU与GPU在并行处理的优化方向3. Summary总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习下课程第一章——并行处理与GPU体…

Google云计算原理与应用(三)

目录 五、分布式存储系统Megastore&#xff08;一&#xff09;设计目标及方案选择&#xff08;二&#xff09;Megastore数据模型&#xff08;三&#xff09;Megastore中的事务及并发控制&#xff08;四&#xff09;Megastore基本架构&#xff08;五&#xff09;核心技术——复制…

pom.xml中的配置无法被yaml读取

问题描述 项目中指定了多个profiles, 但是application.yaml读取报错&#xff0c;报错信息如下 Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts 12:41:52.325 [mai…

使用 pnpm 搭建 monorepo 项目

引言 在我之前的开发经历中&#xff0c;并没有实际使用过 Monorepo 管理项目&#xff0c;尽管之前对此有所了解&#xff0c;但并未深入探究。然而&#xff0c;如今许多开源项目都采纳了 Monorepo 方式&#xff0c;对于不熟悉它的开发者来说&#xff0c;阅读和理解这些项目的源…

【HarmonyOS】ArkUI - 向左/向右滑动删除

核心知识点&#xff1a;List容器 -> ListItem -> swipeAction 先看效果图&#xff1a; 代码实现&#xff1a; // 任务类 class Task {static id: number 1// 任务名称name: string 任务${Task.id}// 任务状态finished: boolean false }// 统一的卡片样式 Styles func…

C语言快速入门之内存函数的使用和模拟实现

1.memcpy 它可以理解为memory copy的组合&#xff0c;memory有记忆的意思&#xff0c;这里指的是内存&#xff0c;copy是拷贝&#xff0c;这个函数是针对内存块进行拷贝的 函数原型 void* memcpy(void* destination,const void* source, size_t num); 从source位置开始&am…

ChatGPT国内镜像站大全

#今天在知乎看到一个问题&#xff1a;“平民不参与内测的话没有账号还有机会使用ChatGPT吗&#xff1f;” 从去年GPT大火到现在&#xff0c;关于GPT的消息铺天盖地&#xff0c;真要有心想要去用&#xff0c;途径很多&#xff0c;别的不说&#xff0c;国内GPT的镜像站到处都是&…

基于sortablejs实现拖拽element-ui el-table表格行进行排序

可以用原生的dragstart、drag、dragend、dragover、drop、dragleave实现这个效果&#xff0c;但是有现成的轮子就不要重复造了&#xff0c;看效果&#xff1a; <template><el-table :class"$options.name" :data"tableData" ref"table"…

Docker进阶教程 - 1 Dockerfile

更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 1 Dockerfile Dockerfile 是做什么的&#xff1f; 我们前面说到&#xff0c;制作镜像的方法主要有两种方式&#xff1a; 使用 docker commit 命令&#xff1b;使用 Dockerfile 文件。 但是…

leetcode每日一题310.最小高度树

目录 一.题目原型 二.题目思路 三.代码实现 一.题目原型 二.题目思路 首先&#xff0c;我们看了样例&#xff0c;发现这个树并不是二叉树&#xff0c;是多叉树。 然后&#xff0c;我们可能想到的解法是&#xff1a;根据题目的意思&#xff0c;就挨个节点遍历bfs&#xff0c;…

瑞_Redis_短信登录_Redis代替session的业务流程

文章目录 项目介绍1 短信登录1.1 项目准备1.2 基于Session实现登录流程1.3 Redis代替session的业务流程1.3.1 设计key的结构1.3.2 设计key的具体细节1.3.3 整体访问流程1.3.4 代码实现 &#x1f64a; 前言&#xff1a;本文章为瑞_系列专栏之《Redis》的实战篇的短信登录章节的R…

springboot项目读取excel表格内容到数据库,excel表格字段为整数的读取方法

在我昨天的项目中&#xff0c;我需要把excel表格中字段为整数的字段读取到数据库中进行保存&#xff0c;但是在内置方法中并没有读取整数的方法&#xff08;也有可能是我没发现&#xff0c;太菜了~~&#xff09;&#xff0c;那接下来我就提供给大家一个简单地方法来读取excel表…