多元线性回归:为何向特征矩阵添加全1数组(Python)
Hey there, great question—this is a common point of confusion when first diving into linear regression with matrices, so let’s unpack it clearly!
1. 全1数组的核心作用:统一矩阵形式的回归方程
多元线性回归的原始方程(以3个自变量为例)是:
$y = \beta_0 + \beta_1x_1 + \beta_2x_2 + \beta_3x_3 + \epsilon$
这里的$\beta_0$是截距项——也就是当所有自变量$x_1,x_2,x_3$都为0时的预测值。为了用矩阵乘法统一处理所有参数(包括$\beta_0$),我们需要把方程转化为更简洁的矩阵形式:
$Y = X\beta + \epsilon$
其中:
- $Y$是(n,1)的目标变量向量
- $\beta$是(4,1)的参数向量:$[\beta_0, \beta_1, \beta_2, \beta_3]^T$
- $X$需要是(n,4)的特征矩阵——这时候就必须给原始的(n,3)特征矩阵添加一列全1,让$\beta_0$能和这一列相乘($\beta_0 * 1 = \beta_0$),完美匹配原始方程的结构。
在Python中,你可能会看到导师写这样的代码来实现这个操作:
import numpy as np # 假设X是(n,3)的原始特征矩阵 X_with_intercept = np.hstack((np.ones((X.shape[0], 1)), X))
简单说:加全1列是为了把截距项$\beta_0$纳入到矩阵乘法的统一框架里,不用单独写逻辑处理它,代码实现和数学推导都更简洁。
2. 为什么选1,而不是其他数值?
1是乘法单位元,这是最关键的原因:
- 如果用其他数(比如2),方程会变成$y = \beta_0*2 + \beta_1x_1 + ...$,这时候$\beta_0$的含义就不再是原始的截距了——它会变成截距的1/2,解释起来非常别扭。
- 用1的话,$\beta_0$直接对应“所有自变量为0时的y值”,物理意义清晰,后续解读模型参数时不用额外转换。
- 从计算角度,全1列不会引入额外的缩放或偏移,保持了参数求解的稳定性,也让梯度下降、最小二乘法等算法的实现更直观。
举个例子:如果真实截距是5,用全1列的话$\beta_0=5$;如果用全2列,$\beta_0$就变成2.5,虽然最终预测结果一样,但你解释参数时得说“这个2.5乘以2才是实际截距”,完全没必要给自己添麻烦。
3. 自变量数量会影响这个操作吗?
完全不会!
不管你有3个、10个还是100个自变量,只要你想在模型中包含截距项,就需要添加这一列全1。截距项是独立于所有自变量的常数项,和自变量的数量没有关系——它只负责捕捉“当所有x都为0时的基准预测值”。
比如:
- 1个自变量:原始X是(n,1),加全1列后变成(n,2),对应$\beta=[\beta_0, \beta_1]$
- 5个自变量:原始X是(n,5),加全1列后变成(n,6),对应$\beta=[\beta_0, \beta_1, ..., \beta_5]$
如果不加这一列,你的模型就变成了过原点的回归(强制所有x为0时y=0),这在大多数现实场景中都不符合数据规律,会导致预测偏差。
内容的提问来源于stack exchange,提问作者Leo

