逻辑回归_极大似然估计

二、逻辑回归原理

  逻辑回归又叫对数几率回归,是一种广义的线性回归分析模型。虽然名字里有回归,但其实是分类模型,常用于二分类。

1.什么是逻辑回归

  由于逻辑回归的原理是用逻辑函数把线性回归的结果 ( − ∞ , + ∞ ) (-∞,+∞) (,+)映射到 ( 0 , 1 ) (0,1) (0,1),故先介绍线性回归函数和逻辑函数,在本节的第三部分介绍逻辑回归函数。

1.1 线性回归函数

   ① 线性回归函数的数学表达式:
y = θ 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n      ( 1 ) y = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \cdots + \theta_n x_n ~~~~ (1) y=θ0+θ1x1+θ2x2++θnxn    (1)
其中 x i x_i xi是自变量, y y y是因变量, y y y的值域为 ( − ∞ , ∞ ) (-∞,∞) (,) θ 0 \theta_0 θ0是常数项, θ i ( i = 1 , 2 , . . . , n ) \theta_i(i=1,2,...,n) θi(i=1,2,...,n)是待求系数,不同的权重 θ i \theta_i θi反映了自变量对因变量不同的贡献程度。

1.2 逻辑函数( s i g m o i d sigmoid sigmoid函数)

  ① 逻辑函数的数学表达式:
g ( y ) = 1 1 + e − y = e y 1 + e y      ( 2 ) g(y) = \frac{1} {1+e^{-y}} = \frac{e^{y}} {1+e^{y}} ~~~~(2) g(y)=1+ey1=1+eyey    (2)

  ② 逻辑函数的图像:
在这里插入图片描述

图1:逻辑函数

从图1:逻辑函数中可以看出,当 y y y 趋向于 + ∞ , g ( y ) +∞ ,g(y) +g(y)趋近于 1 1 1,当 y y y 趋向于 − ∞ , g ( y ) -∞, g(y) ,g(y)趋近于 0 0 0。从图中亦可以看出当 y > 5 y>5 y>5 g ( y ) g(y) g(y)已经接近于 1 1 1。想一想概率的定义:概率论的基本概念,是一个在0到1之间的实数,是对随机事件发生的可能性的度量。概率也是一个介于 0 0 0 1 1 1之间的实数,很自然的我们会把概率与逻辑函数的值域联系到一起。

  ③ 逻辑函数的导函数,根据公式 ( 2 ) (2) (2)推导得:
