22城镇居民人均消费聚类分析

聚类距离
聚类分析的距离就是将相似(相异)的数据看成是对象之间距离远近的一种度量,其目的就是让类群内观测的距离最近,而不同群体之间的距离最远。
绝对值距离

此处输入图片的描述

也叫做“城市街区”或“棋盘距离”

欧几里得距离(Euclid)


此处输入图片的描述

通常意义下的距离,默认使用

闵可夫斯基距离(Minkowski)


此处输入图片的描述

绝对值距离和欧氏距离是闵式距离的特例情况

切比雪夫距离(Chebyshew)


此处输入图片的描述

是闵式距离中 q 趋近于无穷大的情况

系统聚类法
系统聚类,也叫层次聚类,它的核心就是每一个观测值首先自成一类,然后将距离最近的类两两合并成为一个新类,重复多次合并,直到所有的类被聚成一类。
最短距离法,两个类之间样本的最短距离
最长距离法,两个类之间样本的最远距离
类平均法,一个类中的点和另一个类中的点的平均距离
重心法,类之间的重心(变量均值)之间的距离
Ward方法,两个类之间所有变量的方差分析的平方和
划分聚类法
划分聚类又称为逐步聚类法,基本的思想就是,首先粗略的分一下类,然后按照某种最优原则修改分类,直到最终分类合理。这种方法的计算量较小,占用内存较少,计算效率高且方法简单。 最常见的划分聚类的方法是 k-means 均值聚类分析。这里我们列出它的基本算法如下: (1)随机选择 K 个中心点 (2)将每个数据值点分配给相应最近的中心点 (3)重新计算每一类中的各个点到中心点的距离的平均值 (4)再次分配每个数据点给最近的中心点 (5)重复步骤 (3)和(4),直到所有的点达到最大迭代次数 由于 K 均值是基于均值的,所以它对异常值比较敏感,而基于中心的划分聚类法(k-medoids 法)显示出更加稳健,相较于 K 均值法一般使用欧氏距离来说,k-medoids 法中的 PAM 函数则可以调用任意的距离公式来计算。所以 PAM 方法可以容纳混合的数据类型,而不仅限于连续变量。
模型对比
系统聚类,能够展现数据层次结构,易于理解,可以基于层次再选择类的个数(根据数据选择类,但是数据量大,速度慢),计算量比较大,不适合样本量大的情形,较多用于宏观综合评价
划分聚类,属于快速聚类,计算效率高,需要实现指定类的个数(需要指定类),有时会不稳定,陷入局部收敛

数据获取
从实验平台上读取实验数据,数据来源是国家统计局,数据是 2010 年 31 个省份城镇居民家庭人均消费支出的统计值。

options(stringsAsFactors=F)
coms <- readLines("http://labfile.oss.aliyuncs.com/courses/908/comsume.csv")
coms <- unlist(strsplit(coms, split=","))
coms <- as.data.frame(matrix(coms, ncol=10, byrow=T))
colnames(coms) <- coms[1,]
coms <- coms[-1,]
row_names <- coms[,1]
coms <- coms[,-1]
coms <- as.data.frame(sapply(coms, as.numeric))
rownames(coms) <- row_names

数据整理
使用 scale函数对数据矩阵做中心化和标准化变换。

> coms.scale <- scale(coms)

使用 dist来计算距离。其中 x 是样本矩阵或者数据框。method 表示计算哪种距离。在本实验中采用的均是欧几里得距离,简称欧氏距离。

> d <- dist(coms.scale, method="euclidean")

系统聚类法
系统聚类(或叫层次聚类)的方法主要是由 hclust函数实现,method 的方法包括 “single”、“complete”、“average”、“centroid” 和 “ward”。
最短距离法(single)

> data.single <- hclust(d, method="single")
> plot(data.single, hang=-1, cex=.8, main="Single Linkage Clustering")
image.png

最长距离法(complete)

> data.complete <- hclust(d, method="complete")
> plot(data.complete, hang=-1, cex=.8, main="Complete Linkage Clustering")
image.png

类平均法(average)

> data.average <- hclust(d, method="average")
> plot(data.average, hang=-1, cex=.8, main="Average Linkage Clustering")
image.png

重心法(centroid)

> data.centroid <- hclust(d, method="centroid")
> plot(data.centroid, hang=-1, cex=.8, main="Centroid Linkage Clustering")
image.png

离差平方和法(ward 法)

> data.ward <- hclust(d, method="ward.D")
> plot(data.ward, hang=-1, cex=.8, main="Ward Linkage Clustering")
image.png

选择聚类个数
NbClust 这个包提供了众多指数来确定在一个聚类分析里的最佳数目,虽然不能保证所有指标的结果相同,但是这也不失为一种参考。

