【问题标题】:Reproducing Model results from RandomizedSearchCV从 RandomizedSearchCV 复制模型结果
【发布时间】:2021-07-29 18:07:14
【问题描述】:

我已使用 RandomizedSearchCV 来调整我的随机森林模型的参数,如下面的代码单元所示:

rf_random = RandomizedSearchCV(estimator = rf, param_distributions = random_grid, 
                               n_iter = 100, cv = 3, verbose=2, random_state=42, n_jobs = -1)
rf_random.fit(X_train[rf_cols], y_train)

事实证明,rf_random 模型的性能优于我的任何手动训练的模型,其参数与使用检索到的参数相同

rf_random.best_params_

我需要重现我使用 RandomizedSearchCV 所做的准确预测,但我无法这样做,主要是由于两个原因:

  1. best_params_ 每次运行都不同
  2. 我无法理解 RandomizedSearchCV 如何将数据拆分为训练集和验证集,这意味着我几乎不可能训练出表现相同的新模型。

我能做什么?我还需要什么信息来重现结果?或者甚至可以从 RandomizedSearchCV 重现结果,尽管我已将我的 random_state 固定为 42?如果我需要重现结果,我应该坚持使用 GridSearchCV 吗?

【问题讨论】:

    标签: python scikit-learn hyperparameters


    【解决方案1】:

    我相信您正在寻找RandomizedSearchCVbest_estimator_ 属性,它将返回在遗漏数据上得分最高的拟合估计器:

    kf = KFold(n_splits=3, random_state=42)
    
    rf_random = RandomizedSearchCV(estimator = rf, param_distributions = random_grid, 
                                   n_iter = 100, cv = kf, verbose=2, random_state=42, n_jobs = -1)
    rf_random.fit(X_train[rf_cols], y_train)
    
    tuned_rf = rf_random.best_estimator_
    for train_index, test_index in kf.split(X_train[rf_cols], y_train):
        # use train and test indices here
    

    【讨论】:

    • 感谢您的回答!有没有办法让我找出模型用于训练模型的数据的哪一部分?
    • 我能想到的最好方法是不指定cv=3,而是使用Kfold 之类的简历拆分器。然后,您可以使用其split() 方法检索每个拆分的索引。将更新答案以反映这一点。
    • 这很有帮助。谢谢!
    猜你喜欢
    • 2018-01-31
    • 2015-07-26
    • 1970-01-01
    • 2021-05-04
    • 2018-10-17
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多