g ′ ( y ) = e y ( 1 + e y ) 2 = e y ( 1 + e y ) ∗ 1 ( 1 + e y ) = e y ( 1 + e y ) ∗ ( 1 − e y ( 1 + e y ) ) = g ( y ) ( 1 − g ( y ) )      ( 3 ) g^{'}(y) = \frac{e^{y}} {(1+e^{y})^2} = \frac{e^{y}} {(1+e^{y})} * \frac{1} {(1+e^{y})} = \frac{e^{y}} {(1+e^{y})} * (1-\frac{e^{y}} {(1+e^{y})}) = g(y)(1-g(y)) ~~~~(3) g(y)=(1+ey)2ey=(1+ey)ey(1+ey)1=(1+ey)ey(1(1+ey)ey)=g(y)(1g(y))    (3)

从上面的推导可以看出逻辑函数的导函数可以转化成本身的一个表达式,这在后面用梯度下降法求解参数时会用到,可以先有个印象。

  从本节对逻辑函数的介绍知,逻辑函数是一个连续且任意阶可导的函数,值域为 ( 0 , 1 ) (0,1) (0,1)

1.2 逻辑回归函数

   在逻辑回归的由来一文中详细推导了得出逻辑回归函数的步骤,也得知逻辑回归的因变量 g ( y ) g(y) g(y)就是伯努利分布中样本为 1 1 1的概率。前文中也提到过逻辑回归的原理是用逻辑函数把线性回归的结果从 ( − ∞ , + ∞ ) (-∞,+∞) (,+)映射到 ( 0 , 1 ) (0,1) (0,1)。我们用公式描述上面这句话:

g ( y ) = 1 1 + e − y = 1 1 + e − ( θ 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n ) = 1 1 + e − ( θ T X )      ( 4 ) g(y) = \frac{1} {1+e^{-y}} = \frac{1} {1+e^{-(\theta_0 + \theta_1 x_1 + \theta_2 x_2 + \cdots + \theta_n x_n)}} = \frac{1} {1+e^{-(\theta^TX)}}~~~~(4) g(y)=1+ey1=1+e(θ0+θ1x1+θ2x2++θnxn)1=1+e(θTX)1    (4)
把线性回归函数的结果 y y y,放到逻辑函数中去,就构造了逻辑回归函数。由 y y y的值域和逻辑函数的值域知,在逻辑回归函数中用逻辑函数把线性回归的结果 ( − ∞ , + ∞ ) (-∞,+∞) (,+)映射到 ( 0 , 1 ) (0,1) (0,1),得到的这个结果类似一个概率值。

  ① 几率 ( o d d s ) (odds) (odds) 与对数几率

  求公式 ( 2 ) (2) (2)逻辑函数,过程如下:

g ( y ) = 1 1 + e − y ⟹ e − y = 1 g ( y ) − 1 = 1 − g ( y ) g ( y ) ⟹ y = l n ( g ( y ) 1 − g ( y ) )      ( 5 ) g(y) = \frac{1} {1+e^{-y}} \Longrightarrow e^{-y} = \frac{1} {g(y)}-1 = \frac{1-g(y)} {g(y)} \Longrightarrow y = ln(\frac{g(y)} {1-g(y)}) ~~~~(5) g(y)=1+ey1ey=g(y)11=g(y)1g(y)y=ln(1g(y)g(y))    (5)

由公式 ( 4 ) (4) (4)逻辑回归函数可知, y = θ T X y = \theta^T X y=θTX,现在把逻辑回归的结果 g ( θ T X ) g(\theta^T X) g(θTX) 看成某个事件发生的概率,那么这个事件不发生的概率就是 1 − g ( θ T X ) 1-g(\theta^T X) 1g(θTX),两者的比值称为几率 ( o d d s ) (odds) (odds),令 g ( θ T X ) = p g(\theta^T X) = p g(θTX)=p 可以得到如下公式:

θ T X = l n ( g ( y ) 1 − g ( y ) ) ⟹ θ T X = l n ( p 1 − p ) = l n ( o d d s )      ( 6 ) \theta^T X = ln(\frac{g(y)} {1-g(y)}) \Longrightarrow \theta^T X = ln(\frac{p} {1-p}) = ln(odds) ~~~~(6) θTX=ln(1g(y)g(y))θTX=ln(1pp)=ln(odds)    (6)

即线性回归的结果为对数几率。

   如果我们把车贷中违约(不按期还款导致逾期产生坏账)客户的样本标签定义为 1 1 1,正常(按期还款)客户样本标签定义为 0 0 0。可以进一步把逻辑函数的值定义为客户违约的后验概率。

P ( Y = 1 ∣ X ) = 1 1 + e − y = 1 1 + e − ( θ 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n ) = 1 1 + e − ( θ T X )      ( 7 ) P(Y=1|X) = \frac{1} {1+e^{-y}} = \frac{1} {1+e^{-(\theta_0 + \theta_1 x_1 + \theta_2 x_2 + \cdots + \theta_n x_n)}} = \frac{1} {1+e^{-(\theta^TX)}} ~~~~(7) P(Y=1X)=1+ey1=1+e(θ0+θ1x1+θ2x2++θnxn)1=1+e(θTX)1    (7)

如果历史上我们累积了大量的违约客户和正常客户的样本数据,比如违约客户和正常客户的年龄、性别、工资、房贷等众多标签,这些标签就是逻辑回归函数中的 x i x_i xi,我们可以用这些样本数据训练逻辑回归模型,并求解得到变量 x x x的参数(系数) θ i \theta_i θi。标签数据年龄、工资等是已有信息,如果参数(系数) θ i \theta_i θi也已经求出,把标签数据和参数代入逻辑回归模型,就可以预测任一客户违约的概率。那如何求解逻辑回归模型中的参数?在第二节中做简要说明,在Python中已有现成的封装函数,直接调用即可。

2.如何求解逻辑回归中的参数?

2.1 极大似然函数

   先来看一个小例子:如果小华这次考试考了90分以上,妈妈99%会奖励小华一个手机,如果没有考到90分以上,妈妈99%不会奖励小华手机。现在小华没有得到手机,问小华这次有没有考到90分。可能我们的第一反应是小华大概率没有考到90分以上。这种利用已知样本结果,反推最有可能导致这样结果的参数值,就是极大似然估计。结合逻辑回归函数,如果我们已经积累了大量的违约客户和正常客户的样本数据,利用极大似然函数由果溯因,估计出使得目前结果的可能性最大参数(系数)θ,有了参数我们就可以求任何一个客户违约的概率了。

   由公式 ( 7 ) (7) (7)提到过客户违约的后验概率,可以推导出客户不违约的后验概率为:

P ( Y = 0 ∣ X ) = 1 − 1 1 + e − y = 1 − 1 1 + e − ( θ T X ) = 1 1 + e ( θ T X )      ( 8 ) P(Y=0|X) =1- \frac{1} {1+e^{-y}} = 1-\frac{1} {1+e^{-(\theta^TX)}} = \frac{1} {1+e^{(\theta^TX)}} ~~~~(8) P(Y=0X)=11+ey1=11+e(θTX)1=1+e(θTX)1    (8)

   令: 1 1 + e − y = g ( y ) = g θ ( x )      ( 9 ) \frac{1} {1+e^{-y}} = g(y) = g_\theta(x) ~~~~(9) 1+ey1=g(y)=gθ(x)    (9)

   则违约的后验概率可以写成: P ( Y = 1 ∣ X ) = g θ ( x )      ( 10 ) P(Y=1|X) = g_\theta(x) ~~~~(10) P(Y=1X)=gθ(x)    (10)

   则不违约的后验概率可以写成: P ( Y = 0 ∣ X ) = 1 − g θ ( x )      ( 11 ) P(Y=0|X) = 1- g_\theta(x) ~~~~(11) P(Y=0X)=1gθ(x)    (11)

   对于某一个客户,我们采集到了样本数据 ( X , y ) (X,y) (X,y)。对于这个样本,他的标签是 y y y的概率可以定义成:

P ( y ∣ X , θ ) = g θ ( x ) y ∗ ( 1 − g θ ( x ) ) 1 − y      ( 12 ) P(y|X,\theta) = g_\theta(x)^y * (1-g_\theta(x))^{1-y} ~~~~(12) P(yX,θ)=gθ(x)y(1gθ(x))1y    (12)

其中 y ∈ 0 , 1 y∈{0,1} y0,1。当 y = 0 y=0 y=0时,上式为不违约的后验概率,当 y = 1 y=1 y=1时,上式为违约的后验概率。现在我们有 m m m个客户的观测样本, D = { ( X 1 , y 1 ) , ( X 2 , y 2 ) + ⋯ + ( X m , y m ) } D = \lbrace(X_1,y_1),(X_2,y_2)+\cdots + (X_m,y_m)\rbrace D={(X1,y1),(X2,y2)++(Xm,ym)},将每一个样本发生的概率相乘,就是这个合成在一起得到的合事件发生的总概率(利用概率中的乘法公式),即为似然函数,可以写成:

L ( θ ) = ∏ i = 1 m l n ( p ( y i ∣ X i ; θ ) ) = ∏ i = 1 m ( g θ ( x i ) y i ∗ ( 1 − g θ ( x i ) ) 1 − y i )      ( 13 ) L(\theta) = \prod_{i=1}^{m}ln(p(y_i|X_i;\theta)) = \prod_{i=1}^{m} (g_\theta(x_i)^{y_i} * (1-g_\theta(x_i))^{1-y_i}) ~~~~(13) L(θ)=i=1mln(p(yiXi;θ))=i=1m(gθ(xi)yi(1gθ(xi))1yi)    (13)

其中 θ \theta θ为待求参数。

   我们总是希望出现目前结果的可能性最大,所以想要得到极大化似然函数对应的参数 θ \theta θ。我们引入不改变函数单调性的对数函数 l n ln ln,把连乘变成加法,得到对数似然函数,使用对数似然函数,不仅仅把连乘变成加法,便于求解,而且对数似然函对应的损失函数是关于未知参数的高阶连续可导的凸函数,便于求其全局最优解。:

l ( θ ) = l n ( L ( θ ) ) = ∑ i = 1 m l n ( p ( y i ∣ X i ; θ ) ) = ∑ i = 1 m [ y i l n ( g θ ( x i ) ) + ( 1 − y i ) l n ( 1 − g θ ( x i ) ) ]      ( 14 ) l(\theta) = ln(L(\theta)) = \sum_{i=1}^{m}ln(p(y_i|X_i;\theta)) = \sum_{i=1}^{m} [{y_i}ln(g_\theta(x_i)) + (1-y_i)ln(1-g_\theta(x_i))] ~~~~(14) l(θ)=ln(L(θ))=i=1mln(p(yiXi;θ))=i=1m[yiln(gθ(xi))+(1yi)ln(1gθ(xi))]    (14)

至此,可以用梯度上升法求解对数似然函数,求出使得目前结果的可能性最大的参数 θ \theta θ。也可以由对数似然函数构造损失函数,用梯度下降法求出使得损失最小对应的参数 θ \theta θ,接下来看下逻辑回归中的损失函数。

2.2 构造损失函数

   在机器学习中有损失函数的概念,我们知道损失函数一般定义为预测值和真实值的差,比如我们预测小华在这次考试中能考 98 98 98分,成绩出来了小华实际考了 97 97 97分,小华的成绩预测值和真实值差为 1 1 1,这个 1 1 1通俗理解就是损失函数的值。从上面的案例知,如果损失函数越小,说明模型预测越准。所以在函数比较复杂没有确定解(解析解)或很难求出确定解的情况下,一般求的是数值解(近似解)。一般模型求数值解可以求出使得损失函数最小对应的参数 θ \theta θ。结合逻辑回归中的极大似然函数,如果取整个数据集上的平均对数似然损失,我们可以得到:

J ( θ ) = − 1 m l n ( L ( θ ) ) = − 1 m ∑ i = 1 m [ y i l n ( g θ ( x i ) ) + ( 1 − y i ) l n ( 1 − g θ ( x i ) ) ]      ( 15 ) J(\theta) = -\frac{1}{m} ln(L(\theta)) = -\frac{1}{m} \sum_{i=1}^{m} [{y_i}ln(g_\theta(x_i)) + (1-y_i)ln(1-g_\theta(x_i))] ~~~~(15) J(θ)=m1ln(L(θ))=m1i=1m[yiln(gθ(xi))+(1yi)ln(1gθ(xi))]    (15)

其中 J ( θ ) J(\theta) J(θ)为损失函数,由对数似然函数前面添加负号取平均得到。即在逻辑回归模型中,最大化似然函数和最小化损失函数实际上是等价的(求最大化对数似然函数对应的参数 θ \theta θ和求最小化平均对数似然损失对应的参数 θ \theta θ是一致的),即:

m a x ( l n ( L ( θ ) ) ) ⟺ m i n ( J ( θ ) )      ( 16 ) max(ln(L(\theta))) \Longleftrightarrow min(J(\theta)) ~~~~(16) max(ln(L(θ)))min(J(θ))    (16)

那如何求得损失函数最小对应的参数呢?可以用2.3讲到的方法:梯度下降法。

2.3用梯度下降法求解参数

  先以一个人下山为例讲解梯度下降法的步骤:

    step1:明确自己现在所处的位置;

    step2:找到现在所处位置下降最快的方向;

    step3: 沿着第二步找到的方向走一个步长,到达新的位置,且新位置低于刚才的位置;

    step4:判断是否下山,如果还没有到最低点继续步骤一,如果已经到最低点,则停止。

从上面的分析知,用梯度下降法求解参数最重要的是找到下降最快的方向和确定要走的步长。那么什么是函数下降最快的方向?如果学过一元函数的导数,应该知道导数的几何意义是某点切线的斜率。除此之外导数还可以表示函数在该点的变化率,导数越大,表示函数在该点的变化越大。

在这里插入图片描述

图2:曲线的导数

从图2可以发现 p 2 p2 p2点的斜率大于 p 1 p1 p1点的斜率,即 p 2 p2 p2点的导数大于 p 1 p1 p1点的导数。对于多维向量 x = ( x 1 , x 2 , ⋯   , x m ) x = (x_1,x_2,\cdots,x_m) x=(x1,x2,,xm) 它的导数叫做梯度(偏导数),当求某个变量的导数时,把其它变量视为常量,对整个函数求导,也就是分别对于它的每个分量求导数,即 x ′ = ( x 1 ′ , x 2 ′ , ⋯   , x m ′ ) x^{'} = (x_1^{'},x_2^{'},\cdots,x_m^{'}) x=(x1,x2,,xm)。对于函数的某个特定点,它的梯度就表示从该点出发,函数值变化最为迅猛的方向。至此梯度下降法求解参数的方向已经找到,那就是函数的梯度方向。接下来推导损失函数的梯度(偏导数),对损失函数公式 ( 15 ) (15) (15)求偏导得:

