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