OLS(statsmodel) 和 Scikit 线性回归之间的区别

数据挖掘 机器学习 scikit-学习 线性回归
2022-03-02 16:33:19

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

这是我在 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.981434611923

第二个是scikit learn library 线性模型方法:

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 平方:0.8543

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

据我了解,OLS 适用于训练数据集。所以我的问题,

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

谢谢你的帮助。

1个回答

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

这里缺少很多信息,但看起来第一个示例可能是找到训练集中数据的预测值和实际值之间的相关性,而第二个示例是找到测试的预测值和实际值之间的相关性放。这也可以解释为什么第二个结果中的相关性较低。模型在新(测试)数据上的性能几乎总是比用于拟合模型的训练数据集差。

有没有一种方法可以使用 OLS 处理测试数据集?

statsmodels 文档描述了predict()一种可用于对设计矩阵的输入进行预测的方法。拟合模型后,您应该能够在测试数据上使用此方法。

训练数据集分数是否给我们任何意义(在 OLS 中我们没有使用测试数据集)?根据我过去的知识,我们必须使用测试数据。

对训练数据的评估通常可以用作“最佳情况”泛化性能的快速检查。但是,这通常仅用作诊断以确保您的模型正确拟合,不应被视为泛化的真实指标。