∂ J ( θ ) ∂ θ j = − 1 m ∑ i = 1 m [ y i ∗ 1 g θ ( x i ) ∗ ∂ g θ ( x i ) ∂ θ j + ( 1 − y i ) ∗ 1 1 − g θ ( x i ) ∗ ∂ g θ ( x i ) ∂ θ j ]      ( 17 ) \frac{\partial J(\theta)}{\partial \theta_j} = -\frac{1}{m} \sum_{i=1}^{m} [{y_i}*\frac{1}{g_\theta(x_i)}*\frac{\partial g_\theta(x_i)}{\partial \theta_j} + (1-y_i)*\frac{1}{1-g_\theta(x_i)}*\frac{\partial g_\theta(x_i)}{\partial \theta_j}] ~~~~(17) θjJ(θ)=m1i=1m[yigθ(xi)1θjgθ(xi)+(1yi)1gθ(xi)1θjgθ(xi)]    (17)

∂ J ( θ ) ∂ θ j = − 1 m ∑ i = 1 m [ y i ∗ 1 g θ ( x i ) + ( 1 − y i ) ∗ 1 1 − g θ ( x i ) ] ∗ ∂ g θ ( x i ) ∂ θ j      ( 17 ) \frac{\partial J(\theta)}{\partial \theta_j} = -\frac{1}{m} \sum_{i=1}^{m} [{y_i}*\frac{1}{g_\theta(x_i)} + (1-y_i)*\frac{1}{1-g_\theta(x_i)}]*\frac{\partial g_\theta(x_i)}{\partial \theta_j} ~~~~(17) θjJ(θ)=m1i=1m[yigθ(xi)1+(1yi)1gθ(xi)1]θjgθ(xi)    (17)

