聚类实践R

聚类分析一般指把多元观测数据的观测按照某种临近或相似性标准分成若干组,每
一组内的观测是比较相近或相似的。这样的聚类又称为 Q 型聚类,即对样品的聚
类。
另一种聚类是把多个变量按照其在所有观测上的取值分成若干个变量组,每一组内
的变量比较相近或相似,这样的聚类分析称为变量聚类或 R 型聚类。
从数学上看两种聚类没有本质差别(只要把观测矩阵转置就得到另一种聚类问题)。
常用的聚类方法包括:
• 系统(谱系)聚类法 (hierarchical clustering),从每类只有单个元素开始,每
次合并两类;
• k 均值聚类法 (k-means clustering),需要设定类的个数,然后迭代地调整元
素的类属使同类的元素接近而异类元素分离。

系统聚类葡萄酒实例
> getwd()
[1] "C:/Users/gg葱/Documents"
> setwd("D:\\Documents\\Rcode\\KNN")
> 

> winescore<-read.csv("wineScore.csv")
> winescore
     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


> knitr::kable(winescore)


|   x1|   x2|   x3|   x4|   x5|   x6|
|----:|----:|----:|----:|----:|----:|
| 4.65| 4.22| 5.01| 4.50| 4.15| 4.12|
| 6.32| 6.11| 6.21| 6.85| 6.52| 6.33|
| 4.87| 4.60| 4.95| 4.15| 4.02| 4.11|
| 4.88| 4.68| 4.43| 4.12| 4.03| 4.14|
| 6.73| 6.65| 6.72| 6.13| 6.51| 6.36|
| 7.45| 7.56| 7.60| 7.80| 7.20| 7.18|
| 8.10| 8.23| 8.01| 7.95| 8.31| 8.26|
| 8.42| 8.54| 8.12| 7.88| 8.26| 7.98|
| 6.45| 6.81| 6.52| 6.31| 6.27| 6.06|
| 7.50| 7.32| 7.42| 7.52| 7.10| 6.95|
> d <- winescore;summary(d)
       x1              x2       
 Min.   :4.650   Min.   :4.220  
 1st Qu.:5.240   1st Qu.:5.037  
 Median :6.590   Median :6.730  
 Mean   :6.537   Mean   :6.472  
 3rd Qu.:7.487   3rd Qu.:7.500  
 Max.   :8.420   Max.   :8.540  
       x3              x4       
 Min.   :4.430   Min.   :4.120  
 1st Qu.:5.310   1st Qu.:4.907  
 Median :6.620   Median :6.580  
 Mean   :6.499   Mean   :6.321  
 3rd Qu.:7.555   3rd Qu.:7.730  
 Max.   :8.120   Max.   :7.950  
       x5              x6       
 Min.   :4.020   Min.   :4.110  
 1st Qu.:4.680   1st Qu.:4.620  
 Median :6.515   Median :6.345  
 Mean   :6.237   Mean   :6.149  
 3rd Qu.:7.175   3rd Qu.:7.122  
 Max.   :8.310   Max.   :8.260 
样本点间的距离

首先用欧式距离计算距离矩阵

d.mat <- dist(d, method='euclidean',
diag=TRUE, upper=F)
knitr::kable(as.data.frame(round(as.matrix(d.mat), 2)))

