机器学习 - 逻辑回归

2019-07-27 Views 机器学习2699字13 min read
featureimg

logistic 回归又称 logistic 回归分析,是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域。

正文

简介

从名字上来看,读者很容易把逻辑回归也理解成是一种用于拟合的回归算法。但实际上逻辑回归不是回归,它是一种分类算法
比如说,预测一个人有没有生病,有就输出1,没有就输出0。这里就可以运用逻辑回归模型。从这个例子可以看到,逻辑回归最显著的特点就是其输出值是离散的值

预测函数——二元分类

要求:函数的值域为[0,1]。然后函数能被选定一个基准值,当计算出的值大于基准值时返回1,小于基准值时返回0。同时,函数具有非常好的对称性并且对输入超过一定范围就会不敏感
于是,我们选择Sigmoid函数作为预测函数(这个函数在许多领域有重要作用,也被称之为S形函数)

logistic regression - sigmoid function - 1

g(z)=11+ezg\left( z \right) =\frac{1}{1+e_{}^{-z}}

结合图像可以看到,Sigmoid函数完美的符合了我们的所有要求。
同时,因为逻辑回归是一种广义线性回归模型,所以我们可以结合线性回归的预测函数来看

hθ(x)=θTxh_{\theta}^{}\left( x \right) =\theta _{}^{T}x

hθ(x)=g(z)=g(θTx)=11+eθTxh_{\theta}^{}\left( x \right) =g\left( z \right) =g\left( \theta _{}^{T}x \right) =\frac{1}{1+e_{}^{-\theta _{}^{T}x}}

从简单来看,我们也可以把逻辑回归函数表达成不用矩阵的形式:

g(θ1x+θ2)=11+e(θ1x+θ2)g\left( -\theta _{1}^{}x+\theta _{2}^{} \right) =\frac{1}{1+e_{}^{-\left( \theta _{1}^{}x+\theta _{2}^{} \right)}}

h(x)表示在输入值为x,参数为θ的前提条件下y=1的概率。用概率论的公式可以写成

hθ(x)=P(y=1x,θ)h_{\theta}^{}\left( x \right) =P\left( y=1|x,\theta \right)

这个公式可以解读成,在输入x及参数θ的情况下y=1的概率

边界

hθ(x)=g(z)=g(θTx)=11+eθTxh_{\theta}^{}\left( x \right) =g\left( z \right) =g\left( \theta _{}^{T}x \right) =\frac{1}{1+e_{}^{-\theta _{}^{T}x}}

我们把0.5作为逻辑判断的基准值,当函数计算出的值大于0.5时返回1,小于0.5时返回0。所以结合线性回归的预测函数来看,θTx=0.5时为边界条件。

成本函数

因为逻辑回归输出的值是离散值,我们可以分别考虑y=0,1的情况。因为Sigmoid函数采用自然对数的底数e作为函数的一部分,为了方便运算,我们可以采用自然对数log作为成本函数:

