【吴恩达机器学习笔记】四、多变量线性回归

简介: 【吴恩达机器学习笔记】四、多变量线性回归

四、多变量线性回归


1. 多功能

在之前的课程中,我们利用房屋的大小这一个特征来那个来预测房屋的价格,但是当特征量变多之后,就得改变应付此类问题的策略了,下图所介绍的是一些常用的表达。


n:表示有n个特征值。


x(i):表示第i个训练样本的输入特征值。


xj(i):表示第i个训练样本中第j个特征量的值。


75149752fd8749b7a49a676117c0fa32.png


接下来,我们将定义多特征量的表达式,如下:


c3bff60f760640d694bc0b3814522241.png


表达式中的x1到xn为n个特征量的值,但是在开头的θ0并没有相应的特征量在旁边,所以我们为了方便记录,额外定义了一个特征量x0并让它的值恒等于1。这样,当将x于θ的值分别对应到矩阵中之后,就可以一目了然,就像上图中的x与θ的两个向量。而想要得到h(x),只需将θ进行一次转置再与x向量相乘即可得到最终表达式。


小结


这以上的内容也就是所谓的多线性回归,有多个特征量来决定最终值。


2. 多元梯度下降法

因为现在设计到了多个特征量,所以我们的多元梯度下降算法也与之前的梯度下降算法有些许不同,如下所示:

5901dc4983e84480b2cc01f00c6cc178.png



跟之前的算法相比,其实本质上并没有什么区别,所用的算式也大同小异,只不过在多元当中,需要算的θ值就比之前要多很多,只是在θ0和θ1之后有添加了θ2等特征量的计算。


特征缩放(Feature Scaling)

63a85cd5deb845caad720ea2bd911206.png



因为J(θ)的函数图像会受到特征量的影响,所以如果当特征量之间数值相差很大时,就会得到一个非常窄的椭圆形,这会让梯度下降的步伐变得十分缓慢,它可能回来会横跳最终找到最优值。


相反,如果让特征量之间数值相差很小时,就如上图右侧所示,我们会得到一个更加圆的一个曲线图,这样的话会使梯度下降的路径变得更加直接快速,这其中所用到的方法就是特征缩放。


所以我们对于特征值的处理就要更加注意,下图就是给出相关的规范原则。


12a2d870ce1341ffa5b2135dd64add2a.png


我们通常会将特征值通过各种方式限制在大约-1≤xi≤1这个范围内,但是如果稍微有所偏差是可以在接收范围内的,一般可以将这种“红线”扩大到-3到3或-1/3到1/3之间,如果偏差超过这些范围,那还需要多加考虑了。


除上述之外,我们在进行特征缩放时,有时也会进行 均值归一化(Mean normalization) 的工作,就是将xi替换成xi减μ,让特征量具有0的平均值。通俗点来讲,就是一种缩小特征值的方法,通过这种方法,我们可以将特征量的范围大致缩小在-0.5≤x≤0.5范围附近。


953feb7fff904fb99318fa9272ebfb81.png


上图式中的μ1代表训练集中特征x1的平均值,而S1代表特征值的范围,也就是用x1的最大值减去最小值。


接下来,我将介绍两种测试自己梯度下降的算法正在正确的工作。


bdf255341040474da9149f5e891f33b0.png


一般我们会更倾向于用第一种方法,也就是上图的左侧,通过得到minJ(θ)与迭代次数的函数图像,可以很清楚地观察梯度下降时候往对的方向进行。


而第二种方法就是上图的右侧,我们可以通过自动收敛测试观察是否已经收敛,也就是说通过判断J(θ)的值是否小于一个阈值来进行判断,但是这种阈值一般很难去取,所以通常会用上面的一个方法去判断。


通过上述的第一种方法,我们就可以对梯度下降正误进行判断,通常情况下造成图像不正常的情况是因为选取的α即学习率过大,使梯度下降的步伐过大,导致每次下降时都会越过最低点,这时就要减小α的值,例如下图所示:


d434665975b6426e8a6e461cb8a86b4c.png


实验发现,只要α足够小,J(θ)就总能找到最优值。

如果α过大的话,J(θ)可能不会在每一次迭代都下降,甚至可能不收敛(有些情况下也可能会出现收敛速度慢);如果α过小的话,梯度下降的步伐就会很小,要经过漫长岁月才能找到最优值。

故通常情况下,我们会尝试不同的α值,通过观察J(θ)的变化情况,找到下降最快的所对应的α值。


08c4f2860e0c47f7abac9f04e8643fa6.png


3. 特征与多项式回归

现在我们考虑的特征量变多了,特征可以任意的进行选取,所以不能单单用一条直线就可以很好的拟合我们的数据,所以这时候要引入其他的函数,例如二次函数、三次函数等,这就是所谓的多项式回归(Polynomial regression)。


如果要用到梯度下降的话,我们还要考虑特征量之间的差值,如果相差太大就需要用到上节课所讲的特征缩放。


6c7f4a53b353452687d42ae9cd6da18e.png


下面就是一个例子:


64b93e9c6d7940709724cbbf75cda039.png


用二次函数可能不能拟合我们的数据,因为随着x的增大,二次函数反而会减小,所以这时候就可以用其他的函数例如带根号的函数,线性回归后能够更好地拟合数据。


4. 正规方程

前面我们是通过梯度下降来得到θ的最优解,但其实还有其它求θ最优解的办法,只用一个式子便可以求出,就是接下来要讲的。


正规方程(Gradient Descent)


01c1cec213f64ca7ab198785bcbb485a.png


下面就是一个例子:

5efe5c1afb2a44e79461e1e3ebfcafd3.png



我们可以假设一个x0恒等于1的特征量,然后将所有特征量放入一个矩阵,将目标值放入另一个矩阵,就能计算上面式子。


接下来,我将详细为你介绍求解的具体步骤,首先来看矩阵X与向量y是怎么得到的。


a151886e541b434b8d2ef651229f4167.png


我们将数据集的每一个例子中的特征量分别转置放入矩阵X,也就是将每一个例子的特征量作为X的每一行,而目标值就直接竖着放入向量y。


用正规方程还有一个优点,就是它不用像梯度下降一样要进行特征缩放,它允许你的特征量之间的差值很大。


下面我将为你总结梯度下降与正规方程的优缺点。


梯度下降

优点:当n的值非常大的时候,它计算的效果任然会很好。

缺点:它需要通过很多测试去画J(θ)的图像得到α的最优值,并且想要得到最终的结果需要很多次的迭代。

正规方程

优点:它不用去选取α值,也不用进行迭代计算,只用一个式子便能得到最终结果。

缺点:因为式子中要计算(XTX)-1,所以如果n值特别大的话,计算这个式子会非常的慢。

小结


如果n值小于一万,则优先选择正规方程计算;如果n值大于一万,就建议去用梯度下降进行计算。


当然,你在计算(XTX)-1时可能会遇到有些矩阵没有逆矩阵的情况,那你可以有两个方法去解决:


检查是否有多余的特征

例如有些特征之间是有线性关系的,这时你可以删除其中一个特征。


bdd428114d5a441caaee2307dd4ceddf.png

检查特征是否过多了(e.g. m<n)

这时候你就要删除一些特征,或者采用正则化(regularization)。


目录
相关文章
|
24天前
|
机器学习/深度学习 人工智能 自然语言处理
机器学习之线性回归与逻辑回归【完整房价预测和鸢尾花分类代码解释】
机器学习之线性回归与逻辑回归【完整房价预测和鸢尾花分类代码解释】
|
12天前
|
机器学习/深度学习 人工智能 分布式计算
R和Python机器学习:广义线性回归glm,样条glm,梯度增强,随机森林和深度学习模型分析
R和Python机器学习:广义线性回归glm,样条glm,梯度增强,随机森林和深度学习模型分析
16 0
|
12天前
|
索引 机器学习/深度学习 Python
fast.ai 机器学习笔记(二)(3)
fast.ai 机器学习笔记(二)
26 0
fast.ai 机器学习笔记(二)(3)
|
12天前
|
机器学习/深度学习 算法框架/工具 PyTorch
fast.ai 机器学习笔记(三)(2)
fast.ai 机器学习笔记(三)
40 0
fast.ai 机器学习笔记(三)(2)
|
机器学习/深度学习 算法 计算机视觉
fast.ai 机器学习笔记(四)(4)
fast.ai 机器学习笔记(四)
18 0
fast.ai 机器学习笔记(四)(4)
|
12天前
|
机器学习/深度学习 索引 Python
fast.ai 机器学习笔记(四)(2)
fast.ai 机器学习笔记(四)
98 0
fast.ai 机器学习笔记(四)(2)
|
12天前
|
机器学习/深度学习 数据挖掘 Python
fast.ai 机器学习笔记(一)(4)
fast.ai 机器学习笔记(一)
77 1
fast.ai 机器学习笔记(一)(4)
|
12天前
|
机器学习/深度学习 Python 索引
fast.ai 机器学习笔记(一)(1)
fast.ai 机器学习笔记(一)
36 0
fast.ai 机器学习笔记(一)(1)
|
1月前
|
机器学习/深度学习 人工智能 算法
机器学习的魔法(一)从零开始理解吴恩达的精炼笔记
机器学习的魔法(一)从零开始理解吴恩达的精炼笔记
|
2月前
|
机器学习/深度学习 人工智能 算法
利用Python实现简单的机器学习算法——线性回归
本文介绍了如何使用Python语言和相关库,通过实现线性回归算法来进行简单的机器学习模型训练和预测。通过详细的代码示例和解释,帮助读者了解机器学习中的基础概念和实践操作。

热门文章

最新文章