线性回归与封闭形式Python中的普通最小二乘

时间:2017-09-27 18:11:27

标签: python scikit-learn linear-regression

我正在尝试使用python将大约50个特征的9个样本的数据集应用于线性回归方法。我尝试了不同的线性回归方法,即封闭形式OLS(普通最小二乘法),LR(线性回归),HR(Huber回归),NNLS(非负最小二乘),每个方法都给出了不同的权重。

但我可以直截了当为什么HR和NNLS有不同的解决方案,但LR和封闭形式OLS具有相同的目标函数,即最小化给定样本中观察值与由a预测的值之间差异的平方和。一组特征的线性函数。由于训练集是单数,我不得不使用pseudoinverse来执行封闭形式的OLS。

w = np.dot(train_features.T, train_features)  
w1 = np.dot(np.linalg.pinv(w), np.dot(train_features.T,train_target))

对于LR,我使用过scikit-learn线性回归使用来自www.netlib.org的lapack库来解决最小二乘问题

       linear_model.LinearRegression()

如果没有可用的方程小于未知参数,则线性方程组或多项式方程组称为欠定方程。每个未知参数可以计为可用的自由度。所呈现的每个等式可以用作限制一个自由度的约束。因此,欠定系统可以拥有无​​限多的解决方案或根本没有解决方案。由于在我们的案例研究中,系统是不确定的,也是单一的,因此存在许多解决方案。

现在,当没有样本少于特征时,pseudoinverse和Lapack库都会尝试找到欠定系统的最小范数解。那么为什么闭合形式和LR给出了相同的线性方程组的完全不同的解。我在这里遗漏了一些可以解释两种方式行为的东西。就像如果以不同的方式计算peudoinverse,如SVD,QR / LQ因子分解,它们是否可以为同一组方程产生不同的解?

1 个答案:

答案 0 :(得分:0)

再次查看docs of sklearn's LinearRegression

默认情况下(就像你所说的那样),它也适合拦截术语!

演示:

import numpy as np
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression

X, y = load_boston(return_X_y=True)

""" OLS custom """
w = np.dot(np.linalg.pinv(X), y)
print('custom')
print(w)

""" sklearn's LinearRegression (default) """
clf = LinearRegression()
print('sklearn default')
print(clf.fit(X, y).coef_)


""" sklearn's LinearRegression (no intercept-fitting) """
print('sklearn fit_intercept=False')
clf = LinearRegression(fit_intercept=False)
print(clf.fit(X, y).coef_)

输出:

custom
[ -9.16297843e-02   4.86751203e-02  -3.77930006e-03   2.85636751e+00
  -2.88077933e+00   5.92521432e+00  -7.22447929e-03  -9.67995240e-01
   1.70443393e-01  -9.38925373e-03  -3.92425680e-01   1.49832102e-02
  -4.16972624e-01]
sklearn default
[ -1.07170557e-01   4.63952195e-02   2.08602395e-02   2.68856140e+00
  -1.77957587e+01   3.80475246e+00   7.51061703e-04  -1.47575880e+00
   3.05655038e-01  -1.23293463e-02  -9.53463555e-01   9.39251272e-03
  -5.25466633e-01]
sklearn fit_intercept=False
[ -9.16297843e-02   4.86751203e-02  -3.77930006e-03   2.85636751e+00
  -2.88077933e+00   5.92521432e+00  -7.22447929e-03  -9.67995240e-01
   1.70443393e-01  -9.38925373e-03  -3.92425680e-01   1.49832102e-02
  -4.16972624e-01]