线性回归及logistic回归详解

时间: 2023-07-29 admin 互联网

线性回归及logistic回归详解

线性回归及logistic回归详解

机器学习

  • 线性回归
  • logistic回归

(主要参考 吴恩达机器学习)

线性回归

线性回归是机器学习中比较基本的一个算法。其基本思想大致可以理解为给定一个数据集,通过线性回归得到一条曲线,尽可能地去拟合这个数据集。如下图所示:
那么,如何得到这样一条拟合曲线呢?一个自然而然的想法是建立一个输入 x x x到输出 y ^ \hat{y} y^​的拟合函数,使得这个函数的输出 y ^ \hat{y} y^​能够尽可能地接近真实值 y y y。
通常,这个拟合函数可以被定义为:
h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n = θ T x h_{\theta}\left(x\right)=\theta_0+\theta_1x_1+\theta_2x_2+\dots+\theta_nx_n=\boldsymbol{\theta}^T\boldsymbol{x} hθ​(x)=θ0​+θ1​x1​+θ2​x2​+⋯+θn​xn​=θTx
其中, θ = [ θ 0 , θ 1 , … , θ n ] T \boldsymbol{\theta}=\left[\theta_0,\theta_1,\dots,\theta_n\right]^T θ=[θ0​,θ1​,…,θn​]T,表示参数的集合(线性回归的目的就是找到一组合适的参数,去拟合给定的数据集), x = [ x 0 , x 1 , … , x n ] T \boldsymbol{x}=\left[x_0,x_1,\dots,x_n\right]^T x=[x0​,x1​,…,xn​]T表示数据的特征,并且通常 x 0 = 1 x_0=1 x0​=1。例如,预测房价随房子面积变化的趋势,房子的面积,楼层,房间数等都可作为数据的特征,分别用 x 1 , x 2 , x 3 , … x_1,x_2,x_3,\dots x1​,x2​,x3​,…表示。
因此,我们的任务就是去寻找这一组合适的 θ \boldsymbol{\theta} θ去构建上述拟合函数。这样我们就可以引入机器学习中另外一个常见的名词:代价函数。其主要作用就是衡量拟合函数的输出 y ^ \hat{y} y^​和真实值 y y y之间的偏差(值越小,说明越接近真实值)。在线性回归中,代价函数的定义为:
J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J\left(\boldsymbol{\theta}\right)=\frac{1}{2m}\sum_{i=1}^m\left(h_\boldsymbol{\theta}\left(x^{\left(i\right)}\right)-y^{\left(i\right)}\right)^2 J(θ)=2m1​i=1∑m​(hθ​(x(i))−y(i))2
其中, m m m表示训练集的数量, x ( i ) x^{\left(i\right)} x(i)的上标仅仅表示第 i i i个训练数据。为了找到 θ \boldsymbol{\theta} θ,目标就转换为了 m i n θ J ( θ ) \mathop{min}\limits_{\theta}J\left(\theta\right) θmin​J(θ)。
下一步就是如何求 m i n θ J ( θ ) \mathop{min}\limits_{\theta}J\left(\boldsymbol{\theta}\right) θmin​J(θ)。我们最熟悉的做法就是梯度下降了,具体做法为:
r e p e a t u n t i l c o n v e r g e n c e θ j ≔ θ j − α ∂ ∂ θ j J ( θ ) repeat\ until\ convergence\ \theta_j\coloneqq\theta_j-\alpha\frac{\partial}{\partial\theta_j}J\left(\boldsymbol{\theta}\right) repeat until convergence θj​:=θj​−α∂θj​∂​J(θ)
针对每一个具体的 θ j \theta_j θj​,其具体的更新公式为:
θ 0 ≔ θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x 0 ( i ) θ 1 ≔ θ 1 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x 1 ( i ) θ 2 ≔ θ 2 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x 2 ( i ) … θ n ≔ θ n − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x n ( i ) \theta_0\coloneqq\theta_0-\alpha\frac{1}{m}\sum_{i=1}^m\left(h_\theta\left(x^{\left(i\right)}\right)-y^{\left(i\right)}\right)\cdot x_0^{\left(i\right)}\\ \theta_1\coloneqq\theta_1-\alpha\frac{1}{m}\sum_{i=1}^m\left(h_\theta\left(x^{\left(i\right)}\right)-y^{\left(i\right)}\right)\cdot x_1^{\left(i\right)}\\ \theta_2\coloneqq\theta_2-\alpha\frac{1}{m}\sum_{i=1}^m\left(h_\theta\left(x^{\left(i\right)}\right)-y^{\left(i\right)}\right)\cdot x_2^{\left(i\right)}\\\dots\\ \theta_n\coloneqq\theta_n-\alpha\frac{1}{m}\sum_{i=1}^m\left(h_\theta\left(x^{\left(i\right)}\right)-y^{\left(i\right)}\right)\cdot x_n^{\left(i\right)} θ0​:=θ0​−αm1​i=1∑m​(hθ​(x(i))−y(i))⋅x0(i)​θ1​:=θ1​−αm1​i=1∑m​(hθ​(x(i))−y(i))⋅x1(i)​θ2​:=θ2​−αm1​i=1∑m​(hθ​(x(i))−y(i))⋅x2(i)​…θn​:=θn​−αm1​i=1∑m​(hθ​(x(i))−y(i))⋅xn(i)​
重复上述过程,直到算法收敛。最终,我们就得到了一组合适的参数 θ ∗ = [ θ 0 ∗ , θ 1 ∗ , … , θ n ∗ ] T \boldsymbol{\theta^*}=\left[\theta_0^*,\theta_1^*,\dots,\theta_n^*\right]^T θ∗=[θ0∗​,θ1∗​,…,θn∗​]T。
以上就是线性回归的全部流程,下面介绍logistic回归(也叫逻辑回归)。

