从0开始学习机器学习--Day4--多元梯度下降及正规方程

多元梯度下降法演练I:特征缩放(gradient descent in practice I:Feature Scaling)

假设在一个机器学习问题中有许多个特征,如果能确保这些特征都处在一个相近的范围内,那么梯度下降法就能更快地收敛到全局最优解,跟之前一样,还是用预测房价这个问题来引入。

假设预测房价的假设函数有两个特征量x_{1},x_{2}x_{1}房屋面积的取值范围在(0,2000),x_{2}卧室数量的取值范围在(1,5),如果画出代价函数J(\theta)的等值线,你会发现由于横纵坐标的范围相差太大,整体图像呈现的是一个较窄的椭圆形(这里忽略\theta_{0}的原因是只有x_{1},x_{2}是变化得,先探讨有变化的特征量的参数),如下:

是变得,先探讨有变化的特征量的参数),如下:

代价函数等值线图

而如果在这种情况下进行梯度下降,需要花费很多时间,而且你会发现梯度很可能会来回波动。

针对这种情况,特征缩放就很有作用了,通过改变特征量的范围,将其都放在一个相近的范围,就好比上述这个问题,将房屋面积除以2000,卧室数量除以5,得到的两个参数的范围就都在(0,1)内了,所呈现的等值线图也会死一个较为正常的圆:

特征缩放后的等值线图

在这样的情况下再去梯度下降,它就会找到一条更直接的路径,所花费的时间也会少很多。一般来说,我们会把特征量缩放到[-1,1]相近的范围内,如果本来是在(0,3)这种就不用缩放了,只需要保证其范围相比\pm1别太大或太小就行。

除此之外,还可以用均值归一化的操作来进行特征缩放,也就是说在除之前先减去训练样本的平均值\mu_{1},再除以范围s_{1},即x_{1}\leftarrow\frac{x_{1}-\mu_{1}}{s_{1}}。注意,特征缩放是为了让梯度下降能够更快地找到全局最优解,范围只需要相近即可,不需要过于精确。

多元梯度下降法演练II:学习率(gradient descent in practice II:Learning rate)

前面提到学习率\alpha决定了梯度下降每一步走多远,但如何选择适当的学习率才能使梯度下降尽可能快地找到最优解呢?

无论选择什么学习率,首先要保证的是梯度下降能够正常运行,从而收敛到最优解。那么什么叫做正常运行呢,下面给出一幅图来解释:

代价函数最小值收敛图

从图中我们可以看到,梯度下降正常运行时,随着迭代次数的增加,代价函数的最小值也在一起降低,也就是说,每次迭代次数的增加都会得到一个更小的代价函数的最小值。而图中当迭代次数到了300到400之间的时候,图像已经接近一条平坦的曲线了,此时我们可以认为已经梯度下降已经收敛到最优解,当然,每个不同的机器学习问题,收敛到最优解的迭代次数都不一样,在收敛到最小值之前我们都无法判断应该迭代多少次。

现在我们知道了正常运行时的图像,那么如果画出的图是随着迭代次数增加代价函数的值不断上升或者不断波动的话,此时我们就应该采取更小的学习率来保证梯度下降在下一次没有跨过最小值。当然,如果你观察到图像的代价函数值虽然在下降但速度很缓慢的话,不妨试试稍微放大一些来提高收敛效率。

一般来说,在发现需要更改学习率时,会采用增大或减小3倍的方式来更换学习率以保证画出的图不会太离谱。

特征和多项式回归(Features and polynomial regression)

假设有一个关于房价的假设函数:h_{\theta}(x) = \theta_{0}+\theta_{1}x_{1}+\theta_{2}x_{2},其中x_{1},x_{2}分别是房屋占地的长度与宽度,如果在经过市场调研后发现房屋的面积其实更能决定房价,此时可以更换新的特征量,即h_{\theta}(x) = \theta_{0}+\theta_{1}x,这里的x指的是房屋面积,从而得到一个更好地模型来求解问题。

