【发布时间】:2018-05-26 18:22:48
【问题描述】:
我正在尝试在数据集上拟合多变量线性回归,以了解模型对数据的解释程度。我的预测变量有 120 个维度,我有 177 个样本:
X.shape=(177,120), y.shape=(177,)
使用 statsmodels,我得到了 0.76 的非常好的 R 平方和 0.06 的 Prob(F 统计量),它趋向于显着性并表明数据的良好模型。
当我使用 scikit-learn 的线性回归并尝试计算 5 倍交叉验证 r2 分数时,我得到的平均 r2 分数为 -5.06,这表明泛化性能非常差。
这两个模型应该与他们的训练 r2 分数完全相同。那么为什么这些库的性能评估差异太大呢?我应该使用哪一个?非常感谢您的 cmets。
这是我的代码供您参考:
# using statsmodel:
import statsmodels.api as sm
X = sm.add_constant(X)
est = sm.OLS(y, X)
est2 = est.fit()
print(est2.summary())
# using scikitlearn:
from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression()
lin_reg.fit(X, y)
print 'train r2 score:',lin_reg.score(X, y)
cv_results = cross_val_score(lin_reg, X, y, cv = 5, scoring = 'r2')
msg = "%s: %f (%f)" % ('r2 score', cv_results.mean(),cv_results.std())
print(msg)
【问题讨论】:
标签: python scikit-learn statistics linear-regression statsmodels