Проблема с randomForest & long vectors
Я запускаю случайный лес в наборе данных с 8 числовыми столбцами (предикторами) и 1 фактором (результатом). В наборе данных имеется 1,2 М строк. Когда я это сделаю:
randomForest(outcome.f ~ a + b + c + d + e + f + g + h,data=mdata))
, я получаю сообщение об ошибке:
"Error in randomForest.default(m, y, ...) :
long vectors (argument 26) are not supported in .Fortran"
Есть ли способ предотвратить это? Я не понимаю, почему пакет (по-видимому) пытается выделить вектор длины 2 ^ 31-1. Я использую Mac OS X 10.9.2 с Intel Core i7 (в случае, если это имеет значение для архитектуры).
Информация о сеансе
R version 3.1.0 (2014-04-10)
Platform: x86_64-apple-darwin13.1.0 (64-bit)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] randomForest_4.6-7
loaded via a namespace (and not attached):
[1] tools_3.1.0
Ответы
Ответ 1
Никогда не запускайте randomforest со слишком большим количеством строк в обучающем наборе.
rf1 <- randomForest(Outcome ~ ., train[1:600000,], ntree=500, norm.votes=FALSE, do.trace=10,importance=TRUE)
rf2 <- randomForest(Outcome ~ ., train[600001:1200000,], ntree=500, norm.votes=FALSE, do.trace=10,importance=TRUE)
rf.combined <- combine(rf1,rf2)
Если вы по-прежнему получаете ошибку, попробуйте уменьшить размер обучающего набора (например, 500000 или 100000), разделите на rf1, rf2 и rf3, а затем объедините их. Надеюсь, что это поможет.
Ответ 2
Вы также можете уменьшить количество деревьев (ntree).
Ответ 3
Я считаю, что необходимо установить связь с тем, что если вы используете 64-битную версию R, наличие обучающего набора или слишком большого размера дерева запускает некоторый код c, который совместим только с 32-битной версией. Таким образом, уменьшить размер дерева и размер обучения, чтобы компенсировать.
Ответ 4
Я только что высветил эту ошибку, потому что мой набор данных "y" был на самом деле NULL, так что помните об этом и проверьте и убедитесь, что ваш вектор y не пуст.
Ответ 5
У меня была эта проблема раньше, и она была решена с помощью proximity = FALSE
. Таким образом, матрица близости не вычисляется, и R может завершить процесс