∂ J ( θ ) ∂ θ j = − 1 m ∑ i = 1 m [ y i ∗ 1 g ( θ T X i ) + ( 1 − y i ) ∗ 1 1 − g ( θ T X i ) ] ∗ ∂ g ( θ T X i ) ∂ θ j      ( 17 ) \frac{\partial J(\theta)}{\partial \theta_j} = -\frac{1}{m} \sum_{i=1}^{m} [{y_i}*\frac{1}{g(\theta^TX_i)} + (1-y_i)*\frac{1}{1-g(\theta^TX_i)}]*\frac{\partial g(\theta^TX_i)}{\partial \theta_j} ~~~~(17) θjJ(θ)=m1i=1m[yig(θTXi)1+(1yi)1g(θTXi)1]θjg(θTXi)    (17)

∂ J ( θ ) ∂ θ j = − 1 m ∑ i = 1 m [ y i ∗ 1 g ( θ T X i ) + ( 1 − y i ) ∗ 1 1 − g ( θ T X i ) ] ∗ g ( θ T X i ) ∗ [ 1 − g ( θ T X i ) ] ∗ ∂ ( θ T X i ) ∂ θ j      ( 17 ) \frac{\partial J(\theta)}{\partial \theta_j} = -\frac{1}{m} \sum_{i=1}^{m} [{y_i}*\frac{1}{g(\theta^TX_i)} + (1-y_i)*\frac{1}{1-g(\theta^TX_i)}]*g(\theta^TX_i)*[1-g(\theta^TX_i)]*\frac{\partial (\theta^TX_i)}{\partial \theta_j} ~~~~(17) θjJ(θ)=m1i=1m[yig(θTXi)1+(1yi)1g(θTXi)1]g(θTXi)[1g(θTXi)]θj(θTXi)    (17)

