不同时间的不同 R 平方分数
Different R-squared scores for different times
我刚刚学习了交叉验证,当我给出不同的参数时,会有不同的结果。
这是构建回归模型的代码,R 平方输出约为 .5:
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
import numpy as np
boston = load_boston()
X = boston.data
y = boston['target']
X_rooms = X[:,5]
X_train, X_test, y_train, y_test = train_test_split(X_rooms, y)
reg = LinearRegression()
reg.fit(X_train.reshape(-1,1), y_train)
prediction_space = np.linspace(min(X_rooms), max(X_rooms)).reshape(-1,1)
plt.scatter(X_test, y_test)
plt.plot(prediction_space, reg.predict(prediction_space), color = 'black')
reg.score(X_test.reshape(-1,1), y_test)
现在,当我分别对 X_train、X_test 和 X 进行交叉验证时,它显示了不同的 R 平方值。
这是 X_test 和 y_test 参数:
from sklearn.model_selection import cross_val_score
cv = cross_val_score(reg, X_test.reshape(-1,1), y_test, cv = 8)
cv
结果:
array([ 0.42082715, 0.6507651 , -3.35208835, 0.6959869 , 0.7770039 ,
0.59771158, 0.53494622, -0.03308137])
现在当我使用参数 X_train 和 y_train 时,输出不同的结果。
from sklearn.model_selection import cross_val_score
cv = cross_val_score(reg, X_train.reshape(-1,1), y_train, cv = 8)
cv
结果:
array([0.46500321, 0.27860944, 0.02537985, 0.72248968, 0.3166983 ,
0.51262191, 0.53049663, 0.60138472])
现在,当我再次输入不同的参数时;这次 X(在我的例子中是 X_rooms)和 y,我又一次得到了不同的 R 平方值。
from sklearn.model_selection import cross_val_score
cv = cross_val_score(reg, X_rooms.reshape(-1,1), y, cv = 8)
cv
输出:
array([ 0.61748403, 0.79811218, 0.61559222, 0.6475456 , 0.61468198,
-0.7458466 , -3.71140488, -1.17174927])
我应该使用哪一个?
我知道这是一个很长的问题,谢谢!!
训练集应明确用于训练您的模型,而测试集用于最终评估。但不幸的是,在检查最终结果(测试集)之前,您需要在某些集合上测试模型的分数:例如,当您尝试调整一些超参数时。使用cv还有其他一些原因,这只是其中之一。
通常流程是:
- 拆分训练和测试
- 训练模型使用 cv 检查稳定性,包括超调参数(这与您的情况无关)
- 在测试集上评估模型分数。
scikit-learn 的 cross_val_score
接收对象(训练前!)和数据。它在不同的数据部分训练每个时间模型,然后 returns 得分。这就像有很多“训练测试”检查。
因此,您应该:
from sklearn.model_selection import cross_val_score
reg = LinearRegression()
cv = cross_val_score(reg, X_train.reshape(-1,1), y_train, cv = 8)
仅在火车上。测试集应该用于其他目的。
您得到的是准确度得分列表。您可以查看您的模型是否稳定(所有折叠中的准确度是否在同一范围内?)或模型的一般性能(平均得分)
我刚刚学习了交叉验证,当我给出不同的参数时,会有不同的结果。
这是构建回归模型的代码,R 平方输出约为 .5:
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
import numpy as np
boston = load_boston()
X = boston.data
y = boston['target']
X_rooms = X[:,5]
X_train, X_test, y_train, y_test = train_test_split(X_rooms, y)
reg = LinearRegression()
reg.fit(X_train.reshape(-1,1), y_train)
prediction_space = np.linspace(min(X_rooms), max(X_rooms)).reshape(-1,1)
plt.scatter(X_test, y_test)
plt.plot(prediction_space, reg.predict(prediction_space), color = 'black')
reg.score(X_test.reshape(-1,1), y_test)
现在,当我分别对 X_train、X_test 和 X 进行交叉验证时,它显示了不同的 R 平方值。
这是 X_test 和 y_test 参数:
from sklearn.model_selection import cross_val_score
cv = cross_val_score(reg, X_test.reshape(-1,1), y_test, cv = 8)
cv
结果:
array([ 0.42082715, 0.6507651 , -3.35208835, 0.6959869 , 0.7770039 ,
0.59771158, 0.53494622, -0.03308137])
现在当我使用参数 X_train 和 y_train 时,输出不同的结果。
from sklearn.model_selection import cross_val_score
cv = cross_val_score(reg, X_train.reshape(-1,1), y_train, cv = 8)
cv
结果:
array([0.46500321, 0.27860944, 0.02537985, 0.72248968, 0.3166983 ,
0.51262191, 0.53049663, 0.60138472])
现在,当我再次输入不同的参数时;这次 X(在我的例子中是 X_rooms)和 y,我又一次得到了不同的 R 平方值。
from sklearn.model_selection import cross_val_score
cv = cross_val_score(reg, X_rooms.reshape(-1,1), y, cv = 8)
cv
输出:
array([ 0.61748403, 0.79811218, 0.61559222, 0.6475456 , 0.61468198,
-0.7458466 , -3.71140488, -1.17174927])
我应该使用哪一个?
我知道这是一个很长的问题,谢谢!!
训练集应明确用于训练您的模型,而测试集用于最终评估。但不幸的是,在检查最终结果(测试集)之前,您需要在某些集合上测试模型的分数:例如,当您尝试调整一些超参数时。使用cv还有其他一些原因,这只是其中之一。
通常流程是:
- 拆分训练和测试
- 训练模型使用 cv 检查稳定性,包括超调参数(这与您的情况无关)
- 在测试集上评估模型分数。
scikit-learn 的 cross_val_score
接收对象(训练前!)和数据。它在不同的数据部分训练每个时间模型,然后 returns 得分。这就像有很多“训练测试”检查。
因此,您应该:
from sklearn.model_selection import cross_val_score
reg = LinearRegression()
cv = cross_val_score(reg, X_train.reshape(-1,1), y_train, cv = 8)
仅在火车上。测试集应该用于其他目的。
您得到的是准确度得分列表。您可以查看您的模型是否稳定(所有折叠中的准确度是否在同一范围内?)或模型的一般性能(平均得分)