data.drop('Movie Title', axis=1, inplace=True) features = data.loc[:, data.columns != 'worldwide_gross_usd'] charges = data['worldwide_gross_usd'] X_train, X_test, y_train, y_test = train_test_split(features, charges, random_state=42, test_size = 0.2) regr = LinearRegression().fit(X_train, y_train) y_pred = regr.predict(X_test) print('Trained R-squared score: ', regr.score(X_train, y_train)) print('Tested R-squared score: ', regr.score(X_test, y_test))
输出:
训练集R平方得分: 0.5404764241697003
测试集R平方得分: 0.5845801856343114
X_train, X_test, y_train, y_test = train_test_split(features, charges, random_state=12, test_size = 0.2)regr = LinearRegression().fit(X_train, y_train)y_pred = regr.predict(X_test)print('Trained R-squared score: ', regr.score(X_train, y_train))print('Tested R-squared score: ', regr.score(X_test, y_test))
输出:
训练集R平方得分: 0.5345435646372121
测试集R平方得分: 0.602138324770633
你可以注意到,当我改变random_state
的值时,我的训练得分降低了1%,但我的测试得分增加了2%。你更倾向于选择第一个还是第二个R平方得分?
回答:
R平方得分是回归模型的一个快速估计,但不是一个好的估计器。
这就像是:
你在二维平面上有3个点(假设为p1, p2, p3)。
在第一种情况下,你使用p1和p2绘制回归线,然后在p3上测试它,得到r1得分。
接下来,你使用p2和p3绘制回归线,然后在p1上测试它,得到r2得分。
所以,你不能完全依赖于不同随机状态下的R平方得分。
推论:
-
如果你的所有数据点都同样相关,那么测试集上较高的R平方得分更好。
-
如果你对数据集的相关性不确定,那么你应该检查其他参数/方法来确定哪个R平方得分更好。
其他参数/方法:
你应该为这两种情况绘制残差图。检查哪个的均值接近零且方差接近1(对于大多数数据集而言),那一个更好。如果任何一种情况下的残差图显示出某种模式,那么这种情况不好,可以改进。如果任何一种情况下的残差图中有残差,那么这种情况也不好,可以改进。
注意: 例如,你想预测房价,并有房屋面积、位置、卧室数、之前居住人数等数据。但房价更多地依赖于房屋面积而不是之前居住人数。所以这两者不是同样相关的。这就是我所说的同样相关的意思。