使用RandomizedSearchCV

时间:2018-12-14 15:02:04

标签: python random-forest grid-search

我对随机森林回归模型中的随机网格搜索有一些疑问。我的参数网格如下所示:

random_grid = {'bootstrap': [True, False],
               'max_depth': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, None],
               'max_features': ['auto', 'sqrt'],
               'min_samples_leaf': [1, 2, 4],
               'min_samples_split': [2, 5, 10],
               'n_estimators': [130, 180, 230]}

和我的RandomizedSearchCV代码如下:

# Use the random grid to search for best hyperparameters
# First create the base model to tune
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor()
# Random search of parameters, using 3 fold cross validation, 
# search across 100 different combinations, and use all available cores
rf_random = RandomizedSearchCV(estimator = rf, param_distributions = random_grid, n_iter = 100, cv = 3, verbose=2, random_state=42, n_jobs = -1)
# Fit the random search model
rf_random.fit(X_1, Y)

有什么方法可以计算每个参数集的均方根?对我来说,这更有趣,因为R ^ 2得分? 如果我现在想要获得最佳的参数集,如下面所示,我还将使用最低的RMSE得分。有什么办法吗?

rf_random.best_params_
rf_random.best_score_
rf_random.best_estimator_

谢谢你, R

2 个答案:

答案 0 :(得分:1)

将“得分”参数添加到RandomizedSearchCV。

RandomizedSearchCV(scoring="neg_mean_squared_error", ...

可以找到其他选项in the docs

这样,您可以打印每个参数集的RMSE以及参数集:

cv_results = rf_random.cv_results_
for mean_score, params in zip(cv_results["mean_test_score"], cvres["params"]):
    print(np.sqrt(-mean_score), params)

答案 1 :(得分:0)

如果要为每个简历的结果创建一个数据框,请使用以下内容。 如果还需要训练数据集的结果,请将return_train_score设置为True

rf_random = RandomizedSearchCV(estimator = rf, return_train_score = True)
import pandas as pd
df = pd.DataFrame(rf_random.cv_results_)