k均值聚类法

setwd("D:\\Rdownload\\lianxi\\fourth")  #设定工作路径
ex4.5<-read.csv("ex4.5.csv",header=T)  #将ex4.5.csv数据读入
d4.5=ex4.5[,-1]   #ex4.5的第一列为地名,不是数值先去掉
rownames(d4.5)=ex4.5[,1]  #用ex4.5的第一列为d4.5的行重新命名
KM<-kmeans(d4.5, 4, nstart=20, algorithm="Hartigan-Wong")  #聚类的个数为4
 #初始随机集合的个数为20, 算法为"Hartigan-Wong"(默认)
sort(KM$cluster)    #对分类结果进行排序并查看
##   北京   上海   河北   山西 内蒙古   吉林 黑龙江   安徽   江西   贵州   云南 
##      1      1      2      2      2      2      2      2      2      2      2 
##   陕西   甘肃   青海   宁夏   新疆   辽宁   江苏   山东   河南   湖北   湖南 
##      2      2      2      2      2      3      3      3      3      3      3 
##   广西   重庆   四川   天津   浙江   福建   广东   海南 
##      3      3      3      4      4      4      4      4
KM<-kmeans(d4.5, 5, nstart=15);  sort(KM$cluster)   #聚类的个数 k=5
##   广东   河北   辽宁   江苏   安徽   山东   河南   湖北   湖南   广西   重庆 
##      1      2      2      2      2      2      2      2      2      2      2 
##   四川   天津   浙江   福建   海南   山西 内蒙古   吉林 黑龙江   江西   贵州 
##      2      3      3      3      3      4      4      4      4      4      4 
##   云南   陕西   甘肃   青海   宁夏   新疆   北京   上海 
##      4      4      4      4      4      4      5      5

##两种情形下,天津、浙江、福建和广东都聚为一类;江西、贵州、云南、陕西、甘肃、青海、宁夏、新疆、辽宁和江苏都聚为一类;只是在其余地区的分类上有一定变化,即k = 4时的第4类中有10个地区划分出来单独聚为k = 5时的第2类。

系统聚类+k均值聚类

先采用系统聚类法,合并距离各为20000和14000

setwd("D:\\Rdownload\\lianxi\\fourth")   #设定工作路径
ex4.5<-read.csv("ex4.5.csv",header=T)    #将ex4.5.csv数据读入
d4.5=ex4.5[,-1]    #去掉第1列指标名称,数据集取名为d4.5
rownames(d4.5)=ex4.5[,1]    #为d4.5的行重新命名
d=dist(1- d4.5)   #将相关系数阵转化为距离阵
HC<-hclust(d, method="average")    #采用类平均法作系统聚类
plot(HC,hang=-1)    #从底部对齐绘制聚类树状图
abline(h=20000) ; abline(h=14000)   #画合并距离为20000和14000的水平线

##可见,当取合并距离为20000时,聚为两类:第1类:北京、上海;第2类:广东、辽宁、山东、江苏、四川、广西、黑龙江、吉林、江西、青海、云南、新疆、山西、甘肃、内蒙古、宁夏、贵州、陕西、湖北、重庆、河北、安徽、河南、湖南、海南、天津、浙江、福建。 ##当取合并距离为14000时,聚为三类:第1类:北京、上海;第2类:广东;第3类:辽宁、山东、江苏、四川、广西、黑龙江、吉林、江西、青海、云南、新疆、山西、甘肃、内蒙古、宁夏、贵州、陕西、湖北、重庆、河北、安徽、河南、湖南、海南、天津、浙江、福建。

再采用k均值聚类法,k分别取2和3

KM2<-kmeans(d, 2, nstart=10, algorithm="Hartigan-Wong")
sort(KM2$cluster)   #对k=2的分类结果进行排序查看
##   北京   上海   天津   河北   山西 内蒙古   辽宁   吉林 黑龙江   江苏   浙江 
##      1      1      2      2      2      2      2      2      2      2      2 
##   安徽   福建   江西   山东   河南   湖北   湖南   广东   广西   海南   重庆 
##      2      2      2      2      2      2      2      2      2      2      2 
##   四川   贵州   云南   陕西   甘肃   青海   宁夏   新疆 
##      2      2      2      2      2      2      2      2
KM3<-kmeans(d, 3, nstart=20, algorithm="Hartigan-Wong") 
sort(KM3$cluster)  #对k=3的分类结果进行排序查看
##   天津   江苏   浙江   福建   广东   海南   北京   上海   河北   山西 内蒙古 
##      1      1      1      1      1      1      2      2      3      3      3 
##   辽宁   吉林 黑龙江   安徽   江西   山东   河南   湖北   湖南   广西   重庆 
##      3      3      3      3      3      3      3      3      3      3      3 
##   四川   贵州   云南   陕西   甘肃   青海   宁夏   新疆 
##      3      3      3      3      3      3      3      3

##对比可得,合并距离为20000时的两类结果与k = 2时的两类结果有相似的分组逻辑;合并距离为14000时的三类结果与k = 3时的三类结果有相似的分组逻辑。