Skip to content

第 6 章 线性回归

多变量线性回归是在单变量线性回归的基础上,引入多个特征。例如预测房价时,不只看面积,还可以同时考虑房间数、楼层、房龄等。

6.1 多维特征

单变量线性回归只有一个特征。多变量线性回归有多个特征,通常记作 x1, x2, ..., xn

新增符号:

符号含义
n特征数量
x(i)i 个训练样本,是一个向量
xj(i)i 个训练样本的第 j 个特征

例如某个房屋样本可以写成:

x(2)=[14163240]

多变量线性回归的假设函数:

hθ(x)=θ0+θ1x1+θ2x2++θnxn

为了让公式更统一,可以引入 x0 = 1:

hθ(x)=θ0x0+θ1x1+θ2x2++θnxn

此时参数 θ 和样本 x 都可以看作向量,假设函数可以写成:

hθ(x)=θTx

6.2 多变量梯度下降

多变量线性回归的代价函数仍然是所有训练样本预测误差的平方和:

J(θ0,θ1,,θn)=12mi=1m(hθ(x(i))y(i))2

其中:

hθ(x)=θTx=θ0+θ1x1+θ2x2++θnxn

目标仍然是找到一组参数,让代价函数最小。

批量梯度下降的更新规则:

θjθjα1mi=1m(hθ(x(i))y(i))xj(i)

其中 j = 0, 1, ..., n

展开来看:

θ0θ0α1mi=1m(hθ(x(i))y(i))x0(i)θ1θ1α1mi=1m(hθ(x(i))y(i))x1(i)θ2θ2α1mi=1m(hθ(x(i))y(i))x2(i)

实现时从一组初始参数开始,计算预测结果和误差,再同步更新所有参数,不断重复直到收敛。

Python 中计算代价函数的示例:

python
def computeCost(X, y, theta):
    inner = np.power(((X * theta.T) - y), 2)
    return np.sum(inner) / (2 * len(X))

6.3 梯度下降法实践 1:特征缩放

多变量问题中,不同特征的取值范围可能差异很大。例如房屋面积可能在 02000,房间数量可能在 05

如果特征尺度差别太大,代价函数的等高线会很扁,梯度下降可能需要很多次迭代才能收敛。

解决方法是做特征缩放,让不同特征尽量落在相近范围内,常见目标范围是 -11

常用做法是均值归一化:

xj=xjμjsj

其中:

  • j 表示当前处理的特征下标,避免和特征总数 n 混淆。
  • μj 是第 j 个特征的平均值。
  • sj 通常可以取第 j 个特征的标准差或取值范围。

6.4 梯度下降法实践 2:学习率

梯度下降需要多少次迭代才能收敛,不能提前准确知道。通常可以画出迭代次数和代价函数的关系图,观察代价函数是否持续下降并趋于平稳。

如果学习率 α 太小,收敛会很慢。

如果学习率 α 太大,每次迭代可能无法降低代价函数,甚至越过局部最小值导致发散。

课程中建议可以尝试这些学习率:

text
0.01, 0.03, 0.1, 0.3, 1, 3, 10

调学习率时,要观察 J(θ) 是否随着迭代次数下降。如果 J(θ) 上升或震荡,通常说明学习率过大。

6.5 特征和多项式回归

有时原始特征可以重新组合成更有意义的特征。

例如房价预测中,房子的临街宽度和纵向深度可以组合成面积:

text
area = frontage * depth

这样就可以用面积作为一个新的特征。

线性模型并不适用于所有数据。有时需要用曲线拟合数据,例如二次模型或三次模型:

hθ(x)=θ0+θ1x1+θ2x22hθ(x)=θ0+θ1x1+θ2x22+θ3x33

也可以根据房价随面积变化的形状,选择类似下面的模型:

hθ(x)=θ0+θ1(size)+θ2(size)2

或者:

hθ(x)=θ0+θ1(size)+θ2size

如果使用多项式回归,特征缩放会更重要。因为平方、立方后的特征尺度可能变得非常大。

6.6 特征工程的补充

多变量线性回归的效果很依赖特征。模型形式虽然是线性的,但只要构造出合适的特征,也可以表达一部分非线性关系。

常见特征类型:

特征类型例子说明
数值特征面积、年龄、收入可以直接进入模型,但通常需要缩放
类别特征城市、职业、房屋朝向通常需要编码后再使用
交互特征面积 × 房间数表示两个特征一起产生的影响
多项式特征x2, x3用线性模型拟合曲线趋势

特征工程不是随便堆特征。特征太少,模型可能欠拟合;特征太多,模型可能过拟合,也可能让训练更不稳定。后面正则化章节会专门处理“特征多、模型复杂”带来的问题。

6.7 多重共线性和特征缩放

如果两个特征高度相关,例如房屋面积和房间数经常一起变大,模型可能难以稳定判断每个特征单独贡献了多少。这类问题叫多重共线性。

多重共线性不一定会让预测完全失败,但可能让参数解释变得不稳定:训练数据稍微变化,θj 的值就可能明显改变。实际建模时,如果更关心预测结果,可以配合正则化缓解;如果更关心解释每个特征的影响,就需要认真检查特征相关性。

特征缩放解决的是另一个问题:它不改变特征之间是否相关,而是让不同特征的数值范围更接近,从而让梯度下降更容易收敛。

问题主要影响常见处理
特征尺度差异大梯度下降慢或震荡均值归一化、标准化
特征高度相关参数不稳定、解释困难删除冗余特征、正则化

6.8 和神经网络的关系

多变量线性回归可以看成一个没有隐藏层、输出为连续值的模型:

hθ(x)=θTx

神经网络中的全连接层也在做类似的线性变换,只是后面通常还会接非线性激活函数。没有激活函数时,多层线性变换叠在一起,本质上仍然可以合并成一个线性变换;加入激活函数后,模型才具备表达复杂非线性关系的能力。

这也是后面学习神经网络时要特别注意的点:权重和偏置负责线性变换,激活函数负责引入非线性。

Powered by VitePress