2016-07-01 6 views
4

Использование случайного леса с помощью scikit. RF переназначает данные, а результаты прогнозирования плохие.Удельная проверка креста с помощью случайного леса

overfit не зависит от параметров РФ: NBtree, Depth_Tree

Overfit происходит со многими различными параметрами (тестировал через grid_search).

Чтобы исправить ошибку: Я корректирую исходные данные/сбрасывая выборку с некоторыми результатами , чтобы повлиять на фитинг (образец для предварительной обработки проб вручную).

Loop on random generation of RF fits, 

Get RF prediction on the data for prediction 
Select the model which best fits the "predicted data" (not the calibration data). 

Это Монте-Карлос очень потребляя, Просто интересно, если есть другой способ сделать перекрестной проверки на случайном лесу? (т. е. НЕ оптимизация гиперпараметров).

EDITED

+0

Просто прочитайте документы. Особенно [это] (http://scikit-learn.org/stable/modules/grid_search.html#grid-search). – sascha

+0

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

+0

Глядя на матрицу путаницы False Positive/Negative .... Обучение в порядке. Но, из образца несовместимо хорошо (обычно плохо, иногда ОК). – Brook

ответ

13

Перекрестная проверка с любым классификатором в scikit-узнать действительно тривиальна:

from sklearn.ensemble import RandomForest 
from sklearn.cross_validation import cross_val_score 
import numpy as np 

clf = RandomForest() #Initialize with whatever parameters you want to 

# 10-Fold Cross validation 
print np.mean(cross_val_score(clf, X_train, y_train, cv=10)) 

Если вы хотите запустить поиск сетки, вы можете легко сделать это с помощью GridSearchCV класса. Для того, чтобы сделать это, вам придется предоставить param_grid, который согласно документации

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

Так, может быть, вы могли бы определить ваш param_grid следующим образом:

param_grid = { 
       'n_estimators': [5, 10, 15, 20], 
       'max_depth': [2, 5, 7, 9] 
      } 

Затем вы можете использовать класс GridSearchCV следующим

from sklearn.grid_search import GridSearchCV 

grid_clf = GridSearchCV(clf, param_grid, cv=10) 
grid_clf.fit(X_train, y_train) 

Вы можете получить лучшую модель, используя grid_clf. best_estimator_ и наилучшие параметры с использованием grid_clf. best_params_. Аналогичным образом вы можете получить оценки сетки, используя grid_clf.grid_scores_

Надеюсь, это поможет!

+0

Вопрос не относится к оптимизации гиперпараметров. – Brook

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