系统聚类法对饮料分类--基于R

       现有16种饮料的热量、咖啡因含量、钠含量和价格数据如下表所示,根据这四个变量对16种饮料进行聚类(本题来自多元统计分析-基于R课后习题)

        采用系统聚类的最小距离法进行聚类,R程序如下:

# 系统聚类法
library(mclust)
ex4.2<-read.csv("ex4.2.csv",header = T)
d4.2=ex4.2[,-1] #ex4.5.csv的第一列为序号,先去掉
rownames(d4.5)=ex4.5[,1] #用ex4.2的第一列为d4.2的行重新命名
d<-dist(d4.2,method = "euclidean",diag = T,upper = F,p=2)
#采用欧氏距离计算距离矩阵d,diag设定是否输出对角线上值
#upper设定是否输出d的上三角部分值,p为明式距离参数k
HC<-hclust(d,method = "single") #采用最小距离法聚类
plot(HC,hang=-1) #绘制最小距离法聚类树状图
#当hang取负值时,从底部对齐开始绘制聚类树状图

abline(h=30);abline(h=20)

      16种饮料的聚类树状图如下

      可以看出,如果合并距离取为30,则这16种饮料可被分成两类;如果合并距离取为20,则这16种饮料可被分成四类。

     若用最大距离法进行聚类样本与样本之间采用欧式距离法进行度量,聚类结果和最小距离法的结果一样,只是合并距离不同,这里不再赘述。

      还可以用函数rect.hclust()根据树状图来确定最终的分类,若分类数为3,R程序为:

rect.hclust(HC,k=3)

      聚类树状图为:

       在R中还可以用函数cutree()对hclust()函数聚类的结果进行剪枝,我们设定三类,k=3,R程序如下:

cutree(HC,k=3)

 

       输出结果表明,16种饮料可以被分成三类,它们对应于1,2和3对应的位置,分别为{1,10},{2,3,4,5,6,8,9,11,12,13,14,15,16}和{7}.

猜你喜欢

转载自blog.csdn.net/weixin_44734502/article/details/129322439