##最小距离法
# 设定工作路径
setwd("D:/data/")
# 读取数据
d4.5 <- read.csv("C:\\Users\\86167\\Desktop\\ex4.5.csv", header = T)
# 计算距离矩阵(采用欧氏距离)
d <- dist(d4.5, method = "euclidean", diag = T, upper = F, p = 2)
## Warning in dist(d4.5, method = "euclidean", diag = T, upper = F, p = 2):
## 强制改变过程中产生了NA
# 系统聚类(最小距离法)
HC_single <- hclust(d, method = "single")
# 绘制系统聚类树状图
plot(HC_single, hang = -1)
abline(h=11000)
abline(h=6000)
##取合并距离为11000,则30个地区可以分为三类:第一类为{1,9},
第二类为{19},第三类为{21,2,11,13,20,24,26,10,6,15,23,28,17,22,3,12,16,18,8,25,14,7,29,5,30,4,27}
##取合并距离为6000,则30个地区可以分为六类:第一类为{1},第二类为{9},第三类为
{19},第四类为{21},第五类为{2,11,13},第六类为{20,24,26,10,6,15,23,28,17,22,3,12,16,18,8,25,14,7,29,5,30,4,27}
##最大距离法
HC_complete <- hclust(d, method = "complete")
# 绘制最大距离法聚类树状图
plot(HC_complete, hang = -1)
rect.hclust(HC_complete,k=3,border="red")
##中间距离法
HC_median <- hclust(d, method = "median")
# 绘制中间距离法聚类树状图
plot(HC_median, hang = -1)
##重心距离法
HC_centroid <- hclust(d, method = "centroid")
# 绘制重心距离法聚类树状图
plot(HC_centroid, hang = -1)
##类平均距离法
HC_average <- hclust(d, method = "average")
# 绘制类平均距离法聚类树状图
plot(HC_average, hang = -1)
##离差平方和法(Ward 法)
HC_ward <- hclust(d, method = "ward.D2")
# 绘制离差平方和法聚类树状图
plot(HC_ward, hang = -1)
##k 均值聚类法
setwd("D:/data")
eg4.5<-read.csv("C:\\Users\\86167\\Desktop\\ex4.5.csv",header=T)
d4.5=eg4.5[,-1]
rownames(d4.5)=eg4.5[,1]
KM<-kmeans(d4.5, 4, nstart=20, algorithm="Hartigan-Wong")
#初始随机集合的个数为20, 算法为"Hartigan-Wong"(默认)
sort(KM$cluster) #
## 河北 山西 内蒙古 吉林 黑龙江 安徽 江西 贵州 云南 陕西 甘肃
## 1 1 1 1 1 1 1 1 1 1 1
## 青海 宁夏 新疆 天津 浙江 福建 广东 海南 北京 上海 辽宁
## 1 1 1 2 2 2 2 2 3 3 4
## 江苏 山东 河南 湖北 湖南 广西 重庆 四川
## 4 4 4 4 4 4 4 4
KM<-kmeans(d4.5, 5, nstart=15); sort(KM$cluster)
## 天津 浙江 福建 海南 山西 内蒙古 吉林 黑龙江 江西 贵州 云南
## 1 1 1 1 2 2 2 2 2 2 2
## 陕西 甘肃 青海 宁夏 新疆 河北 辽宁 江苏 安徽 山东 河南
## 2 2 2 2 2 3 3 3 3 3 3
## 湖北 湖南 广西 重庆 四川 北京 上海 广东
## 3 3 3 3 3 4 4 5
##北京和上海在两次聚类中都聚为一类,天津、浙江、福建、广东、海南在两次聚类中都较为接近,在 k = 4 时,山西、内蒙古等中西部省份被聚为一类,而在k=5时,这些省份中的部分地区与河北等省份聚为一类,这可能反映了中西部地区在产业结构和经济发展水平上有一定的共性,但也存在内部差异。例如,河北可能在某些产业结构上与中西部省份有相似之处,导致在聚类调整时被归为一类。