> library(NbClust)
> devAskNewPage(ask=T)
> nc <- NbClust(coms.scale, distance="euclidean", min.nc=2, max.nc=15, method="average")
Hit <Return> to see next plot: 
image.png

image.png
> table(nc$Best.n[1,])

 0  2  3  4  5  7  9 10 11 15 
 2  7  5  3  3  1  1  1  2  1 

类似于“投票”个数,NbClust 包中的26 个评判准则赞同数最多的聚类个数是 2,其次是 3 ,接着是 4 和 5 。

> barplot(table(nc$Best.n[1,]), xlab="Number of Clustering", ylab="Number of Criteria", main="Number of Clusters Chosen by 26 Criteria")
image.png

获取最终聚类方法
用 cutree 函数将树状图分为 2 类(先选用评判准则推荐数)

> clusters <- cutree(data.average, k=2)
> table(clusters)
clusters
 1  2 
 5 26 

通过 aggregate 函数获取每一类的中位数,采用的是标准度量 (coms.scale) 的形式。

> aggregate(as.data.frame(coms.scale), by=list(cluster=clusters), median)
  cluster 城镇居民家庭人均现金消费支出(元)
1       1                        1.7310408
2       2                       -0.4160258
  城镇居民家庭人均食品消费支出(元) 城镇居民家庭人均衣着消费支出(元)
1                        1.6341314                        1.1998430
2                       -0.3451563                       -0.3956246
  城镇居民家庭人均居住消费支出(元)
1                        1.2023829
2                       -0.2386753
  城镇居民家庭人均家庭设备及用品消费支出(元)
1                                  1.3138472
2                                 -0.4543204
  城镇居民家庭人均医疗保健消费支出(元)
1                            0.8466638
2                           -0.2979085
  城镇居民家庭人均交通和通信消费支出(元)
1                              2.0493731
2                             -0.5555593
  城镇居民家庭人均文教娱乐服务消费支出(元)
1                                 1.775012
2                                -0.392895
  城镇居民家庭人均其它消费支出(元)
1                        1.0778945
2                       -0.3627564

通过 rect.hclust() 函数将树状图重新绘制,得出最终的聚类解决方法。

> plot(data.average, hang=-1, cex=.8, main="Average Linkage Clustering\n5 Cluster Solution")
> rect.hclust(data.average, k=2)
image.png

从图中可能并没有得到一个满意的聚类方法,因为评判准则推荐的聚类数2过于粗略,因此可根据自己的判断进行重新聚类。

划分聚类法
K-Means 均值法
为了消除量级的影响,采用的数据是进过标准化处理过后的数据,通过调用 kmeans 函数进行划分聚类,类的个数选择的是 5 个,算法默认选择 Hartigan-Wong。

> km <- kmeans(coms.scale, 5, nstart=20)
> km
K-means clustering with 5 clusters of sizes 4, 13, 7, 1, 6

Cluster means:
  城镇居民家庭人均现金消费支出(元)
1                        1.6467834
2                       -0.5242398
3                       -0.6875210
4                        3.1562770
5                        0.3140589
  城镇居民家庭人均食品消费支出(元)
1                        1.5472740
2                       -0.6677726
3                       -0.2339480
4                        2.9226560
5                        0.2011548
  城镇居民家庭人均衣着消费支出(元)
1                        0.8217448
2                       -0.1055786
3                       -1.1258935
4                        1.1998430
5                        0.7944923
  城镇居民家庭人均居住消费支出(元)
1                        1.2626311
2                       -0.3091093
3                       -0.9212548
4                        3.0003585
5                        0.4027202
  城镇居民家庭人均家庭设备及用品消费支出(元)
1                                  1.1235531
2                                 -0.4051740
3                                 -0.7193372
4                                  3.4593421
5                                  0.3915114
  城镇居民家庭人均医疗保健消费支出(元)
1                           1.32527086
2                           0.01625638
3                          -1.19385371
4                           0.72146236
5                           0.35384954
  城镇居民家庭人均交通和通信消费支出(元)
1                             1.74585670
2                            -0.59338532
3                            -0.36428352
4                             2.88597319
5                             0.06576562
  城镇居民家庭人均文教娱乐服务消费支出(元)
1                                1.5404023
2                               -0.4105722
3                               -0.7680925
4                                3.0305706
5                                0.2536510
  城镇居民家庭人均其它消费支出(元)
1                        1.0548462
2                       -0.3150703
3                       -0.7814860
4                        3.8807792
5                        0.2443586

Clustering vector:
          北京市           天津市           河北省 
               1                1                2 
          山西省     内蒙古自治区           辽宁省 
               2                5                5 
          吉林省         黑龙江省           上海市 
               2                2                4 
          江苏省           浙江省           安徽省 
               5                1                2 
          福建省           江西省           山东省 
               5                3                5 
          河南省           湖北省           湖南省 
               2                2                2 
          广东省   广西壮族自治区           海南省 
               1                3                3 
          重庆市           四川省           贵州省 
               5                2                3 
          云南省       西藏自治区           陕西省 
               3                3                2 
          甘肃省           青海省   宁夏回族自治区 
               2                3                2 
