使用cross_val_score评估多项式回归



我试图使用cross_val_score来评估我的回归模型(与PolymonialFeatures(degree = 2))。正如我在不同的博客文章中指出的那样,我应该使用cross_val_score与原始X,y的值,而不是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)    

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

从这个结果我们可以有把握地说,模型在这个数据集上表现不佳。

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

最新更新