logistic回归

在上面的线性回归中要预测的变量 y ^ \hat{y} y^​是一个连续值,而logistic回归主要用于分类问题,要预测的变量 y ^ \hat{y} y^​是一个离散值。通常其取值是一个有限离散值的集合,即 y ∈ { 0 , 1 , 2 , … } y\in\{0,1,2,\dots\} y∈{0,1,2,…},最常见的二元分类中 y ∈ { 0 , 1 } y\in\{0,1\} y∈{0,1}。logistic的原理和线性回归大致相同。具体区别主要在于拟合函数 h θ ( x ) h_{\boldsymbol\theta}\left(x\right) hθ​(x)和代价函数 J ( θ ) J\left(\boldsymbol\theta\right) J(θ)。在线性回归中,我们已经知道 h θ ( x ) = θ T x h_{\boldsymbol\theta}\left(x\right)=\boldsymbol\theta^T\boldsymbol{x} hθ​(x)=θTx,而在logistic回归中,拟合函数为:
h θ ( x ) = g ( θ T x ) 其 中 , g ( z ) = 1 1 + e − 1 h_{\theta}\left(x\right)=g\left(\boldsymbol\theta^T\boldsymbol{x}\right)\\[3pt]其中,g\left(z\right)=\frac{1}{1+e^{-1}} hθ​(x)=g(θTx)其中,g(z)=1+e−11​
有了拟合函数,按照线性回归的流程,下面就是代价函数了。如果logistic回归仍然采用和线性回归一样的代价函数,按照吴恩达老师在视频中的说法,由于拟合函数 h θ ( x ) h_{\theta}\left(x\right) hθ​(x)的改变,会使最终的代价函数 J ( θ ) J\left(\boldsymbol\theta\right) J(θ)变为非凸的函数,从而无法很好地利用梯度下降法去求解。为此,在logistic回归中,代价函数变成了下列形式:
J ( θ ) = { − log ⁡ ( h θ ( x ) ) , y = 1 − log ⁡ ( 1 − h θ ( x ) ) , y = 0 J\left(\boldsymbol\theta\right)=\left\{ \begin{aligned} -\log\left(h_{\boldsymbol\theta}\left(x\right)\right),\ y=1 \\ -\log\left(1-h_{\boldsymbol\theta}\left(x\right)\right),\ y=0 \end{aligned} \right. J(θ)={−log(hθ​(x)), y=1−log(1−hθ​(x)), y=0​
为了简化公式,上述分段函数可以进一步写成:
J ( θ ) = − y log ⁡ ( h θ ( x ) ) − ( 1 − y ) log ⁡ ( 1 − h θ ( x ) ) J\left(\boldsymbol\theta\right)=-y\log\left(h_{\boldsymbol\theta}\left(x\right)\right)-\left(1-y\right)\log\left(1-h_{\boldsymbol\theta}\left(x\right)\right) J(θ)=−ylog(hθ​(x))−(1−y)log(1−hθ​(x))
于是,针对m个训练集,最终的代价函数为:
J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ h θ ( x ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] J\left(\boldsymbol\theta\right)=-\frac{1}{m}\sum_{i=1}^m\left[y^{\left(i\right)}\log{h_{\boldsymbol\theta}\left(x^{\left(i\right)}\right)}+\left(1-y^{\left(i\right)}\right)\log\left(1-h_{\boldsymbol\theta}\left(x^{\left(i\right)}\right)\right)\right] J(θ)=−m1​i=1∑m​[y(i)loghθ​(x(i))+(1−y(i))log(1−hθ​(x(i)))]
接下来的流程就和线性回归一致了,即利用梯度下降,通过多次迭代,最终得到一组合适的参数 θ = [ θ 0 , θ 1 , … , θ n ] T \boldsymbol{\theta}=\left[\theta_0,\theta_1,\dots,\theta_n\right]^T θ=[θ0​,θ1​,…,θn​]T。
r e p e a t u n t i l c o n v e r g e n c e θ j ≔ θ j − α ∂ ∂ θ j J ( θ ) repeat\ until\ convergence\ \theta_j\coloneqq\theta_j-\alpha\frac{\partial}{\partial\theta_j}J\left(\boldsymbol{\theta}\right) repeat until convergence θj​:=θj​−α∂θj​∂​J(θ)
针对每一个具体的 θ j \theta_j θj​,其具体的更新公式为:
θ 0 ≔ θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x 0 ( i ) θ 1 ≔ θ 1 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x 1 ( i ) θ 2 ≔ θ 2 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x 2 ( i ) … θ n ≔ θ n − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x n ( i ) \theta_0\coloneqq\theta_0-\alpha\frac{1}{m}\sum_{i=1}^m\left(h_\theta\left(x^{\left(i\right)}\right)-y^{\left(i\right)}\right)\cdot x_0^{\left(i\right)} \\ \theta_1\coloneqq\theta_1-\alpha\frac{1}{m}\sum_{i=1}^m\left(h_\theta\left(x^{\left(i\right)}\right)-y^{\left(i\right)}\right)\cdot x_1^{\left(i\right)} \\ \theta_2\coloneqq\theta_2-\alpha\frac{1}{m}\sum_{i=1}^m\left(h_\theta\left(x^{\left(i\right)}\right)-y^{\left(i\right)}\right)\cdot x_2^{\left(i\right)}\\\dots\\ \theta_n\coloneqq\theta_n-\alpha\frac{1}{m}\sum_{i=1}^m\left(h_\theta\left(x^{\left(i\right)}\right)-y^{\left(i\right)}\right)\cdot x_n^{\left(i\right)} θ0​:=θ0​−αm1​i=1∑m​(hθ​(x(i))−y(i))⋅x0(i)​θ1​:=θ1​−αm1​i=1∑m​(hθ​(x(i))−y(i))⋅x1(i)​θ2​:=θ2​−αm1​i=1∑m​(hθ​(x(i))−y(i))⋅x2(i)​…θn​:=θn​−αm1​i=1∑m​(hθ​(x(i))−y(i))⋅xn(i)​
尽管参数的更新公式和线性回归的更新公式一致,但拟合函数 h θ ( x ) h_{\boldsymbol\theta}\left(x\right) hθ​(x)的形式已经发生改变。
下面给出logistic回归中梯度更新公式的具体推导流程:
为了便于推导,我们只考虑含有两个参数的情况(更多参数情况可以类推),即 θ = [ θ 0 , θ 1 ] T \boldsymbol\theta=[\theta_0,\theta_1]^T θ=[θ0​,θ1​]T。此时,
h θ ( x ) = 1 1 + e − ( θ 0 + θ 1 x 1 ) h_{\boldsymbol\theta}\left(x\right)=\frac{1}{1+e^{-\left(\theta_0+\theta_1x_1\right)}} hθ​(x)=1+e−(θ0​+θ1​x1​)1​
J ( θ ) = − y log ⁡ ( 1 1 + e − ( θ 0 + θ 1 x 1 ) ) − ( 1 − y ) log ⁡ ( 1 − 1 1 + e − ( θ 0 + θ 1 x 1 ) ) J\left(\boldsymbol\theta\right)=-y\log\left(\frac{1}{1+e^{-\left(\theta_0+\theta_1x_1\right)}}\right)-\left(1-y\right)\log\left(1-\frac{1}{1+e^{-\left(\theta_0+\theta_1x_1\right)}}\right) J(θ)=−ylog(1+e−(θ0​+θ1​x1​)1​)−(1−y)log(1−1+e−(θ0​+θ1​x1​)1​)
下面对 θ 1 \theta_1 θ1​进行求偏导(以自然对数 e e e作为底为例,以2为底也一样,只是多了一个常数):
∂ ∂ θ 1 J ( θ ) = − y [ 1 + e − ( θ 0 + θ 1 x 1 ) ] ⋅ x 1 e − ( θ 0 + θ 1 x 1 ) [ 1 + e − ( θ 0 + θ 1 x 1 ) ] 2 − 1 + e − ( θ 0 + θ 1 x 1 ) e − ( θ 0 + θ 1 x 1 ) ⋅ − x 1 e − ( θ 0 + θ 1 x 1 ) ( 1 + e − ( θ 0 + θ 1 x 1 ) ) + x 1 e − 2 ( θ 0 + θ 1 x 1 ) [ 1 + e − ( θ 0 + θ 1 x 1 ) ] 2 + y 1 + e − ( θ 0 + θ 1 x 1 ) e − ( θ 0 + θ 1 x 1 ) ⋅ − x 1 e − ( θ 0 + θ 1 x 1 ) ( 1 + e − ( θ 0 + θ 1 x 1 ) ) + x 1 e − 2 ( θ 0 + θ 1 x 1 ) [ 1 + e − ( θ 0 + θ 1 x 1 ) ] 2 = − y ⋅ x 1 e − ( θ 0 + θ 1 x 1 ) 1 + e − ( θ 0 + θ 1 x 1 ) + x 1 1 + e − ( θ 0 + θ 1 x 1 ) − y x 1 1 + e − ( θ 0 + θ 1 x 1 ) = x 1 ( 1 1 + e − ( θ 0 + θ 1 x 1 ) − y ) = ( h θ ( x ) − y ) x 1 \frac{\partial}{\partial\theta_1}J\left(\boldsymbol{\theta}\right)=-y\left[1+e^{-\left(\theta_0+\theta_1x_1\right)}\right] \cdot \frac{x_1e^{-\left(\theta_0+\theta_1x_1\right)}}{\left[1+e^{-\left(\theta_0+\theta_1x_1\right)}\right]^2}-\\[4pt] \frac{1+e^{-\left(\theta_0+\theta_1x_1\right)}}{e^{-\left(\theta_0+\theta_1x_1\right)}} \cdot \frac{-x_1e^{-\left(\theta_0+\theta_1x_1\right)} \left( 1+e^{-\left(\theta_0+\theta_1x_1\right)} \right)+x_1e^{-2\left(\theta_0+\theta_1x_1\right)}}{\left[1+e^{-\left(\theta_0+\theta_1x_1\right)}\right]^2}+ \\[4pt] y \frac{1+e^{-\left(\theta_0+\theta_1x_1\right)}}{e^{-\left(\theta_0+\theta_1x_1\right)}} \cdot \frac{-x_1e^{-\left(\theta_0+\theta_1x_1\right)} \left( 1+e^{-\left(\theta_0+\theta_1x_1\right)} \right)+x_1e^{-2\left(\theta_0+\theta_1x_1\right)}}{\left[1+e^{-\left(\theta_0+\theta_1x_1\right)}\right]^2} \\[4pt] = -y \cdot \frac{x_1e^{-\left(\theta_0+\theta_1x_1\right)}}{1+e^{-\left(\theta_0+\theta_1x_1\right)}} + \frac{x_1}{1+e^{-\left(\theta_0+\theta_1x_1\right)}} - \frac{yx_1}{1+e^{-\left(\theta_0+\theta_1x_1\right)}} \\[4pt] =x_1\left( \frac{1}{1+e^{-\left(\theta_0+\theta_1x_1\right)}} -y \right)\\[4pt] = \left( h_{\theta}\left( x\right) -y \right)x_1 ∂θ1​∂​J(θ)=−y[1+e−(θ0​+θ1​x1​)]⋅[1+e−(θ0​+θ1​x1​)]2x1​e−(θ0​+θ1​x1​)​−e−(θ0​+θ1​x1​)1+e−(θ0​+θ1​x1​)​⋅[1+e−(θ0​+θ1​x1​)]2−x1​e−(θ0​+θ1​x1​)(1+e−(θ0​+θ1​x1​))+x1​e−2(θ0​+θ1​x1​)​+ye−(θ0​+θ1​x1​)1+e−(θ0​+θ1​x1​)​⋅[1+e−(θ0​+θ1​x1​)]2−x1​e−(θ0​+θ1​x1​)(1+e−(θ0​+θ1​x1​))+x1​e−2(θ0​+θ1​x1​)​=−y⋅1+e−(θ0​+θ1​x1​)x1​e−(θ0​+θ1​x1​)​+1+e−(θ0​+θ1​x1​)x1​​−1+e−(θ0​+θ1​x1​)yx1​​=x1​(1+e−(θ0​+θ1​x1​)1​−y)=(hθ​(x)−y)x1​
考虑m个训练集:
∂ ∂ θ 1 J ( θ ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x 1 ( i ) \frac{\partial}{\partial\theta_1}J\left(\boldsymbol{\theta}\right)=\frac{1}{m}\sum_{i=1}^m\left(h_\theta\left(x^{\left(i\right)}\right)-y^{\left(i\right)}\right)\cdot x_1^{\left(i\right)} ∂θ1​∂​J(θ)=m1​i=1∑m​(hθ​(x(i))−y(i))⋅x1(i)​
其余参数推导流程一致。
除了利用梯度下降进行参数优化外,还有一些高级的优化方法,例如Conjugate gradient,BFGS,L-BFGS。感兴趣的可以自行学习。
以上就是线性回归和logistic回归的全部内容,欢迎交流~