斯坦福机器学习笔记三 - 多变量线性回归
多变量
在上节的单变量线性回归中,我们只用到了一种变量,即房子面积作为特征来预测房价。假设函数为
但是,如果我们有多个特征该怎么办呢?比如我们添加了房子卧室的数量,楼层的数量以及房子的使用年限等特征,这样我们就有了更多的特征来预测房价。
首先简单介绍下数学标记
-
x(i)j
x
j
(
i
)
表示训练数据中第
i
个训练样本的第j
个特征 -
x(i)
x
(
i
)
表示训练样本的第
i
个训练输入(特征) m
表示训练样本的数目n
表示特征的数目
通过单变量线性回归的假设函数可知,多变量线性回归的假设函数为
为了方便表示,首先定义 x0=1 x 0 = 1 (即 x(i)0 x 0 ( i ) =1), 此时 hθ(x) h θ ( x ) 为:
再令
故多变量线性回归的假设函数为
$$
$$
梯度下降
多变量下的梯度下降与单变量下的梯度下降没有区别,只是将对应的偏导数相替换掉即可
特征处理
特征缩放(Feature Scaling)
如果有多个特征,且多个特征的取值范围相近,则梯度下降就能够很快的收敛。但如果特征的取值范围相差较大,那么梯度下降会很慢。
比如房价预测中,特征房子面积和卧室数目,如图所示,他们的取值范围相差较大,如果画出代价函数
J(θ)
J
(
θ
)
的轮廓图,可能会是瘦长形的椭圆。梯度下降算法要经过很多次的迭代才能到达最优点。但如果我们对特征进行缩放,使得他们的取值范围相接近,则此时的代价函数如下图右侧所示,会较快的收敛到最优点。通常将特征缩放到[-1,1]范围附近。
均值归一化(Mean normalization)
在特征缩放中,除了将特征除以最大值以外,还有一种方法叫做均值归一化, 将特征值减去平均值,除以最大值减去最小值
学习率
我们应该如何知道梯度下降算法是正常工作的呢?梯度下降算法的目的就是找到一个
θ
θ
值能够最小化代价函数
J(θ)
J
(
θ
)
, 所以我们可以画出代价函数和迭代次数的关系图来观察梯度下降算法的运行。如图所示,x
轴是迭代簇数,y
轴是代价函数。如果正常运行的话,代价函数的值应该逐渐下降,类似下图所示。
当然我们也可以进行自卸自动的收敛测试,比如如果代价函数迭代后的下降值低于某个阈值 ϵ ϵ (比如 ϵ=10−3 ϵ = 10 − 3 )就判定收敛。当然选择一个合适的阈值是相当困难的。通常还是使用画图的方法进行收敛判定,而不是自动收敛测试。
总结一下
α
α
的选择要求
特征和多项式回归
当选择了合适的特征后,学习算法的效果是非常有效的。并且多项式回归使得我们能够使用线性回归的方法来拟合非常复杂的函数,甚至是非线性函数。
比如房价预测,我们选取房子的临街宽度和垂直宽度作为特征,假设函数为
但是,当然我们运用线性回归时,不一定直接用这些特征,可能房价和面积有关呢,所以特征选取为 size=frontage∗depth s i z e = f r o n t a g e ∗ d e p t h , 假设函数变为
通过特征的选择,可能会获得更好的模型
与选择特征的想法密切相关的概念被称为多项式回归(Polynomial regression),比方说有一个关于房屋价格的数据集,为了拟合它,可能会有多个模型。比如第一个模型为二次函数模型,因为直线不能很好的拟合数据,但你发现二次函数是一个抛物线,最终会房价降下来,但实际并不会降。
所以转而使用三次函数模型,因为三次函数最后不会下降。但是我们应该如何将模型与数据拟合呢?如图所示,我们将房屋面积作为第一个特征,面积的平方作为第二个特征,面积的三次方作为第三个特征。当然如果这样设置特征后,特征的归一化就非常重要了。
当然,还有其他的模型以供选择,比如平方根模型,如图所示
正规方程(Normal Equation)
正规方程
对于某些线性回归问题,正规方程是一种求解参数 θ θ 最优值更好的方法。到目前为止,我们一直用梯度下降,也就是说为了最小化代价函数 J(θ) J ( θ ) ,我们使用梯度下降算法来进行多次迭代使得代价函数收敛到全局最优值。但正规方程可以让我们一次性求解 θ θ 的最优值。
如图所示,假设代价函数为
J(θ)=aθ2+bθ+c
J
(
θ
)
=
a
θ
2
+
b
θ
+
c
,
θ
θ
为实数,如何得到最优值的?学过微积分的都知道,只要领导数为0即可。
当然,上例中的
θ
θ
是一直实数,而我们感兴趣的确是
θ
θ
为n+1
维向量,并且J
为该向量的函数的情况。我们该如何最小化代价函数J
?其实只要我们求每个
θ
θ
的偏导数,然后把他们全部置为0,这样就能够得到最小化代价函数的
θ
θ
向量值,但是你可能会发现最后得出的值会非常复杂,接下来就实现一种求最优值的向量化方法。
为了首先正规方程法,首先在训练集加一列对应额外特征的
x0
x
0
,值为1.接下来用所有特征变量构建矩阵
X
X
, 再将输出值放入向量中,最后通过公式
θ=(XTX)−1XTy
θ
=
(
X
T
X
)
−
1
X
T
y
,就可以得到
θ
θ
值。
通用形式
在Octave中,可以下面的命令计算
pinv(x'*x)*x'*y
这就是正规方程,并且正规方程不需要归一化特征。
梯度下降与正规方程
正规方程的优点这么多,那么是否会有去缺点呢?下图为梯度下降与正规方程的优缺点对比。
梯度下降 | 正规方程 |
---|---|
需要选择学习率 α α | 不需要选择学习率 α α |
需要多次迭代 | 不许迭代 |
O(kn2) O ( k n 2 ) | O(n3) O ( n 3 ) , 需要计算 XTX X T X 的逆矩阵 |
即使n很大也能正常工作 | 如果n非常大,计算非常慢 |
正规方程的不可逆
如果 XTX X T X 不可逆时,可能的原因有
- 冗余特征。可能有特征非常相似,比如线性相关
- 特征太多。(eg. m <= n)。这种情况下,可以删除一些特征或者使用正则化(Regularization)