使用 cross_val_score 评估多项式回归

Posted

技术标签:

【中文标题】使用 cross_val_score 评估多项式回归【英文标题】:Evaluate Polynomial regression using cross_val_score 【发布时间】:2021-10-18 05:10:56 【问题描述】:

我正在尝试使用cross_val_score 来评估我的回归模型(使用PolymonialFeatures(degree = 2))。正如我在不同的博客文章中所指出的那样,我应该将 cross_val_score 与原始 Xy 值一起使用,而不是 X_trainy_train

r_squareds = cross_val_score(pipe, X, y, cv=10)
r_squareds
>>> array([ 0.74285583,  0.78710331, -1.67690578,  0.68890253,  0.63120873,
    0.74753825,  0.13937611,  0.18794756, -0.12916661,  0.29576638])

这表明我的模型表现不佳,平均 r2 仅为 0.241。这应该是正确的解释吗?

但是,我遇到了一个处理相同数据的 Kaggle 代码,这个人在 X_trainy_train 上执行了 cross_val_score。我试了一下,平均 r2 更好。

r_squareds = cross_val_score(pipe, X_train, y_train, cv=10)
r_squareds.mean()
>>> 0.673

这应该是个问题吗?

这是我的模型的代码:

X = df[['CHAS', 'RM', 'LSTAT']]
y = df['MEDV']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=0)

pipe = Pipeline(
steps=[('poly_feature', PolynomialFeatures(degree=2)),
       ('model', LinearRegression())]
)
       
## fit the model
pipe.fit(X_train, y_train)    

【问题讨论】:

【参考方案1】:

你的第一个解释是正确的。第一个 cross_val_score 正在训练 10 个模型,其中 90% 的数据作为训练数据集,10 个作为验证数据集。从这些结果中我们可以看出,估计器的 r_square 方差非常高。有时模型的性能甚至比直线还差。

从这个结果我们可以肯定地说模型在这个数据集上表现不佳。

仅使用cross_val_score 上的训练集获得的结果可能会更高,但该分数很可能不代表您的模型性能,因为数据集可能太小而无法捕获其所有方差。 (第二个cross_val_score 的训练集只是原始数据集90% of 60% 的数据集的54%

【讨论】:

非常感谢。这是来自sklearn.dataset 的波士顿住房数据集,我查看了许多类似的项目,尽管大多数人做了类似的工作,但没有人提出这个问题,只是有一些细微的差别。这就是为什么我如此困惑。也许我应该使用不同的回归算法。 您可能想尝试使用其他功能,因为数据集有 13 个功能。其他模型也可能性能更高。 当然谢谢。我刚刚完成了不同模型和不同功能的实验。使用 Lasso Regression 和所有 13 个特征,我能得到的最佳平均 R2 是 0.46。我也试过 SVR。非常感谢您的帮助。

以上是关于使用 cross_val_score 评估多项式回归的主要内容,如果未能解决你的问题,请参考以下文章

在 sklearn cross_val_score 上评估多个分数

如何加快cross_val_score?

如何正确使用 GridSearchCV 和 cross_val_score?

scikit-learn中的cross_val_score函数scoring参数设置

cross_val_score的用法

11.26