##最小距离法
# 设定工作路径
setwd("D:/data/")
# 读取数据
d4.1 <- read.csv("C:\\Users\\86167\\Desktop\\ex4.1.csv", header = T)
d4.1 <- na.omit(d4.1)
# 计算距离矩阵(采用欧氏距离)
d <- dist(d4.1, method = "euclidean", diag = T, upper = F, p = 2)
## Warning in dist(d4.1, method = "euclidean", diag = T, upper = F, p = 2):
## 强制改变过程中产生了NA
# 系统聚类(最小距离法)
HC<-hclust(d, method="single")
# 绘制系统聚类树状图
plot(HC, hang=-1)
abline(h=20)
abline(h=13)
##取合并距离为20,则20种酒可以分为三类:第一类为{16,19},
第二类为{10,12,9,20},第三类为{2,7,4,3,5,15,13,14,8,17,11,1,6,18}
##取合并距离为13,则20种酒可以分为六类:第一类为{16,19},第二类为{10},第三类为
{12,9,20},第四类为{2,7},第五类为{4},第六类为{3,5,15,13,14,8,17,11,1,6,18}
##最大距离法
HC_complete <- hclust(d, method = "complete")
# 绘制最大距离法聚类树状图
plot(HC_complete, hang = -1)
rect.hclust(HC_complete,k=6,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)
##离差平方和法
HC_ward <- hclust(d, method = "ward.D2") # 在R中,Ward法的正确写法是"ward.D2"
# 绘制离差平方和法聚类树状图
plot(HC_ward, hang = -1)
##K均值聚类法
setwd("D:/data") #设定工作路径
eg4.1<-read.csv("C:\\Users\\86167\\Desktop\\ex4.1.csv",header=T)
eg4.1 <- na.omit(eg4.1)
d4.1=eg4.1[,-1]
rownames(d4.1)=eg4.1[,1]
KM<-kmeans(d4.1, 4, nstart=20, algorithm="Hartigan-Wong") #聚类的个数为4
#初始随机集合的个数为20, 算法为"Hartigan-Wong"(默认)
sort(KM$cluster) #对分类结果进行排序并查看
## Budweiser Ionenbrau Heineken Old-milnaukee Strchs-bohemi
## 1 1 1 1 1
## Coors Michelos-lich Secrs Kkirin Hamms
## 1 1 1 1 1
## Heilemans-old Miller-lite Sudeiser-lich Coorslicht Schlite-light
## 1 2 2 2 2
## Pabst-extral Olympia-gold Schlitz Kronensourc Aucsberger
## 3 3 4 4 4
# 假设分为5类
KM <- kmeans(d4.1, 5, nstart = 20, algorithm = "Hartigan-Wong")
# 查看k均值聚类结果
sort(KM$cluster)
## Miller-lite Sudeiser-lich Coorslicht Schlite-light Budweiser
## 1 1 1 1 2
## Old-milnaukee Strchs-bohemi Coors Michelos-lich Hamms
## 2 2 2 2 2
## Heilemans-old Pabst-extral Olympia-gold Ionenbrau Heineken
## 2 3 3 4 4
## Secrs Kkirin Schlitz Kronensourc Aucsberger
## 4 4 5 5 5
##大部分啤酒的分类没有变化,只是 “Schlitz” 啤酒从原来的第二类(k = 4 时)变为了第一类(k = 5 时)。这可能意味着 “Schlitz” 啤酒在某些变量上的特征与第一类中的其他啤酒更为相似,当聚类数量增加到 5 时,它更适合被划分到这一类中。例如,可能在热量、酒精含量或价格等变量上,“Schlitz” 与 “Miller - lite” 等啤酒的差异在 k = 5 的聚类标准下变得更小,而与原来第二类中的其他啤酒差异相对增大。