Вопрос

Я недавно начал использовать R для анализа данных. Теперь у меня есть проблема в рейтинге большого набора данных запросов (~ 1 ГБ в режиме ASCII, над 4 ГБ оперативной памяти моего ноутбука в двоичном режиме). С использованием bigmemory::big.matrix Для этого набора данных является хорошее решение, но предоставление такой матрицы «M» в gbm() или же randomForest() Алгоритмы вызывает ошибку:

cannot coerce class 'structure("big.matrix", package = "bigmemory")' into a data.frame

Класс (M) выводит фологу:

[1] "big.matrix"
attr(,"package")
[1] "bigmemory"

Есть ли способ правильно пройти big.matrix экземпляр в эти алгоритмы?

Это было полезно?

Решение

Я, очевидно, не могу проверить это, используя данные вашего масштаба, но я могу воспроизводить ваши ошибки, используя интерфейс формулы каждой функции:

require(bigmemory)
m <- matrix(sample(0:1,5000,replace = TRUE),1000,5)
colnames(m) <- paste("V",1:5,sep = "")

bm <- as.big.matrix(m,type = "integer")

require(gbm)
require(randomForest)

#Throws error you describe
rs <- randomForest(V1~.,data = bm)
#Runs without error (with a warning about the response only having two values)
rs <- randomForest(x = bm[,-1],y = bm[,1])

#Throws error you describe
rs <- gbm(V1~.,data = bm)
#Runs without error
rs <- gbm.fit(x = bm[,-1],y = bm[,1])

Не используя интерфейс формулы для randomForest является довольно распространенным советом для больших наборов данных; Это может быть довольно неэффективным. Если вы читаете ?gbm, вы увидите аналогичную рекомендацию, направленную на вас к gbm.fit Для больших данных.

Другие советы

Часто относится к тому, что память, занятая числовыми объектами, является больше, чем пространство диска. Каждый «двойной» элемент в векторе или матрице занимает 8 байтов. Когда вы заставляете объект в Data.Frame, его может быть скопировано в оперативной памяти. Вы должны избегать попыток использовать функции и структуры данных, которые находятся за пределами тех, которые поддерживаются BigMemory/Big *** набором пакетов. «Biglm» доступен, но я сомневаюсь, что вы можете ожидать, что gbm () или randomforest () будет распознавать и использовать средства в «Большом»-семье.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top