Logistic regression的林林总总

来源:互联网 发布:保险师软件下载 编辑:程序博客网 时间:2024/05/22 16:20

Logistic regression,逻辑回归,很常见的二分类算法,简单好用,不过这看似简单的算法背后,其实可以引申出很多思考,基本的数学表达式如下:

P(Y=1|X)=ef(X)1+ef(X)(1)

这个公式描述了当给定x时,如何计算Y=1的概率,为什么偏偏是这样一个公式呢?其实也有一些简单的理由,先讲一个最简单的:不管X怎么变化,上述公式的取值都在0~1之间,而在现实世界中,任何事情发生的概率也都在0~1之间,所以就人为地将二者对标起来,至于能不能严丝合缝地对标起来,我们就不那么较真了,毕竟很多真理都是建立在假设之上的~

稍微深入一点,我们也可以计算Y=0的概率,即

P(Y=0|X)=1P(Y=1|X)=11+ef(X)(2)

二者的比值呢?

R=P(Y=1|X)P(Y=0|X)=ef(X)(3)

R有什么含义呢?R越大,样本为1的概率越大,R越小,样本为1的概率越小,而且还有个专门的名字,叫『几率』,(偶第一次遇到时感觉有点多余啊,用P(Y=1|X)不好吗),不过在数学上还是有点小便利的,对它取个对数就可以发现了:
ln(P(Y=1|x)P(Y=0|x))=f(X)(4)

左边的还有个专门的名字,叫『对数几率』,说白了,就是给几率取了个对数,那么便利在哪儿呢?便利在于概率是有范围的,而对数几率是无范围的,如果我们直接对概率建模,可选的函数有限,而如果对『对数几率』进行建模,可选的函数就多了去了,也就是说,我们的f(X)可以随便设计,最终都能有个概率上的解释,起码是几率上的解释。。。

海阔凭鱼跃,天高任鸟飞,既然如此,那我们选个最简单的f(x)…,令令令:

f(X)=w1X1+w2X2+...+wnXn(5)

f(X)现在就等价于对数几率了,f(X)越大,样本标签Y=1的几率越大,上面的表达式是一个线性的表达式,也就是说,f(X)是随着Xi线性变化的,不难发现,每个Xi都配了一个权重wiwi越大,意味着这一维特征(Xi)越重要,这也就是为什么很多场景(比如金融反欺诈)比较喜欢逻辑回归了,因为容易解释。

这里又引申出一个问题了,如果真实情况中f(X)Xi不是线性关系呢?比如发生贷款违约的概率会随着年龄变化,小于20岁或者大于80岁的有更高的的违约概率,中间的反而小一点,这种情况我们用线性模型建模就显得不恰当了,这也是逻辑回归的一个问题,不过凡事总有解决的办法,其中一种方法就是对特征进行分桶,将一个特征拆成多个特征,比如年龄,原来是一个特征(取值是0~100),现在拆成3个特征:年龄小于20,则三个特征分别是[100], 年龄大等于20小等于80,则三个特征为[010],年龄大于80,则为[001],这样就有三个权重可以调整了,从而引入了一定的非线性。

另外一种方法也是对特征进行一个转化处理,就是传说中的WOE,WOE跟对数几率有点关系,如下(可以根据贝叶斯公式推导出来):

ln(p(Y=1|X)p(Y=0|X))=ln(P(Y=1)P(Y=0))+ln(P(X|Y=1)P(X|Y=0))(6)

等号左边就是对数几率,等号右边有2项,第1项是个常数,第2项就是WOE,所以不难发现,对数几率天然与WOE成线性关系,所以我们把X映射成WOE就可以了(注意这一步操作是非线性的),那么WOE怎么算呢?显然是给定Y后的条件概率,举个简单例子(直接截了网上的一张图,bad表示Y=1,good表示Y=0):

这里写图片描述

不难发现,WOE的递增顺序(对应对数几率的递增顺序)已经变成 18-35、35-50、50以上、10-18、0-10,非线性就是在这里引入的。

不过,目前大部分产品都用第一种方式引入非线性了,因为LR可以增量式训练,在训练过程中自适应Y的漂移和变化,而第二种方式就笨拙了些,导致泛化能力受到了一定的限制。

再总结一点,逻辑回归与线性回归有哪些相似点呢?(除了名字…),一句话:我们用线性回归建模『对数几率』就得到了逻辑回归…(参考公式(4)),不过由于二者概念不同,训练的思路也略有不同,前者是最大似然,后者是最小二乘。

逻辑回归的训练是基于最大似然的原理,简单起见,我们用p代表P(Y=1|X),也就是说样本标签为1的概率p,为0的概率为1p,假设现在有n个样本,那么这n个样本的概率就是:

h(w)=1npyi(1pi)1y(7)

注意,上式是w的函数,因为给定的样本是已知的,我们的目的就是从这些样本中找到最合适的w,所谓最合适,就是使得h(w)最大(似然性最大)的那个w
w=maxwh(w)(8)

这个跟下面的是等价的:
w=minw(h(w))(9)

这么写主要是为了引出正则化,因为正则化的目的是使得||w||2(对应L2正则)尽量小,所以最后需要优化的式子就变成了:

w=minw(h(w)+C2||w||2)(10)

C是我们人为给的一个超参数,不需要拟合,可以根据经验给,也可以根据测试数据调整,C越大,意味着正则的强度越大。为什么要加正则化呢?这里给一个通俗的解释,正则化是为了抑制过拟合,所谓过拟合就是模型太迎合当前样本了,迎合的主要方式就是调大某些w,也就是将微小差异放大化,所以我们加入正则就可以一定程度上抑制这种情况。再顺口提一句,正则化其实相当于SVM中的最小化结构风险,h(w)相当于最小化经验风险。

也有很多人会从贝叶斯的角度看待正则化,其实数学上是殊途同归的,以L2正则为例,它等价于假设w服从正态分布π(0,σ2),这里的σ2是正态分布的方差,等价于1/C,也是一个超参数,可以凭经验人为给定,为什么这么说呢?正态分布的表达式如下:

θ(w)=12πσex22σ2(11)

这时候最大似然优化的就应该是公式7与公式11的乘积了,即:

w=maxw{1npyi(1pi)1y}12πσew22σ2(12)

对上面max里面的东西取『负对数』就得到了:

1n{ylnpi+(1y)ln(1pi))}+ln2πσ+w22σ2(13)

显然,最后一项就是正则项。为什么强制w服从正态分布会抑制过拟合呢?因为如果w服从正态分布,那么它过大的概率就很低。从贝叶斯的角度也可以比较直观的理解L2正则与L1正则的区别,因为L1正则对应着拉普拉斯分布,正态分布与拉普拉斯分布的区别如下:


这里写图片描述

拉普拉斯分布更陡峭,也就是说只有少数的wi在起作用,从而迫使结果更稀疏了。

给定一堆样本后,我们就是从最小化公式13的角度来找到最好的w,公式13是个关于w的凸函数,所以局部最小必然也是全局最小,所以跟着梯度下降就可以找到了(如果不是凸函数,梯度下降可能找到局部最优而不是全局最优),公式13看着复杂,其实很简单,中间的那一项是常数,跟w没有关系,直接忽略,第一项其实就是个累加,简单起见,用g(w)表示第一项,t(w)表示第三项,对g(w)求导:

αg(w)αw=1n(yipi)xi(14)

这里省去了一些推导,其实也没多少技巧,就是链式法则,重要的是结果很简明。对t(w)求导更简单,这里就不啰嗦了。

原创粉丝点击