在进行回归的时候,我们可以通过观察训练集的散点图来判断采取哪种函数形式能够更好地拟合这些数据,如图:

将传统函数形式改写成三次函数

我们可以看到这个房价关于房屋面积的散点图如果用传统的线性回归的函数形式或者二次函数形式来拟合并不是很合理,前者不是曲线,后者在增长到一定程度后会下降,显然三次函数的形式能够保证增长到后面不会下降,那么对应到之前的普通线性回归函数形式,我们可以将x_{1},x_{2},x_{3}改写成x,x^{2},x^{3},同时作特征缩放保证都在一个相近的范围内,那么用这个函数形式的假设函数就能更好地拟合原来的数据了。

当然,也可以改成平方根的形式:h_{\theta}(x) = \theta_{0}+\theta_{1}x_{1}+\theta_{2}\sqrt{x_{2}},这样也能保证后面是平缓上升。

正规方程(Normal equation)

在之前,我们采用梯度下降算法,通过一步步地迭代来最小化代价函数J(\theta),与其相反的是,正规方程提供的是能够直接求得\theta的解析解法,从而能够直接得到最优解而不是一步步地迭代来收敛到最小值。

若代价函数只是一个很简单的二次函数形式,且\theta为实数,那么想要求得其最小值,我们只需要对其求导并令其等于0即可,类似的,当\theta是n+1维的向量,而函数形式为J(\theta_{1},\theta_{1},...,\theta_{m}) = \frac{1}{2m}\sum_{i=1}^{m}{(h_{\theta}(x^{i})-y^{i})^{2}}时,逐个对\theta求j偏导数,即\frac{\partial}{\partial(\theta_{j})} J(\theta)= ...=0

尽管逐个求偏导确实会得到答案,但计算后的式子非常复杂,且这样的计算很耗费时间,那么有没有不需要遍历每个参数就能得到令代价函数有最小值的\thetaθ 的方法呢?

假设你有m=4个训练样本,有特征量及其对应的y值,可以把四个样本的特征量都放入一个矩阵这种并额外添加全为1的一列数字在第一列(这是对应我们所说的x_{0}=1),把y值全部放入一个向量中,并引出一个公式来求得\theta = (X^{T}X)^{-1}X^{T}y,如下图所示:

将特征量和y值放入矩阵和向量

所以,对应有m个特征量的代价函数,X矩阵,又被成为设计矩阵,令x^{i}= \begin{bmatrix} x_{0}^{i} \\ x_{1}^{i} \\ x_{2}^{i} \\ \cdot \\ \cdot \\ \cdot \\ x_{n}^{i} \end{bmatrix},让每个x^{i}的转置都填入矩阵中从而组成X。注意,这里不需要作特征缩放。

虽然视频中对\theta = (X^{T}X)^{-1}X^{T}y没做解释要求,但答主有找到一篇博客,对这个公式解释的很清楚,我把网址放在最下面,有兴趣的可以点击了解。

相比梯度下降,正规方程不需要多次尝试来选择一个最恰当的学习率,且不需要经历多次的迭代,但在特征量特别多的情况下,由于需要求解(X^{T}X)^{-1},n维的X矩阵让计算量变得很大,若要求解出结果相比梯度下降要等很久,所以到底用哪个方法取决于特征量的多少。

当然,在某些情况下,公式中的X^{T}X可能会出现不可逆的情况,从而导致不能用正规方程算出结果,例如,若房价函数问题中出现了单位为英尺的房屋面积和单位为米的房屋面积,这两个特征量可以通过换算方程相互转换,那么矩阵X^{T}X就不可逆;还有一种情况是当训练样本数m小于等于矩阵或向量的维度时,矩阵X^{T}X同样是不可逆的。

学习内容来自于b站吴恩达大佬课程:https://www.bilibili.com/video/BV1By4y1J7A5?spm_id_from=333.788.player.switch&vd_source=867b8ecbd62561f6cb9b4a83a368f691&p=1

正规方程推导链接:机器学习:Normal equation公式推导

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值