欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

吴恩达机器学习(第四章)——多变量线性回归

发布时间:2025/3/21 编程问答 36 豆豆
生活随笔 收集整理的这篇文章主要介绍了 吴恩达机器学习(第四章)——多变量线性回归 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

第四章-多变量线性回归

文章目录

  • 第四章-多变量线性回归
      • 多功能
      • 多元梯度下降法
        • 梯度下降算法
        • 特征缩放
        • 学习率
      • 特征与多项式回归
      • 正规方程
        • 正规方程的概念
        • 公式的推导
        • 梯度下降法 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...xnRn+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...θnRn+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=1m(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:=θ0am1i=1m(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:=θ1am1i=1m(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:=θ2am1i=1m(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=2000size1000 ;卧室的数量取值在1~5之间,x2=bedroom−25{{x}_{2}}=\frac{{bedroom}-{2}}{{5}}x2=5bedroom2 。其中−0.5≤x1≤0.5-0.5≤x_{1}≤0.50.5x10.5−0.5≤x2≤0.5-0.5≤x_{2}≤0.50.5x20.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}103),这个测试就判断函数已经收敛。

    但是通常要选择一个合适的阈值 ε 是非常困难的,所以通过上述的图像判断更加清晰可靠。

    如果从图像中看到代价函数 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=frontagedepth=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=1m(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 ,其中 XXXmmmnnn 列的矩阵( mmm 为样本个数,nnn 为特征个数),θ\thetaθnnn 行 1 列的矩阵,yyymmm 行 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(θTXTyT)(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θθTXTyyTXθ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)T0)

    =12(2XTXθ−XTy−XTy−0)=\frac{1}{2}\left(2{{X}^{T}}X\theta -{{X}^{T}}y -{{X}^{T}}y -0 \right)=21(2XTXθXTyXTy0)

    =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) 方法(以后会提到)
  • 在大多数线性回归问题中,出现不可逆矩阵的情况极少发生,通常情况下我们都能通过正规方程顺利解决问题。

    《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读

    总结

    以上是生活随笔为你收集整理的吴恩达机器学习(第四章)——多变量线性回归的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。