【发布时间】:2018-11-20 09:13:50
【问题描述】:
我正在使用大约 400.000 x 250 的数据集。 我对模型在训练集上测试时产生非常好的 R^2 分数有疑问,但在测试集上使用时却非常糟糕。最初,这听起来像是过拟合。但是数据被随机分成训练/测试集,而且数据集很大,所以我觉得必须有别的东西。 有什么建议吗?
将数据集拆分为训练集和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(df.drop(['SalePrice'],
axis=1), df.SalePrice, test_size = 0.3)
Sklearn 的线性回归估计器
from sklearn import linear_model
linReg = linear_model.LinearRegression() # Create linear regression object
linReg.fit(X_train, y_train) # Train the model using the training sets
# Predict from training set
y_train_linreg = linReg.predict(X_train)
# Predict from test set
y_pred_linreg = linReg.predict(X_test)
指标计算
from sklearn import metrics
metrics.r2_score(y_train, y_train_linreg)
metrics.r2_score(y_test, y_pred_linreg)
在训练集上测试时的 R^2 得分:0,64
在测试集上测试时的 R^2 得分:-10^23(大约)
【问题讨论】:
-
您是否尝试过交叉验证(使用不同部分的数据进行多次训练和测试)。也许当前训练和测试中的数据分布不允许模型了解测试中的数据(因为训练中不存在类似的数据)。
-
您是否尝试过应用任何特征转换/预处理方法?例如MinMaxScaler 然后使用交叉验证来评估性能?
标签: python scikit-learn linear-regression