吴恩达机器学习(第四章)——多变量线性回归
第四章-多变量线性回归
文章目录
- 第四章-多变量线性回归
- 多功能
- 多元梯度下降法
- 梯度下降算法
- 特征缩放
- 学习率
- 特征与多项式回归
- 正规方程
- 正规方程的概念
- 公式的推导
- 梯度下降法 VS 正规方程
- 奇异矩阵的解决办法
多功能
我们探讨了单变量/特征的回归模型,现在我们对房价模型增加更多的特征,楼层数、卧室数、使用年数等会影响房屋的价格,构成一个含有多个变量的模型,模型中的特征为(x1,x2,x3,...,xn)\left( {x_{1}},{x_{2}},{x_{3}}, ... ,{x_{n}} \right)(x1,x2,x3,...,xn)。
我们引入一系列新的标记:
- nnn 代表特征的数量
- x(i){x^{\left( i \right)}}x(i) 代表第 iii 个训练实例,是特征矩阵中的第 iii 行,是一个向量(vector)。比如上图的 x(2)=[14163240]{x}^{(2)}\text{=}\begin{bmatrix} 1416 \\\ 3 \\\ 2 \\\ 40 \end{bmatrix}x(2)=⎣⎢⎢⎡1416 3 2 40⎦⎥⎥⎤
- xj(i){x}_{j}^{\left( i \right)}xj(i) 代表特征矩阵中第 iii 行的第 jjj 个特征,也就是第 iii 个训练实例的第 jjj 个特征。比如上图的 x2(2)=3x_{2}^{\left( 2 \right)}=3x2(2)=3
单个特征变量的线性回归假设为 hθ(x)=θ0+θ1xh_\theta \left( x \right)=\theta_{0} + \theta_{1}xhθ(x)=θ0+θ1x
多个特征变量的线性回归假设为 hθ(x)=θ0+θ1x1+θ2x2+...+θnxnh_{\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}}hθ(x)=θ0+θ1x1+θ2x2+...+θnxn ,公式中有 n+1n+1n+1 个参数和 nnn 个变量
为了使得公式能够简化一些,引入 x0=1x_{0}=1x0=1,则公式转化为:hθ(x)=θ0x0+θ1x1+θ2x2+...+θnxnh_{\theta} \left( x \right)={\theta_{0}}{x_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}}hθ(x)=θ0x0+θ1x1+θ2x2+...+θnxn
现在,特征向量 xxx 是一个从 0开始标记的 n+1n+1n+1 维的向量,x=[x0x1x2...xn]∈Rn+1x=\left[ \begin{matrix} {{x}_{0}} \\ {{x}_{1}} \\ {{x}_{2}} \\ {...} \\ {{x}_{n}} \\\end{matrix} \right]∈R^ { n+1}x=⎣⎢⎢⎢⎢⎡x0x1x2...xn⎦⎥⎥⎥⎥⎤∈Rn+1,
同时把参数 θθθ 也看做一个向量 θ=[θ0θ1θ2...θn]∈Rn+1\theta=\left[ \begin{matrix} {{\theta}_{0}} \\ {{\theta}_{1}} \\ {{\theta}_{2}} \\ {...} \\ {{\theta}_{n}} \\\end{matrix} \right]∈R^ { n+1}θ=⎣⎢⎢⎢⎢⎡θ0θ1θ2...θn⎦⎥⎥⎥⎥⎤∈Rn+1
那么假设公式可以写为 hθ(x)=θ0x0+θ1x1+θ2x2+...+θnxn=θTXh_{\theta} \left( x \right)={\theta_{0}}{x_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}}={\theta^{T}}Xhθ(x)=θ0x0+θ1x1+θ2x2+...+θnxn=θTX,其中x0=1x_{0}=1x0=1,上标TTT代表矩阵转置。
用多个特征量或变量来预测y,这就是多元线性回归( Multiple linear regression)
多元梯度下降法
梯度下降算法
与单变量线性回归类似,在多变量线性回归中,我们也构建一个代价函数,这个代价函数是所有建模误差的平方和,即:J(θ0,θ1...θn)=12m∑i=1m(hθ(x(i))−y(i))2J\left( {\theta_{0}},{\theta_{1}}...{\theta_{n}} \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( h_{\theta} \left({x}^{\left( i \right)} \right)-{y}^{\left( i \right)} \right)}^{2}}}J(θ0,θ1...θn)=2m1i=1∑m(hθ(x(i))−y(i))2,其中hθ(x)=θ0x0+θ1x1+θ2x2+...+θnxnh_{\theta} \left( x \right)={\theta_{0}}{x_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}}hθ(x)=θ0x0+θ1x1+θ2x2+...+θnxn
多变量线性回归的批量梯度下降算法为:
当n>=1n>=1n>=1时,
θ0:=θ0−a1m∑i=1m(hθ(x(i))−y(i))x0(i){{\theta }_{0}}:={{\theta }_{0}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}})}x_{0}^{(i)}θ0:=θ0−am1i=1∑m(hθ(x(i))−y(i))x0(i)
θ1:=θ1−a1m∑i=1m(hθ(x(i))−y(i))x1(i){{\theta }_{1}}:={{\theta }_{1}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}})}x_{1}^{(i)}θ1:=θ1−am1i=1∑m(hθ(x(i))−y(i))x1(i)
θ2:=θ2−a1m∑i=1m(hθ(x(i))−y(i))x2(i){{\theta }_{2}}:={{\theta }_{2}}-a\frac{1}{m}\sum\limits_{i=1}^{m}{({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}})}x_{2}^{(i)}θ2:=θ2−am1i=1∑m(hθ(x(i))−y(i))x2(i)
我们开始随机选择一系列的参数值,计算所有的预测结果后,再给所有的参数一个新的值,如此循环直到收敛。
Python 代码:
import numpy as npdef computeCost(X, y, theta):inner = np.power(((X * theta.T) - y), 2)return np.sum(inner) / (2 * len(X))
特征缩放
在我们面对多维特征问题的时候,如果你能确保这些特征都处在一个相近的范围,这样梯度下降就能更快的收敛,这就是特征缩放(Feature Scaling)
例如有两个特征值:
- x1 表示房屋面积的大小,取值在0~2000之间
- x2 表示卧室的数量,取值在1~5之间。
以两个参数分别为横纵坐标,绘制代价函数的等高线图能,看出图像会显得很扁,梯度下降算法需要非常多次的迭代才能收敛。解决的方法是尝试将所有特征的尺度都尽量缩放到-1到1之间。
通常,执行特征缩放的目的是将特征的取值约束到-1到+1的范围内。(-1,+1),这个范围可以灵活的选择,只要不是太大或太小是可接受的。
在特征缩放中,有时会进行称为 均值归一化(Mean normalization) 的工作。如果有一个特征 xn−μnx_{n}-{\mu}_{n}xn−μn,用来替换 xnx_{n}xn,让特征值具有为0的平均值。
例如,房屋的面积取值在0~2000之间,x1=size−10002000{{x}_{1}}=\frac{{size}-{1000}}{{2000}}x1=2000size−1000 ;卧室的数量取值在1~5之间,x2=bedroom−25{{x}_{2}}=\frac{{bedroom}-{2}}{{5}}x2=5bedroom−2 。其中−0.5≤x1≤0.5-0.5≤x_{1}≤0.5−0.5≤x1≤0.5,−0.5≤x2≤0.5-0.5≤x_{2}≤0.5−0.5≤x2≤0.5 。注意这里不能应用于 x0x_{0}x0 ,因为x0x_{0}x0 永远为 1。
更一般的规律:xj(i)=xj(i)−μnsn{x}_{j}^{\left( i \right)}=\frac{{{x}_{j}^{\left( i \right)}}-{{\mu}_{n}}}{{{s}_{n}}}xj(i)=snxj(i)−μn 。其中 μn{\mu_{n}}μn是特征xj(i){x}_{j}^{\left( i \right)}xj(i)的平均值 avg(xjx_{j}xj) ;sn{s_{n}}sn是该特征值的范围 max(xjx_{j}xj) - min(xjx_{j}xj) ,也可以把它设置为标准差。
特征缩放不必太精准,它只是为了让梯度下降能够运行的更快一点,让迭代的次数更少一点。
学习率
梯度下降算法收敛所需要的迭代次数根据模型的不同而不同,我们不能提前预知,我们可以绘制迭代次数和代价函数的图表来观测算法在何时趋于收敛。
横轴表示的是迭代次数,纵轴表示的是代价函数每次迭代之后的结果。
介绍一种自动测试是否收敛的方法,如果代价函数 J(θ)J({\theta})J(θ) 一步迭代后的下降小于某个阀值 ε(一般ε ≤ 10−310^{-3}10−3),这个测试就判断函数已经收敛。
但是通常要选择一个合适的阈值 ε 是非常困难的,所以通过上述的图像判断更加清晰可靠。
如果从图像中看到代价函数 J(θ)J({\theta})J(θ) 一直在上升或者持续地先下降又上升,这意味着我们要选择更小的学习率 ααα
数学家已经证明,只要选择足够小的学习率 ααα ,那么每次迭代之后的代价函数 J(θ)J({\theta})J(θ) 都会下降。
总结:
- 如果 α 太小,即学习速率太小,梯度下降法会收敛得很慢
- 如果 α 太大,梯度下降法每次下降很快,可能会越过最小值,甚至可能无法收敛
- 通常可以考虑尝试这些学习率:α=0.01,0.03,0.1,0.3,1\alpha=0.01, 0.03, 0.1, 0.3, 1α=0.01,0.03,0.1,0.3,1
特征与多项式回归
房价问题
hθ(x)=θ0+θ1×frontage+θ2×depthh_{\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}\times{frontage}+{\theta_{2}}\times{depth}hθ(x)=θ0+θ1×frontage+θ2×depth
x1=frontage{x_{1}}=frontagex1=frontage(临街宽度),x2=depth{x_{2}}=depthx2=depth(纵向深度),x=frontage∗depth=areax=frontage*depth=areax=frontage∗depth=area(面积),则:hθ(x)=θ0+θ1x{h_{\theta}}\left( x \right)={\theta_{0}}+{\theta_{1}}xhθ(x)=θ0+θ1x。
线性回归并不适用于所有数据,有时我们需要曲线来适应我们的数据,比如一个二次方模型:hθ(x)=θ0+θ1x1+θ2x22h_{\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}^2}hθ(x)=θ0+θ1x1+θ2x22
或者三次方模型: hθ(x)=θ0+θ1x1+θ2x22+θ3x33h_{\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}^2}+{\theta_{3}}{x_{3}^3}hθ(x)=θ0+θ1x1+θ2x22+θ3x33
通常我们需要先观察数据然后再决定准备尝试怎样的模型。 另外,我们可以令:x2=x22,x3=x33{{x}_{2}}=x_{2}^{2},{{x}_{3}}=x_{3}^{3}x2=x22,x3=x33,从而将模型转化为线性回归模型。
根据函数图形特性,我们还可以使:hθ(x)=θ0+θ1(size)+θ2(size)2{{{h}}_{\theta}}(x)={{\theta }_{0}}\text{+}{{\theta }_{1}}(size)+{{\theta}_{2}}{{(size)}^{2}}hθ(x)=θ0+θ1(size)+θ2(size)2
或者:hθ(x)=θ0+θ1(size)+θ2size{{{h}}_{\theta}}(x)={{\theta }_{0}}\text{+}{{\theta }_{1}}(size)+{{\theta }_{2}}\sqrt{size}hθ(x)=θ0+θ1(size)+θ2size
注意:如果我们采用多项式回归模型,在运行梯度下降算法前,特征缩放非常有必要。
正规方程
正规方程的概念
正规方程提供了一种求θ的解析解法,可以不需要通过迭代一次性求得解,一步得到最优值。
假设对于一个代价函数:J(θ)=aθ2+bθ+cJ ( \theta)=a{\theta}^{2} + b{\theta} + cJ(θ)=aθ2+bθ+c,可以通过求导数的方法得到使 J(θ)J(\theta)J(θ) 的最小点 θθθ 值。
正规方程求最小值的方式则是让代价函数的导数为0,求出θ值。
假设我们的训练集特征矩阵为 XXX(包含了 x0=1{{x}_{0}}=1x0=1)并且我们的训练集结果为向量 yyy,则利用正规方程解出向量 θ=(XTX)−1XTy\theta ={{\left( {X^T}X \right)}^{-1}}{X^{T}}yθ=(XTX)−1XTy 。
上标T代表矩阵转置,上标-1 代表矩阵的逆。
正规方程的 python 实现:
import numpy as npdef normalEqn(X, y):theta = np.linalg.inv(X.T@X)@X.T@y #X.T@X等价于X.T.dot(X)return theta
公式的推导
θ=(XTX)−1XTy\theta ={{\left( {X^{T}}X \right)}^{-1}}{X^{T}}yθ=(XTX)−1XTy 的推导过程:
J(θ)=12m∑i=1m(hθ(x(i))−y(i))2J\left( \theta \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( {h_{\theta}}\left( {x^{(i)}} \right)-{y^{(i)}} \right)}^{2}}}J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2
其中:hθ(x)=θTX=θ0x0+θ1x1+θ2x2+...+θnxn{h_{\theta}}\left( x \right)={\theta^{T}}X={\theta_{0}}{x_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}}hθ(x)=θTX=θ0x0+θ1x1+θ2x2+...+θnxn
将向量表达形式转为矩阵表达形式,则有J(θ)=12(Xθ−y)2J(\theta )=\frac{1}{2}{{\left( X\theta -y\right)}^{2}}J(θ)=21(Xθ−y)2 ,其中 XXX 为 mmm 行 nnn 列的矩阵( mmm 为样本个数,nnn 为特征个数),θ\thetaθ 为 nnn 行 1 列的矩阵,yyy 为 mmm 行 1 列的矩阵,对J(θ)J(\theta )J(θ)进行如下变换
J(θ)=12(Xθ−y)T(Xθ−y)J(\theta )=\frac{1}{2}{{\left( X\theta -y\right)}^{T}}\left( X\theta -y \right)J(θ)=21(Xθ−y)T(Xθ−y)
=12(θTXT−yT)(Xθ−y)=\frac{1}{2}\left( {{\theta }^{T}}{{X}^{T}}-{{y}^{T}} \right)\left(X\theta -y \right)=21(θTXT−yT)(Xθ−y)
=12(θTXTXθ−θTXTy−yTXθ−yTy)=\frac{1}{2}\left( {{\theta }^{T}}{{X}^{T}}X\theta -{{\theta}^{T}}{{X}^{T}}y-{{y}^{T}}X\theta -{{y}^{T}}y \right)=21(θTXTXθ−θTXTy−yTXθ−yTy)
接下来对J(θ)J(\theta )J(θ)偏导,需要用到以下几个矩阵的求导法则:
dAXdX=AT\frac{dAX}{dX}={{A}^{T}}dXdAX=AT
dXTAdX=A\frac{d{{X}^{T}}A}{dX}=AdXdXTA=A
dXTAXdX=2AX\frac{d{{X}^{T}}AX}{dX}=2AXdXdXTAX=2AX
所以有:
∂J(θ)∂θ=12(2XTXθ−XTy−(yTX)T−0)\frac{\partial J\left( \theta \right)}{\partial \theta }=\frac{1}{2}\left(2{{X}^{T}}X\theta -{{X}^{T}}y -{}({{y}^{T}}X )^{T}-0 \right)∂θ∂J(θ)=21(2XTXθ−XTy−(yTX)T−0)
=12(2XTXθ−XTy−XTy−0)=\frac{1}{2}\left(2{{X}^{T}}X\theta -{{X}^{T}}y -{{X}^{T}}y -0 \right)=21(2XTXθ−XTy−XTy−0)
=XTXθ−XTy={{X}^{T}}X\theta -{{X}^{T}}y=XTXθ−XTy
令∂J(θ)∂θ=0\frac{\partial J\left( \theta \right)}{\partial \theta }=0∂θ∂J(θ)=0,
则有θ=(XTX)−1XTy\theta ={{\left( {X^{T}}X \right)}^{-1}}{X^{T}}yθ=(XTX)−1XTy
梯度下降法 VS 正规方程
梯度下降 | 正规方程 |
---|---|
需要选择学习率 α\alphaα | 不需要 α\alphaα |
需要多次迭代 | 一次运算即可 |
当特征数量 nnn 大时也能较好适用 | 需要计算(XTX)−1{{\left( {{X}^{T}}X \right)}^{-1}}(XTX)−1 ,如果特征数量n较大则运算代价大,速度慢 |
适用于各种类型的模型 | 只适用于线性模型,不适合逻辑回归模型等其他模型 |
选择梯度下降法还是正规方程法,我们可以根据特征量n的多少来决定。只要特征变量的数目并不大,标准方程是一个很好的计算参数的替代方法。具体地说,只要特征变量数量小于一万,通常使用标准方程法,而不使用梯度下降法。
根据具体的问题,以及你的特征变量的数量,这两种算法都是值得学习的。
奇异矩阵的解决办法
在线性代数的知识中,有些矩阵可逆,而有些矩阵不可逆。我们称那些不可逆矩阵为 奇异矩阵 或 退化矩阵。
对于那些不可逆的矩阵,正规方程方法是不能用的。
矩阵不可逆的原因可能有:
- 特征之间不独立,如同时包含英尺为单位的尺寸和米为单位的尺寸两个特征
- 特征数量大于训练集的数量
对于第一类原因,即特征之间不独立的情况,尽量想办法让特征之间相互独立,比如统一单位 等。
对于第二类原因,即特征量大于训练集数目的情况,提出两种解决方法:
- 删除一些多余的或者不会影响到正规方程的特征
- 使用 正则化(Regularization) 方法(以后会提到)
在大多数线性回归问题中,出现不可逆矩阵的情况极少发生,通常情况下我们都能通过正规方程顺利解决问题。
吴恩达机器学习(第四章)——多变量线性回归相关推荐
- 吴恩达机器学习python作业之多变量线性回归
建议先看单变量线性回归再看多变量线性回归哦. 参考链接: (7条消息) 吴恩达|机器学习作业1.1多变量线性回归_学吧学吧终成学霸的博客-CSDN博客 数据集:一共三列,左边两列是自变量x,最右边一列 ...
- 吴恩达|机器学习作业1.1多变量线性回归
1.1.多变量线性回归 1)题目: 在本部分的练习中,需要预测房价,输入变量有两个特征,一是房子的面积,二是房子卧室的数量:输出变量是房子的价格. 数据链接: https://pan.baidu.co ...
- 吴恩达机器学习笔记二之多变量线性回归
本节目录: 多维特征 多变量梯度下降 特征缩放 学习率 正规方程 1.多维特征 含有多个变量的模型,模型中的特征为(x1,x2,-xn), 比如对房价模型增加多个特征 这里,n代表特征的数量, x(i ...
- 吴恩达机器学习个人笔记03——多变量线性回归
目录 3.1 多维特征 3.2 多变量梯度下降 3.3 梯度下降法实践1-特征缩放 3.4 梯度下降法实践2-学习率 3.5 特征和多项式回归 3.6 正规方程 3.7 正规方程及不可逆性 下节将介绍 ...
- 吴恩达机器学习第四章
4.1 多维特征 参考视频: 4 - 1 - Multiple Features (8 min).mkv 前几章,我们学习了单变量/特征的回归模型,现在我们对房价模型增加更多的特征, 例如房间数楼层等 ...
- 【深度之眼吴恩达机器学习第四期】笔记(十二)
目录 大规模学习 小批量梯度下降 在线学习 数据并行 应用举例 人工合成数据 上限分析 总结 大规模学习 现在机器学习的性能比过去的好,其中一个原因就是现在拥有大量的数据. 而且其中一种获得高性能机器 ...
- 吴恩达机器学习(第一章)——初识机器学习
第一章 初识机器学习 文章目录 第一章 初识机器学习 前言 机器学习定义 机器学习算法 监督学习 无监督学习 学习工具 前言 Machine Learning: Grewout of work in ...
- 吴恩达机器学习(四)逻辑回归(二分类与多分类)
目录 0. 前言 1. 假设函数(Hypothesis) 2. 决策边界(Decision Boundary) 3. 代价函数(Cost Funciton) 4. 梯度下降(Gradient Desc ...
- 吴恩达机器学习(二)多元线性回归(假设、代价、梯度、特征缩放、多项式)
目录 0. 前言 1. 假设函数(Hypothesis) 2. 代价函数(Cost Function) 3. 梯度下降(Gradient Descent) 4. 特征缩放(Feature Scalin ...
- 干货|机器学习零基础?不要怕,吴恩达机器学习课程笔记2-多元线性回归
吴恩达Coursera机器学习课系列笔记 课程笔记|吴恩达Coursera机器学习 Week1 笔记-机器学习基础 1 Linear Regression with Multiple Variable ...
最新文章
- AI已能按音乐风格填词,周杰伦又有御用作词了?|在线可玩
- python 查看安装的第三方库的版本号
- Spring AOP 简介以及简单用法
- qt中文件读取的方法(新手入门必看)
- Microsoft Speech SDK 5.1
- linux 下安装JDK
- 60-150-046-使用-Sink-Flink落HDFS数据按事件时间分区解决方案
- jquery easyUI第一篇【介绍、入门、使用常用的组件】
- java 泛型的类型擦除和桥方法
- CodeReview 常见代码问题( 上 )
- [导入]如何在标题栏上增加按钮
- 苹果侧边滑动返回_苹果怎么设置滑动返回
- 身份证上男女识别--非线性问题02
- 计算机flash拉开效果,使用Flash制作卷轴展开效果
- 云缓存哪家便宜_云服务器哪家最便宜
- kali linux 安装lxde_【kaliLinux】安装
- 学习水泵相关知识:基本参数、特性曲线及工况的确定
- 龙芯开始支持主流开发栈: Java, .Net以及NodeJS
- 自己写了一个利用python判断鼠标是否移动的代码
- bootice添加linux引导,bootice怎么添加win10引导_网站服务器运行维护
热门文章
- 操作系统:哲学家进餐问题
- Nginx:安装+测试
- mongodb 索引去重_PostgreSQL13新特性解读Btree索引去重Deduplication
- 计算机基础及ms office应用,全国计算机等级考试一级计算机基础及MS Office应用模拟练习系统...
- html文本长度不一样的对齐,关于html:文本在中间不对齐
- “东数西算”工程正式启动,全面解读来了!
- HighNewTech:横向、纵向动图查看《Why资本寒冬》——根据中国四大行每年(2004年~2018年)贷款主要流向来看当下的资本寒冬
- Windows系统下使用protobuf:protobuf的简介、安装、使用方法之详细攻略
- Python中单线程、多线程与多进程的效率对比实验
- 算法训练_ALGO14_回文数