LR(Logistic Regression)算法详解

Logistic Regression本质上还是Linear Regression的一种,只是用了一个Logistic Function将线性回归的连续值映射到了 { 0 , 1 } \{0, 1\} {0,1}空间。因此Linear Regression只能对具有线性边界的分类问题有很好的预测效果,对于非线性的边界是无能为力的。至于下面这张很经典的大家常用的图,只是做了一个feature mapping,根据已有的特征构造了其他的很多新的特征,跟Logistic Regression没有任何关系。而feature mapping的工作则是一项专门的工作,绝没有这么简单。
这里写图片描述
因此说白了,Logistic Regression就是试图找到不同类别之间的线性决策边界。

1. Logistic Regression的引出

对于 { 0 , 1 } \{0,1\} {0,1}二分类问题,使用Linear Regression难以模拟出一个合适的模型来拟合数据,因此我们试图采用另一种方法来拟合。对于二分类,其实就是某事件发生或者不发生。因此我们希望能计算出某事件发生的概率和不发生的概率。假设某事件发生的概率为 p p p,则不发生的概率为 1 − p 1-p 1p,定义一个让步值 o d d s odds odds为:
o d d s = P ( o c c u r i n g ) P ( n o t o c c u r i n g ) = p 1 − p odds=\frac {P(occuring)}{P(not occuring)}=\frac p{1-p} odds=P(notoccuring)P(occuring)=1pp
再定义一个让步比 O R ( o d d s r a t i o ) OR(odds ratio) OR(oddsratio)为两个事件 s 1 s_1 s1 s 2 s_2 s2 o d d s odds odds的比值:
O R = p 1 1 − p 1 p 0 1 − p 0 OR=\frac {\frac {p_1}{1-p_1}}{\frac {p_0}{1-p_0}} OR=1p0p01p1p1
其中 p 1 p_1 p1是实验组的事件发生概率,而 p 0 p_0 p0是对照组(一般事先已知)的事件发生概率。
在Logistic Regression问题中,因变量 y y y服从伯努利分布(又称二项分布),事件发生概率为 p p p。在Logistic Regression中,我们需要根据给定的一堆自变量,模拟出一个现象模型,来预测事件发生的概率 p p p。因此我们需要让自变量的分布和伯努利分布联系起来,这被称为 l o g i t logit logit。Logistic Regression的目标就是在统计学上预估出事件发生的概率 p ^ \hat p p^

基于以上思想,为了将自变量的线性模型和伯努利分布联系起来,我们需要一个函数来将线性模型映射到一个 { 0 , 1 } \{0, 1\} {0,1}伯努利分布上。因此上面提到的 O R OR OR的自然对数,就是我们需要的这样的一个完美的映射,也被称为 l o g i t logit logit
ln ⁡ ( o d d s ) = ln ⁡ ( p 1 − p ) \ln(odds)=\ln(\frac p{1-p}) ln(odds)=ln(1pp)
此时 p p p的范围是 ( 0 , 1 ) (0, 1) (0,1) ln ⁡ ( o d d s ) \ln(odds) ln(odds)的范围是 ( − ∞ , + ∞ ) (-\infty, +\infty) (,+)。我们需要求一下反函数:
p = l o g i t − 1 ( α ) = 1 1 + e − α p=logit^{-1}(\alpha)=\frac 1{1+e^{-\alpha}} p=logit1(α)=1+eα1
α \alpha α范围 ( − ∞ , + ∞ ) (-\infty, +\infty) (,+)。此时的 α \alpha α就是自变量的线性组合。图像为:
这里写图片描述
也就是著名的 s i g m o d sigmod sigmod函数,此函数极有利于数学计算。然后令:
ln ⁡ p 1 − p = θ 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ j x j \ln\frac p{1-p}=\theta_0+\theta_1x_1+\theta_2x_2+\cdots+\theta_jx_j ln1pp=θ0+θ1x1+θ2x2++θjxj
其中 j j j为特征的总数量。选择这个式子的原因是:假设我们的样本拥有线性决策边界(这是Logistics Regression的前提),当一个样本的特征 x ( j ) x^{(j)} x(j)的特征给出时,能够通过 θ 0 + ∑ i = 1 j θ j x j \theta_0+\sum_{i=1}^j\theta_jx_j θ0+i=1jθjxj很强烈的判断出该样本属于1类还是0类。因此此时 p p p最好无限接近1或者0,因此 p 1 − p \frac p{1-p} 1pp无限接近 + ∞ +\infty +或者 − ∞ -\infty ,而 ln ⁡ p 1 − p \ln\frac p{1-p} ln1pp无限接近1或者0,刚好能够对应起来。另外选择 e e e为底数,是为了方便计算。

2. 极大似然估计( M L E MLE MLE)

