【成长笔记】Linear Regression with Multiple Variables

本文介绍了多元线性回归如何处理多个影响因素,通过梯度下降法和正规方程法进行求解。讨论了特征缩放的重要性以及学习速率的选择,分析了两种方法在不同数据量下的适用性。
摘要由CSDN通过智能技术生成

上一篇文章中,我们对房子的价格预测进行了一个很理想化的处理,我们给他的假设是,房子价格只受房子大小影响。然而现实生活中,真的会这么理想化吗?答案当然是,不可能的啦哈哈。房子的价格还受很多其他因素的影响,比如房子的楼层,房子所处地的交通状况,房子是否向阳等等因素。我们可以对这些因素进行量化处理,譬如打分的形式等等。那么这些影响房子价格的因素就都可以转换为数学的形式了。那么,我们是不是可以找出这些影响因素和价格之间的关系呢?

既然我们可以通过梯度下降法找到房子价格和房子大小间的线性关系,那么,我们是不是也可以找到价格对多个影响因素之间的线性关系呢?换句话说,我们能不能找到目标值与特征值之间的函数关系呢?

ng的第二周的课程清楚地讲明了这些。话不多说,Let's go!

--------------------我是萌萌的分割线-------------------------

上文中,我们给出的函数是这样子的: h(x) = \theta_{0} + \theta_{1}x ,这当然没错,因为我们给出的假设就是只受一个因素影响。然而,现实是存在多个因素影响的,所以,我们需要给这个式子进行改写,如下:

h_{\theta}(x) = \theta_{0}x_{0} + \theta_{1}x_{1}+ \theta_{2}x_{2}……+ \theta_{n}x_{n}

其中, x_{i}(for i=1,2,3,...n) 表示第i个特征(影响因素)。

一般,我们默认 x_{0}=1 ,即原式可写为: h_{\theta}(x) = \theta_{0} + \theta_{1}x_{1}+ \theta_{2}x_{2}……+ \theta_{n}x_{n} ,现在我们把 \thetax 理解为向量,那么原式可以简化为: h_\theta(x) = \theta^{T}x ,这么理解困难的话,那么这么看就应该清晰些吧: h_\theta(x) =\left[ \begin{array}{ccc} \theta_{0} & \theta_{1} & \theta_{2} &...&\theta_{n} \end{array} \right]\left[ \begin{array}{ccc} x_{0} \\ x_{1} \\ x_{2} \\...\\x_{n} \end{array} \right]= \theta^{T}x

上一篇文章中,我们利用梯度下降法重复计算以下过程:

\theta(j) = \theta(j) - \alpha\frac{\partial}{\partial\theta(j)}J(\theta_{0},\theta_{1}) (for j = 0and j = 1)

得到:

\theta_{0}= \theta_{0}- \alpha\frac{d}{d\theta(0)}J(\theta_{0},\theta_{1}) \rightarrow\theta_{0} - \alpha\frac{1}{m}\sum_{i=1}^{m}{(\theta_{0} + \theta_{1}x_{i} -y_{i})}

\theta_{1}= \theta_{1}- \alpha\frac{d}{d\theta(0)}J(\theta_{0},\theta_{1}) \rightarrow\theta_{1} - \alpha\frac{1}{m}\sum_{i=1}^{m}{(\theta_{1} + \theta_{1}x_{i} -y_{i})x_{i}}

\theta 不再只是两个时,同理可推(具体推理过程省略,大家可自己演算下):

\theta_{j}= \theta_{j} - \alpha\frac{1}{m}\sum_{i=1}^{m}{(h_{\theta}(x^{i}) -y^{i})x_{j}^{i}}(for j = 0,1,2,...,n)

注意: \theta 必须全部同时更新!

这样一直重复计算直至 \theta 小于某个阈值结束,即完成了多元线性回归的的计算了,我们也就可以根据房价的多个特征去预测房价了。

