吉林大学 数据挖掘期末大作业 第二题报告

该文通过数据集成处理,删除无关列,对学生成绩数据进行主成分分析,保留主要成分。接着进行数据标准化,通过k-means和层次聚类分析确定了5个聚类。不同距离函数(欧氏、曼哈顿、切比雪夫、闵可夫斯基、蓝氏)下的聚类结果展示了距离选择对聚类的影响,其中蓝氏距离的聚类结果与原数据分类相似。
摘要由CSDN通过智能技术生成

一、操作说明:
根据第一题我们在这里使用Class10中的sheet6“成绩详情”,讨论一下不同成绩之间的关系。我们首先对数据进行处理,去掉SID,五级制等级,综合成绩和证书发放四个列,这里用到了数据集成。剩下的有五个列,我们不用全部讨论,我们使用数据规约,进行主成分分析,对进行分析后的列再次处理。最后先进行k-means聚类分析,在进行根据距离函数进行的聚类分析,得到最终结果。
二、代码

# 加载所需的包略
data=read.xlsx("F:\\数据包\\Class10.xlsx",6)
#删除不需要的列
data <-data[ , !names(data) %in% c("SID","综合成绩","五级制等级(ABCDE)","证书发放")]
data=as.data.frame(lapply(data,as.numeric))#将字符串转换为数字
PCA = princomp(data,cor = TRUE)#进行主成分分析
names(PCA) #查看输出项
(PCA$sdev)^2 #主成分特征根
PCA$loadings #主成分载荷
PCA$scores #主成分得分
summary(PCA) #主成分贡献率
data=data[,-4]#去掉次要成分列
data=data[,-4]
df <- scale(data)#标准化
#判断需要分为几个聚类
fviz_nbclust(data, kmeans, method = "wss") + geom_vline(xintercept = 5, linetype = 2)
#聚类结果
km_result <- kmeans(data, 5, nstart = 24)
print(km_result)
#先求样本之间两两相似性
result <- dist(data, method = "euclidean")
#产生层次结构
result_hc <- hclust(d = result, method = "ward.D2")
#进行初步展示
fviz_dend(result_hc, k = 5, 
          cex = 0.5, 
          k_colors = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07","#229BDF"),
          color_labels_by_k = TRUE, 
          rect = TRUE          
)
#距离函数求各行之间的距离:
#欧氏距离
dist(data,p=2)
#曼哈顿距离
dist(data,"manhattan")
#切比雪夫距离
dist(data,"maximum")
#闵可夫斯基距离
dist(data,"minkowski")
#蓝氏距离
dist(data,"canberra")
#相关系数表示距离
1-cor(t(data))
#利用各种距离进行聚类
#欧氏距离
dist(data,p=2)
out.dist=dist(data,method="euclidean")
out.hclust=hclust(out.dist,method="complete")
plclust(out.hclust)
rect.hclust(out.hclust, k=5)
#曼哈顿距离
dist(data,"manhattan")
out.dist=dist(data,method="manhattan")
out.hclust=hclust(out.dist,method="complete")
plclust(out.hclust)
rect.hclust(out.hclust, k=5)
#切比雪夫距离
dist(data,"maximum")
out.dist=dist(data,method="maximum")
out.hclust=hclust(out.dist,method="complete")
plclust(out.hclust)
rect.hclust(out.hclust, k=5)
#闵可夫斯基距离
dist(data,"minkowski")
out.dist=dist(data,method="minkowski")
out.hclust=hclust(out.dist,method="complete")
plclust(out.hclust)
rect.hclust(out.hclust, k=5)
#蓝氏距离
out.dist=dist(data,method="canberra")
out.hclust=hclust(out.dist,method="complete")
plclust(out.hclust)
rect.hclust(out.hclust, k=5)

三、程序截图与分析
① 首先载入数据进行数据集成,删除不需要的列,再进行主成分分析删除次要成分。
相关代码分析:
data=read.xlsx(“F:\数据包\Class10.xlsx”,6)
data <-data[ , !names(data) %in% c(“SID”,“综合成绩”,“五级制等级(ABCDE)”,“证书发放”)]
PCA = princomp(data,cor = TRUE)
names(PCA)
(PCA s d e v ) 2 P C A sdev)^2 PCA sdev)2PCAloadings
PCA$scores
summary(PCA)
得到数据如图:
在这里插入图片描述

