5.1逻辑回归理论

5.1.1逻辑回归引言

逻辑回归是一个分类算法,它可以处理二元分类以及多元分类。虽然它名字里面有“回归”两个字,却不是一个回归算法。那为什么有“回归”这个误导性的词呢?个人认为,虽然逻辑回归是分类模型,但是它的原理里面却残留着回归模型的影子,笔者在前面对线性回归已经阐述清楚了,接下来笔者就要对逻辑回归进行讲解了。

我们知道,线性回归的模型是求出输出特征向量YY和输入样本矩阵XX之间的线性关系系数θθ,满足Y=XθY=Xθ。此时我们的YY是连续的,所以是回归模型。如果我们想要YY是离散的话,怎么办呢?一个可以想到的办法是,我们对于这个YY再做一次函数转换,变为g(Y)g(Y)。如果我们令g(Y)g(Y)的值在某个实数区间的时候是类别AA,在另一个实数区间的时候是类别BB,以此类推,就得到了一个分类模型。如果结果的类别只有两种,那么就是一个二元分类模型了。逻辑回归的出发点就是从这来的。下面我们开始引入二元逻辑回归。

5.1.2二元逻辑回归的模型

对于使用逻辑回归进行分类,我们首先所需要解决的就是寻找分类边界线。那么什么是分类边界线呢?

第5章 逻辑回归(一 理论讲解)

图1

以上两幅图分别对应着,当分类样本具有两个特征值x1,x2x_1,x_2 时,样本可进行线性可分,以及非线性可分的情况。而分类边界,便是图中所示的绿色直线与绿色曲线。(本文中只针对线性可分且特征数为nn的情况进行介绍)

而使用逻辑回归进行分类,就是要找到这样的分类边界,使其能够尽可能地对样本进行正确分类,也就是能够尽可能地将两种样本分隔开来。于是我们可以大胆猜测,可以构造这样一个函数(图一中特征数为2,分类边界为直线,当特征数为 n 时分类边界为“超平面”),来对样本集进行分隔:

z(x(i))=θ0+θ1x1(i)+θ2x2(i)+...+θnxn(i)z(x^{(i)})=\theta_0+\theta_1x_1^{(i)}+\theta_2x_2^{(i)}+...+\theta_nx_n^{(i)}

其中i=1,2,...,mi=1,2,...,m ,表示第 ii 个样本, nn 表示特征数,当z(x(i))>0z(x^{(i)})>0 时,对应着样本点位于分界线上方,可将其分为"1"类;当z(x(i))<0z(x^{(i)})<0 时 ,样本点位于分界线下方,将其分为“0”类。

我们很容易联想到前面介绍过的线性回归,该算法同样是构造函数:

hθ(x(i))=θ0+θ1x1(i)+θ2x2(i)+...+θnxn(i)h_{\theta}(x^{(i)})=\theta_0+\theta_1x_1^{(i)}+\theta_2x_2^{(i)}+...+\theta_nx_n^{(i)}

但与逻辑回归不同的是,线性回归模型输入一个待预测样本的特征值x(i)=[x1(i),x2(i),...,xn(i)]Tx^{(i)}=[x_1^{(i)},x_2^{(i)},...,x_n^{(i)}]^T ,输出则为预测值。而逻辑回归作为分类算法,它的输出是0/1。或许你之前接触过具有这种性质的函数,该函数称为海维塞德阶跃函数(Heaviside step function),或者直接称为单位阶跃函数。然而,海维塞德阶跃函数的问题在于:该函数在跳跃点上从0瞬间跳跃到1,这个瞬间跳跃过程有时很难处理。幸好,另一个函数也有类似的性质,且数学上更易处理,这就是Sigmoid函数。接下来将介绍一下 sigmoid 函数。
Sigmoid函数具体的计算公式如下:

g(z)=11+ezg(z)=\frac{1}{1+e^{-z}}
它有一个非常好的性质,即当zz趋于正无穷时,g(z)g(z)趋于11,而当z趋于负无穷时,g(z)g(z)趋于00,这非常适合于我们的分类概率模型。另外,它还有一个很好的导数性质:

g(z)=g(z)(1g(z))g'(z)=g(z)(1-g(z))

这个通过函数对g(z)g(z)求导很容易得到,后面我们会用到这个式子。
下图2给出了Sigmoid函数在不同坐标尺度下的两条曲线图。当xx为0时, Sigmoid函数值为0.5。随着xx的增大,对应的Sigmoid值将逼近于1;而随着xx的减小, Sigmoid值将逼近于0。如果横坐标刻度足够大(图2下图), Sigmoid函数看起来很像一个阶跃函数。

因此,为了实现Logistic回归分类器,我们可以在每个特征上都乘以一个回归系数,然后把所有的结果值相加,将这个总和代入Sigmoid函数中,进而得到一个范围在0~1之间的数值。任何大于0.5的数据被分入1类,小于0.5即被归入0类。所以, Logistic回归也可以被看成是一种概率估计。即由函数图像可以看出, sigmoid 函数可以很好地将 (−∞,∞) 内的数映射到 (0,1) 上。于是我们可以将 g(z)0.5g(z)≥0.5 时分为"1"类, g(z)<0.5g(z)<0.5 时分为"0"类。即:

