如何公平比较基准模型和GridSearchCV的结果?

我对比较最佳GridSearchCV模型和基准模型有点困惑。
例如,我们有一个分类问题。
作为基准,我们将使用默认设置拟合一个模型(假设是逻辑回归):

from sklearn.linear_model import LogisticRegressionfrom sklearn.metrics import accuracy_scorebaseline = 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, StratifiedKFoldX_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. 对于基准模型,是否也应该使用验证样本(而不是整个训练样本)?

回答:

不,它们不可比较。

你的基准模型使用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来拟合你的模型。
# 拟合基准模型baseline.fit(X_train, y_train)# 使用网格搜索拟合best_model.fit(X_train, y_train)
  1. X_test评估模型。
# 基准模型baseline_pred = baseline.predict(X_test)print(accuracy_score(y_test,  baseline_pred))# 网格搜索grid_pred = best_model.predict(X_test)print(accuracy_score(y_test, grid_pred))

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注