Linear Regression with Multiple Variables (a.k.a multivariate linear regression)
Task: Given a training set of (x1, x2, x3, x4, y)=(housing size, number of bedrooms, number of floors, age of home, housing price), estimate housing price y using x1, x2, x3, x4.
1. Model
1.1 Notation
见上图
1.2 Hypothesis
对于上述房价预测问题,可以建立如下多元线性回归模型:
简单起见,定义
x0=1
x
0
=
1
,可将式子改写成向量形式:
θ
θ
和x均为n+1维列向量。
题外话:不同于单变量线性回归,这里涉及到多个变量,因此无法通过作图直观地判断自变量和因变量之间的关系,也就难以判断线性模型是否为最优。在实践中,可以通过散点图矩阵、相关系数等判断线性模型是否合适,也可以通过
R2
R
2
等拟合优度指标看模型拟合后的效果。在教学视频中,Ng并没有强调这一点,只需知道建立线性模型不是唯一的途径即可。
1.3 Cost function and Gradient Descent
多元线性回归的代价函数与梯度下降和单变量线性回归本质上是相同的,只是把参数写成了向量形式.
Cost function:
Gradient Descent:
Repeat until convergence {
单变量和多变量线性回归梯度下降的比较:
2. Gradient Descent in Practice
2.1 Feature Scaling
多元线性回归涉及的多个变量可能不在一个数量级,如例子中的房屋面积x1的取值区间可能为0-2000,而卧室数量x2取值范围为0-5。在梯度下降的过程中,这种变量量级的差异会导致不同参数梯度下降速度不同,量级小的下降快,量级大的下降慢,这会降低算法收敛的速度。对于一些对数据量纲敏感的机器学习算法,如之后会学到的SVM,训练数据量级相差过大会显著影响运行结果。因此,在实践中要对数据进行预处理。
最常用的数据预处理方法是特征缩放(feature scaling),用来标准化变量的取值范围。其基本思想是用变量值除以其全距(range),消除量纲的影响,将不同变量缩放到相同或相近的取值区间内。理想的缩放区间是[-1,1]或者[-0.5,0.5],但这并不是硬性要求。例如,可对本例中的x1和x2进行以下处理:
在用原值除以其全距后,x1和x2的取值区间均为[0,1].
均值归一化(mean normalization)常和特征缩放结合起来使用,即用原变量减去其均值后再除以全距(也可以除以标准差),使得新变量的均值为零:
在对数据进行特征缩放和均值归一化处理后,梯度下降会更快找到最优解。
2.2 Learning Rate
在上一节我们已经看到,不合适的学习率α会导致程序运行缓慢甚至出现错误。
在实践中,如何判断α的选择是否合适?
最直观的方法是以每次迭代更新后的代价函数
J(θ)
J
(
θ
)
对迭代数作图,如果每次迭代
J(θ)
J
(
θ
)
都在下降,说明梯度下降运行正常。当
J(θ)
J
(
θ
)
的减小值小于
10−3
10
−
3
时,可认为算法收敛。
梯度下降错误运行时的图像:
批注:右侧图像的x轴应为θ而非No. of iterations
总结:
1. 如果α太小,收敛速率慢;
2. 如果α太大,无法保证代价函数每次迭代都减小,算法可能无法收敛;
在实践中,为了选择合适的α,Ng给出的建议是尝试以下值,并依次扩大三倍:
0.001,…0.003…,0.01,…0.03…,0.1,…0.3…,1……
参考资料:
https://en.wikipedia.org/wiki/Feature_scaling