新疆维吾尔自治区 
               2 

Within cluster sum of squares by cluster:
[1] 13.55936 16.90677 12.31074  0.00000 15.07624
 (between_SS / total_SS =  78.6 %)

Available components:

[1] "cluster"      "centers"      "totss"       
[4] "withinss"     "tot.withinss" "betweenss"   
[7] "size"         "iter"         "ifault"      

为了便于查看聚类后的情况,可以通过 sort 函数进行排序。

> sort(km$cluster)
          北京市           天津市           浙江省 
               1                1                1 
          广东省           河北省           山西省 
               1                2                2 
          吉林省         黑龙江省           安徽省 
               2                2                2 
          河南省           湖北省           湖南省 
               2                2                2 
          四川省           陕西省           甘肃省 
               2                2                2 
  宁夏回族自治区 新疆维吾尔自治区           江西省 
               2                2                3 
  广西壮族自治区           海南省           贵州省 
               3                3                3 
          云南省       西藏自治区           青海省 
               3                3                3 
          上海市     内蒙古自治区           辽宁省 
               4                5                5 
          江苏省           福建省           山东省 
               5                5                5 
          重庆市 
               5 

画出聚类后的图像

> plot(coms.scale, col=km$cluster)
image.png
> points(km$centers, col=1:5, pch=8, cex=2)
image.png

k-medoids 聚类

> library(cluster)
> coms.result <- pam(coms, 5, stand=T)
> coms.result
Medoids:
       ID 城镇居民家庭人均现金消费支出(元)
天津市  2                          16561.8
湖南省 18                          11825.3
青海省 29                           9613.8
辽宁省  6                          13280.0
上海市  9                          23200.4
       城镇居民家庭人均食品消费支出(元)
天津市                           5940.4
湖南省                           4322.1
青海省                           3784.8
辽宁省                           4658.0
上海市                           7777.0
       城镇居民家庭人均衣着消费支出(元)
天津市                           1567.6
湖南省                           1277.5
青海省                           1185.6
辽宁省                           1586.8
上海市                           1794.1
       城镇居民家庭人均居住消费支出(元)
天津市                           1615.6
湖南省                           1182.3
青海省                            923.5
辽宁省                           1314.8
上海市                           2166.2
       城镇居民家庭人均家庭设备及用品消费支出(元)
天津市                                     1119.9
湖南省                                      903.8
青海省                                      644.0
辽宁省                                      785.7
上海市                                     1800.2
       城镇居民家庭人均医疗保健消费支出(元)
天津市                               1275.6
湖南省                                776.9
青海省                                718.8
辽宁省                               1079.8
上海市                               1005.5
       城镇居民家庭人均交通和通信消费支出(元)
天津市                                 2454.4
湖南省                                 1541.4
青海省                                 1116.6
辽宁省                                 1773.3
上海市                                 4076.5
       城镇居民家庭人均文教娱乐服务消费支出(元)
天津市                                   1899.5
湖南省                                   1418.9
青海省                                    908.1
辽宁省                                   1495.9
上海市                                   3363.3
       城镇居民家庭人均其它消费支出(元)
天津市                            688.7
湖南省                            402.5
青海省                            332.5
辽宁省                            585.8
上海市                           1217.7
Clustering vector:
          北京市           天津市           河北省 
               1                1                2 
          山西省     内蒙古自治区           辽宁省 
               3                4                4 
          吉林省         黑龙江省           上海市 
               4                3                5 
          江苏省           浙江省           安徽省 
               2                1                2 
          福建省           江西省           山东省 
               2                2                4 
          河南省           湖北省           湖南省 
               2                2                2 
          广东省   广西壮族自治区           海南省 
               1                2                3 
          重庆市           四川省           贵州省 
               4                2                3 
          云南省       西藏自治区           陕西省 
               3                3                2 
          甘肃省           青海省   宁夏回族自治区 
               3                3                2 
新疆维吾尔自治区 
               3 
Objective function:
   build     swap 
1.867907 1.867907 

Available components:
 [1] "medoids"    "id.med"     "clustering" "objective" 
 [5] "isolation"  "clusinfo"   "silinfo"    "diss"      
 [9] "call"       "data"      
> summary(coms.result)
Medoids:
       ID 城镇居民家庭人均现金消费支出(元)
天津市  2                          16561.8
湖南省 18                          11825.3
青海省 29                           9613.8
辽宁省  6                          13280.0
上海市  9                          23200.4
       城镇居民家庭人均食品消费支出(元)