∂ J ( θ ) ∂ θ j = − 1 m ∑ i = 1 m [ y i ∗ ( 1 − g ( θ T X i ) ) + ( 1 − y i ) ∗ ( g ( θ T X i ) ) ] ∗ x i j      ( 17 ) \frac{\partial J(\theta)}{\partial \theta_j} = -\frac{1}{m} \sum_{i=1}^{m} [{y_i}*(1-g(\theta^TX_i)) + (1-y_i)*(g(\theta^TX_i))]*x_i^{j} ~~~~(17) θjJ(θ)=m1i=1m[yi(1g(θTXi))+(1yi)(g(θTXi))]xij    (17)

∂ J ( θ ) ∂ θ j = − 1 m ∑ i = 1 m [ y i − g ( θ T X i ) ] ∗ x i j      ( 17 ) \frac{\partial J(\theta)}{\partial \theta_j} = -\frac{1}{m} \sum_{i=1}^{m} [{y_i}-g(\theta^TX_i)]*x_i^{j} ~~~~(17) θjJ(θ)=m1i=1m[yig(θTXi)]xij    (17)

∂ J ( θ ) ∂ θ j = 1 m ∑ i = 1 m [ g ( θ T X i ) − y i ] ∗ x i j      ( 17 ) \frac{\partial J(\theta)}{\partial \theta_j} = \frac{1}{m} \sum_{i=1}^{m} [{g(\theta^TX_i)-y_i}]*x_i^{j} ~~~~(17) θjJ(θ)=m1i=1m[g(θTXi)yi]xij    (17)

