众所周知,当变量数(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像这种情况吗
编辑: 似乎矩阵中填充了一些值
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_model.LinearRegression
找到最小L2
范数解,即这总是定义得很好,并且可以通过将
X
的伪逆应用于y
来获得,即LinearRegression
使用的scipy.linalg.lstsq
的具体实现使用了get_lapack_funcs(('gelss',), ...
,这正是一个通过奇异值分解(由LAPACK提供)找到最小范数解的解算器看看这个例子
你会看到
coef1 == coef2
。(注意fit_intercept=False
在sklearn估计器的构造函数中指定,因为否则它将在拟合模型之前减去每个特征的平均值,从而产生不同的系数)相关问题 更多 >
编程相关推荐