Можете ли вы перебирать гиперпараметры в scikit?

Есть ли способ перебрать модель случайного леса, чтобы создать новую модель с другими гиперпараметрами?

то есть

model = RandomForestClassifier(n_estimators= N, max_depth= D) 

Я хочу иметь возможность построить модель для каждого значения N в диапазоне от 1 до 25 и D 1-5.

Это возможно?

Спасибо

1
0
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Существует несколько способов перебора гиперпараметров и моделей обучения/тестирования. Простым подходом будет:

from sklearn import ensemble
from sklearn import model_selection

# generating parameter grid
params = {
    "n_estimators": list(range(1,26)),
    "max_depth": list(range(1,6)),
}
grid = model_selection.ParameterGrid(params)

# iterate over grid and fit/score model with the varying hyperparameters
for param in grid:
    rf_clf = ensemble.RandomForestClassifier(**param)  # unpacking param which is a dictionary
    rf_clf.fit(x_train, y_train)
    print(rf_clf.score(x_val, y_val), param)

Альтернативным подходом, который сохраняет больше информации и включает перекрестную проверку, может быть:

from sklearn import ensemble
from sklearn import metrics
from sklearn import model_selection


rf_clf = ensemble.RandomForestRegressor()
params = {
    "n_estimators": list(range(1,26)),
    "max_depth": list(range(1,6)),
}
cv = model_selection.GridSearchCV(
    estimator=rf_clf,
    param_grid=params,
    scoring=metrics.accuracy_score # scorer of choice (optional)
)
# fits model and saves info on each distinct hyperparameter combination using cross-validation
cv.fit(x_train, y_train)  #

# access GridSearchCV object info how you like. For example:
print(cv.best_score_, cv.best_params_)
print(cv.cv_results_)

Другие вопросы по теме