美文网首页
22城镇居民人均消费聚类分析

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

作者: Jachin111 | 来源:发表于2020-12-12 15:45 被阅读0次

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

    此处输入图片的描述
    也叫做“城市街区”或“棋盘距离”

    欧几里得距离(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

    相关文章

      网友评论

          本文标题:22城镇居民人均消费聚类分析

          本文链接:https://www.haomeiwen.com/subject/biuowktx.html