众所周知,当变量的数量(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
0
,您将找到确切的最小范数解。 - eickenbergn < p
时,最好使用带有小惩罚项的sklearn.linear_model.Ridge
而不是最小范数解决方案。 - eickenberg