机器学习(吴恩达)-3 多元线性回归的多特征(变量)问题

在上节中通过一个预测房价的例子给出了一个一次的假设函数:\small h_\Theta(x)=\Theta_0+\Theta_1*x。而在实际情况中假设函数可能需要多个特征(变量)x,因此在本节中将预测房价的例子进行些添加,从而引出多元线性回归函数,并对其中的参数进行分析,继而给出梯度下降算法中的实用技巧以及正规方程的介绍。


1. 多元线性回归函数如何表达?

本例中,影响房价的特征有多个,分别是房子大小、房间数量、楼层数以及房子已使用年限,这四个特征共同影响房子的价值,给出的训练集如下:

房子大小(平方英尺)房间数量楼层数房子已使用年限房价
2104

5

145460
14163240232
15343230315
8522136178

参数:

m:样本数量

n:特征数

x^{(i)}:第i个样本的特征向量

x_j^{(i)}:第i个样本的第j个特征值

 

原本的假设函数为:\small h_\Theta(x)=\Theta_0+\Theta_1*x

本例子的假设函数公式:\small h_\Theta(x)=\Theta_0+\Theta_1*x_1+\Theta_2*x_2+\Theta_3*x_3+\Theta_4*x_4

那么推广到一般假设函数公式为:\small h_\Theta(x)=\Theta_0+\Theta_1*x_1+...+\Theta_n*x_n

为了让形式更加统一,我们可以令x_0=1,从而一般假设函数公式为:

                                       \small h_\Theta(x)=\Theta_0*x_0+\Theta_1*x_1+...+\Theta_n*x_n

令特征x_0,x_1,x_2,...,x_n和参数\small \Theta_0,\Theta_1,\Theta_2,...,\Theta_n用向量表达为:

                                       \small x=\begin{bmatrix} x_0\\x_1\\ x_2 \\... \\ x_n\\ \end{bmatrix}\,\,\in \mathbb{R}^{n+1}         \small \Theta =\begin{bmatrix} \Theta_0\\ \Theta_1\\ \Theta_2\\ ...\\ \Theta_n\\ \end{bmatrix} \in \mathbb{R}^{n+1}

那么:

                                       \small h_\Theta(x)=\Theta_0*x_0+\Theta_1*x_1+...+\Theta_n*x_n=\Theta ^Tx

上式称为多元线性回归(Multivariate linear regression)。

 


2. 如何计算梯度下降算法中的多个参数?

假设函数:\small h_\Theta(x)=\Theta_0*x_0+\Theta_1*x_1+...+\Theta_n*x_n=\Theta ^Tx

参数:\small \Theta_0,\Theta_1,\Theta_2,...,\Theta_n  (可由向量\small \Theta表示)

代价函数:\small J(\Theta_0,\Theta_1,...,\Theta_n)=J(\Theta)=\frac{1}{2*m}\sum_{i=1}^{m}(h_\Theta(x^{(i)})-y^{(i)})^2

通用梯度下降算法:

\small Gradient descent:

        \small \, \, \, \, Repeat\{​

                \small \Theta_j:=\Theta_j-\alpha\frac{\partial }{\partial\Theta_j}J(\Theta_0,\Theta_1,...,\Theta_n)

        \small \}

当有多个参数时,我们可以把算法表达式扩展开,从而得到:

\small Gradient descent:

        \small \, \, \, \, Repeat\{​

                \small \Theta_0:=\Theta_0-\alpha*\frac{1}{m}\sum_{i=1}^{m}(h_\Theta(x^{(i)})-y^{(i)})^2*1

                \small \Theta_1:=\Theta_1-\alpha*\frac{1}{m}\sum_{i=1}^{m}(h_\Theta(x^{(i)})-y^{(i)})^2*x_1^{(i)}

                \small ......

                \small \Theta_j:=\Theta_j-\alpha*\frac{1}{m}\sum_{i=1}^{m}(h_\Theta(x^{(i)})-y^{(i)})^2*x_j^{(i)}

        \small \}(j=0,1,...,n)


3. 梯度下降算法中的实用技巧

(1)特征缩放(feature scaling)

在计算代价函数时,如果各特征之间的范围精度差距很大,那么求出来的代价函数的等高线会变得非常歪斜且瘦长,除了观测方面的差距外,在运行梯度下降算法时,可能会需要更多次的迭代才能找到全局最小值,因此收敛速度会慢很多。

例如,现在有两个特征\small x_1,x_2\small x_1为房子大小(范围为0~2000\small feet^2),\small x_2为房间数量(1~5个),那么画出来的等高线可能会如下图:

那么我们进行特征缩放(将各特征除以它在训练集中存在的大致最大值):

