第十三周作业

kyphosis的决策树模型

library(rpart.plot)
tr = rpart(Kyphosis ~ ., data = kyphosis, method = "class")
rpart.plot(tr, branch = 1, branch.type = 2, type = 1, extra = 8, shadow.col = "gray",
    box.col = "green", border.col = "blue", split.col = "red", split.cex = 1.2,
    main = "Kyphosis决策树")

plot of chunk unnamed-chunk-1

8.3 90年全国人口普查聚类分析

输入数据

x = c(9.3, 4.67, 0.96, 1.38, 1.48, 2.6, 2.15, 2.14, 6.53, 1.47, 1.17, 0.88,
    1.23, 0.99, 0.98, 0.85, 1.57, 1.14, 1.34, 0.79, 1.24, 0.96, 0.78, 0.81,
    0.57, 1.67, 1.1, 1.49, 1.61, 1.85)
y = c(30.55, 29.38, 24.69, 29.24, 25.47, 32.32, 26.31, 28.46, 31.59, 26.43,
    23.74, 19.97, 16.87, 18.84, 25.18, 26.55, 23.16, 22.57, 23.04, 19.14, 22.53,
    21.65, 14.65, 13.85, 3.85, 24.36, 16.85, 17.76, 20.27, 20.66)
z = c(8.7, 8.92, 15.21, 11.3, 15.39, 8.81, 10.49, 10.87, 11.04, 17.23, 17.46,
    24.43, 15.63, 16.22, 16.87, 16.15, 15.79, 12.1, 10.45, 10.61, 13.97, 16.24,
    24.27, 25.44, 44.43, 17.62, 27.93, 27.7, 22.06, 12.75)
ex83 = cbind(x, y, z)
rownames(ex83) = c("北京", "天津", "河北", "山西", "内蒙古", "辽宁",
    "吉林", "黑龙江", "上海", "江苏", "浙江", "安徽", "福建",
    "江西", "山东", "河南", "湖北", "湖南", "广东", "广西", "海南",
    "四川", "贵州", "云南", "西藏", "陕西", "甘肃", "青海", "宁夏",
    "新疆")

绘图

out.dist = dist(ex83, method = "euclidean");  #计算样本的欧式距离
hc1 = hclust(out.dist, method = "complete");  #根据最长距离法聚类
hc2 = hclust(out.dist, method = "average");   #根据均值法聚类
hc3 = hclust(out.dist, method = "centroid");  #根据重心法聚类
hc4 = hclust(out.dist, method = "ward");      #根据Ward法聚类

opar = par(mfrow=c(2,2));
plclust(hc1);
rect.hclust(hc1, k=4);
plclust(hc2);
rect.hclust(hc2, k=4);
plclust(hc3);
rect.hclust(hc3, k=4);
plclust(hc4);
rect.hclust(hc4, k=4);
par(opar);

plot of chunk unnamed-chunk-3

分类结果

clgroup1 = cutree(hc1, k = 4)
clgroup2 = cutree(hc2, k = 4)
clgroup3 = cutree(hc3, k = 4)
clgroup4 = cutree(hc4, k = 4)
sort(clgroup1)
##    北京    天津   山西    辽宁    吉林   黑龙江   上海   河北   内蒙古   江苏
##      1      1      1      1      1      1      1      2      2      2
##    浙江    福建   江西    山东    河南    湖北    湖南   广东    广西   海南
##      2      2      2      2      2      2      2      2      2      2
##    四川    陕西   新疆    安徽    贵州    云南    甘肃   青海    宁夏   西藏
##      2      2      2      3      3      3      3      3      3      4
sort(clgroup2)
##    北京    天津   山西    辽宁    吉林   黑龙江   上海   河北   内蒙古   江苏
##      1      1      1      1      1      1      1      2      2      2
##    浙江    福建   江西    山东    河南    湖北    湖南   广东    广西   海南
##      2      2      2      2      2      2      2      2      2      2
##    四川    陕西   新疆    安徽    贵州    云南    甘肃   青海    宁夏   西藏
##      2      2      2      3      3      3      3      3      3      4
sort(clgroup3)
##    北京    天津   山西    辽宁    吉林   黑龙江   上海   河北   内蒙古   江苏
##      1      1      1      1      1      1      1      2      2      2
##    浙江    福建   江西    山东    河南    湖北    湖南   广东    广西   海南
##      2      2      2      2      2      2      2      2      2      2
##    四川    陕西   新疆    安徽    贵州    云南    甘肃   青海    宁夏   西藏
##      2      2      2      3      3      3      3      3      3      4
sort(clgroup4)
##    北京    天津   山西    辽宁    吉林   黑龙江   上海   河北   内蒙古   江苏
##      1      1      1      1      1      1      1      2      2      2
##    浙江    福建   江西    山东    河南    湖北    湖南   广东    广西   海南
##      2      2      2      2      2      2      2      2      2      2
##    四川    陕西   新疆    安徽    贵州    云南    甘肃   青海    宁夏   西藏
##      2      2      2      3      3      3      3      3      3      4

8.4 应聘者数据的聚类分析

ex84 = read.table("../R-Book-Demo/ch3/applicant.data",header = TRUE)
out.dist = dist( 1 - cor(ex84) );
hc1 = hclust(out.dist,"complete"); #最长距离法
hc2 = hclust(out.dist,"average");  #均值法
hc3 = hclust(out.dist,"centroid"); #重心法
hc4 = hclust(out.dist,"ward");     #Ward法
opar = par(mfrow = c(2,2));
plot(hc1,hang = -1);
rect.hclust(hc1, k = 5);
plot(hc2,hang = -1);
rect.hclust(hc2, k = 5);
plot(hc3,hang = -1);
rect.hclust(hc3, k = 5);
plot(hc4,hang = -1);
rect.hclust(hc4, k = 5);

plot of chunk unnamed-chunk-5