Есть ли способ перебрать модель случайного леса, чтобы создать новую модель с другими гиперпараметрами?
то есть
model = RandomForestClassifier(n_estimators= N, max_depth= D)
Я хочу иметь возможность построить модель для каждого значения N в диапазоне от 1 до 25 и D 1-5.
Это возможно?
Спасибо
Существует несколько способов перебора гиперпараметров и моделей обучения/тестирования. Простым подходом будет:
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_)