【问题标题】:GridSearchCV Error on param_grid With RandomForestRegressor带有 RandomForestRegressor 的 param_grid 上的 GridSearchCV 错误
【发布时间】:2020-11-22 04:48:05
【问题描述】:
ValueError: Invalid parameter estimator for estimator RandomForestRegressor().
Check the list of available parameters with `estimator.get_params().keys()`.

这是我在 RandomForestRegressor 模型上使用 GridSearchCV 时遇到的错误。 这是代码

%%time 
from sklearn.model_selection import RandomizedSearchCV

rf_grid= {"estimator__n_estimators ": np.arange(10,100,10),
      "estimator__max_depth ": [None,3,5,10],
      "estimator__min_sample_split": np.arange(2,20,2),
      "estimator__min_sample_leaf" : np.arange(1,20,2),
      "estimator__max_features ": [0.5,1,'sqrt','auto'],
      "estimator__max_samples" : [10000]
}
rfr_2=RandomForestRegressor()

rs_model= RandomizedSearchCV(estimator=rfr_2,
                        param_distributions=rf_grid,
                        n_iter=100,
                        cv=5,
                        verbose= True)

rs_model.fit(X_train,Y_train)

【问题讨论】:

    标签: python python-3.x scikit-learn random-forest grid-search


    【解决方案1】:

    来自错误信息:

    ValueError:估计器 RandomForestRegressor() 的参数估计器无效。 使用estimator.get_params().keys()查看可用参数列表。

    您可以看到您错误地指定了rf_grid中的参数。

    用途:

    rf_grid= {"n_estimators": np.arange(10,100,10),
          "max_depth": [None,3,5,10],
          "min_samples_split": np.arange(2,20,2),
          "min_samples_leaf" : np.arange(1,20,2),
          "max_features": [0.5,1,'sqrt','auto'],
          "max_samples" : [10000]
    }
    

    根据以下建议:

    rfr_2.get_params().keys()
    

    dict_keys(['bootstrap', 'ccp_alpha', 'criterion', 'max_depth', 'max_features'、'max_leaf_nodes'、'max_samples'、 'min_impurity_decrease','min_impurity_split','min_samples_leaf', 'min_samples_split'、'min_weight_fraction_leaf'、'n_estimators'、 'n_jobs'、'oob_score'、'random_state'、'verbose'、'warm_start'])

    【讨论】:

    • 这是我第一次写的,但它显示“n_estimators”是 RandomForestRegressor() 的无效参数。
    • 你使用的是什么版本的 scikit?对于最新的versionn_estimators 是该估算器的有效参数。
    • 它是最新的,如果你有兴趣,我已经在下面发布了解决方案,这是一个愚蠢的
    • 您已接受我的解决方案后发布的答案。
    【解决方案2】:

    首先,为了了解您应该如何在字典中命名参数,您可以像这样预先打印它们:

    print(rfr_2.get_params())
    

    打印完所有参数后,现在您可以选择要传递到网格字典中的参数

    你应该做的是去掉你放在每个参数前面的“estimator__”。

    另外,一旦你这样做了,你会遇到另一个错误。也就是说,参数 max_samples 可以取 1 到 232 之间的值,您输入的值 (10000) 太高了。 下面是修改过的代码块,应该可以工作!

    rf_grid= {"n_estimators": np.arange(10,100,10),
      "max_depth": [None,3,5,10],
      "min_samples_split": np.arange(2,20,2),
      "min_samples_leaf" : np.arange(1,20,2),
      "max_features": [0.5,1,'sqrt','auto'],
      "max_samples" : [100]
    

    【讨论】:

    • 发帖前试过这些,estimator.get_params().keys() 建议我在开头添加估算器名称。
    • 您第一次尝试时,可能会出现错误,因为您放置了“min_sample_split”和“min_sample_leaf”而不是“min_samples_split”和“min_samples_leaf”。请尝试使用我提供的代码,因为我重新创建了整个环境并且它有效
    • 感谢您抽出宝贵时间,是的,我之前确实遇到了一个错误,现在我回到它,这是由于使用双引号而不是单引号。我已经在下面发布了解决方案
    【解决方案3】:

    原来我应该使用单引号 ' ' 而不是双引号 " " 。

     %%time 
     from sklearn.model_selection import RandomizedSearchCV
    
     rf_grid= {'n_estimators': np.arange(10,100,10),
          'max_depth': [None,3,5,10],
          'min_samples_split': np.arange(2,20,2),
          'min_samples_leaf' : np.arange(1,20,2),
          'max_features': [0.5,1,'sqrt','auto'],
          'max_samples' : [100]
      }
    
      rs_model= RandomizedSearchCV(rfr,
                            param_distributions=rf_grid,
                            n_iter=100,
                            cv=5,
                            verbose= True)
      rs_model.get_params()
      }
    

    【讨论】:

      猜你喜欢
      • 2016-04-25
      • 2015-03-09
      • 2021-12-06
      • 2018-04-17
      • 2017-12-11
      • 2018-01-06
      • 2017-12-13
      • 2021-08-07
      • 2019-09-10
      相关资源
      最近更新 更多