由图可知:当有三个主成分时,数据的利用率达到了85.5%,基本符合我们的需要。所以我们只要保留三个主成分就可以了。
去掉次要成分列
data=data[,-4]
data=data[,-4]
② 接下来进行聚类分析,有原数据我们可以了解我们的数据应该是可以分为5个聚类的(参考“五级制等级”),不过我们仍然需要再次根据数据进行判断,首先将数据进行标准化,利用fviz_nbclust函数进行判断。得出聚类个数,最后显示出聚类的层次结构,我们首先用“k-means,层次聚类”进行展示。、
相关代码分析:
data=as.data.frame(lapply(data,as.numeric))#将字符串转换为数字
df <- scale(data)#标准化
#判断需要分为几个聚类
fviz_nbclust(data, kmeans, method = “wss”) + geom_vline(xintercept = 5, linetype = 2)
如图:
在这里插入图片描述

容易得出当数值为5 的时候曲线变得平缓,所以应该分为五个聚类。
#聚类结果
km_result <- kmeans(data, 5, nstart = 24)
print(km_result)
聚类结果:
在这里插入图片描述

#先求样本之间两两相似性
result <- dist(data, method = “euclidean”)
#产生层次结构
result_hc <- hclust(d = result, method = “ward.D2”)
#进行初步展示
fviz_dend(result_hc, k = 5,
cex = 0.5,
k_colors = c("#2E9FDF", “#00AFBB”, “#E7B800”, “#FC4E07”,"#229BDF"),
color_labels_by_k = TRUE,
rect = TRUE
)
层次结构:
在这里插入图片描述

③ 根据距离函数求各行之间的距离:
欧氏距离 dist(data,p=2)
#曼哈顿距离 dist(data,“manhattan”)
切比雪夫距离 dist(data,“maximum”)
闵可夫斯基距离 dist(data,“minkowski”)
蓝氏距离 dist(data,“canberra”)
相关系数表示距离 1-cor(t(data))
上面的截图都是简单数据我们这里只截取欧氏距离作为例子:
欧氏距离数据:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

利用上述各种距离进行聚类,默认以最远距离进行聚类。
欧氏距离
out.dist=dist(data,method=“euclidean”)
out.hclust=hclust(out.dist,method=“complete”)
plclust(out.hclust)
rect.hclust(out.hclust, k=5)
结果如图:
在这里插入图片描述

曼哈顿距离
out.dist=dist(data,method=“manhattan”)
out.hclust=hclust(out.dist,method=“complete”)
plclust(out.hclust)
rect.hclust(out.hclust, k=5)
结果如图:
在这里插入图片描述

切比雪夫距离
dist(data,“maximum”)
out.dist=dist(data,method=“maximum”)
out.hclust=hclust(out.dist,method=“complete”)
plclust(out.hclust)
rect.hclust(out.hclust, k=5)
结果如图:
在这里插入图片描述

闵可夫斯基距离
out.dist=dist(data,method=“minkowski”)
out.hclust=hclust(out.dist,method=“complete”)
plclust(out.hclust)
rect.hclust(out.hclust, k=5)
结果如图:
在这里插入图片描述

蓝氏距离
out.dist=dist(data,method=“canberra”)
out.hclust=hclust(out.dist,method=“complete”)
plclust(out.hclust)
rect.hclust(out.hclust, k=5)
结果如图:
在这里插入图片描述

四、结果分析:
1、与原数据相似,根据数据计算后我们还是分成了5个聚类。
2、对于不同的距离函数,聚类结果不同。
3、对于曼哈顿距离进行距离,与我们使用k-means相似,存在极大可能我使用的k-means方法利用的也是曼哈顿距离。
4、相对于其他距离蓝氏距离更符合我们的需要,与原数据的分类相似。

  • 11
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木得感情的野指针

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值