【问题标题】:How to compare baseline and GridSearchCV results fair?如何公平地比较基线和 GridSearchCV 结果?
【发布时间】:2021-12-18 23:09:11
【问题描述】:

比较最佳 GridSearchCV 模型和基线时,我有点困惑。
例如,我们有分类问题。
作为基线,我们将使用默认设置拟合模型(让它成为逻辑回归):

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
baseline = LogisticRegression()
baseline.fit(X_train, y_train)
pred = baseline.predict(X_train)
print(accuracy_score(y_train, pred))

因此,基线为我们提供了使用整个火车样本的准确性。
接下来,GridSearchCV:

from sklearn.model_selection import cross_val_score, GridSearchCV, StratifiedKFold
X_val, X_test_val,y_val,y_test_val = train_test_split(X_train, y_train, test_size=0.3, random_state=42)
cv = StratifiedKFold(n_splits=5, random_state=0, shuffle=True)
parameters = [ ... ]
best_model = GridSearchCV(LogisticRegression(parameters,scoring='accuracy' ,cv=cv))
best_model.fit(X_val, y_val)
print(best_model.best_score_)

这里,我们有基于验证样本的准确性。

我的问题是:

  1. 这些准确度分数是否具有可比性?一般来说,在没有任何交叉验证的情况下比较 GridSearchCV 和模型是否公平?
  2. 对于基线,是否也使用 Validation 样本(而不是整个 Train 样本)更好?

【问题讨论】:

    标签: machine-learning scikit-learn cross-validation gridsearchcv baseline


    【解决方案1】:

    不,它们没有可比性。

    您的基准模型使用X_train 来拟合模型。然后您使用拟合模型对X_train 样本进行评分。这就像作弊,因为模型已经表现得最好,因为你是根据它已经看到的数据来评估它。

    网格搜索模型处于劣势,因为:

    1. 由于您拆分了 X_train 样本,因此使用的数据更少。
    2. 由于 5 折,它使用更少的数据进行训练(每折仅使用 X_val 的 4/5 进行训练)。

    所以你的网格搜索分数会比你的基线更差。

    现在您可能会问,“那么best_model.best_score_ 的意义何在?嗯,该分数用于比较在您的搜索空间中搜索最佳超参数时使用的所有模型,但绝不应该用于比较针对在网格搜索上下文之外训练的模型。

    那么应该如何进行公平的比较呢?

    1. 为两个模型拆分训练数据。
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
    
    1. 使用X_train 拟合您的模型。
    # fit baseline
    baseline.fit(X_train, y_train)
    
    # fit using grid search
    best_model.fit(X_train, y_train)
    
    1. 根据X_test 评估模型。
    # baseline
    baseline_pred = baseline.predict(X_test)
    print(accuracy_score(y_test,  baseline_pred))
    
    # grid search
    grid_pred = best_model.predict(X_test)
    print(accuracy_score(y_test, grid_pred))
    

    【讨论】:

      猜你喜欢
      • 2016-07-16
      • 1970-01-01
      • 2015-02-02
      • 1970-01-01
      • 2020-09-26
      • 2018-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多