天津市                           5940.4
湖南省                           4322.1
青海省                           3784.8
辽宁省                           4658.0
上海市                           7777.0
       城镇居民家庭人均衣着消费支出(元)
天津市                           1567.6
湖南省                           1277.5
青海省                           1185.6
辽宁省                           1586.8
上海市                           1794.1
       城镇居民家庭人均居住消费支出(元)
天津市                           1615.6
湖南省                           1182.3
青海省                            923.5
辽宁省                           1314.8
上海市                           2166.2
       城镇居民家庭人均家庭设备及用品消费支出(元)
天津市                                     1119.9
湖南省                                      903.8
青海省                                      644.0
辽宁省                                      785.7
上海市                                     1800.2
       城镇居民家庭人均医疗保健消费支出(元)
天津市                               1275.6
湖南省                                776.9
青海省                                718.8
辽宁省                               1079.8
上海市                               1005.5
       城镇居民家庭人均交通和通信消费支出(元)
天津市                                 2454.4
湖南省                                 1541.4
青海省                                 1116.6
辽宁省                                 1773.3
上海市                                 4076.5
       城镇居民家庭人均文教娱乐服务消费支出(元)
天津市                                   1899.5
湖南省                                   1418.9
青海省                                    908.1
辽宁省                                   1495.9
上海市                                   3363.3
       城镇居民家庭人均其它消费支出(元)
天津市                            688.7
湖南省                            402.5
青海省                            332.5
辽宁省                            585.8
上海市                           1217.7
Clustering vector:
          北京市           天津市           河北省 
               1                1                2 
          山西省     内蒙古自治区           辽宁省 
               3                4                4 
          吉林省         黑龙江省           上海市 
               4                3                5 
          江苏省           浙江省           安徽省 
               2                1                2 
          福建省           江西省           山东省 
               2                2                4 
          河南省           湖北省           湖南省 
               2                2                2 
          广东省   广西壮族自治区           海南省 
               1                2                3 
          重庆市           四川省           贵州省 
               4                2                3 
          云南省       西藏自治区           陕西省 
               3                3                2 
          甘肃省           青海省   宁夏回族自治区 
               3                3                2 
新疆维吾尔自治区 
               3 
Objective function:
   build     swap 
1.867907 1.867907 

Numerical information per cluster:
     size max_diss  av_diss diameter separation
[1,]    4 4.228761 2.808394 4.921966   3.609082
[2,]   12 3.438325 1.734727 4.931835   1.319385
[3,]    9 3.168900 1.881147 4.833101   1.319385
[4,]    5 2.921007 1.784901 3.631708   1.852737
[5,]    1 0.000000 0.000000 0.000000   5.642691

Isolated clusters:
 L-clusters: character(0)
 L*-clusters: character(0)

Silhouette plot information:
                 cluster neighbor    sil_width
广东省                 1        4  0.384426204
浙江省                 1        4  0.273987209
北京市                 1        5  0.216066065
天津市                 1        4  0.111089995
湖南省                 2        3  0.363302374
四川省                 2        3  0.286014541
湖北省                 2        3  0.260832464
安徽省                 2        3  0.226162095
宁夏回族自治区         2        4  0.166634900
陕西省                 2        4  0.162060575
河南省                 2        3  0.132284283
福建省                 2        4  0.090919045
广西壮族自治区         2        3  0.081965348
河北省                 2        3  0.042007432
江西省                 2        3 -0.006777434
江苏省                 2        4 -0.032022384
青海省                 3        2  0.292361741
西藏自治区             3        2  0.244563997
云南省                 3        2  0.222421437
甘肃省                 3        2  0.219584082
贵州省                 3        2  0.217680263
新疆维吾尔自治区       3        2  0.126063641
海南省                 3        2  0.070171522
山西省                 3        2  0.011027726
黑龙江省               3        2 -0.075325647
内蒙古自治区           4        2  0.369302778
辽宁省                 4        2  0.288186152
重庆市                 4        2  0.212660109
吉林省                 4        2  0.167825669
山东省                 4        2  0.152252464
上海市                 5        1  0.000000000
Average silhouette width per cluster:
[1] 0.2463924 0.1477819 0.1476165 0.2380454 0.0000000
Average silhouette width of total data set:
[1] 0.1702493

465 dissimilarities, summarized :
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 0.9889  2.6669  3.9286  4.8799  6.2731 16.0050 
Metric :  euclidean 
Number of objects : 31

Available components:
 [1] "medoids"    "id.med"     "clustering" "objective" 
 [5] "isolation"  "clusinfo"   "silinfo"    "diss"      
 [9] "call"       "data"
> plot(coms.result$data, col=coms.result$clustering)
image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,874评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,102评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,676评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,911评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,937评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,935评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,860评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,660评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,113评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,363评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,506评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,238评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,861评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,486评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,674评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,513评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,426评论 2 352

推荐阅读更多精彩内容