2012-01-08 4 views
4

Я пытаюсь работать с префиксом randomForest для 32 уровней для факторов.R выборка для того, чтобы обойти randomFest 32-факторный предел

У меня есть набор данных со 100 уровнями в одной из переменных факторов.

Я написал следующий код, чтобы увидеть, что будет выглядеть с использованием выборки с заменой и количеством попыток, необходимых для получения определенных% выбранных уровней.

sampAll <- c() 
nums1 <- seq(1,102,1) 
for(i in 1:20){ 
    samp1 <- sample(nums1, 32) 
    sampAll <- unique(cbind(sampAll, samp1)) 
    outSamp1 <- nums1[-(sampAll[,1:ncol(sampAll)])] 
    print(paste(i, " | Remaining: ",length(outSamp1)/102,sep="")) 
    flush.console() 
} 

[1] "1 | Remaining: 0.686274509803922" 
[1] "2 | Remaining: 0.490196078431373" 
[1] "3 | Remaining: 0.333333333333333" 
[1] "4 | Remaining: 0.254901960784314" 
[1] "5 | Remaining: 0.215686274509804" 
[1] "6 | Remaining: 0.147058823529412" 
[1] "7 | Remaining: 0.117647058823529" 
[1] "8 | Remaining: 0.0980392156862745" 
[1] "9 | Remaining: 0.0784313725490196" 
[1] "10 | Remaining: 0.0784313725490196" 
[1] "11 | Remaining: 0.0490196078431373" 
[1] "12 | Remaining: 0.0294117647058824" 
[1] "13 | Remaining: 0.0196078431372549" 
[1] "14 | Remaining: 0.00980392156862745" 
[1] "15 | Remaining: 0.00980392156862745" 
[1] "16 | Remaining: 0.00980392156862745" 
[1] "17 | Remaining: 0.00980392156862745" 
[1] "18 | Remaining: 0" 
[1] "19 | Remaining: 0" 
[1] "20 | Remaining: 0" 

То, что я обсуждаю, является ли образец с заменой или без замены.

Я думаю о:

  1. получить образец 32 из 100 факторов,
  2. , используя эти строки для запуска RandomForest,
  3. предсказанием тестового набора с RandomForest и
  4. , повторяя этот процесс либо (a) 3 (БЕЗ замены), либо (b) 10-15 раз (с заменой).
  5. Принимая 3 или 10-15 прогнозируемых значений, находим среднее значение и используем это как окончательный предиктор.

Мне интересно, если кто-то пробовал что-то подобное или если я нарушаю какие-либо правила (вводя предвзятость и т. Д.), Или если у кого-то есть предложения.

ПРИМЕЧАНИЕ: Я перекрестно поставил этот вопрос на Stats-Overflow/Cross-Validated.

+0

Закрыто в межсайтовому боян: http://stats.stackexchange.com/questions/20731/sampling-to-get-around-randomforests-32-factor-level-limit – casperOne

ответ

0

я мог бы рекомендовать 2 пути:

  1. Вы можете превратить вас переменную 100 уровня в 100 двоичных переменных. Каждый из них будет представлять один исходный уровень (0 - false, 1 - true). Таким образом, вы сможете работать со всем набором данных и создавать случайную модель леса. Но в этом случае потребление памяти вашим набором данных будет увеличиваться, и вам, вероятно, придется использовать некоторые дополнительные пакеты для работы с огромными наборами данных.

  2. Вторая возможность - сделать много образцов вашего исходного набора данных с заменой. Потому что, если вы разделите набор данных без замены, у вас будет предвзятость в модели. Но, тем не менее, я думаю, вам нужно будет сделать более 10-15 расколов, чтобы избежать предвзятости. Я не могу сказать, сколько именно. Может быть, несколько сотен или больше. Это зависит от вашего набора данных. Потому что, если количество объектов каждого из 100 уровней существенно отличается, то после сплитрования вы получите образцы значительно другого размера, и это может повлиять на прогностическую способность модели. В таком случае количество расколов должно быть увеличено.

3

Вы также можете разделить свою 100-уровневую переменную на 4 отдельные переменные, каждая с 25 уровнями. Это приведет к сложным проблемам с псевдонимом с линейной моделью, но вы не беспокоитесь об этом со случайным лесом.

 Смежные вопросы

  • Нет связанных вопросов^_^