前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >聚类分析 练习题

聚类分析 练习题

作者头像
yiyun
发布2022-04-01 15:00:14
3.8K0
发布2022-04-01 15:00:14
举报
文章被收录于专栏:yiyun 的专栏

1.

下面给出五个元素两两之间的距离,试利用最短距离法、最长距离法和类平均法做出五个元素的谱系聚类,画谱系图并做出比较。

代码语言:javascript
复制
d = matrix(data=c(0,0,0,0,0,4,0,0,0,0,6,9,0,0,0,1,7,10,0,0,6,3,5,8,0),nrow=5,ncol=5,byrow = TRUE);d
x = scale(d) # 数据标准化
D = dist(x);D # 默认为 Euclidean 距离
代码语言:javascript
复制
# 最短距离法
hc1 = hclust(D, method='single')
data.frame(hc1$merge,hc1$height)
plot(hc1)
代码语言:javascript
复制
# 最长距离法
hc2=hclust(D,"complete");hc2
data.frame(hc2$merge,hc2$height)
plot(hc2)
代码语言:javascript
复制
# 类平均法
hc3=hclust(D,"average");hc3
data.frame(hc3$merge,hc3$height)
plot(hc3)

总结:根据以上作图分析可知使用最短距离法效果相对较好

2.

为了比较我国31个省、市、自治区2013年和2007年城镇居民生活消费的分布规律,根据调查资料做区域消费类型划分,并将2013年和2007年的数据进行对比分析。今收集了八个反映城镇居民生活消费结构的指标(2013年数据): 试对该数据进行聚类分析。

代码语言:javascript
复制
library(openxlsx)
d7.2 = read.xlsx("../Res/mvexer5.xlsx", "E7.2", rowNames=T);head(d7.2)
代码语言:javascript
复制
plot(d7.2,gap=0)
代码语言:javascript
复制
summary(d7.2)
代码语言:javascript
复制
Z = scale(d7.2);Z  # 数据标准化
boxplot(Z) # 箱型图
D = dist(Z)
代码语言:javascript
复制
hc = hclust(D, 'single') # 最短距离法
plot(hc);rect.hclust(hc, 2);cutree(hc, 2) # 分2类
plot(hc);rect.hclust(hc, 3);cutree(hc, 3) # 分3类
plot(hc);rect.hclust(hc, 4);cutree(hc, 4) # 分4类
代码语言:javascript
复制
hc2 = hclust(D, 'ward.D2') # Ward.D2 法
plot(hc2);rect.hclust(hc2, 2);cutree(hc2, 2) # 分2类
plot(hc2);rect.hclust(hc2, 3);cutree(hc2, 3) # 分3类
plot(hc2);rect.hclust(hc2, 4);cutree(hc2, 4) # 分4类
代码语言:javascript
复制
# kmeans 聚类法
kmeans(Z, 2)$cluster # 分2类
代码语言:javascript
复制
kmeans(Z, 3)$cluster # 分3类
代码语言:javascript
复制
kmeans(Z, 4)$cluster # 分4类

总结以上的分析结果,使用ward.D2方法的效果较好,且分为四类较为合适。

3.

按例7-3模拟方法对n=20,50,100,1000,10000 分别进行kmeans法聚类分析。   为了重复模拟,可以将例7-3的方法编成函数:

代码语言:javascript
复制
kMock<-function(n, svar=0.3) {
  set.seed(123) # 设定种子数
  x1 = matrix(rnorm(n*10, 0, svar), ncol = 10) # 均值为 0, 标准差为 svar 的 n*10 正态随机矩阵
  x2 = matrix(rnorm(n*10, 1, svar), ncol = 10) # 均值为 1, 标准差为 svar 的 n*10 正态随机矩阵
  X = rbind(x1, x2) # 形成 随机矩阵
  H = hclust(dist(X))
  plot(H);rect.hclust(H,2);
  cutree(H, 2) # 系统聚类结果
  
  km = kmeans(X, 2) # K-means 聚类
  #table(km)
  kc = km$cluster        # 分类结果
  #plot(X, pch = kc)
  plot(X, pch = kc, col = kc)
}

  再将n=20,50,100,1000,10000分别带

代码语言:javascript
复制
kMock(20)
代码语言:javascript
复制
kMock(50)
代码语言:javascript
复制
kMock(100)
代码语言:javascript
复制
kMock(1000)
代码语言:javascript
复制
kMock(10000)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-12-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.
  • 2.
  • 3.
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档