文章期号:20190604
第二章统计进阶,多元统计:聚类分析
简而言之,聚类分析就是将研究对象(若干个个集合)按照某种标准分成若干类。相似性的度量,参考多种距离计算公式:欧式距离,绝对距离,切氏距离,明氏距离,马距氏离,兰距氏离。你也可以根据研究对象特征自己定义出一种度量相似度的距离公式
1,直奔主题
今天我们主要讨论,通过R工具怎么运用现有的,常用的聚类方法。本文主要结合实际案例,来介绍两种常用的聚类:系统聚类法和K均值聚类法。
系统聚类法:将10种红酒分类
K均值聚类法:根据31省市的消费数据,将31省市分成4类。
10种红葡萄酒的分数数据表:
酒 颜色x1 香味x2 酸度x3 甜度x4 纯度x5 果味x6
1 4.65 4.22 5.01 4.50 4.15 4.12
2 6.32 6.11 6.21 6.85 6.52 6.33
3 4.87 4.60 4.95 4.15 4.02 4.11
4 4.88 4.68 4.43 4.12 4.03 4.14
5 6.73 6.65 6.72 6.13 6.51 6.36
6 7.45 7.56 7.60 7.80 7.20 7.18
7 8.10 8.23 8.01 7.95 8.31 8.26
8 8.42 8.54 8.12 7.88 8.26 7.98
9 6.45 6.81 6.52 6.31 6.27 6.06
10 7.50 7.32 7.42 7.52 7.10 6.95
R实现系统聚类计算:
data4.1 <- read.table("eg4.1.txt", header=T)
data4.1
x1 x2 x3 x4 x5 x6
1 4.65 4.22 5.01 4.50 4.15 4.12
2 6.32 6.11 6.21 6.85 6.52 6.33
3 4.87 4.60 4.95 4.15 4.02 4.11
4 4.88 4.68 4.43 4.12 4.03 4.14
5 6.73 6.65 6.72 6.13 6.51 6.36
6 7.45 7.56 7.60 7.80 7.20 7.18
7 8.10 8.23 8.01 7.95 8.31 8.26
8 8.42 8.54 8.12 7.88 8.26 7.98
9 6.45 6.81 6.52 6.31 6.27 6.06
10 7.50 7.32 7.42 7.52 7.10 6.95
d<-dist(data4.1, method="euclidean", diag=T, upper=F,p=2) #采用欧式距离计算相似性
HC<-hclust(d,method="single") #采用最小距离分聚类
plot(HC)#绘制聚类树状图
结果产出:
如图,如果合并距离为4,则这10种酒可以分为两类:
第一类「6,10,7,8,2,5,9」,
第二类「1,3,4」.
基本思想是:根据给定参数K,先把n个对象粗略的分为k类,然后按照某种优先原则修改不合理的分类,直至准则函数收敛为止。
根据31个省市的8个方面的消费支出,将31省市分成4类,基于R实现K均值聚类法。
R实现K均值聚类计算:
> read.table(pipe("pbpaste"),sep='\t',header=T)->data
> data
p1 <-data.frame(x1=(data$x1),x2=(data$x2),x3=(data$x3),x4=(data$x4),x5=(data$x5),x6=(data$x6),x7=(data$x7),x8=(data$x8),row.names=(data$X))
> KM<-kmeans(p1,4,nstart=20,algorithm="Hartigan-Wong")
> sort(KM$cluster)
河北 山西 吉林 黑龙江 江西 河南 贵州 云南 西藏 甘肃 青海 宁夏 新疆 天津 江苏 福建 北京 上海 浙江 广东 内蒙古 辽宁 安徽 山东 湖北 湖南 广西 海南 重庆 四川 陕西
1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4
如R分类计算可知:
第一类省市:
河北 山西 吉林 黑龙江 江西 河南 贵州 云南 西藏 甘肃 青海 宁夏 新疆
第二类省市:
天津 江苏 福建
第三类省市:
北京 上海 浙江 广东
第四类省市:
内蒙古 辽宁 安徽 山东 湖北 湖南 广西 海南 重庆 四川 陕西