多功能
多变量线性回归就是多特征量的情况下的假设形式,也就是用多个变量来预测Y值。
下图为多变量线性回归的假设形式,即
h
θ
(
x
)
=
θ
T
x
=
θ
0
x
0
+
θ
1
x
1
+
θ
2
x
2
+
.
.
.
+
θ
n
x
n
h_θ(x)=θ^Tx=θ_0x_0+θ_1x_1+θ_2x_2+...+θ_nx_n
hθ(x)=θTx=θ0x0+θ1x1+θ2x2+...+θnxn (其中x_0=1)
多元梯度下降法
上一课时我们知道了多变量线性回归的假设形式,这一课时将学会如何设定该假设的参数,即如何使用梯度下降法来处理多元线性回归。
假设函数,参数及代价函数
通过之前所学,我们的模型参数为从
θ
0
θ_0
θ0到
θ
n
θ_n
θn,我们把它们看成一个n+1维的
θ
θ
θ向量,而不是n个独立的参数。
因此我们也不把代价函数 J ( θ 0 , θ 1 , . . . , θ n ) J(θ_0,θ_1,...,θ_n) J(θ0,θ1,...,θn)看作这n+1个数的函数,而是看成 J ( θ ) J(θ) J(θ)即 θ θ θ这个向量的函数
梯度下降
下图为梯度下降,即每个参数
θ
j
θ_j
θj减去学习率乘以代价函数对参数
θ
j
θ_j
θj的偏导
下面为执行梯度下降时的样子,左侧为n=1个特征也就是单变量线性回归,右侧为多个特征也就是多变量线性回归。其实迭代的方法是一样的,只不过需要迭代的参数变多了而已。
多元梯度下降法演练 I – 特征缩放
如果一个机器学习问题的多个特征取值在相近的范围内,这样梯度下降法就能更快的收敛,因为它避免了很多额外的迭代。
所以当多个特征的取值范围相差很大,我们就要进行特征缩放。特征缩放就是将特征的取值约束到-1到+1的范围内(或者接近-1到1的范围内,这样就能使梯度下降的速度更快,收敛所需的迭代次数更少。
如何进行特征缩放
常见的特征缩放的方法有两种,一种是将特征除以最大值,另一种是均值归一化。
均值归一化是将要缩放的特征减去平均值再除以该特征的范围:
x
1
=
(
x
1
−
u
1
)
/
(
m
a
x
−
m
i
n
)
x_1=(x_1-u_1)/(max-min)
x1=(x1−u1)/(max−min) u1是平均值
下面是一个均值归一化的例子:
题目要求归一化后
x
1
(
3
)
x_1^{(3)}
x1(3)的值,我们
u
1
=
89
+
72
+
94
+
69
4
=
81
u_1 = \frac{89+72+94+69}{4}=81
u1=489+72+94+69=81
x
3
=
(
x
3
−
u
1
)
(
m
a
x
−
m
i
n
)
=
94
−
81
94
−
69
=
0.52
x_3=\frac{(x_3-u_1)}{(max-min)}=\frac{94-81}{94-69}=0.52
x3=(max−min)(x3−u1)=94−6994−81=0.52
多元梯度下降法II – 学习率
确保梯度下降正常工作的技巧
为了检查梯度下降算法是否收敛,可以绘制J(θ)和迭代次数的曲线图,也可以通过自动收敛测试。
绘制J(θ)随迭代次数的变化曲线图
在梯度下降算法运行时绘出代价函数J(θ)的值,x轴表示梯度下降算法的迭代次数
通过这个图像就可以判断梯度下降算法是否已经收敛
自动收敛测试
除此以外还能进行一些自动的收敛测试,也就是让一种算法告诉你梯度下降算法是否已经收敛。
如果代价函数J(θ)一步迭代后的下降小于一个很小的值ε,就判断已经收敛,但是选择一个合适的ε值很难。
如何选择学习率
J(θ)随迭代次数的变化曲线图不仅可以判断梯度下降是否收敛,还可以警告算法有没有正常工作,帮助我们选择合适的学习率。
通过绘制J(θ)随迭代次数的变化曲线图选择学习率
如果曲线如下图一直上升(下图左),表示梯度下降没有正常工作,通常原因如下图右所示学习率α过大导致一直错过最小值,因此当看到下图左所示的曲线时我们应该选择更小的学习率α。
如果看到下图这样的曲线,也是选择更小的学习率α。
数学家已经证明只要学习率足够小,那么每次迭代之后代价函数J(θ)都会下降。但是学习率过小会导致收敛的特别慢。
即如果学习率太小,收敛的会特别慢;如果学习率过大,则代价函数J(θ)不一定在每次迭代都会下降,甚至可能不收敛。
当我们在运行梯度下降函数时,可以尝试不同的学习率α,如下图每隔三倍取一个值,对于这些不同的α绘制J(θ)随迭代步数变化的曲线,然后选择使得J(θ)快速下降的一个α值
特征和多项式回归
可供选择的特征
我们可以自由选择不同的特征,并且通过设计不同的特征,用更复杂的函数拟合数据,而不是只用一条直线拟合。
下面是一个例子:
我们要预测房价,有两个特征房子的临街宽度和垂直宽度。但我们运行线性回归时,不一定非要直接用这两个特征,我们可以自己创造新的特征,如房屋的面积,即x1和x2相乘。
多项式回归
多项式回归就是将一个多项式,如二次函数或三次函数拟合到数据上。
多项式回归使得我们能够用线性回归的方法来拟合非常复杂的函数,甚至是非线性函数。
比如我们有上图左这样一个住房价格数据集,就会有多个不同的模型用于拟合。如右图的二次模型,但我们知道二次函数最后会降下来(如图蓝线),但是随着房屋面积的增大房价并不会下降,所以二次模型不合理。
所以我们可能会选择一个三次模型(如图绿线。将模型与数据结合的方法就是使用多元线性回归的方法对算法做一个修改。
也就是有三个特征x1,x2,x3,这三个特征分别是房屋面积,房屋面积的平方和房屋面积的三次方。【这样选特征的话特征缩放就非常重要】
除了选择三次模型,我们还有很多其他的选择,如下图的平方根函数。
正规方程(区别与迭代方法的直接解法)
对于某些线性回归问题,正规方程给我们更好的方法来求得参数θ的最优值。【以前我们都在用线性回归的算法是梯度下降法】
正规方程提供了一种求θ的解析解法,因此不再需要运用迭代算法,而是可以一次性求解θ的最优值。
下图是一个例子:
我们有m个训练样本和n和特征变量数,然后加一列
x
0
x_0
x0=1。
构造出设计特征X和y,我们通过
θ
=
(
X
T
X
)
−
1
X
T
y
θ=(X^TX)^{-1}X^Ty
θ=(XTX)−1XTy来得到使代价函数最小的最优值θ。
更加通用的形式如下:
我们有m个样本和n个特征变量,则每个样本的向量如下图所示:
构建设计矩阵X的方法如下:
X的每一行就是上图每个向量的转置,即一行是一个样本的所有特征向量。X是一个m*(n+1)维矩阵。
y就是把所有的y放在一起构成一个m维向量。
得到了X和y我们的正规方程如下:
θ = ( X T X ) − 1 X T y θ=(X^TX)^{-1}X^Ty θ=(XTX)−1XTy
用octave实现正规方程
什么时候用正规方程什么时候用梯度下降
梯度下降的缺点:
①需要选择学习率α,通常要选择不同的学习率运行很多次
②梯度下降需要多次迭代
正规方程的优点:
①不需要用到特征缩放
②不需要选择学习率
③不需要迭代,只要运行一下就好
梯度下降的优点:
①在特征变量很多的情况下也能运行的相当好
正规方程的缺点:
①正规方程要计算逆矩阵,而计算逆矩阵的代价以矩阵维度的三次方增长。因此计算这个逆矩阵的代价,大致是n的三次方级的时间。n很大时,计算会很慢。
②正规方程只能用在线性回归问题。
综上,当n>10000(不是特别绝对)时选择梯度下降,否则选择正规方程
正规方程在矩阵不可逆情况下的解决方法
当我们计算 θ = ( X T X ) − 1 X T y θ=(X^TX)^{-1}X^Ty θ=(XTX)−1XTy时,如果矩阵 X T X X^TX XTX是不可逆的,我们将会遇到一些问题。
在octave中用pinv即使不可逆也能得到正确答案
在octave中,我们计算这个矩阵的逆用的pinv,即使这个矩阵时不可逆的也可以得到正确答案。
矩阵不可逆的两种常见原因/如何解决矩阵不可逆
① 学习问题包含了多余的特征
比如说你用了两个可以直接用公式转换的特征,如x1为米为单位的房屋面积,x2为英尺为单位的房屋面积,x1和x2可以相互转换,因此这个矩阵时不可逆的
②你在运行的学习算法有很多特征m<=n
具体来说就是样本数m<=特征数n,解决办法就是删除一些特征或者进行正则化。