1. 基本思想
在线性回归内容的讲解中,主要建立了多元自变量与因变量之间的线性关系,即多个输入与对应输出的关系。比较常见的线性回归模型如下:
hΘ(x)=Θ0+Θ1x1+Θ2x2+⋯+Θnxn
正如在线性回归中经常提到的例子,根据一个人的工资和年龄情况预测其在某银行的贷款额度,又比如根据房屋的位置、面积、楼层以及采光等属性预测房价。
然而这里要提到的逻辑回归却与之不同,逻辑回归这个叫法主要来源于Logistic Regression,作为机器学习的经典算法之一,虽然名字叫回归,但其实是一个经典的二分类算法。
依然举个例子来形象地说明一下,通过分析年龄、性别、体质指数、平均血压、疾病指数等指标,判断一个人是否患糖尿病,Y=0表示未患病,Y=1表示患病。可以看出,这里最终的输出结果只有两个,包括0和1,因此不能再像线性回归一样,通过函数模型预测所得到的连续值来预测因变量Y(只能取0或1)。
在讲解逻辑回归之前,我们首先介绍一个函数(sigmoid函数):
g(z)=1+e−z1(1)
直接看这个函数,可能会觉得还挺复杂的,不容易理解,别着急,我们先来一起看看他的函数图像( Fig.1)。

Fig.1. Sigmoid Function
可以看出,其自变量的取值范围为[−∞,+∞],值域的范围为[0,1]。这一下是不是就明白多了,此函数的意义就是把任意的输入映射到[0,1]区间。在二分类任务以及机器学习的很多经典算法中,都有可能用到sigmoid函数,只要记住这幅图,在使用的过程中,自然很容易就想清楚了。
另外补充一点,在分析机器学习算法时,可能还要考虑很多的情况,比如sigmoid函数可能会出现梯度消失或者梯度爆炸,从而影响整个训练过程难以收敛等问题,这个不作为我们这部分的重点,有兴趣可以浏览我的这篇博客(待更新链接)。
回到本文来,引入这个函数之后,我们要用来干什么呢?
回想一下,在线性回归中,我们可以通过多个特征属性(变量)得到一个预测值。然而,在逻辑回归中,我们只需要将该值映射到sigmoid函数上,这样就将原来的值映射到[0,1]区间了,也可以看成完成了由值到概率的转换,然后通过设定合适的阈值,从而完成整个分类任务。
到现在,逻辑回归的基本思想算是交代清楚了,那么接下来,我们需要着重考虑的是如何建立模型?如何训练模型?又如何设定阈值?
2. 模型建立
首先,根据刚刚我们引入的sigmoid函数,我们可以写出我们的预测函数:
hΘ(x)=g(ΘTx)=1+e−ΘTx1(2)
其中,(这里的ΘTx与线性回归中的内容是类似的)
Θ0+Θ1x1+Θ2x2+⋯+Θnxn=i=1∑nΘixi=ΘTx(3)
以上两个公式其实就是将式(3)计算出来的值映射到式(2)sigmoid函数上,从而完成预测值到概率的转换。
得到预测函数后,再来看我们的这个逻辑回归问题。换句话再强调一遍,我们的做法是,先算出在满足相应特征属性x的情况下,其对应类别(y=1或y=0)的概率值,然后通过设定的阈值(第4部分有讲解,不用着急),进行最终的分类。
相当于我们求出的hΘ(x)为一个概率值,其范围在[0,1]区间,由于逻辑回归是个二分类问题,那么在给定x的情况下,y=1或y=0的概率公式可如下表示
P(y=1∣x;Θ)=hΘ(x)(4)
P(y=0∣x;Θ)=1−hΘ(x)(5)
整合式(4)和式(5)可得
P(y∣x;Θ)=(hΘ(x))y(1−hΘ(x))1−y(6)
我们分析一下整合出来的式(6),对于二分类任务(0,1),在该式中,若y=0,则只保留了(1−hΘ(x)),若y=1,则只保留了hΘ(x),因此式(6)和式(4)、(5)表达的是一个意思。
3. 模型训练
由以上模型建立,我们得到了关于y(i)的条件概率p(y(i)∣x(i);Θ),这里要使得预测值更接近于真实值,即条件概率p(y(i)∣x(i);Θ)越大越好。
我们假设用于训练的样本为m个,那么可通过找到最大似然估计,得到最优的解。
首先我们写出似然函数
L(Θ)=i=1∏mp(yi∣xi;Θ)=i=1∏m(hΘ(xi))yi(1−hΘ(xi))1−yi
由于似然函数中包含了累乘,计算过程是很复杂的,这里将其转换为对数似然,做这样的处理似然函数的单调性并无影响,却大大改善了其计算复杂度。对数似然函数如下
l(Θ)=logL(Θ)=i=1∑m(yiloghΘ(xi)+(1−yi)log(1−hΘ(xi)))
在这里,我们需要找到的是最大似然估计,那么可以将应用梯度上升求最大值,引入J(Θ)=−m1l(Θ)转换为梯度下降任务。这里的m1主要是之前考虑了所有样本,在这里将其平均(还要改正)。
对上式求导,数学功底还行的可以仔细看看下面的推导过程,要是数学比较弱,干脆直接用最后的结果:
δΘjδJ(Θ)=−m1i=1∑m(yihΘ(xi)1δΘjδhΘ(xi)−(1−yi)1−hΘ(xi)1δΘjδhΘ(xi))=−m1i=1∑m(yig(ΘTxi)1−(1−yi)1−g(ΘTxi)1)δΘjδg(ΘTxi)=−m1i=1∑m(yig(ΘTxi)1−(1−yi)1−g(ΘTxi)1)g(ΘTxi)(1−g(ΘTxi))δΘjδΘTxi=−m1i=1∑m(yi(1−g(ΘTxi))−(1−yi)g(ΘTxi))xij=−m1i=1∑m(yi−g(ΘTxi))xij=m1i=1∑m(hΘ(xi)−yi)xij
这里的xij是地i个样本的第j个特征属性值,对应这里的Θj。
接下来对参数进行更新,即梯度下降中沿着最快的方向(梯度方向)走一步,α为学习率,在这里相当于控制了梯度下降的步长:
Θj=Θj−αδΘjδJ(Θ)=Θj−αm1i=1∑m(hΘ(xi)−yi)xij
经过多轮的迭代训练,整个过程收敛,得到最优的Θ值。
4. 阈值选择
阈值的选择并没有一个固定过的标准,一般看来,选择中间值0.5,即概率为50%,比较合适。但是在某些任务中显得并不那么合适,比如在前面的例子中,预测患糖尿病,如果将阈值设为0.5,那么对于小于50%却非常接近50%的概率患了糖尿病的人,却被诊断为未患糖尿病。若是将阈值设置为0.3,那么有30%的概率,就诊断为患病,这对整个病的预防效果也是很好的。