聚类分析原理及R语言实现过程

聚类分析定义与作用:

是把分类对象按照一定规则分成若干类,这些类不是事先设定的,而是根据数据的特征确定的。在同一类中这些对象在某种意义上趋向于彼此相似,而在不同类中对象趋向于彼此不相似。在经济、管理、地质勘探、天气预报、生物分类、考古学、医学、心理学以及制定国家标准和区域标准等许多方面应用十分广泛,是国内外较为流行的多变量统计分析方法之一,在机器学习中扮演重要角色。

聚类分析的类型

是实际问题中,如根据各省主要的经济指标,将全国各省区分成为几个区域等。这个主要的经济指标是我们用来分类的依据。称为指标(变量),用X1、X2 … Xp表示,p是变量的个数。在聚类分析中,基本的思想是认为所研究的样品或者多个观测指标(变量)之间存在着程度不同的相似性(亲疏关系)。根据这些相识程度,把样品划分成一个由小到大的分类系统,最后画出一张聚类图表示样品之间的亲疏关系。根据分类对象的不同,可将聚类分析分为两类,一是对分类处理,叫Q型;另一种是对变量处理,叫R型。

聚类统计量

聚类分析的基本原则是将有较大相似性的对象归为同一类,可进行聚类的统计量有距离和相似系数。

聚类分析原理及R语言实现过程

聚类分析的方法:

系统聚类法、快速聚类法、模糊聚类法。

系统聚类

常用的有如下六种:

1、最短距离法;2、最长距离法;3、类平均法;4、重心法;5、中间距离法;6、离差平方和法

快速聚类

常见的有K-means聚类。

R语言实现系统聚类和K-means聚类过程详解

系统聚类R语言教程

第一步:计算距离

在R语言进行系统聚类时,先计算样本之间的距离,计算之前先对样品进行标准变换。用scale()函数。

R语言各种距离的计算用dist()函数来实现。具体用法为:

dist(x , method = " euclidean " , diag = FALSE, upper = FALSE, p = 2)

x:为数据矩阵或者数据框。

method:为计算方法,包括"euclidean"欧式距离," maximum"切比雪夫距离," manhattan"绝对值距离,"Canberra"兰氏距离," minkowski" 闵可夫斯基距离," binary" 定型变量的距离。

diag是逻辑变量,当diag = TRUE时,给出对角线上的距离。

upper是逻辑变量,当upper = TRUE时,给出上三角矩阵的值(缺省值仅给出下三角矩阵的值)。

p:为minkowski距离的幂次

第二步:系统聚类

在R语言中用hclust()函数进行系统聚类。hclust具体用法为:

hclust(dist , method)

dist:为第一步计算出来的距离

method:为系统聚类方法,有"single"最短距离法,"complete"最长距离法,"median"中间距离法,"mcquitty" Mcquitty相似法,"average"类平均法,"centroid"重心法,"ward" 离差平方和法

第三步:画出聚类图

R语言中用plot()函数画出聚类图,具体用法为:

plot(x, hang = 0.1, axes = TRUE , main = "Cluster Dendrogram", sub = NULL, xlab = NULL, ylab = "Height",...)

x:第二步中hclust得出的对象

hang:表明谱系图中各类所在的位置,当hang取负值时,谱系图中的类从底部画起

main:给聚类图添加标题

sub:给聚类图添加子标题

xlab:为x轴添加说明

ylab:为y轴添加说明

第四步:画出分类矩形框

最后一步用rect.hclust(x, k = n) 函数画出分类矩形框。其中x为第二步hclust得出的对象,K为要分的类数。

例1

为研究我国31个省、市、自治区2007年的城镇居民生活消费的规律,根据调查资料作区域消费类型划分。原始数据如下:

聚类分析原理及R语言实现过程

数据来源—www.stats.gov.cn(中华人民共和国国家统计局)

采用欧式距离,分别用最短距离法、最长距离法、类平均法、中间距离法、重心法和ward法得出系统聚类图。

聚类分析原理及R语言实现过程

聚类分析原理及R语言实现过程

聚类分析原理及R语言实现过程

聚类分析原理及R语言实现过程

聚类分析原理及R语言实现过程

聚类分析原理及R语言实现过程

聚类分析原理及R语言实现过程

聚类分析原理及R语言实现过程

聚类分析原理及R语言实现过程

聚类分析原理及R语言实现过程

聚类分析原理及R语言实现过程

聚类分析原理及R语言实现过程

聚类分析原理及R语言实现过程

可以看出不同距离方法的分类结果有所差异,但大体的结果是一致的, 北京、上海、浙江、天津、广东消费水平和其他省市自治区有较明显的区别,符合实际情况。

Kmeans聚类R语言教程

步骤:

第一步:将所有样品分成K个初始类。

第二步:通过欧式距离将某个样品划入离中心最近的类中,并对获得样品和失去样品的类重新计算中心坐标。

第三步:重复步骤2,直到所有的样品都不能再分类为止。

在R语言中用kmeans()函数进行kmeans聚类。具体用法为:

kmeans(x, centers, iter.max = 10, nstart = 1, algorithm = c("Hartigan-Wong","Lloyd","Forgy","MacQueen"))

x: 数据构成的矩阵或数据框

centers: 聚类的个数或者是初始类的中心

iter.max: 最大迭代次数(缺省值为10)

nstart: 机集合的个数(当centers为聚类的个数时)

algorithm: 动态聚类的算法(缺省值为Hartigan-Wong方法)

例2

针对例1的数据我们进行kmeans聚类。

聚类分析原理及R语言实现过程

图中的分类结果显示和系统聚类的结果有一定的差距,组间的距离平方和占了整体距离平方和的71.7 % ,说明数据用kmengs分4类不是很理想,发现k=4并不符合实际情况。这就引出了kmeans的一个注意事项,

kmeans的一个注意事项

因为kmeans每次都是随机的把样品分为K个分类,然后计算距离,然后重新分类,所以每次的运行结果不太一样。对类别及k的数值选择不同,分类结果的好坏也不尽相同。选择一个正确的聚类数目对于划分数据是很重要的。

R语言中使用Gap统计值来确定k的个数,他是通过对数据进行bootstrap抽样来比较内差异性。这里使用cluster软件包里面的clusGap函数计算。

本例如下:

聚类分析原理及R语言实现过程

聚类分析原理及R语言实现过程

红色曲线表示Gap统计值和Gap误差线。最优的聚类数目是在一个标准差里使gap达到最小的聚类数目。由此可见本例中分8类最好。

聚类分析以及R语言实现过程明明同学就给大家介绍到这里

学习更多R语言数据分析使用技巧、EXCEL和PPT制作教程请查看历史文章。

有任何问题请评论区会说明并私信明明同学,明明同学帮助你解决数据分析,PPT制作,论文做图、以及高质量图片处理的难处。


分享到:


相關文章: