使用 GridSearchCV 调整 scikit-learn 的随机森林超参数

Posted

技术标签:

【中文标题】使用 GridSearchCV 调整 scikit-learn 的随机森林超参数【英文标题】:Random Forest hyperparameter tuning scikit-learn using GridSearchCV 【发布时间】:2016-05-11 21:33:09 【问题描述】:

我正在尝试使用随机森林来解决我的问题(以下是波士顿数据集的示例代码,而不是我的数据)。我打算使用GridSearchCV 进行超参数调整,但不同参数的值范围应该是多少?我怎么知道我选择的范围是正确的?

我在互联网上读到它,有人建议尝试 在第二次网格搜索中“放大”最佳值(例如,如果它是 10 则尝试 [5、20、50])。

这是正确的方法吗?我应该对随机森林所需的所有参数使用这种方法吗?这种方法可能会错过一个“好的”组合,对吧?

import numpy as np
from sklearn.grid_search import GridSearchCV
from sklearn.datasets import load_digits
from sklearn.ensemble import RandomForestRegressor
digits = load_boston()
X, y = dataset.data, dataset.target
model = RandomForestRegressor(random_state=30)
param_grid =  "n_estimators"      : [250, 300],
           "criterion"         : ["gini", "entropy"],
           "max_features"      : [3, 5],
           "max_depth"         : [10, 20],
           "min_samples_split" : [2, 4] ,
           "bootstrap": [True, False]
grid_search = GridSearchCV(clf, param_grid, n_jobs=-1, cv=2)
grid_search.fit(X, y)
print grid_search.best_params_

【问题讨论】:

【参考方案1】:

从粗到细实际上通常用于寻找最佳参数。您首先从广泛的参数开始,并在您接近最佳结果时对其进行优化。

我发现了一个很棒的库,它为 scikit-learn 进行超参数优化,hyperopt-sklearn。它可以自动调整您的 RandomForest 或任何其他标准分类器。您甚至可以同时自动调整和基准测试不同的分类器。

我建议你从它开始,因为它实现了不同的方案来获得最佳参数:

随机搜索

Parzen 估计器树 (TPE)

退火

高斯过程树

编辑:

在回归的情况下,您仍然需要断言您的预测在测试集上是否良好。

无论如何,从粗到细的方法仍然适用,并且对任何估计器都有效。

【讨论】:

这不支持回归和许多算法,是吗?实际上,我的问题是回归而不是分类。我已经编辑了我的问题。 我已经编辑了我的问题,很抱歉造成混乱。

以上是关于使用 GridSearchCV 调整 scikit-learn 的随机森林超参数的主要内容,如果未能解决你的问题,请参考以下文章

了解 scikit-learn GridSearchCV - 参数调整和平均性能指标

如何在 Scikit 中自定义 GridSearchCV 的指标 学习调整特定类?

为啥 GridSearchCV 没有给出最好的分数? - Scikit 学习

ValueError 在 Scikit 中找到最佳超参数时使用 GridSearchCV 学习 LogisticRegression

scikit 学习。 GridSearchCV 管道中的自定义 Transformer set_params 逻辑。

如何在“GridSearchCV”中使用“log_loss”和 Scikit-Learn(sklearn)中的多类标签?