至此,找到了梯度下降中的方向,只要给定一个步长就可以用迭代的方式来求待求参数,迭代的公式为:

θ j k + 1 = θ j k − a F      ( 18 ) \theta_j^{k+1} = \theta_j^{k}-aF ~~~~(18) θjk+1=θjkaF    (18)

其中,把当前位置的 θ \theta θ代入 − a F -aF aF得到的值,才是该点处梯度下降的步长。 a a a是学习率,是一个大于 0 0 0的数,它能控制着沿某个方向走多长一段距离,不是步长。 F F F是方向,可表示为:

F = ∂ J ( θ ) ∂ θ j      ( 18 ) F = \frac{\partial J(\theta)}{\partial \theta_j} ~~~~(18) F=θjJ(θ)    (18)

则迭代公式可以进一步写为:

θ j k + 1 = θ j k − a ∗ 1 m ∑ i = 1 m [ g ( θ T X i ) − y i ] ∗ x i j      ( 18 ) \theta_j^{k+1} = \theta_j^{k}-a*\frac{1}{m} \sum_{i=1}^{m} [{g(\theta^TX_i)-y_i}]*x_i^{j} ~~~~(18) θjk+1=θjkam1i=1m[g(θTXi)yi]xij    (18)

   一般迭代到达一定次数或学习曲线小于某个阈值时,停止迭代。关于学习率,吴恩达老师的机器学习课介绍了动态学习率的方法,也就是随着迭代的次数不断地减小学习率的值,实际上,我们假设在刚开始下山时是处于一个较高的位置,这时候我们是可以将“步子”迈大一点而不用担心“跨过头”的,但是随着越来越靠近山底(迭代的次数越来越多),这时候我们的“步子“应该是越来越小,直到到达最低点。

参考文献:

1.https://cloud.tencent.com/developer/article/1694353

2.https://cloud.tencent.com/developer/article/1694338

3.https://blog.csdn.net/weixin_42471573/article/details/124707000

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值