线性回归中最优权重求解问题求助
问题分析与解决方案
问题原因
sklearn的LinearRegression默认会拟合截距项(模型形式为 $y = w_0 + w_1x_1 + w_2x_2$),而你的输入特征x1全为1,这和截距对应的虚拟特征(x0=1)完全线性相关,导致模型参数解不唯一。此时sklearn会选择最小L2范数的解——让w1和w2都为0,仅保留截距w0=1,这样所有样本都能满足预测值等于真实值。
修正方案
如果你希望求解不含截距的线性模型(形式为 $y = w_1x_1 + w_2x_2$),只需在初始化模型时设置fit_intercept=False:
from sklearn.linear_model import LinearRegression import numpy as np x = np.ones(202, dtype='int').reshape(101,2) x[100,1]= 0 y = np.ones(101, dtype='int') # 关闭截距拟合 model = LinearRegression(fit_intercept=False).fit(x,y) print(f"w1 and w2: {model.coef_}")
运行后会输出:w1 and w2: [1. 0.],这和手动推导的结果一致:
- 最后一个样本:$1 = w11 + w20$ → $w1=1$
- 前100个样本:$1 = 11 + w21$ → $w2=0$
补充说明
如果一定要保留截距项,参数解是不唯一的:只要满足$w0 = 1 - w1$且$w2=0$,所有样本都能被完美拟合。sklearn给出的[0. 0.]是其中范数最小的解,从数学角度合理,但不符合你求解w1和w2的需求。
内容的提问来源于stack exchange,提问作者Manu
相关产品推荐
相关产品推荐

