Я хочу попытаться оптимизировать параметры регрессионной модели RandomForest, чтобы найти наилучший компромисс между точностью и скоростью прогнозирования. Моя идея заключалась в том, чтобы использовать рандомизированный поиск по сетке и оценить скорость/точность каждой из протестированных конфигураций случайных параметров.
Итак, я подготовил сетку параметров и могу запустить k-fold cv на обучающих данных.
## parameter grid for random search
n_estimators = [1, 40, 80, 100, 120]
max_features = ['auto', 'sqrt']
max_depth = [int(x) for x in np.linspace(10, 110, num = 11)]
max_depth.append(None)
min_samples_split = [2, 5, 10]
min_samples_leaf = [1, 2, 4]
bootstrap = [True, False]
random_grid = {'n_estimators': n_estimators,
'max_features': max_features,
'max_depth': max_depth,
'min_samples_split': min_samples_split,
'min_samples_leaf': min_samples_leaf,
'bootstrap': bootstrap}
rf = RandomForestRegressor()
rf_random = RandomizedSearchCV(estimator = rf, param_distributions = random_grid, n_iter = 100, cv = 3, verbose=2, n_jobs = -1)
rf_random.fit(X_train, y_train)
Я нашел способ получить параметры лучшей модели, используя:
rf_random.best_params_
Однако я хотел перебрать все случайные модели, проверить значения их параметров, оценить их на тестовом наборе и записать значения параметров, точность и скорость в и выходной кадр данных, поэтому что-то вроде:
for model in rf_random:
start_time_base = time.time()
y_pred = model.predict(X_test) -> evaluate the current random model on the test data
time = (time.time()-start_time_base)/X_test.shape[0]
rmse = mean_squared_error(y_test, y_pred, squared=False)
params = something to get the values of the parameters for this model
write to dataframe...
Есть ли способ сделать это? Просто чтобы прояснить, я спрашиваю об итерации по моделям и параметрам, а не о записи в часть фрейма данных :) Должен ли я вместо этого использовать другой подход?