Machine learning STATSOLS模型与scikit线性回归之间的差异

Machine learning STATSOLS模型与scikit线性回归之间的差异,machine-learning,scikit-learn,regression,linear-regression,statsmodels,Machine Learning,Scikit Learn,Regression,Linear Regression,Statsmodels,我有一个关于两种不同的方法的问题,它们来自不同的图书馆,似乎在做同样的工作。我正在尝试建立线性回归模型 以下是我在OLS中使用statsmodel库的代码: X_train, X_test, y_train, y_test = cross_validation.train_test_split(x, y, test_size=0.3, random_state=1) x_train = sm.add_constant(X_train) model = sm.OLS(y_train, x_tra

我有一个关于两种不同的方法的问题,它们来自不同的图书馆,似乎在做同样的工作。我正在尝试建立线性回归模型

以下是我在OLS中使用statsmodel库的代码:

X_train, X_test, y_train, y_test = cross_validation.train_test_split(x, y, test_size=0.3, random_state=1)

x_train = sm.add_constant(X_train)
model = sm.OLS(y_train, x_train)
results = model.fit()

print "GFT + Wiki / GT  R-squared", results.rsquared
此打印输出GFT+Wiki/GT R平方0.98143461923

第二种是scikit学习库线性模型方法:

model = LinearRegression()
model.fit(X_train, y_train)

predictions = model.predict(X_test)

print 'GFT + Wiki / GT R-squared: %.4f' % model.score(X_test, y_test)
此打印输出GFT+Wiki/GT R-squared:0.8543

所以我的问题是这两种方法都会打印我们的R^2结果,但一种是打印出0.98,另一种是0.85

据我所知,OLS使用的是训练数据集。所以我的问题,

  • 是否有一种方法可以使用OLS处理测试数据集
  • 训练数据集分数是否给了我们任何意义(在OLS中,我们没有使用测试数据集)?根据我过去的知识,我们必须处理测试数据
  • OLS和scikit线性回归之间的区别是什么。我们使用哪一个来计算模型的分数

谢谢您的帮助。

重复/交叉发布是的,我知道,但我不能清楚地理解其中的区别。如果您编写了代码,我可以复制和粘贴,也就是生成一些合成数据,那么任何人都可以更轻松地回答您的问题。我的直觉是,statsmodels使用经典的r^2,而sklearn使用预测的r^2来处理保留的数据,这通常较低。