多元回归没有得到与 sklearn 相同的系数

Posted

技术标签:

【中文标题】多元回归没有得到与 sklearn 相同的系数【英文标题】:Multivariate regression not getting same coefficients as sklearn 【发布时间】:2016-06-07 13:54:56 【问题描述】:

我正在计算这样的系数:

def estimate_multivariate(data, target):
    x = np.array(data)
    y = np.array(target)
    inv = np.linalg.inv(np.dot(x.T,x))
    beta = np.dot(np.dot(inv, x.T), y)
    return beta

并得到这些结果:

[[ 103.56793536] [  63.93186848][-272.06215991][ 500.43324361] [ 327.45075839]]

但是,如果我使用 sklearn.linear_model 创建模型,我会得到以下结果:

[ 118.45775015   64.56441108 -256.20123986  500.43324362  327.45075841]

只有在我使用时才会发生这种情况

preprocessing.PolynomialFeatures(degree=2)
poly.fit_transform(x)

度数大于 1。当我使用原始数据时,两种方法的系数是相同的。什么可以解释这一点?某处有截断吗?

【问题讨论】:

【参考方案1】:

只是检查一下:您使用的是sklearn.linear_model 的哪个型号? LinearRegression?该模块中的所有其他回归模型都受到惩罚,可以解释这种差异。

假设这是使用LinearRegression,您应该:

确保您的数据数组中的列具有恒定值 1,并将该列的 beta 视为线性模型的 intercept_

或禁用线性模型的截距拟合:LinearRegression(fit_intercept=False).fit(data, target).coef_

假设你也注意到了这一点,你应该记住,提取多项式特征会显着增加特征的数量,如果你的样本数量太少,经验协方差矩阵将是病态的,并调用np.inv会很不稳定。供参考 LinearRegression 使用迭代最小二乘求解器,而不是涉及 np.inv 的封闭式公式。

n_features >> n_samples 时,您应该使用惩罚线性回归模型,例如sklearn.linear_model.Ridge,而不是普通的最小二乘法。

【讨论】:

以上是关于多元回归没有得到与 sklearn 相同的系数的主要内容,如果未能解决你的问题,请参考以下文章

Python sklearn 多元回归

怎么对多元线性回归模型的回归系数β做t检验和F检验

关于多元线性回归模型的显著性检验

如何获得多项逻辑回归的系数?

python:如何在sklearn中使用逻辑回归系数构建决策边界

如何利用多元线性回归分析确定权重系数