|    1|    2|    3|    4|    5|    6|    7|    8|    9|   10|
|----:|----:|----:|----:|----:|----:|----:|----:|----:|----:|
| 0.00| 4.88| 0.58| 0.87| 5.14| 7.43| 9.13| 9.26| 4.87| 7.03|
| 4.88| 0.00| 4.94| 5.07| 1.11| 2.72| 4.36| 4.56| 1.01| 2.34|
| 0.58| 4.94| 0.00| 0.53| 5.10| 7.44| 9.11| 9.22| 4.83| 7.02|
| 0.87| 5.07| 0.53| 0.00| 5.26| 7.60| 9.26| 9.37| 4.99| 7.19|
| 5.14| 1.11| 5.10| 5.26| 0.00| 2.46| 4.02| 4.14| 0.57| 2.04|
| 7.43| 2.72| 7.44| 7.60| 2.46| 0.00| 1.86| 1.99| 2.66| 0.48|
| 9.13| 4.36| 9.11| 9.26| 4.02| 1.86| 0.00| 0.54| 4.32| 2.21|
| 9.26| 4.56| 9.22| 9.37| 4.14| 1.99| 0.54| 0.00| 4.42| 2.32|
| 4.87| 1.01| 4.83| 4.99| 0.57| 2.66| 4.32| 4.42| 0.00| 2.26|
| 7.03| 2.34| 7.02| 7.19| 2.04| 0.48| 2.21| 2.32| 2.26| 0.00|
dist(data, method=) 函数计算观测间的距离。在 dist() 函数中,diag
选项决定显示距离阵时是否显示对角线元素,upper 决定显示距离阵时是否显示上
三角元素,method 是距离种类:
• euclidean 欧式距离;
• manhattan 曼哈顿距离;
• maximum 最大(上确界)距离;
• minkowski 闵可夫斯基距离;
• canberra 兰氏距离。

本例的 6 个评分取值范围相近,所以不需要标准化。如果变量取值范围差别很大,在计算距离前一般应该把每列标准化 (scale() 函数)

用最短距离法聚类
> res1 <- hclust(d.mat, method='single'); res1

Call:
hclust(d = d.mat, method = "single")

Cluster method   : single 
Distance         : euclidean 
Number of objects: 10
hclust() 函数中选项 method 选择系统聚类的类间距离,包括:
• single 最短距离法,
• complete 最大距离法
• average 类平均法
• median 中间距离法
• centrold 重心法
• ward Ward 法

对 hclust() 的输出结果用 plot() 画聚类树状图:

plot(res1)