第5章 逻辑回归(一 理论讲解)
其中 yy 表示分类结果。sigmoid 函数实际表达的是将样本分为“1”类的概率,

第5章 逻辑回归(一 理论讲解)

图2两种坐标尺度下的Sigmoid函数图

【注】上图的横坐标为5到5,这时的曲线变化较为平滑;下图横坐标的尺度足够大,可以看到,在x=0x = 0点处Sigmoid函数看起来很像阶跃函数。

在文已经给出了分类边界:

z(x(i))=θ0+θ1x1(i)+θ2x2(i)+...+θnxn(i)=θTXz(x^{(i)})=\theta_0+\theta_1x_1^{(i)}+\theta_2x_2^{(i)}+...+\theta_nx_n^{(i)}=\theta^TX

其中:

第5章 逻辑回归(一 理论讲解)
x0(i)x_0^{(i)}是偏置项, nn 表示特征数,i=1,2,...,mi=1,2,...,m 表示样本数。
为了和线性回归作比较,网络结构图如图3,逻辑回归与自适应线性网络非常相似,两者的区别在于逻辑回归的**函数是Sigmoid function而自适应线性网络的**函数是y=xy=x,两者的网络结构如图4所示。logistic回归就是一个线性分类模型,它与线性回归的不同点在于:为了将线性回归输出的很大范围的数,例如从负无穷到正无穷,压缩到0和1之间,这样的输出值表达为“可能性”才能说服广大民众。当然了,把大值压缩到这个范围还有个很好的好处,就是可以消除特别冒尖的变量的影响(不知道理解的是否正确)。而实现这个伟大的功能其实就只需要平凡一举,也就是在输出加一个logistic函数。另外,对于二分类来说,可以简单的认为:如果样本xx属于正类的概率大于0.5,那么就判定它是正类,否则就是负类。

第5章 逻辑回归(一 理论讲解)

图3

第5章 逻辑回归(一 理论讲解)

图4

所以说,LogisticRegression 就是一个被logistic方程归一化后的线性回归。结合前文的sigmoid函数我们可以构造出逻辑回归模型函数:

hθ(x(i))=g(z)=g(θTX)=11+eθTXh_{\theta}(x^{(i)})=g(z)=g(\theta^TX)=\frac{1}{1+e^{-\theta^TX}}

理解了二元分类回归的模型,接着我们就要看模型的损失函数了,我们的目标是极小化损失函数来得到对应的模型系数θθ

5.1.3逻辑回归的代价函数

在线性回归中,我们是利用均方误差来作为代价函数:

第5章 逻辑回归(一 理论讲解)
同样的,假设我们仍旧使用均方误差来作为逻辑回归大家函数,会出现什么效果呢?将g(z)=11+ezg(z)=\frac{1}{1+e^{-z}}带入上式,我们会发现, 为一个非凸函数,也就是说该函数存在许多局部最小值点,在求解参数的过程中很容易陷入局部最小值点,而无法求得真正的最小值点。

第5章 逻辑回归(一 理论讲解)

图5

为什么会出现这样的现象呢?那是因为逻辑回归不是连续的,自然线性回归损失函数定义的经验就用不上了。在线性回归,笔者用最大似然法来推导出我们的损失函数,最后也得到了损失函数。是不是也可以用于逻辑回归呢?答案是肯定的。前文也说过了,逻辑回归可以看成是一种概率估计,而且sigmoid 函数实际表达的是将样本分为“1”类的概率,那么这里就可以用最大似然估计推导损失函数,也就是说,使用 sigmoid 函数求解出来的值为类1的后验估计p(y=1x,θ)p(y=1|x,\theta) ,故我们可以得到:
p(y=1x,θ)=hθ(x(i))p(y=1|x,\theta)=h_{\theta}(x^{(i)})

p(y=1x,θ)=1hθ(x(i))p(y=1|x,\theta)=1-h_{\theta}(x^{(i)})

其中p(y=1x,θ)p(y=1|x,\theta) 表示样本分类为 y=1y=1的概率,而p(y=0x,θ)p(y=0|x,\theta) 表示样本分类为 y=0y=0 的概率。针对以上二式,我们可将其整理为:

p(yx,θ)=hθ(x(i))y(1hθ(x(i)))1yp(y|x,\theta)=h_{\theta}(x^{(i)})^y(1-h_{\theta}(x^{(i)}))^{1-y}

我们可以得到其似然函数为:

L(θ)=i=1m(hθ(x(i)))y(i)(1hθ(x(i)))1y(i)L(\theta)=\prod_{i=1}^{m}(h_{\theta}(x^{(i)}))^{y^{(i)}}(1-h_{\theta}(x^{(i)}))^{1-y^{(i)}}

对数似然函数为:

