【问题标题】:One-hot encoding in R for big dataframeR中用于大数据帧的单热编码
【发布时间】:2020-03-09 11:55:41
【问题描述】:

我正在尝试在 R 中运行 XGBoost,当我到达使用 one-hot 编码的步骤时:

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

我的数据集包含大约 220 000 个观测值和 180 个变量。例如,如果我将其减少到 300 行,它就会起作用。你能告诉我在这种情况下如何进行吗?

【问题讨论】:

  • 尝试使用 model.matrix 或 sparse.model.matrix 代替:rdocumentation.org/packages/stats/versions/3.6.2/topics/… 我不确定拥有这么多列是否是个好主意....也许先进行降维。
  • 感谢您的及时回复!我已将列数减少到 7。因此,我设法增加了行数。但是,它仍然说:“错误:无法分配大小为 4.0 Gb 的向量”。您能否推荐另一种单热编码方式? Sparse.model.matrix 仍然需要在此之前对数据集进行一次热编码,对吧?
  • 不,它只是要求数据集有因子而不是字符。
  • 已解决问题,再次感谢!
  • 我只会输入它作为关闭线程的答案:)

标签: r xgboost one-hot-encoding


【解决方案1】:

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

# 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)

【讨论】:

    猜你喜欢
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 2015-12-31
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    相关资源
    最近更新 更多