\small x_1=\frac{size(feet^2)}{2000}

\small x_2=\frac{number\, of\, bedrooms}{5}

注意:特征缩放的原则是让特征经过缩放后大致处于\small -1\leq x_i\leq1的范围(不必完全符合,但应大致为这个范围。例如\small -0.5\leq x_i\0.5可以,但\small -200\leq x_i\200不可以)

经过特征缩放后的代价函数的等高线图大致如下:

 

(2)均值归一化

均值归一化一般和特征缩放一起使用,与特征缩放的目的相同,也是为了减少收敛的迭代次数,更快的找到全局最小值。经过均值归一化后的特征值均值为0,范围为\small -0.5\leq x_i\leq 0.5。仍旧使用(1)的特征做例子如下:

\small x_1=\frac{size-1000}{2000}\, \, \, \, \, \, \, \,\,\,\, -0.5\leq x_1\leq0.5

\small x_2=\frac{\#bedrooms-2}{5}\, \, \, \, \, \, \, \,\,\,\, -0.5\leq x_2\leq0.5

可以得到一个一般的均值归一化表达式:

\small x_1=\frac{x_1-\mu_1}{s_1}

\small \mu_1:训练集中\small x_1的均值

\small s_1:训练集中\small x_1的最大值

 

(3)选择合适的学习率\alpha

上节中已经讲到如果学习率过高或过低,都不利于收敛,学习率过低则收敛过程中需要迭代的次数大大增加,而学习率过高则甚至有可能造成函数无法收敛,从而找不到全局最小值。

应该如何判断选择的学习率是否合适?

可以通过得到迭代次数与其相应得到的代价函数值的曲线关系观察得出,如下图是正常的迭代次数与代价函数值关系曲线图:

在上图中,可以看到迭代次数为300次和400次时得到的代价函数几乎没有差别,此时就可以认为已经得到了最小代价函数,从而得到相应的各参数值。 

并且由图也可以知道选择的学习率\alpha是比较合适的,如果选择的学习率比较小的话,迭代次数需要的更多,那么在迭代次数300到400之间可看到代价函数值仍在明显的下降;如果选择的学习率\alpha过大,那么得到的曲线则不规则,如下面俩图就是学习率过大,此时要选择更小的学习率。

 


4. 一定范围内可更方便解出参数\small \Theta的方法——正规方程

在现在已经学习的方法中,解出参数需要通过梯度下降算法中对含参公式求偏导(即本节问题2中给出的参数公式),然而当参数过多时,求偏导就变得较为麻烦。

举例来说,如果代价函数只含有一个参数,将特征设为常量\small a,b,c,表达式为:

\small J(\Theta )=a*\Theta^2+b*\Theta+c

那么求\small J(\Theta )最小值,需对\small \Theta求导并令其等于0:\small \frac{\mathrm{d} }{\mathrm{d} \Theta }J(\Theta )=0  便可求出\small \Theta的值。

而当参数增加为\small \Theta_0,\Theta_1,\Theta_2,...,\Theta_n,为了求每个参数,分别要令\small \frac{\partial }{\partial \Theta_j}J(\Theta_0,\Theta_1,...,\Theta_n)=0,依次求出各个偏导的等式,就变得较为复杂。

 

正规方程的目的就是为了解决求微积分(偏导)过于复杂的问题,如何根据正规方程求出参数可以用本节最开始的预测房价的例子给出。

房子大小(平方英尺)房间数量楼层数房子已使用年限房价
2104

5

145460
14163240232
15343230315
8522136178

分别用矩阵X表示表格中训练集的数据,用向量y表示表格中最后的房价值:

                                    \small X=\begin{bmatrix} 1 & 2104 & 5 &1 &45 \\ 1& 1416& 3 & 2 &40 \\ 1 & 1534 & 3 & 2 & 30\\ 1& 852& 2 & 1 & 36 \end{bmatrix}             \small y=\begin{bmatrix} 460\\ 232\\ 315\\ 178\\ \end{bmatrix}

将需要求的参数\small \Theta_0,\Theta_1,\Theta_2,\Theta_3,\Theta_4作为向量[向量表达等式],则:

                                    \small \Theta =(X^TX)^{-1}X^Ty

根据这个方程就可以一次性求出多个参数。

 

注意:但是正规方程并不是任何情况下都可以用的,尽管正规方程比起梯度下降算法中求偏导要方便、快速很多,但是正规方程不能应用在参数过多的情况下(参数数量在几千范围内可以使用,但是参数量上万时应开始不再使用正规方程),参数过多会导致其计算速度明显下降,而梯度下降算法在参数量很多时的工作效果仍旧比较可观,所以参数过多还是需要使用梯度下降算法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

音无八重

谢谢老板!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值