多元统计分析及R语言建模 第7章 聚类分析及R使用 王斌会 教授
多元统计分析及R语言建模 7 聚类分析及R使用 plot(1:100)
plot(1:100) 内容与要求 多元统计分析及R语言建模 聚类分析的目的和意义 聚类分析中所使用的几种尺度的定义 初步掌握选用聚类方法与对应距离的原则 六种系统聚类方法的定义及其基本性质 R语言程序中有关聚类分析的算法基础 掌握R语言中kmeans聚类的方法和用法 内容与要求 plot(1:100)
plot(1:100) 多元统计分析及R语言建模 基本要求 7 聚类分析及R使用 理解聚类分析的目的意义及统计思想 了解变量类型的几种尺度定义 熟悉Q型和R型聚类分析的统计量的定义 了解六种系统聚类方法及它们的统一公式 掌握R语言中六种方法的具体使用步骤 了解R语言中kmeans聚类的基本思想和用法 基本要求 plot(1:100)
plot(1:100) 概念和方法 7 聚类分析及R使用 7.1 聚类分析的概念和类型 基本概念 聚类分析法(Cluster Analysis)是研究“物以类聚”的一种现代统计分析方法,在众多的领域中,都需要采用聚类分析作分类研究。 概念和方法 plot(1:100) 差异方法
7 聚类分析及R使用 7.1 聚类分析的概念和类型 plot(1:100)
7 聚类分析及R使用 7.1 聚类分析的概念和类型 【例7.1】两个变量、九个样品数据及其散点图 plot(1:100)
7 聚类分析及R使用 7.2 聚类统计量
7 聚类分析及R使用 7.2 聚类统计量 相关系数矩阵:cor(X)
7 聚类分析及R使用 7.2 聚类统计量 D=dist(X); D R=cor(X); R
plot(1:100) 7 聚类分析及R使用 系统聚类法的基本思想 7.3 系统聚类法 首先将个样品分成类,每个样品自成一类,然后每次将具有最小距离的两类合并,合并后重新计算类与类之间的距离,这个过程一直继续到所有的样品归为一类为止,并把这个过程做成一张系统聚类图。 plot(1:100)
plot(1:100) 7 聚类分析及R使用 类间距离计算方法 7.3 系统聚类法 (1)最短距离法(single) (2)最长距离法(complete) (3)中间距离法(median) (4)类平均法(average) (5)重心法(centroid) (6)离差平方和法(Ward) 类间距离计算方法 plot(1:100)
类间距离计算公式 plot(1:100)
7 聚类分析及R使用 7.3 系统聚类法 plot(1:100)
计算新类与当前各类的距离,若类个数为1,转到第5步,否则回到第3步 7 聚类分析及R使用 7.3 系统聚类法 基本步骤: 计算n个样品 两两间的距离 构造n个类, 每类包含1个样品 合并距离最近的两类为1个新类 计算新类与当前各类的距离,若类个数为1,转到第5步,否则回到第3步 绘制 系统聚类图 确定类的个数 和样品名称 plot(1:100)
例7-1数据的系统聚类 最短距离法(采用欧氏距离) plot(1:100)
例7-1数据的系统聚类 最长距离法(采用欧氏距离) plot(1:100)
例7-1数据的系统聚类 plot(1:100)
plot(1:100) 7 聚类分析及R使用 7.3 系统聚类法 2.Ward法(采用欧氏距离) hc<-hclust(dist(X),"ward") #ward距离法 cbind(hc$merge,hc$height) #分类过程 plot(hc) #聚类图 plot(1:100)
plot(1:100) 7 聚类分析及R使用 7.3 系统聚类法 【例7.2】续例3.1,为了研究全国31个省、市、自治区2007年城镇居民生活消费的分布规律,根据调查资料做区域消费类型划分。指标名及原始数据见表3.1 结果输出: 自编系统聚类函数H.clust()的用法 H.clust<-function(X,d="euc",m="comp",proc=F,plot=T) X数值矩阵或数据框,d 距离计算方法(见上),m系统聚类方法(见上) proc是否输出聚类过程,plot 是否输出聚类图 plot(1:100) #在mvstats.xls:d7.2中选取A1:I32区域,然后拷贝 plot(d7.2)
plot(1:100) 7 聚类分析及R使用 7.3 系统聚类法 library(mvstats) H.clust(d7.2,"euclidean","single",plot=T) #最短距离法 H.clust(d7.2,"euclidean","complete",plot=T) #最长距离法 plot(1:100)
plot(1:100) 7 聚类分析及R使用 7.3 系统聚类法 H.clust(d7.2,"euclidean","median",plot=T) #中间距离法 H.clust(d7.2,"euclidean","average",plot=T) #类平均法 plot(1:100)
plot(1:100) 7 聚类分析及R使用 7.3 系统聚类法 H.clust(d7.2,"euclidean","centroid",plot=T) #重心法 H.clust(d7.2,"euclidean","ward",plot=T) #ward法 plot(1:100) 综合考虑以上的分析结果,笔者认为从全国各省、市、自治区的消费情况来看,分为四类较为合适。
plot(1:100) 7 聚类分析及R使用 7.4 kmeans聚类法 概念和原理 概念 kmeans法是一种快速聚类法,采用该方法得到的结果比较简单易懂,对计算机的性能要求不高,因此应用也比较广泛。kmeans法(K均值法)是麦奎因(MacQueen 1967)提出的,这种算法的基本思想是将每一个样品分配给最近中心(均值)的类中。 原理 kmeans算法以k为参数,把n个对象分为k个聚类,以使聚类内具有较高的相似度,而且聚类间的相似度较低。相似度的计算是根据一个聚类中对象的均值来进行。 概念和原理 plot(1:100)
plot(1:100) 7 聚类分析及R使用 7.4 kmeans 聚类法 输出结果: 快速聚类函数kmeans()的用法 kmeans(x, centers, …) x 数据矩阵或数据框,centers 聚类数或聚类中心 输出结果: plot(1:100) 【例7.3】kmeans算法的R语言实现及模拟分析 本例模拟正态随机变量。 x1=matrix(rnorm(1000,mean=0,sd=0.3),ncol=10) #均值1,标准差为0.3的100x10的正态随机数矩阵 x2=matrix(rnorm(1000,mean=1,sd=0.3),ncol=10) x=rbind(x1,x2) H.clust(x,"euclidean","complete")
plot(1:100) 7 聚类分析及R使用 7.4 kmeans 聚类法 cl=kmeans(x,2) #kmeans聚类 pch1=rep("1",100) pch2=rep("2",100) plot(x,col=cl$cluster,pch=c(pch1,pch2),cex=0.7) points(cl$centers,col=3,pch="*",cex=3) plot(1:100)
plot(1:100) 7 聚类分析及R使用 7.4 kmeans聚类法 输出结果: x1=matrix(rnorm(10000,mean=0,sd=0.3),ncol=10) #均值1,标准差为0.3的1000x10的正态随机数矩阵 x2=matrix(rnorm(10000,mean=1,sd=0.3),ncol=10) x=rbind(x1,x2) cl=kmeans(x,2) #kmeans聚类 pch1=rep("1",1000) pch2=rep("2",1000) plot(x,col=cl$cluster,pch=c(pch1,pch2),cex=0.7) points(cl$centers,col=3,pch ="*",cex=3) 输出结果: plot(1:100)
plot(1:100) 7 聚类分析及R使用 7.5 聚类分析的一些问题 系统聚类分析的特点 关于kmeans算法 综合性:聚类分析可以利用多个变量的信息对样本进行分类,克服单一指标分类的弊端。 形象性:聚类分析可以利用聚类图直观地表现其分类形态及类与类之间的内在关系。 客观性 :聚类分析结果克服主观因素,比传统分类方法更客观、细致、全面和合理。 关于kmeans算法 kmeans算法只有在类的平均值被定义的情况下才能使用。可以算是该方法的一个缺点。另外,kmeans算法不适合于发现非凸面形状的类,或者大小差别很大的类。而且,它对于“噪声”和孤立点数据是敏感的,少量的该类数据能够对均值产生极大的影响。 关于变量变换 平移变换 极差变换 标准差变换 主成分变换 对数变换 plot(1:100)