我目前有一个包含 260,000 行和 50 列的数据框,其中 3 列是数字,其余的是分类。我想对分类列进行一次热编码,以执行 PCA 并使用回归来预测类别。如何在 R 中完成以下示例?
Example:
V1 V2 V3 V4 V5 .... VN-1 VN
to
V1_a V1_b V2_a V2_b V2_c V3_a V3_b and so on
我目前有一个包含 260,000 行和 50 列的数据框,其中 3 列是数字,其余的是分类。我想对分类列进行一次热编码,以执行 PCA 并使用回归来预测类别。如何在 R 中完成以下示例?
Example:
V1 V2 V3 V4 V5 .... VN-1 VN
to
V1_a V1_b V2_a V2_b V2_c V3_a V3_b and so on
您可以使用model.matrix
或sparse.model.matrix
。像这样的东西:
sparse.model.matrix(~. -1, data = your_data)
~.
告诉 R 你的整个表().
是一些假设模型的右手边,并且-1
说要省略截距。没有-1
你的第一列将是一个 1 的向量。
不要真正理解“热编码”的意思。
这是使用 dplyr 将分类变量 iris$Species 展开为三个单独列的示例:
df <- iris %>%
mutate(id = rownames(.) %>% # unique identified to prevent duplicate rows when spreading
mutate(val=1) %>% # give the categorical variable a value of 1
spread(Species, val) # spread out each level of iris$Species as columns
df[76:80,]
Sepal.Length Sepal.Width Petal.Length Petal.Width id setosa versicolor virginica
76 5.8 2.7 4.1 1.0 68 NA 1 NA
77 5.8 2.7 5.1 1.9 102 NA NA 1
78 5.8 2.7 5.1 1.9 143 NA NA 1
79 5.8 2.8 5.1 2.4 115 NA NA 1
80 5.8 4.0 1.2 0.2 15 1 NA NA
基本上是一个带有data.table
and的 oneliner mltools
:
# data.table with 125 variables:
dt_1h <- one_hot(dt)
# MD5 for checking reproducibility:
> digest::digest(dt_1h, algo = "md5")
[1] "f1eb1c1e2d5d94b709101557c9ed8d0d"
library(data.table)
library(mltools)
set.seed(1701)
df <- data.frame(matrix(sample(c(LETTERS[1:26]),
260000*3, replace = TRUE), ncol = 3),
matrix(rnorm(260000*47), ncol = 47))
dt <- as.data.table(df)