cost(hθ(x),y)={log(hθ(x))if y=1log(1hθ(x))if y=0\cos t\left( h_{\theta}^{}\left( x \right) ,y \right) =\begin{cases} -\log \left( h_{\theta}^{}\left( x \right) \right)& if\ y=1\\ -\log \left( 1-h_{\theta}^{}\left( x \right) \right)& if\ y=0\\ \end{cases}

这两个函数关于h(x)的图像如下:

logistic regression - cost function - 2

我们发现当左图h(x)趋近于1时,y也趋近于0即成本趋近于0;当右图h(x)趋近于0时,y即成本也趋近于0。这符合我们对函数的要求,但是这样看成本函数十分的不方便,所以我们把它们合并成一个函数:

cost(hθ(x),y)=ylog(hθ(x))(1y)log(hθ(x))\cos t\left( h_{\theta}^{}\left( x \right) ,y \right) =-y\log \left( h_{\theta}^{}\left( x \right) \right) -\left( 1-y \right) \log \left( h_{\theta}^{}\left( x \right) \right)

因为y值是离散的,所以这个式子本质上是和上面的式子等价的。
所以逻辑回归的成本函数如下:

J(θ)=1m(i=1myilog(hθ(xi))+(1yi)log(1hθ(xi)))J\left( \theta \right) =-\frac{1}{m}\left( \sum_{i=1}^m{y_{i}^{}\log \left( h_{\theta}^{}\left( x_{i}^{} \right) \right) +\left( 1-y_{i}^{} \right) \log \left( 1-h_{\theta}^{}\left( x_{i}^{} \right) \right)} \right)

梯度下降算法

我们可以从简单的模型入手:

g(θ1x+θ2)=11+e(θ1x+θ2)g\left( -\theta _{1}^{}x+\theta _{2}^{} \right) =\frac{1}{1+e_{}^{-\left( \theta _{1}^{}x+\theta _{2}^{} \right)}}

根据之前线性回归文章中梯度下降的定义可以得到:

θ1=θ1αθ1J(θ)\theta _1=\theta _1-\alpha \frac{\partial}{\partial \theta _{1}^{}}J\left( \theta \right)

θ0=θ0αθ0J(θ)\theta _0=\theta _0-\alpha \frac{\partial}{\partial \theta _{0}^{}}J\left( \theta \right)

对J(θ)求完偏导数之后我们可以得到:

θ1=θ1α1mi=1m(hθ(x(i))y(i))x(i)\theta _1=\theta _1-\alpha \frac{1}{m}\sum_{i=1}^m{\left( h_{\theta}\left( x^{\left( i \right)} \right) -y^{\left( i \right)} \right)}x_{}^{\left( i \right)}

θ0=θ0α1mi=1m(hθ(x(i))y(i))\theta _0=\theta _0-\alpha \frac{1}{m}\sum_{i=1}^m{\left( h_{\theta}\left( x^{\left( i \right)} \right) -y^{\left( i \right)} \right)}

推导过程:
我们可以先计算预测函数的偏导数,方便后面的运算:

σ(x)=(11+ex)=(1+ex)(1+ex)2=1(ex)(1+ex)2=0(x)(ex)(1+ex)2=(1)(ex)(1+ex)2=ex(1+ex)2=(11+ex)(ex1+ex)=σ(x)(+11+ex1+ex)=σ(x)(1+ex1+ex11+ex)=σ(x)(1σ(x))\begin{aligned} \sigma \left( x \right) ’&=\left( \frac{1}{1+e^{-x}} \right) ’=\frac{-\left( 1+e^{-x} \right) ’}{\left( 1+e^{-x} \right) ^2}=\frac{-1’-\left( e^{-x} \right) ’}{\left( 1+e^{-x} \right) ^2}\\ &=\frac{0-\left( -x \right) ’\left( e^{-x} \right)}{\left( 1+e^{-x} \right) ^2}=\frac{-\left( -1 \right) \left( e^{-x} \right)}{\left( 1+e^{-x} \right) ^2}=\frac{e^{-x}}{\left( 1+e^{-x} \right) ^2}\\ &=\left( \frac{1}{1+e^{-x}} \right) \left( \frac{e^{-x}}{1+e^{-x}} \right) =\sigma \left( x \right) \left( \frac{+1-1+e^{-x}}{1+e^{-x}} \right)\\ &=\sigma \left( x \right) \left( \frac{1+e^{-x}}{1+e^{-x}}-\frac{1}{1+e^{-x}} \right)\\ &=\sigma \left( x \right) \left( 1-\sigma \left( x \right) \right)\\ \end{aligned}

接着计算成本函数的偏导数:

logistic regression - gradient descent

多元分类

假设y=0,1,2...n(多元),我们可以把y=0看成一类,y=1,2,3...n看成另一类。以此类推,我们也可以把y=1看成一类,y=0,2,3...n看成另一类。所以,我们会有n+1个预测函数。我们就只需要从n+1个预测函数里选择概率最大的预测函数即可。最后得到predict=argmax(hθ(x))

正则化

正则化是用来解决模型过拟合的方法。它可以保留模型所有的特征,减小特征的权重θ的值。确保所有的特征对预测值都有贡献

线性回归正则化

J(θ)=12m[i=1m(hθ(xi)yi)2]+λj=1nθj2J\left( \theta \right) =\frac{1}{2m}\left[ \sum_{i=1}^m{\left( h_{\theta}^{}\left( x_{i}^{} \right) -y_{i}^{} \right) _{}^{2}} \right] +\lambda \sum_{j=1}^n{\theta _{j}^{2}}

我们在模型后面加入了一个正则项,可以看到成本函数和θ2成正比;λ的作用就是为了完美拟合,如果λ过大了模型很容易会欠拟合,但如果λ太小就有可能达不到我们要的效果。
经过修正的参数迭代公式如下:

θj=θja1mi=1m[((h(x(i))y(i))xj(i))+λmθj]\theta _{j}^{}=\theta _{j}^{}-a\frac{1}{m}\sum_{i=1}^m{\left[ \left( \left( h\left( x_{}^{\left( i \right)} \right) -y_{}^{\left( i \right)} \right) x_{j}^{\left( i \right)} \right) +\frac{\lambda}{m}\theta _{j}^{} \right]}

我们可以看到(1-aλ/m)因子在每次迭代时都将把θ收缩一点点。因为a和λ是正数,而m是训练样本的个数,是个比较大的正整数。对θ收缩的原因是因为加入正则项的成本函数和θ2成正比,所以迭代时需要不断地试图减小θ的值。

逻辑回归正则化

逻辑回归的正则化和线性回归是一样的道理,逻辑回归的成本函数被修正如下:

J(θ)=1m[i=1my(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]+λ2mj=1nθj2J\left( \theta \right) =-\frac{1}{m}\left[ \sum_{i=1}^m{y_{}^{\left( i \right)}\log \left( h_{\theta}^{}\left( x_{}^{\left( i \right)} \right) \right) +\left( 1-y_{}^{\left( i \right)} \right) \log \left( 1-h_{\theta}^{}\left( x_{}^{\left( i \right)} \right) \right)} \right] +\frac{\lambda}{2m}\sum_{j=1}^n{\theta _{j}^{2}}

修正过后的参数迭代公式如下:

θj=θj(1αλm)α1mi=1m((h(x(i))y(i))xj(i))\theta _{j}^{}=\theta _{j}^{}\left( 1-\alpha \frac{\lambda}{m} \right) -\alpha \frac{1}{m}\sum_{i=1}^m{\left( \left( h\left( x_{}^{\left( i \right)} \right) -y_{}^{\left( i \right)} \right) x_{j}^{\left( i \right)} \right)}

注意:虽然线性回归和逻辑回归修正后的参数迭代公式表现形式一样,但是两个模型的预测函数h(x)是不相同的。

范数

范数可以简单的理解成距离,在机器学习里我们把它当成正则项的类别。
L1范数(L1正则项 :向量里元素的绝对值之和
||θ||1 = ||θ1||+||θ2||
L2范数(L2正则项 :向量里元素的平方和的开方根
||θ||2 = √θ12 + θ22
L1 范数作为正则项,会让模型参数稀疏化,即让模型参数向量里为0的元素尽量多。而L2范数作为正则项,会让模型参数尽量小,但不会为0,即尽量让每个特征对预测值都有贡献。


想了解更多范数可以戳这里


注:如果文中有什么问题,欢迎在评论区指出;有不懂的也可以在评论区提问哦!


References:

  1. https://baike.baidu.com/item/logistic回归/2981575
  2. http://blog.kamidox.com/logistic-regression.html
  3. 《scikit-learn 机器学习:常用算法原理及编程实战》- 黄永昌

logo   WRITTEN BY:Serence

一个程序员和文艺青年的博客!

本文章采用CC BY-NC-SA 4.0进行许可。转载请注明出处!

上一篇

机器学习 - 决策树


下一篇

机器学习 - 线性回归