2015-01-05 2 views
1

Я использую scikit-learn Random Forest, чтобы соответствовать данным тренировки (~ 30 МБ), и мой ноутбук продолжает сбивать с работы память приложения. Данные испытаний несколько раз больше, чем данные обучения. Использование Macbook Air 2 ГГц 8 ГБ памяти.Случайный лес: Недостаточно памяти

Каковы некоторые из способов борьбы с этим?

rf = RandomForestClassifier(n_estimators = 100, n_jobs=4) 
print "20 Fold CV Score: ", np.mean(cross_validation.cross_val_score(rf, X_train_a, y_train, cv=20, scoring='roc_auc')) 
+0

Какая версия scikit-learn вы используете? Версия 0.15 значительно улучшает потребление памяти в лесах. –

+0

'0,15,2'. Я попытался переключиться на GBRT, который построен последовательно, так или иначе у него заканчивается память. Означает ли это, что мне действительно нужно попробовать запустить кластер EC2 или сделать выборочную выборку? – ananuc

+0

@AndreasMueller: спасибо за полезный разговор о Advanced Sklearn. Может быть, я смогу попробовать некоторые идеи оттуда. У меня не было возможности пройти параллельное учебное пособие Ogrisel по EC2 по EC2. Интересно, в какой момент нам нужно рассмотреть возможность вращения кластеров EC2? – ananuc

ответ

1

Ваш лучший выбор - настроить параметры.

n_jobs=4 

Это позволяет компьютеру одновременно вычислить четыре цикла поезда. Различные задания Python запускаются в отдельных процессах, поэтому полный набор данных также копируется. Попытайтесь уменьшить n_jobs до 2 или 1, чтобы сэкономить память. n_jobs==4 использует в четыре раза память n_jobs==1.

cv=20 

Это разделяет данные на 20 штук, а код выполняет 20 итерационных испытаний на поезд. Это означает, что данные обучения составляют 19 единиц исходных данных. Вы можете с уверенностью уменьшить его до 10, однако оценка точности может ухудшиться. Он не будет экономить много памяти, но ускоряет работу.

n_estimators = 100 

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

Подводя итог, я бы рекомендовал уменьшить n_jobs до 2, чтобы сохранить память (в 2 раза увеличить время выполнения). Чтобы компенсировать время выполнения, я предлагаю изменить cv на 10 (2-кратная экономия во время выполнения). Если это не помогло, измените значение n_jobs на 1, а также уменьшите количество оценок до 50 (в два раза быстрее обработки).