基于Numpy的多变量梯度下降——系数数量错误问题
梯度下降中Theta维度不匹配的问题解决
嘿,我看你在机械工程毕设的梯度下降代码里遇到了theta维度不对的问题——x有3个自变量,但theta只输出了3个值,本该是4个对吧?这问题其实挺常见的,大概率是你没给特征矩阵x添加偏置项(也就是常数列θ₀对应的全1列)。
咱们先理清楚:线性回归的完整模型是 y = θ₀ + θ₁x₁ + θ₂x₂ + θ₃x₃,这里θ₀是截距项,不需要对应任何自变量,所以当你有3个自变量x₁、x₂、x₃时,theta数组应该包含4个值:[θ₀, θ₁, θ₂, θ₃]。
问题根源
你的代码里应该是直接用了原始的3列特征矩阵x去训练,没有添加全1的偏置列,所以模型默认只学习了对应3个自变量的θ₁、θ₂、θ₃,漏掉了θ₀。
解决方案
给特征矩阵x添加一列全1的偏置项,具体代码可以这么写(假设你用的是numpy):
import numpy as np # 假设你的原始x是形状为(n_samples, 3)的数组 # 添加全1的偏置列,放在第一列 x_with_bias = np.hstack((np.ones((x.shape[0], 1)), x))
之后用x_with_bias去做梯度下降的训练,同时初始化theta的时候要改成4个值,比如:
# 初始化theta为4个随机值或者全0 theta = np.zeros(4) # 或者 np.random.randn(4)
这样训练出来的theta就会是4个值,对应包含截距项的完整模型了。另外还要检查你的梯度下降迭代逻辑,确保计算损失和梯度的时候,是基于添加了偏置项的特征矩阵来计算的,这样维度才会匹配,不会报错。
内容的提问来源于stack exchange,提问作者capncook
相关产品推荐
相关产品推荐