对于给定的一堆样本点,若已知其为第1类,但是我们的模型并不会算出是1,而是会根据自变量得出一个概率值。此概率为: P ( Y = y i = 1 ∣ X = x i ) P(Y=y_i=1|X=x_i) P(Y=yi=1∣X=xi)。若已知其为第0类,模型预测的概率值为: P ( Y = y i = 0 ∣ X = x i ) P(Y=y_i=0|X=x_i) P(Y=yi=0∣X=xi)。好的模型当然是两个概率尽可能越大越好,因此我们把它们乘起来,求其最大值对应的参数,求出来的就是最佳拟合模型。因此极大似然估计其实就是使得我们的模型正确地分类数据集的可能性到达最大。
P = ∏ y i = 1 P ( Y = y i = 1 ∣ X = x i ) × ∏ y i = 0 P ( Y = y i = 0 ∣ X = x i ) = ∏ i = 1 n P ( Y = y i = 1 ∣ X = x i ) y i ( 1 − P ( Y = y i = 1 ∣ X = x i ) ) 1 − y i P=\prod_{y_i=1} {P(Y=y_i=1|X=x_i)}\times \prod_{y_i=0} P(Y=y_i=0|X=x_i)=\prod_{i=1}^n{P(Y=y_i=1|X=x_i)^{y_i}(1-P(Y=y_i=1|X=x_i))^{1-y_i}} P=yi=1P(Y=yi=1∣X=xi)×yi=0P(Y=yi=0∣X=xi)=i=1nP(Y=yi=1∣X=xi)yi(1P(Y=yi=1∣X=xi))1yi
因此逻辑回归就是要求 P P P的最大值。这就是极大似然估计。
假设概率 P P P个自变量 X X X之间存在关系:
P ( y = 1 ∣ x ; θ ) = h θ ( x ) P ( y = 0 ∣ x ; θ ) = 1 − h θ ( x ) P(y=1|x;\theta)=h_\theta(x)\\ P(y=0|x;\theta)=1-h_\theta(x) P(y=1∣x;θ)=hθ(x)P(y=0∣x;θ)=1hθ(x)
合并为:
P ( y ∣ x ; θ ) = h θ y ( x ) ( 1 − h θ ( x ) ) 1 − y P(y|x;\theta)=h_\theta^y(x)(1-h_\theta(x))^{1-y} P(yx;θ)=hθy(x)(1hθ(x))1y
损失函数为:
L ( θ ) = ∏ i = 1 m h θ ( x ( i ) ) y ( i ) ( 1 − h θ ( x ( i ) ) ) 1 − y ( i ) L(\theta)=\prod_{i=1}^mh_\theta(x^{(i)})^{y^{(i)}}(1-h_\theta(x^{(i)}))^{1-y^{(i)}} L(θ)=i=1mhθ(x(i))y(i)(1hθ(x(i)))1y(i)
这个式子计算不方便,我们对其进行求对数:
l ( θ ) = ln ⁡ ( L ( θ ) ) = ∑ i = 1 m [ y ( i ) ln ⁡ ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) ln ⁡ ( 1 − h θ ( x ( i ) ) ) ] \begin{align} l(\theta)&=\ln(L(\theta))\\ &=\sum_{i=1}^m[y^{(i)}\ln(h_\theta(x^{(i)}))+(1-y^{(i)})\ln(1-h_\theta(x^{(i)}))] \end{align} l(θ)=ln(L(θ))=i=1m[y(i)ln(hθ(x(i)))+(1y(i))ln(1hθ(x(i)))]
然后对 l ( θ ) l(\theta) l(θ)求偏导:
∂ ( l ( θ ) ) ∂ θ j = ∑ i = 1 m ( y ( i ) − h θ ( x ( i ) ) ⋅ x j ( i ) ) \frac {\partial (l(\theta))}{\partial \theta_j}=\sum_{i=1}^m(y^{(i)}-h_\theta(x^{(i)})\cdot x_j^{(i)}) θj(l(θ))=i=1m(y(i)hθ(x(i))xj(i))
由于这里求最大值,因此是加号:
θ j : = θ j + α ∑ i = 1 m ( y ( i ) − h θ ( x ( i ) ) ) ⋅ x j ( i ) \theta_j:=\theta_j+\alpha\sum_{i=1}^m(y^{(i)}-h_\theta(x{(i)}))\cdot x_j^{(i)} θj:=θj+αi=1m(y(i)hθ(x(i)))xj(i)
通过用类似线性回归的不断迭代,最终可以求出 θ ⃗ \vec \theta θ 的值(具体查看线性回归的求解,此处略去)。求解方法其实有很多,最常用的用是牛顿法。

3. 正则化

