2016-11-28 6 views
1

Используя настройки поезда в пакете каретки, я пытаюсь обучить случайную модель леса для набора данных xtr2 (dim (xtr2): 765 9408). Проблема в том, что он невероятно занимает слишком много времени (более одного дня для одного обучения), чтобы соответствовать функции. Насколько я знаю, по умолчанию по умолчанию используется выборка бутстрапа (25 раз) и три случайных выбора mtry, так почему это должно занять так много времени? Обратите внимание, что мне нужно тренировать rf три раза за каждый прогон (потому что мне нужно сделать среднее из результатов различных случайных моделей леса с теми же данными), и это занимает около трех дней, и мне нужно запустить код для 10 разных образцов, так что мне понадобится 30 дней, чтобы получить результаты.R caret randomforest

Мой вопрос: как я могу сделать это быстрее?

  1. Возможно изменение по умолчанию поезда делает время работы меньше? например, используя CV для обучения?

  2. Может ли параллельная обработка с помощью пакета помощи? если да, как это можно сделать?

  3. Может ли tuneRF случайного пакета леса внести какие-либо изменения вовремя?

Это код:

rffit=train(xtr2,ytr2,method="rf",ntree=500) 
rf.mdl =randomForest(x=xtr2,y=as.factor(ytr2),ntree=500, 
        keep.forest=TRUE,importance=TRUE,oob.prox =FALSE , 
        mtry = rffit$bestTune$mtry) 

Спасибо,

+1

Вы можете поделиться своим образцом набора данных? –

+0

'dim (xtr2): 765 9408' что это значит? – user31264

+0

Что требуется 24 часа: 'train' или' randomForest'? Какова ценность 'rffit $ bestTune $ mtry'? Вы пытались вызвать randomForest или тренироваться по тем же параметрам на небольших образцах данных (например, 50 элементов) и посмотреть, что происходит? Попробовали ли вы на этих маленьких образцах играть с параметрами: keep.forest, важность, oob.prox, mtry? – user31264

ответ

2

Мои мысли на вопросы:

  1. Да! Но не забывайте, что у вас также есть контроль над сеткой поиска. caret использует параметры настройки; в этом случае, mtry. Я не уверен, что по умолчанию поиск Сетка для mtry, но попробуйте следующее:

    < Ctrl - trainControl ("сорта", число = 5, verboseIter = TRUE)

    set.seed (101) # воспроизводимости

    < RFFIT - поезд (xtr2, ytr2, метод = "ВЧ", trControl = Ctrl, tuneLength = 5)

  2. Да! См. Сайт caret: http://topepo.github.io/caret/parallel-processing.html

  3. Да и нет! tuneRF просто использует ошибку OOB, чтобы найти оптимальное значение mtry (единственный параметр настройки в randomForest). Использование кросс-валидации имеет тенденцию работать лучше и дает более честную оценку производительности модели. tuneRF может занять много времени, но должен быть быстрее перекрестной проверки k-fold.

В целом, онлайн руководство по caret неплох: http://topepo.github.io/caret/index.html.

Удачи вам!

2

Вы используете train только для определения mtry.Я бы пропустить train шаг, и остаться с невыполнением mtry:

rf.mdl =randomForest(x=xtr2,y=as.factor(ytr2),ntree=500, 
        keep.forest=TRUE,importance=TRUE,oob.prox =FALSE) 

Я сильно сомневаюсь, что 3 различных трасс является хорошей идеей.

Если вы делаете 10-кратное кросс-валидацию (я не уверен, что это должно быть сделано в любом случае, поскольку валидация укоренена в случайный лес), 10 частей слишком много, если у вас короткое время. 5 частей будет достаточно.

Наконец, время randomForest пропорционально nTree. Установите nTree = 100, и ваша программа будет работать в 5 раз быстрее.

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

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