2015-09-28 3 views
2

Я использую пакет ramdomForest для создания случайной модели леса. Майские наборы данных огромны, и более миллиона наблюдений имеют более 200 переменных. Во время обучения случайному лесу с образцовыми данными я не могу зафиксировать все уровни факторов всех переменных.Как автоматически исключить невидимые новые уровни факторов в pred.randomForest?

Таким образом, при прогнозировании при проверке, установленном с использованием predict(), это вызывает ошибку при наличии новых уровней факторов, которые не учитываются в данных обучения.

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

Существует ли способ автоматического исключения наблюдений из набора проверки, который содержит предыдущие неопознанные уровни факторов во время работы predict() в пакете randomForest? Может найти любой аргумент для этого в документе CRAN. Я не думаю, что смогу сделать воспроизводимый пример для этого.

+0

Но как вы могли предсказывать уровни, которых нет в обучении? –

+0

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

ответ

3

Одним из решений является объединение Тренировочной и тестовой матриц и использование as.factor на комбинированной матрице. Затем разделить на поезд и тест снова. Я столкнулся с такой же проблемой в случайном лесу, и это решение сработало для меня.

, например:

combine <- rbind(Train,Test) 
    combine$var1 <- as.factor(combine$var1) 

    ##Then split into Test and Train 
    Train$var1 <- combine[1:nrow(train)] 

    similar for Test. 

Надеется, что это помогает!

+0

Хорошо, теперь это работает, так как в нем устраняются постоянные ошибки во время обучения. Но он все еще предсказывает некоторую ценность для наблюдений с переменными, содержащими новые уровни факторов (как это имеет смысл, если эти уровни не находятся в тренировочном наборе? Или у 'randomForest()' есть внутренний метод для обработки новых уровней факторов?) – Gaurav

+0

Сколько переменных имеет эта проблема новых факторов в валидации? Если слишком много, то я думаю, что данные обучения не являются хорошим представлением всех данных. Возможно, вы захотите попробовать стратифицированную выборку. Исключение наблюдений, если слишком много может привести к потере прогностической способности вашей модели. Отправьте этот вопрос в разделе «Статистика». –

+0

Все переменные имеют проблему, но уровни низкочастотных факторов встречаются менее чем в 5% от всех наблюдений ... Это все еще большое усилие для очистки всех данных ... но ваш метод, похоже, работает для начала. Я полагаю, что я должен опубликовать новый вопрос для 'randomForest()' прогнозирования для наблюдений с новыми уровнями факторов ... – Gaurav