【问题标题】:How to replicate GridSearchCV result?如何复制 GridSearchCV 结果?
【发布时间】:2020-09-26 15:23:54
【问题描述】:

使用GridSearchCV,我尝试将AUC 最大化为LogisticRegression Classifier

clf_log = LogisticRegression(C=1, random_state=0).fit(X_train, y_train)

from sklearn.model_selection import GridSearchCV

grid_params = {'penalty': ['l1','l2'], 'C': [0.001,0.01,0.1,1,10,100], 'max_iter' : [100]} 
gs = GridSearchCV(clf_log, grid_params, scoring='roc_auc', cv=5)
gs.fit(X_train, y_train)`

我得到了0.7630647186779661gs.best_score_gs.best_estimator_gs.best_params_,分别如下:

<< LogisticRegression(C=10, class_weight=None, dual=False, fit_intercept=True,
                   intercept_scaling=1, l1_ratio=None, max_iter=100,
                   multi_class='auto', n_jobs=None, penalty='l2',
                   random_state=0, solver='lbfgs', tol=0.0001, verbose=0,
                   warm_start=False) >>

{'C': 10, 'max_iter': 100, 'penalty': 'l2'}

但是,当我将这些参数重新引入我原来的 clf_log 时,我只得到了 AUC0.5359918677005525。我错过了什么(我认为:简历部分)?如何获得和复制相同的结果?谢谢!

【问题讨论】:

  • 你从哪里得到 0.53 AUC?那是当你对你的 X_test 执行时?因为据我了解,GridSearchCV 正在应用 k 折验证,并且只查看您的训练数据。那么,也许您过度拟合了,或者您的测试数据集与您的训练数据集有很大不同?
  • 0.53 使用相同的训练数据。
  • 但是如果您想评估您的分类器,通常您必须针对从未通过的测试数据进行评估。你甚至适合你的 GridSearchCV 吗?我看到您对 LogisticRegression 应用拟合,但您也必须调用 gs.fit(),因为这将执行所有交叉折叠验证
  • 是 gs.fit(X_train, y_train) 已运行。
  • 如果我在下面的回答对您有所帮助,请考虑支持并接受它。它会帮助我、您和其他试图回答类似问题的人。

标签: python scikit-learn auc gridsearchcv


【解决方案1】:

Grid Search CV 使用 K 折交叉验证,即当您使用fit 方法时,它将数据分为测试集和训练集(cv=5 表示测试集是数据集的 1/5),这样就完成了cv 次(在这种情况下为 5)。所以你不应该使用X_trainy_train,而是使用Xy(假设你不想要第三个验证集),因为拆分是在内部完成的。

gs.fit(X, y)

在此之后,假设您的最佳参数是{'C': 10, 'max_iter': 100, 'penalty': 'l2'}。现在说你想应用这个。如果要复制 GridSearchCV 的输出,则需要再次使用 k 折交叉验证(如果使用 train_test_split 代替,结果会略有不同)。

from sklearn.model_selection import cross_val_score
np.average(cross_val_score(LogisticRegression(C=10, max_iter=100, penalty='l2'), X, y, scoring='roc_auc', cv=10))

这样,您应该获得相同的 AUC。你可以参考这个video

【讨论】:

  • 谢谢 - 澄清一下,这是否意味着即使在 CV K-fold (5) 下,模型也只是单独测试了 5 次,而不是通过累积训练 5 次来改进单个模型?
  • 模型被训练了 5 次,每次使用不同的训练和测试分割,最终得分是所有 5 次得分的平均值。这样做是为了使最终分数(准确性等)不会被特定的测试和训练拆分所欺骗。 没有单个模型没有累积改进,但仍然推荐。我建议在 YouTube 上观看有关 k 折交叉验证的教程以获得更多说明。
猜你喜欢
  • 2020-06-18
  • 2020-10-03
  • 2021-09-09
  • 2020-11-16
  • 2021-12-18
  • 2016-07-16
  • 2020-03-09
  • 2017-05-29
  • 2012-10-22
相关资源
最近更新 更多