R中大数据帧的单次编码

问题描述 投票:0回答:1

我正在尝试在R中运行XGBoost,并且当我使用一键编码的步骤时:

df_1h <- one_hot(df, cols = "auto", sparsifyNAs = FALSE, naCols = FALSE,
                 dropCols = TRUE, dropUnusedLevels = FALSE)

我收到以下错误:

Error in CJ(1:24000, 1:1172779) : 
Cross product of elements provided to CJ() would result in 28146696000 rows which exceeds .Machine$integer.max == 2147483647

我的数据集包含约22万个观测值和180个变量。例如,如果我将其减少到300行,它将起作用。在这种情况下,请您告诉我如何进行?

r xgboost one-hot-encoding
1个回答
0
投票

您可以使用不占用太多内存的稀疏模型矩阵。首先通过将您的字符变量转换为因子,然后运行该函数来使用它。

# Some data with characters
df <- data.frame(a=letters, b=c(rep(1,13), rep(2,13)), stringsAsFactors = F)

# Converting characters to factors
df$a <- as.factor(df$a)

# Making model matrix with one hot encoding
library(Matrix)
sparse.model.matrix(b~a, data = df)
© www.soinside.com 2019 - 2024. All rights reserved.