为了避免模型的过拟合,需要加上正则项,则:
l ′ ( θ ) = l ( θ ) + r e g u l a r i z a t i o n l'(\theta)=l(\theta)+regularization l(θ)=l(θ)+regularization
常用的正则化方法有2个,分别是

  • L1
    θ = arg ⁡ min ⁡ θ ∑ i = 1 m [ y ( i ) ln ⁡ ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) ln ⁡ ( 1 − h θ ( x ( i ) ) ) ] + λ ∑ i = 0 k ∣ θ i ∣ \theta=\arg\min_\theta\sum_{i=1}^m[y^{(i)}\ln(h_\theta(x^{(i)}))+(1-y^{(i)})\ln(1-h_\theta(x^{(i)}))]+\lambda\sum_{i=0}^k|\theta_i| θ=argθmini=1m[y(i)ln(hθ(x(i)))+(1y(i))ln(1hθ(x(i)))]+λi=0kθi

  • L2
    θ = arg ⁡ min ⁡ θ ∑ i = 1 m [ y ( i ) ln ⁡ ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) ln ⁡ ( 1 − h θ ( x ( i ) ) ) ] + λ ∑ i = 0 k θ i 2 \theta=\arg\min_\theta\sum_{i=1}^m[y^{(i)}\ln(h_\theta(x^{(i)}))+(1-y^{(i)})\ln(1-h_\theta(x^{(i)}))]+\lambda\sum_{i=0}^k\theta_i^2 θ=argθmini=1m[y(i)ln(hθ(x(i)))+(1y(i))ln(1hθ(x(i)))]+λi=0kθi2

适用情况如下:

L2L1
由于有分析解决方案,计算效率高数据不稀疏的时候计算效率不高
产生非稀疏的输出产生稀疏的输出
没有特征选择有内置的特征选择

4. 牛顿法求解

牛顿法是一种进行 M L E MLE MLE的优化方法,牛顿法在求解逻辑回归时比梯度下降法收敛速度快。

4.1 Hessian

Hessian是一个多变量实值函数的二阶偏导数组成的方块矩阵,假设有一实数函数 f ( x 1 , x 2 , ⋯   , x m ) f(x_1,x_2,\cdots, x_m) f(x1,x2,,xm)。如果 f f f 所有的二阶偏导数都存在,那么 f f f的海森矩阵的第 i j ij ij项即:
H ( f ) i j ( x ) = D i D j f ( x ) H(f)_{ij}(x)=D_iD_jf(x) H(f)ij(x)=DiDjf(x)
其中 x = ( x 1 , x 2 , ⋯   , x m ) x=(x_1,x_2,\cdots,x_m) x=(x1,x2,,xm),即
H ( f ) = [ ∂ 2 f ∂ x 1 2 ∂ 2 f ∂ x 1 x 2 ⋯ ∂ 2 f ∂ x 1 x m ∂ 2 f ∂ x 2 x 1 ∂ 2 f ∂ x 2 2 ⋯ ∂ 2 f ∂ x 2 x m ⋮ ∂ 2 f ∂ x m x 1 ∂ 2 f ∂ x m x 2 ⋯ ∂ 2 f ∂ x m 2 ] H(f)= \begin{bmatrix} \frac {\partial^2f}{\partial x_1^2} \frac {\partial^2f}{\partial x_1x_2} \cdots\frac {\partial^2f}{\partial x_1x_m}\\ \frac {\partial^2f}{\partial x_2x_1} \frac {\partial^2f}{\partial x_2^2} \cdots\frac {\partial^2f}{\partial x_2x_m}\\ \vdots\\ \frac {\partial^2f}{\partial x_mx_1} \frac {\partial^2f}{\partial x_mx_2} \cdots\frac {\partial^2f}{\partial x_m^2}\\ \end{bmatrix} H(f)= x122fx1x22fx1xm2fx2x12fx222fx2xm2fxmx12fxmx22fxm22f

Hessian matrix在用牛顿法解决大规模优化问题时经常用到。

4.2 牛顿法步骤:

不断进行下面的迭代:
β n e w = β o l d − H f ( β ) − 1 ∇ f ( β ) \beta^{new}=\beta^{old}-Hf(\beta)^{-1}\nabla f(\beta) βnew=βoldHf(β)1f(β)
其中 H f ( β ) = − X T W X Hf(\beta)=-X^TWX Hf(β)=XTWX,为函数 f ( x ) f(x) f(x)的海森矩阵。 ∇ f ( β ) = X T ( y − p ) \nabla f(\beta)=X^T(y-p) f(β)=XT(yp)是函数的梯度。 W : = d i a g ( p ( 1 − p ) ) W:=diag(p(1-p)) W:=diag(p(1p))是权重, p p p是在当前 β \beta β下的概率预测值。代码为:

def new_step(curr_beta, X, lam=None):
	p = np.array(sigmod(X.dot(curr[:,0])), ndmin=2).T #计算新的概率p
    
    W = np.diag((p(1-p))[:, 0]) #计算新的权重
    
    hessian = X.T.dot(W).dot(X) #计算当前权重的hessian矩阵
    
    grad = X.T.dot(y-p) #计算梯度
    
    if lam:
    	#正则化
    	step, *_ = np.linalg.lstsq(hessian + lam*np.eye(curr_beta.shape[0]), grad)
    else:
    	step, *_ = np.linalg.lstsq(hessian, grad)
    
    beta_new = curr_beta + step
    
    return beta_new

beta_old, beta = np.ones((len(X.columns),1)), np.zeros((len(X.columns),1))

coefs_converged = False

while not coefs_converges:
	beta_old = beta
    
    beta = newton_step(beta, X, lam=lam)
    
    coef_converged = check_coefs_convergence(beta_old, beta, tolerance, itercount)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值