Горячее кодирование в R для больших данных - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь запустить XGBoost в R, и когда я достигаю шага с горячим кодированием:

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 строк, например. Не могли бы вы посоветовать мне, как действовать в этом случае?

1 Ответ

0 голосов
/ 12 марта 2020

Вы можете использовать разреженную модель матрицы, которая не занимает так много памяти. Он используется для того, чтобы сначала преобразовать ваши символьные переменные в факторы, а затем просто запустить функцию.

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