Scikit learn 当p>;N

Scikit learn 当p>;N,scikit-learn,regression,Scikit Learn,Regression,众所周知,当变量数(p)大于样本数(n)时,最小二乘估计量是不确定的 在sklearn中,我收到以下值: In [30]: lm = LinearRegression().fit(xx,y_train) In [31]: lm.coef_ Out[31]: array([[ 0.20092363, -0.14378298, -0.33504391, ..., -0.40695124, 0.08619906, -0.08108713]]) In [32]: xx.shape

众所周知,当变量数(p)大于样本数(n)时,最小二乘估计量是不确定的

在sklearn中,我收到以下值:

In [30]: lm = LinearRegression().fit(xx,y_train)

In [31]: lm.coef_
Out[31]: 
array([[ 0.20092363, -0.14378298, -0.33504391, ..., -0.40695124,
         0.08619906, -0.08108713]])

In [32]: xx.shape
Out[32]: (1097, 3419)
调用[30]应返回一个错误。在这种情况下,当p>n时,sklearn是如何工作的

编辑: 似乎矩阵中填充了一些值

if n > m:
        # need to extend b matrix as it will be filled with
        # a larger solution matrix
        if len(b1.shape) == 2:
            b2 = np.zeros((n, nrhs), dtype=gelss.dtype)
            b2[:m,:] = b1
        else:
            b2 = np.zeros(n, dtype=gelss.dtype)
            b2[:m] = b1
        b1 = b2

当线性系统欠定时,则
sklearn.linear\u model.LinearRegression
找到最小
L2
范数解,即

argmin_w l2_norm(w) subject to Xw = y
通过将
X
的伪逆应用于
y
,可以很好地定义和实现这一点,即

w = np.linalg.pinv(X).dot(y)
LinearRegression
使用的
scipy.linalg.lstsq
的具体实现使用了
get_-lapack_funcs(('gelss',),…
,这正是一个通过奇异值分解(由lapack提供)找到最小范数解的解算器

看看这个例子

import numpy as np
rng = np.random.RandomState(42)
X = rng.randn(5, 10)
y = rng.randn(5)

from sklearn.linear_model import LinearRegression
lr = LinearRegression(fit_intercept=False)
coef1 = lr.fit(X, y).coef_
coef2 = np.linalg.pinv(X).dot(y)

print(coef1)
print(coef2)

您将看到
coef1==coef2
(请注意,
fit_intercept=False
是在sklearn估计器的构造函数中指定的,因为否则它将在拟合模型之前减去每个特征的平均值,从而产生不同的系数)

这是否与岭回归获得的解决方案相同?此方法是否仅在sklearn的新版本中实施?我确信在某些版本中它会返回错误否,岭回归会增加额外的L2惩罚,从而改变目标函数和结果解决方案。最小L2范数解决方案为just a(明智的)在欠确定的情况下,在仿射解空间中的所有解中进行选择。但是,如果将岭回归解作为正则化参数的函数,并使该参数趋向于
0
,则您将精确地找到该最小范数解。好的,那么获得的解应该是多少少的这与LAS算法路径的最终结果相同,这是有意义的,因为当p>n时,这是LSE的标准定义。(对吗?)。你知道这是否也在以前版本的sklearn scipy中实现了吗?
LARS Lasso
将在惩罚项变为
0
时收敛到所有解中的最小
L1
范数解。至于纯
LARS
,你可能是对的,因为它不丢弃变量,但我不能请注意,在实践中,当你遇到
n
时,最好使用
sklearn.linear\u model.Ridge
,使用较小的惩罚,而不是最小范数解。