本文主要是介绍《R语言与农业数据统计分析及建模》学习——聚类分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
聚类分析时一种分类技术。与回归分析、判别分析被一起成为多元分析的三大方法。根据分类的方法可将聚类分析分为:层次聚类、快速聚类等。
1、层次聚类
(1)定义每个观测值(行或单元)为一类
(2)计算每类和其他各类的距离
(3)把距离最短的两类合并成一类,这样类的个数就减少一个
(4)重复步骤(2)(3),知道包含所有观测值的类型合并成单个类为止。
2、快速聚类
(1)选择K个中心点(随机选择K行)
(2)把每个数据点分配到离它最近的中性点
(3)重新计算每类中的点到该类中心点距离的平均值
(4)分配每个数据到它最近的中心点
(5)重复步骤(3)(4)直到所有观测值不再被分配或达到最大迭代次数(R默认10次)
3、R语言实现
以flexclust包中的nutrient数据集为例,进行聚类分析。Nutrient数据集内容是27个不同种类的肉的5个成分含量。
(1)载入数据集
# 安装flexclust包
install.packages("flexclust")
# 载入flexclust包
library(flexclust)
# 载入nutrient数据集
data(nutrient)
(2)数据预处理
数据标准化:最常用的方法是将每个变量标准化为均值为0、标准差为1的变量,使用scale()函数。
# 展示行名称
row.names(nutrient)
# 将行名改为小写字母,保证命名的一致性
row.names(nutrient)<-tolower(row.names(nutrient))
# 查看数据
head(nutrient)
# 由于不同变量的变化范围不同,量纲不同,标准化数据有利于均衡各变量的影响
nutrient_scaled<-scale(nutrient)
head(nutrient_scaled)
(3)层次聚类
dist()函数能够用来计算数据框所有行之间的距离
层次聚类方法可以用hclust()函数来实现:hclust(d,method=),d为dist()函数产生的距离。
# 计算矩阵或数据框中所有行之间的距离,默认欧几里得距离
d<-dist(nutrient_scaled)
# 层次聚类
fit_average<-hclust(d,method="average")
# 可视化
plot(fit_average,hang=-1,main="Average Linkage Clustering")
(4)快速聚类
快速聚类法,又称为K均值(K-means)法。
使用kmeans()函数来实现快速聚类:kmeans(d,centers),d为dist()产生的距离矩阵,centers是要提取的聚类数据。
library(factoextra)
# 计算举证距离
d<-dist(nutrient_scaled)
# 以分类为3进行聚类
k_means<-kmeans(d,3)
# 可视化
fviz_cluster(k_means,nutrient_scaled)
这篇关于《R语言与农业数据统计分析及建模》学习——聚类分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!