ng在讲述梯度下降时,提出了Feature Scaling(特征缩放)的概念,什么意思呢?因为现实生活中,印象因素的值的范围可能是不同的,比如 x_{1} 定义域为[0.001,0.002], x_{2} 定义域为[1000000,10000000],在使用梯度下降时,会使得结果难以收敛。此时我们需要对特征值进行处理,个人理解,feature scaling就是我们通常理解的归一化处理,将每个特征值的范围处理至[-1,1]之间。这样做有什么好处呢?个人初步的想法是,可以消除量纲的影响,ng说对特征值进行feature scaling可以有效地快速梯度下降(中间迭代的次数会降低)。

那么,如何进行特征缩放呢?很简单,对于每个x执行以下处理:

x_{i} = \frac{x_{i}-\mu_{i}}{s_{i}} ( \mu_{i} = mean(x_{i}), s_{i} = max(x_{i})-min(x_{i}) )

举个栗子,比如说,一组房子的价格x = [1000, 2000, 3000, 4000, 5000]:

x_{i} = \frac{x_{i}-3000}{4000}

则,x = [-0.5, -0.25, 0, 0.25, 0.5],这么一看,是不是这个处理后的数据集我们更好进行计算呢?

那么,影响梯度下降的效果的还有哪个呢?对, \alpha ,学习速率的大小的选取也是很关键的,如果选取的 \alpha 选的过大的话,没准就“梯度上升”了,想要收敛是很困难的,如果选取过小,则迭代的次数会非常多,难以收敛。所以,大多数时候,我们可以借助图像来直观判断 \alpha 的较佳取值。嗯,超前的个人理解,后期应该会涉及到调参,像交叉验证之类的肯定会讲到的啦。

嗯,以上梯度下降大致就讲完了,ng本次课程还讲解了另一个方法Normal Equation(正规方程),什么意思呢?记得我们初中学习数学的时候,如何求解方程呢?我们通常是选择求导的形式,当导数=0时,就是我们求解的值,具体原理,翻初中课本或者温习大学微积分课本。同理,对于多元线性回归,除了梯度下降法来求解,还可以利用Normal Equation法来求解,对函数的每一个参数进行求导。

举个栗子哈,以下是一组房子的数据集:

如上图,我们将上图数据转换为如下矩阵表现,其中自动将 x_{0} 设置为1:

X = \left[ \begin{array}{ccc} 1 & 2104 & 5&1&45 \\ 1 & 1416 &3&2&40 \\ 1 & 1534& 3&2&30 \\1&852&2&1&36\\ \end{array} \right]y = \left[ \begin{array}{ccc} 460 \\ 232 \\315\\178\end{array} \right]

求解 \theta

\theta =(X^{T}X)^{-1}X^{T}y

正规方程法和梯度下降法都可以用来进行多元线性回归的求解,所以我们可能会存在疑惑,那么,究竟什么时候我们用正规方程法,什么时候我们用梯度下降法呢?

别急,我们来分析下这两个方法的优劣:

  • 正规方程法。优点:不需要调整学习速率参数 \alpha ,不需要迭代;缺点:计算的时间复杂度达到了 O(n^{3}) ,数据量过大的时候,计算会较慢。
  • 梯度下降法。优点:计算的时间复杂度达到了 O(kn^{2}) ,数据量大的时候,计算效率也良好;缺点:需要调参 \alpha ,需要多次迭代。

可以看出,这两个方法的优缺点恰好是相对的,所以,如果是数据量小的时候,比如在10000以下的,正规方程法最好不过了,可如果是百万数据的数据集,正规方程法处理会非常慢,此时梯度下降法就n和油优势了。

而且正规方程会有一定的局限性,因为涉及到方程的逆运算,嗯,具体留待以后解释,带着问题思考。

-------------------我是萌萌的分割线------------------------

ng的课程开始深入了,一堆全英文资料,难死我这个英语战5渣,欲哭无泪。没法子,咬咬牙,啃下去,我学习我快乐,哦耶,哈哈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值