![在这里插入图片描述](https://img-blog.csdnimg.cn/6fa72ea4d807492dbc6404f7484e75c1.jpeg
注意:观测的左右关系不代表距离,两类相连时纵轴的高度才代表两类之间的距离,距离越大,越不应该合并到一起。从图上看分为两类比较合适。
• 第一类: 1, 3, 4;
• 第二类: 2, 5, 6, 7, 8, 9, 10。
对 hclust() 的输出结果用 cutree(tree, k=) 得到每个观测的分类号,输出类
号组成的向量。注意聚类方法的结果是一些分类,具体的类编号并没有意义。

cut1 <- cutree(res1, k=2); cut1

 [1] 1 2 1 1 2 2 2 2 2 2

结果 cut1 是分为两类后每个观测的类编号。
用并列盒形图验证分类:

boxplot(t(as.matrix(winescore)))

在这里插入图片描述

用最长距离法聚类
res2 <- hclust(d.mat, method='complete'); res2
plot(res2)


Call:
hclust(d = d.mat, method = "complete")

Cluster method   : complete 
Distance         : euclidean 
Number of objects: 10 

在这里插入图片描述
分为两类或三类合适。
分为两类:

cut2 <- cutree(res2, k=2); cut2
## [1] 1 2 1 1 2 2 2 2 2 2

两类:
• 第一类: 1, 3, 4;
• 第二类: 2, 5, 6, 7, 8, 9, 10。
分为两类时最短距离和最长距离结果相同。
分为三类:

cut2b <- cutree(res2, k=3); cut2b
## [1] 1 2 1 1 2 3 3 3 2 3

• 第一类: 1, 3, 4
• 第二类: 2, 5, 9
• 第三类: 6, 7, 8, 10

用星图验证分类
rainbow()可以获取彩虹色板
rainbow(n, s = 1, v = 1, start = 0, end = max(1, n - 1)/n, alpha = 1)

例如,基于彩虹色渐变获取10个颜色,依次由red、yellow、green、cyan、green、blue 、magenta等顺序细化而成:
> rainbow(10)
 [1] "#FF0000FF" "#FF9900FF" "#CCFF00FF" "#33FF00FF" "#00FF66FF" "#00FFFFFF" "#0066FFFF"
 [8] "#3300FFFF" "#CC00FFFF" "#FF0099FF"
palette()函数用于设置或查看Graphics Palette。
用法: palette(value)
palette(rainbow(10))
graphics::stars(
d, len=0.9, cex=1,
nrow=3, ncol=4,
key.loc=c(8, 1),
ylim=c(0, 8),
labels=paste(seq(nrow(d))),
draw.segments=TRUE)

在这里插入图片描述
用脸谱图验证分类

aplpack::faces(d)

effect of variables:
 modified item       Var 
 "height of face   " "x1"
 "width of face    " "x2"
 "structure of face" "x3"
 "height of mouth  " "x4"
 "width of mouth   " "x5"
 "smiling          " "x6"
 "height of eyes   " "x1"
 "width of eyes    " "x2"
 "height of hair   " "x3"
 "width of hair   "  "x4"
 "style of hair   "  "x5"
 "height of nose  "  "x6"
 "width of nose   "  "x1"
 "width of ear    "  "x2"
 "height of ear   "  "x3"
脸谱图与最长距离法分三类的结果比较吻合

在这里插入图片描述
用平行坐标图验证分类
平行坐标图 (parallel coordinate plot) 是可视化高维多元数据的一种常用方法,为了显示多维空间中的一组对象,绘制由多条平行且等距分布的轴,并将多维空间中的对象表示为在平行轴上具有顶点的折线。顶点在每一个轴上的位置就对应了该对象在该维度上的中的变量数值

opar <- par(mar=c(3,3,1,0.5), mgp=c(2,1, 0))
logd <- log(as.matrix(d))
logd <- cbind(obs=seq(nrow(logd)), logd)
MASS::parcoord(logd)
axis(2, at=seq(0,1, length=10), label=seq(10)

在这里插入图片描述

par(opar) ?

opar <- par(mar=c(3,3,1,0.5), mgp=c(2,1, 0))
logd <- log(as.matrix(d))
logd <- cbind(obs=seq(nrow(logd)), logd)
MASS::parcoord(logd, col=rainbow(9)[5:7][cut2b])
axis(2, at=seq(0,1, length=10), label=seq(10))

在这里插入图片描述

K均值聚类消费性支出

导入中文时
Error in type.convert.default(data[[i]], as.is = as.is[i], dec = dec, :
invalid multibyte string at ‘’
是文件的问题,因为R已经是调过格式,主要原因是之前导入的csv的格式是(.csv),把文件重新导出成CSV UTF-8(逗号分隔)(.csv)就可以了,直接在Excel里面另存为

2011 年全国 31 个省级行政区的城镇居民家庭人均消费性支出的 8 个主要指标的数据。根据这些数据,把 31 个省用 k 均值聚类法分成 4 到 5 类。

> setwd("D:\\Documents\\Rcode\\Kmeans")
> d<-read.csv("provConsume.csv")
knitr::kable(d)

|X      |     x1|     x2|      x3|     x4|     x5|     x6|     x7|    x8|
|:------|------:|------:|-------:|------:|------:|------:|------:|-----:|
|北京   | 7584.2| 2425.7| 10350.2| 2098.3| 4489.6| 3634.6| 2228.6| 991.4|
|天津   | 7709.9| 1949.4|  5237.5| 1514.0| 3185.9| 2096.0| 1757.1| 712.6|
|河北   | 3515.5| 1055.3|  2995.8|  832.2| 1807.6| 1338.6| 1192.0| 293.6|
|山西   | 3089.4| 1146.7|  2297.4|  672.5| 1501.4| 1628.0| 1102.0| 291.5|
|内蒙古 | 4919.8| 1759.7|  2918.9| 1030.9| 2569.0| 2067.1| 1384.3| 528.9|
|辽宁   | 4858.0| 1561.6|  3471.6| 1028.7| 2282.0| 1973.3| 1522.4| 502.2|
|吉林   | 3683.5| 1254.9|  2692.3|  718.4| 1810.0| 1683.6| 1527.5| 393.7|
|黑龙江 | 3704.1| 1288.3|  2619.6|  672.4| 1675.1| 1526.2| 1577.0| 339.8|
|上海   | 9271.5| 1622.7| 11307.5| 1484.6| 4206.5| 3718.1| 2268.3| 904.3|
|江苏   | 5936.0| 1415.1|  4551.6| 1238.2| 2984.7| 2423.8| 1409.6| 596.5|
|浙江   | 6975.8| 1646.5|  5964.2| 1159.3| 3961.3| 2428.3| 1433.0| 548.4|
|安徽   | 4424.2|  924.6|  2630.0|  698.8| 1622.3| 1339.3|  932.3| 268.8|
|福建   | 6440.0| 1134.6|  4638.2| 1047.5| 2305.3| 1784.7| 1028.6| 471.3|
|江西   | 4181.7|  929.1|  2783.4|  736.6| 1444.4| 1354.0|  698.8| 275.5|
|山东   | 4166.2| 1276.6|  2903.3| 1038.1| 2104.2| 1557.3| 1180.1| 352.7|
|河南   | 3373.7| 1141.9|  2387.9|  910.6| 1355.4| 1337.2| 1023.1| 305.4|
|湖北   | 4499.9| 1073.1|  3007.0|  868.6| 1722.5| 1577.6| 1252.5| 315.3|
|湖南   | 4535.5| 1028.0|  2810.8|  883.6| 1624.6| 2049.7|  998.3| 336.8|
|广东   | 7236.7| 1103.4|  4677.1| 1245.3| 3020.2| 2117.3|  976.1| 599.8|
|广西   | 3960.8|  503.1|  2559.9|  672.5| 1445.7| 1280.1|  778.1| 200.7|
|海南   | 5364.1|  568.3|  2628.0|  697.9| 1783.1| 1278.0|  987.0| 268.7|
|重庆   | 5325.5| 1334.7|  2743.4| 1064.3| 1746.4| 1513.4| 1117.9| 294.0|
|四川   | 5001.4| 1071.3|  2400.9|  918.4| 1629.2| 1207.9| 1071.2| 331.8|
|贵州   | 3375.8|  719.2|  2185.7|  636.2| 1321.6| 1401.2|  604.6| 169.5|
|云南   | 3587.7|  625.7|  2146.4|  644.3| 1632.6| 1281.5|  875.7| 211.5|
|西藏   | 3919.8|  764.3|  1374.6|  394.9| 1025.9|  314.1|  229.2| 223.1|
|陕西   | 3646.4|  989.4|  2786.1|  887.3| 1537.1| 1608.4| 1363.5| 269.1|
|甘肃   | 3447.6|  967.7|  2120.8|  708.8| 1214.7| 1315.9|  949.5| 225.7|
|青海   | 3958.2| 1232.0|  2352.8|  793.4| 2263.3| 1383.4| 1318.2| 310.0|
|宁夏   | 3694.8| 1237.9|  2607.3|  885.4| 1806.1| 1707.9| 1482.9| 393.4|
|新疆   | 4092.8| 1274.5|  2227.9|  788.8| 1842.4| 1282.1| 1078.3| 280.6|
> 
str()
即structure,紧凑的显示对象内部结构,即对象里有什么。

> str(d)
'data.frame':	31 obs. of  9 variables:
 $ X : chr  " 北京" " 天津" " 河北" " 山西" ...
 $ x1: num  7584 7710 3516 3089 4920 ...
 $ x2: num  2426 1949 1055 1147 1760 ...
 $ x3: num  10350 5238 2996 2297 2919 ...
 $ x4: num  2098 1514 832 672 1031 ...
 $ x5: num  4490 3186 1808 1501 2569 ...
 $ x6: num  3635 2096 1339 1628 2067 ...
 $ x7: num  2229 1757 1192 1102 1384 ...
 $ x8: num  991 713 294 292 529 ...


> summary(d)
      X                   x1             x2               x3       
 Length:31          Min.   :3089   Min.   : 503.1   Min.   : 1375  
 Class :character   1st Qu.:3689   1st Qu.: 978.5   1st Qu.: 2394  
 Mode  :character   Median :4182   Median :1141.9   Median : 2743  
                    Mean   :4822   Mean   :1194.4   Mean   : 3496  
                    3rd Qu.:5345   3rd Qu.:1311.5   3rd Qu.: 3239  
                    Max.   :9272   Max.   :2425.7   Max.   :11308  
       x4               x5             x6               x7        
 Min.   : 394.9   Min.   :1026   Min.   : 314.1   Min.   : 229.2  
 1st Qu.: 703.8   1st Qu.:1580   1st Qu.:1337.9   1st Qu.: 981.5  
 Median : 883.6   Median :1783   Median :1557.3   Median :1117.9  
 Mean   : 934.5   Mean   :2094   Mean   :1716.4   Mean   :1204.8  
 3rd Qu.:1042.8   3rd Qu.:2294   3rd Qu.:2011.5   3rd Qu.:1421.3  
 Max.   :2098.3   Max.   :4490   Max.   :3718.1   Max.   :2268.3  
       x8       
 Min.   :169.5  
 1st Qu.:272.3  
 Median :315.3  
 Mean   :393.8  
 3rd Qu.:486.8  
 Max.   :991.4  
用快速聚类法分成 4 类

假设观测分为 k 个组,k已知,并假定每组观测服从多元正态分布。k 均值聚类需
要确定 k个类中心,并把每个观测分配到 k个类之一当中。
做法类似于系统聚类中离差平方和法 (Ward 法), 目标是选择类中心和观测类属使
得所有类的类内离差平方和的总和最小。具体算法是随机选取类中心(应尽量互相
远离),然后迭代地把每个观测分配到最近的类,更新类中心的值,再重新把每个观
测分配到最近的类,在更新类中心的值,如此重复直到类属不再改变。这个算法是
快速算法,在观测数很多时比系统聚类效率高得多。系统聚类有 n 个观测时要计算
1/2*n(n − 1) 个距离,计算量很大。
k 均值是 PAM 方法的一个变种,PAM(partitioning around medroids) 方法步骤
如下:

  1. 输入 n×p 的观测数据集。
  2. 从 n个观测中随机选取 k 个,作为临时的类中心。初始类中心应彼此距离较
    远。
    220 CHAPTER 5. 聚类分析
  3. 将所有 n 个观测按照距离最近原则分配给各个类。
  4. 对每个类,从类成员中选择一个作为新的类中心,使得类成员到类中心的距离
    和达到最小,这样的类中心称为 medroid。
  5. 重复步骤 3、4、5 直至结果稳定下来(每个观测的类属与类中心不再变化)。
    每次运行算法时第 2 步的初值应重新选取,这样得到的最终结果可能会不同。cluster
    扩展包中ᨀ供了 pam() 函数。
    k 均值法与 PAM 类似,但是在第 4 步不是找一个类成员作为类中心,而是用类均
    值(重心)作为类中心。

R 中用 kmeans() 函数聚类,用 centers= 指定类个数。为了得到稳定的结果,通常希望从不同的随机选取的中心出发,找到最终类内离差平方和最小的分类结果,所以可以用一个 nstart= 选项指定重复多少次随机初值比较

dd=d[,-1] #第一列为地名,不是数值先去掉
rownames(dd)=d[,1] # 用地名列为dd行重命名

            x1     x2      x3     x4     x5     x6     x7    x8
 北京   7584.2 2425.7 10350.2 2098.3 4489.6 3634.6 2228.6 991.4
 天津   7709.9 1949.4  5237.5 1514.0 3185.9 2096.0 1757.1 712.6
 河北   3515.5 1055.3  2995.8  832.2 1807.6 1338.6 1192.0 293.6
 山西   3089.4 1146.7  2297.4  672.5 1501.4 1628.0 1102.0 291.5
 内蒙古 4919.8 1759.7  2918.9 1030.9 2569.0 2067.1 1384.3 528.9
 辽宁   4858.0 1561.6  3471.6 1028.7 2282.0 1973.3 1522.4 502.2
 吉林   3683.5 1254.9  2692.3  718.4 1810.0 1683.6 1527.5 393.7
 黑龙江 3704.1 1288.3  2619.6  672.4 1675.1 1526.2 1577.0 339.8
 上海   9271.5 1622.7 11307.5 1484.6 4206.5 3718.1 2268.3 904.3
 江苏   5936.0 1415.1  4551.6 1238.2 2984.7 2423.8 1409.6 596.5
 浙江   6975.8 1646.5  5964.2 1159.3 3961.3 2428.3 1433.0 548.4
 安徽   4424.2  924.6  2630.0  698.8 1622.3 1339.3  932.3 268.8
 福建   6440.0 1134.6  4638.2 1047.5 2305.3 1784.7 1028.6 471.3
 江西   4181.7  929.1  2783.4  736.6 1444.4 1354.0  698.8 275.5
 山东   4166.2 1276.6  2903.3 1038.1 2104.2 1557.3 1180.1 352.7
 河南   3373.7 1141.9  2387.9  910.6 1355.4 1337.2 1023.1 305.4
 湖北   4499.9 1073.1  3007.0  868.6 1722.5 1577.6 1252.5 315.3
 湖南   4535.5 1028.0  2810.8  883.6 1624.6 2049.7  998.3 336.8
 广东   7236.7 1103.4  4677.1 1245.3 3020.2 2117.3  976.1 599.8
 广西   3960.8  503.1  2559.9  672.5 1445.7 1280.1  778.1 200.7
 海南   5364.1  568.3  2628.0  697.9 1783.1 1278.0  987.0 268.7
 重庆   5325.5 1334.7  2743.4 1064.3 1746.4 1513.4 1117.9 294.0
 四川   5001.4 1071.3  2400.9  918.4 1629.2 1207.9 1071.2 331.8
 贵州   3375.8  719.2  2185.7  636.2 1321.6 1401.2  604.6 169.5
 云南   3587.7  625.7  2146.4  644.3 1632.6 1281.5  875.7 211.5
 西藏   3919.8  764.3  1374.6  394.9 1025.9  314.1  229.2 223.1
 陕西   3646.4  989.4  2786.1  887.3 1537.1 1608.4 1363.5 269.1
 甘肃   3447.6  967.7  2120.8  708.8 1214.7 1315.9  949.5 225.7
 青海   3958.2 1232.0  2352.8  793.4 2263.3 1383.4 1318.2 310.0
 宁夏   3694.8 1237.9  2607.3  885.4 1806.1 1707.9 1482.9 393.4
 新疆   4092.8 1274.5  2227.9  788.8 1842.4 1282.1 1078.3 280.6
k <- 4
res1 <- kmeans(dd, centers=k, nstart=20)
res1

K-means clustering with 4 clusters of sizes 15, 9, 5, 2 四类的集合分别为几个

Cluster means: 聚类中心
        x1       x2        x3        x4       x5       x6       x7
1 3682.120 1008.667  2409.193  730.2867 1578.887 1362.813 1053.360
2 4788.289 1177.544  2834.878  914.3667 1898.144 1618.178 1160.667
3 6859.680 1449.800  5013.720 1240.8600 3091.480 2170.020 1320.880
4 8427.850 2024.200 10828.850 1791.4500 4348.050 3676.350 2248.450
        x8
1 278.8733
2 355.4667
3 585.7200
4 947.8500

Clustering vector: 类别向量
按地区原顺序排列后的分类情况
   北京    天津    河北    山西  内蒙古    辽宁    吉林  黑龙江    上海 
      4       3       2       2       1       1       2       2       4 
   江苏    浙江    安徽    福建    江西    山东    河南    湖北    湖南 
      3       3       1       3       2       1       2       1       1 
   广东    广西    海南    重庆    四川    贵州    云南    西藏    陕西 
      3       2       1       1       1       2       2       2       2 
   甘肃    青海    宁夏    新疆 
      2       2       2       2 
当达到最大迭代次数或连续两次迭代中聚类内平方和的变化小于阈值时,迭代将停止。上次迭代的更新聚类中心称为最终聚类中心。
Within cluster sum of squares by cluster:
[1] 9408235 5448008 6090537 2440561
 (between_SS / total_SS =  91.3 %)类间平方和在总平方和中的占比

Available components:

[1] "cluster"      "centers"      "totss"        "withinss"    
[5] "tot.withinss" "betweenss"    "size"         "iter"        
[9] "ifault"

在聚类结果中,cluster 元素是每个观测的类号,centers 是各类的中心,totss 是总离差平方和,tot.withinss 是总类内离差平方和,1 - tot.withinss/totss可以看成分类解释的百分比。因为类别编号有随机性,所以把类别编号按照类中心的元素平均值降序排序,可以得到一致的结果。因为有随机中心,所以重复运行会使得类不变但是类号改变。
下面按类中心的 8 个指标平均值降序排序为类号次序

xx <- rowMeans(res1$centers) # 类中心均值
       1        2        3        4 
1843.442 1513.025 2716.520 4286.631 

ind <- order(-xx) # ind[1] 是新的第一类原来类号,ind[2] 是新的第二类原来类号
# 从小到大排序
# 为了进行降序排序
> -xx
        1         2         3         4 
-1843.442 -1513.025 -2716.520 -4286.631 
> order(-xx)
[1] 4 3 1 2
> map <- order(ind) # map[1] 是原来第一类的新类号,map[2] 是原来第二类的新类号
> map
[1] 3 4 2 1

> cl.new <- map[ res1$cluster ]
> cl.new
 [1] 1 2 4 4 3 3 4 4 1 2 2 3 2 4 3 4 3 3 2 4 3 3 3 4 4 4 4 4 4 4 4
> names(cl.new) <- names(res1$cluster)
> cl.new
   北京    天津    河北    山西  内蒙古    辽宁    吉林  黑龙江    上海 
      1       2       4       4       3       3       4       4       1 
   江苏    浙江    安徽    福建    江西    山东    河南    湖北    湖南 
      2       2       3       2       4       3       4       3       3 
   广东    广西    海南    重庆    四川    贵州    云南    西藏    陕西 
      2       4       3       3       3       4       4       4       4 
   甘肃    青海    宁夏    新疆 
      4       4       4       4 
按行求均值
        x1       x2        x3        x4       x5       x6       x7
1 3682.120 1008.667  2409.193  730.2867 1578.887 1362.813 1053.360
2 4788.289 1177.544  2834.878  914.3667 1898.144 1618.178 1160.667
3 6859.680 1449.800  5013.720 1240.8600 3091.480 2170.020 1320.880
4 8427.850 2024.200 10828.850 1791.4500 4348.050 3676.350 2248.450
        x8
1 278.8733
2 355.4667
3 585.7200
4 947.8500
knitr::kable(as.data.frame(sort(cl.new)))


|       | sort(cl.new)|
|:------|------------:|
|北京   |            1|
|上海   |            1|
|天津   |            2|
|江苏   |            2|
|浙江   |            2|
|福建   |            2|
|广东   |            2|
|内蒙古 |            3|
|辽宁   |            3|
|安徽   |            3|
|山东   |            3|
|湖北   |            3|
|湖南   |            3|
|海南   |            3|
|重庆   |            3|
|四川   |            3|
|河北   |            4|
|山西   |            4|
|吉林   |            4|
|黑龙江 |            4|
|江西   |            4|
|河南   |            4|
|广西   |            4|
|贵州   |            4|
|云南   |            4|
|西藏   |            4|
|陕西   |            4|
|甘肃   |            4|
|青海   |            4|
|宁夏   |            4|
|新疆   |            4|
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值