logL(θ)=i=1m[y(i)log(hθ(x(i)))]+(1y(i))log(1hθ(x(i)))]logL(\theta)=\sum_{i=1}^{m}[y^{(i)}log(h_{\theta}(x^{(i)}))]+(1-y^{(i)})log(1-h_{\theta}(x^{(i)}))]

于是,我们便得到了代价函数,我们可以对求 logL(θ)logL(\theta) 的最大值来求得参数θθ的值。为了便于计算,将代价函数做了以下改变:

J(θ)=1mi=1m[y(i)log(hθ(x(i)))]+(1y(i))log(1hθ(x(i)))]J(\theta)=-\frac{1}{m}\sum_{i=1}^{m}[y^{(i)}log(h_{\theta}(x^{(i)}))]+(1-y^{(i)})log(1-h_{\theta}(x^{(i)}))]

此时,我们只需对J(θ)J(\theta)求最小值,便得可以得到参数θθ

5.1.4优化算法

对于二元逻辑回归的损失函数极小化,有比较多的方法,最常见的有梯度下降法,坐标轴下降法,等牛顿法等。这里推导出梯度下降法中θ每次迭代的公式。
梯度下降法过程为:
repeat {
第5章 逻辑回归(一 理论讲解)
}
其中αα为学习率(learning rate),也就是每一次的“步长”; ΔJ(θ)Δθj\frac{\Delta J(\theta)}{\Delta \theta_j}是梯度,j=1,2,...nj=1,2,...n
接下来我们对梯度进行求解:

第5章 逻辑回归(一 理论讲解)
其中:

第5章 逻辑回归(一 理论讲解)
而又因为:

g(z)=g(z)(1g(z))g'(z)=g(z)(1-g(z))
则:

第5章 逻辑回归(一 理论讲解)
因此:
第5章 逻辑回归(一 理论讲解)
故:
第5章 逻辑回归(一 理论讲解)
由以上我们可以得到梯度下降过程为:
repeat {
第5章 逻辑回归(一 理论讲解)
}
  其中 i=1,2,...,mi=1,2,...,m,表示样本数; j=1,2,...,nj=1,2,...,n,表示特征数。

5.1.5二元逻辑回归的推广:多元逻辑回归

前面几节我们的逻辑回归的模型和损失函数都局限于二元逻辑回归,实际上二元逻辑回归的模型和损失函数很容易推广到多元逻辑回归。比如总是认为某种类型为正值,其余为0值,这种方法为最常用的one-vs-rest,简称OvR。
另一种多元逻辑回归的方法是Many-vs-Many(MvM),它会选择一部分类别的样本和另一部分类别的样本来做逻辑回归二分类。最常用的是One-Vs-One(OvO)。OvO是MvM的特例。每次我们选择两类样本来做二元逻辑回归。
首先回顾下二元逻辑回归。
p(y=1x,θ)=hθ(x(i))=11+eθTx(i)p(y=1|x,\theta)=h_{\theta}(x^{(i)})=\frac{1}{1+e^{-\theta^Tx^{(i)}}}

p(y=0x,θ)=1hθ(x(i))=eθTx(i)1+eθTx(i)p(y=0|x,\theta)=1-h_{\theta}(x^{(i)})=\frac{e^{-\theta^Tx^{(i)}}}{1+e^{-\theta^Tx^{(i)}}}

其中yy只能取到0和1,则有:

lnp(y=1x,θ)p(y=0x,θ)=θTx(i)ln\frac{p(y=1|x,\theta)}{p(y=0|x,\theta)}={\theta^Tx^{(i)}}

如果我们要推广到多元逻辑回归,则模型要稍微做下扩展。我们假设是KK元分类模型,即样本输出yy的取值为12K1,2,…,K。根据二元逻辑回归的经验,我们有:

lnp(y=1x,θ)p(y=Kx,θ)=θ1Tx(i)ln\frac{p(y=1|x,\theta)}{p(y=K|x,\theta)}={\theta_1^Tx^{(i)}}

lnp(y=2x,θ)p(y=Kx,θ)=θ2Tx(i)ln\frac{p(y=2|x,\theta)}{p(y=K|x,\theta)}={\theta_2^Tx^{(i)}}


lnp(y=K1x,θ)p(y=Kx,θ)=θK1Tx(i)ln\frac{p(y=K-1|x,\theta)}{p(y=K|x,\theta)}={\theta_{K-1}^Tx^{(i)}}

上面有K1K-1个方程。加上概率之和为1的方程如下:

i=1Kp(y=ix,θ)=1\sum_{i=1}^{K}p(y=i|x,\theta)=1

从而得到KK个方程,里面有KK个逻辑回归的概率分布。解出这个K元一次方程组,得到K$元逻辑回归的概率分布如下:

第5章 逻辑回归(一 理论讲解)
多元逻辑回归的损失函数推导以及优化方法和二元逻辑回归类似,这里就不累述。

参考文献:
[1]机器学习实战 https://www.manning.com/books/machine-learning-in-action
[2] Raschka S. Python Machine Learning[M]. Packt Publishing, 2015

相关文章: