R biglm с категориальными переменными
У меня есть большой набор данных, с которым я работаю в R, используя некоторые из big.___()
пакеты. Это ~ 10 гигабайт (100mmR x 15C) и выглядит так:
Price Var1 Var2
12.45 1 1
33.67 1 2
25.99 3 3
14.89 2 2
23.99 1 1
... ... ...
Я пытаюсь предсказать цену, основанную на Var1 и Var2.
Проблема, с которой я столкнулся, заключается в том, что Var1 и Var2 являются категориальными / факторными переменными.
Var1 и Var2 имеют 3 уровня (1,2 и 3), но в наборе данных только 6 комбинаций
(1,1; 1,2; 1,3; 2,2; 2,3; 3,3)
Использовать факторные переменные в biglm()
они должны присутствовать в каждом фрагменте данных, которые biglm
использует (я понимаю, что biglm
разбивает набор данных на количество блоков "x" и обновляет параметры регрессии после анализа каждого блока, чтобы обойти работу с наборами данных, которые больше, чем RAM).
Я пытался установить подмножество данных, но мой компьютер не может их обработать или мой код неверен:
bm11 <- big.matrix(150000000, 3)
bm11 <- subset(x, x[,2] == 1 & x[,3] == 1)
Вышесказанное дает мне кучу таких:
Error: cannot allocate vector of size 1.1 Gb
У кого-нибудь есть предложения по решению этой проблемы?
Я использую R 64-bit на машине с Windows 7 и 4 гигабайтами оперативной памяти.
1 ответ
Вам не нужны все данные или все значения, присутствующие в каждом чанке, вам просто нужно учитывать все уровни. Это означает, что у вас может быть такой кусок:
curchunk <- data.frame( Price=c(12.45, 33.67), Var1=factor( c(1,1), levels=1:3),
Var2 = factor( 1:2, levels=1:3 ) )
и это будет работать. Несмотря на то, что в Var1 есть только 1 значение и 2 в Var2, все три уровня присутствуют на обоих, поэтому все будет работать правильно.
Также biglm
не разбивает данные на куски для вас, но ожидает, что вы предоставите им управляемые куски для работы. Проработайте примеры, чтобы увидеть это лучше. Общая методология с biglm
это чтение из файла или базы данных, чтение в первых "n" строках (где "n" - разумное подмножество) и передача их biglm
(возможно, убедившись, что все факторы имеют все указанные уровни), затем удалите этот кусок данных из памяти и прочитайте следующие n строк и передайте их update
, продолжается с этим до конца файла, удаляя использованные куски каждый раз (таким образом, у вас есть достаточно места для памяти для следующего).