R中的结构函数表明USArrests仅具有4个变量。 但是,有5个。状态名称在第一列中,但未标记。
我正在努力了解其背后的直觉以及其工作原理。
我已经对数据进行了K均值聚类算法,似乎第一列(状态名称)在分析中充当了标签。无需使用分类数据。
这是我使用的教程。
https://uc-r.github.io/kmeans_clustering
下面是一些代码,可以更清楚地说明自己。
str(USArrests)
'data.frame': 50 obs. of 4 variables:
$ Murder : num 13.2 10 8.1 8.8 9 7.9 3.3 5.9 15.4 17.4 ...
$ Assault : int 236 263 294 190 276 204 110 238 335 211 ...
$ UrbanPop: int 58 48 80 50 91 78 77 72 80 60 ...
$ Rape : num 21.2 44.5 31 19.5 40.6 38.7 11.1 15.8 31.9 25.8 ...
head(USArrests)
Murder Assault UrbanPop Rape
Alabama 13.2 236 58 21.2
Alaska 10.0 263 48 44.5
Arizona 8.1 294 80 31.0
Arkansas 8.8 190 50 19.5
California 9.0 276 91 40.6
Colorado 7.9 204 78 38.7
在K均值聚类中它看起来像是“标签”
library(tidyverse) # data manipulation
library(cluster) # clustering algorithms
df <- USArrests
df <- na.omit(df)
(df <- scale(df))
k2 <- kmeans(df, centers = 2, nstart = 25)
Clustering vector:
Alabama Alaska Arizona Arkansas California
2 2 2 1 2
如果只有四个变量,那么R或聚类算法如何知道如何将聚类与状态名称相关联,从技术上讲,它不是列?
答案 0 :(得分:2)
第一个“列”实际上不是列,而是数据集的索引。而不是像默认值那样,索引为1,2,3,4等,而是阿拉巴马州,阿拉斯加,亚利桑那州,阿肯色州等。这就是为什么运行str()函数仅给我们4列的原因,因为从未处理过索引作为列。
现在,聚类输出显示每个状态属于哪个聚类。这只是索引,最后的算法告诉我们每行属于哪个集群。例如,如果索引是1、2、3、4等(而不是状态名称),我们仍然会得到结果,因为第1行是集群2,第2行是集群2,第3行是集群2,行4位于群集1等中。该算法执行您要求的操作。它会看到索引,并根据该索引标记相应的群集。 希望这可以帮助。