第 4 章 多变量线性回归
多变量线性回归是在单变量线性回归的基础上,引入多个特征。例如预测房价时,不只看面积,还可以同时考虑房间数、楼层、房龄等。
4.1 多维特征
单变量线性回归只有一个特征。多变量线性回归有多个特征,通常记作:
x_1, x_2, ..., x_n新增符号:
| 符号 | 含义 |
|---|---|
n | 特征数量 |
x^(i) | 第 i 个训练样本,是一个向量 |
x_j^(i) | 第 i 个训练样本的第 j 个特征 |
例如某个房屋样本可以写成:
多变量线性回归的假设函数:
为了让公式更统一,可以引入 x_0 = 1:
此时参数 theta 和样本 x 都可以看作向量,假设函数可以写成:
4.2 多变量梯度下降
多变量线性回归的代价函数仍然是所有训练样本预测误差的平方和:
其中:
目标仍然是找到一组参数,让代价函数最小。
批量梯度下降的更新规则:
其中 j = 0, 1, ..., n。
展开来看:
实现时从一组初始参数开始,计算预测结果和误差,再同步更新所有参数,不断重复直到收敛。
Python 中计算代价函数的示例:
def computeCost(X, y, theta):
inner = np.power(((X * theta.T) - y), 2)
return np.sum(inner) / (2 * len(X))4.3 梯度下降法实践 1:特征缩放
多变量问题中,不同特征的取值范围可能差异很大。例如房屋面积可能在 0 到 2000,房间数量可能在 0 到 5。
如果特征尺度差别太大,代价函数的等高线会很扁,梯度下降可能需要很多次迭代才能收敛。
解决方法是做特征缩放,让不同特征尽量落在相近范围内,常见目标范围是 -1 到 1。
常用做法是均值归一化:
其中:
mu_n是第n个特征的平均值。s_n通常可以取第n个特征的标准差或取值范围。
4.4 梯度下降法实践 2:学习率
梯度下降需要多少次迭代才能收敛,不能提前准确知道。通常可以画出迭代次数和代价函数的关系图,观察代价函数是否持续下降并趋于平稳。
如果学习率 alpha 太小,收敛会很慢。
如果学习率 alpha 太大,每次迭代可能无法降低代价函数,甚至越过局部最小值导致发散。
课程中建议可以尝试这些学习率:
0.01, 0.03, 0.1, 0.3, 1, 3, 10调学习率时,要观察 J(theta) 是否随着迭代次数下降。如果 J(theta) 上升或震荡,通常说明学习率过大。
4.5 特征和多项式回归
有时原始特征可以重新组合成更有意义的特征。
例如房价预测中,房子的临街宽度和纵向深度可以组合成面积:
area = frontage * depth这样就可以用面积作为一个新的特征。
线性模型并不适用于所有数据。有时需要用曲线拟合数据,例如二次模型或三次模型:
也可以根据房价随面积变化的形状,选择类似下面的模型:
或者:
如果使用多项式回归,特征缩放会更重要。因为平方、立方后的特征尺度可能变得非常大。