我正在尝试在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行,它将起作用。在这种情况下,请您告诉我如何进行?
您可以使用不占用太多内存的稀疏模型矩阵。首先通过将您的字符变量转换为因子,然后运行该函数来使用它。
# 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)