机器学习之Logistic回归详解

前言

Logistic回归是把线性回归(连续的)转化为二分类的问题(不连续的)的模型
今天从头梳理一下Logistic回归。
文章的整体思路是:

  1. 由Odds引出logit函数
  2. 由logit函数推导出它的反函数sigmod函数
  3. sigmod函数推导出Logistic回归
  4. 求解参数 θ \theta θ

Odds引出logit函数

Odds的全称是:The Odds Of Experiencing An Event
翻译过来就是事件发生与不发生的概率的比值。
它是用来衡量特征当中分类之间关联的一种方式。指的是事件发生的概率(简称正例下文会经常用到)与该事件不发生的概率(负例)的比值,即:
o d d s = p 1 − p odds = \frac{p}{1-p} odds=1pp

由此引出一个新的函数 --> Logit函数,其中就是Odds取对数,即:
l o g i t ( p ) = ln ⁡ p 1 − p = θ T x logit(p) = \ln\frac{p}{1-p} = \theta^T x logit(p)=ln1pp=θTx
θ T x \theta^T x θTx是什么呢?
θ T \theta^T θT θ ⃗ \vec\theta θ 转置, θ ⃗ \vec\theta θ 是个列向量,机器学习中所有的向量默认都是列向量。Logistic回归不是通过线性回归进行二分类吗? θ \theta θ就是线性回归方程的系数。
θ T \theta^T θT展开以后就是:
θ T = [ θ 1 ,   θ 2 ,   θ 3 ,   ⋯   ,   θ n ] \theta^{T} = [\theta_{1}, \ \theta_{2},\ \theta_{3}, \ \cdots, \ \theta_{n}] θT=[θ1, θ2, θ3, , θn]
x x x(小写)也是个列向量,表示一个样本中的数据,
x x x(小写)展开以后为:
x ⃗ = [ x 1 x 2 x 3 ⋮ x n ] \vec x = \begin{bmatrix} x_{1} \\ x_{2} \\ x_{3} \\ \vdots \\ x_{n} \end{bmatrix} x =x1x2x3xn
则:
θ T x = θ 1 x 1 ,   θ 2 x 2 ,   θ 3 x 3 ,   ⋯   ,   θ n x n \theta^T x =\theta_{1}x_{1}, \ \theta_{2}x_{2}, \ \theta_{3}x_{3}, \ \cdots, \ \theta_{n}x_{n} θTx=θ1x1, θ2x2, θ3x3, , θnxn

logit函数推导它的反函数sigmod函数

让我们再回到logit函数:
l o g i t ( p ) = ln ⁡ p 1 − p logit(p) = \ln\frac{p}{1-p} logit(p)=ln1pp
p p p是事件发生的概率,取值范围为 ( 0 , 1 ) (0, 1) (0,1),于是logit函数的取值范围为 ( − ∞ , + ∞ ) (-\infty, +\infty) (,+)

logit函数是人为定义的.在坐标轴上画出来是这样的:
logit函数

上文中 l o g i t ( p ) = θ T X logit(p) = \theta^T X logit(p)=θTX是我们根据数据构建出来的线性回归方程,我们假设logit函数符合某种线性关系,也就是说和我们的特征之间呈现某种线性关系,注意,这是我们人为定义的.

为什么可以这么人为定义呢?
机器学习中好多算法都是基于某种人为定义的假设,然后基于这种假设进行层层的推导,最终得到某种模型,然后用数据验证我们的假设是否理想(准确率有多高),不理想的话再换一种模型(换一种假设)

sigmod函数其实就是logit函数的反函数,推导如下:
令: f = l o g i t ( p ) f = logit(p) f=logit(p)
于是有:

f = ln ⁡ p 1 − p f = \ln\frac{p}{1-p} f=ln1pp
两边同时取 e e e
e f = p 1 − p ( 1 − p ) e f = p ( 1 + e f ) p = e f p = e f 1 + e f p = 1 1 + e − f \begin{aligned} e^{f} = \frac{p}{1-p} \\ \\ (1-p)e^{f} = p \\ \\ (1+e^{f})p = e^{f}\\ \\ p = \frac{e^{f}}{1+e^{f}} \\ p =\frac{1}{1+e^{-f}} \end{aligned} ef=1pp(1p)ef=p(1+ef)p=efp=1+efefp=1+ef1
f = θ T x f = \theta^T x f=θTx,于是我们的sigmod函数就出来了:
p = 1 1 + e − θ T x p =\frac{1}{1+e^{-\theta^T x}} p=1+eθTx1

让我们再回到当初,
当初我们为什么要求解这个sigmoid函数呢?
一开始的时候我们有logit函数,通过这个函数我们可以输入一个p然后得到一个y,但是这没什么鸟用
于是我们假定x与Y之间存在某种线性关系,通过X与Y和Y与P之间的关系,我们得到sigmoid函数,即输入一个x(特征值)得到一个p(概率),这个就很有用了.
那么当初的logit函数为什么要加个 ln ⁡ \ln ln呢?
OK,这就是sigmoid函数的核心:推导出来的sigmoid函数正好将原有函数的取值范围映射到了0和1之间,即sigmod函数:
P = g ( θ T x ) = 1 1 + e − θ T x P ∼ ( 0 , 1 ) \begin{aligned} P =g(\theta^T x) = \frac{1}{1+e^{-\theta^T x}} \\ \\ P \sim (0, 1) \end{aligned} P=g(θTx)=1+eθTx1P(0,1)
OK,它是不是与概率的取值范围是一致的呢?后面处处都会用到滴.

sigmod函数推导Logistic回归

上面我们求导出来 的sigmod函数是连续的,而Logistic是通过线性回归做二分类的,它们怎么连接起来呢?
我们知道:

  • X是我们的数据
  • Y是分类结果
  • P是预测分类结果的概率

我们是不是可以认为:

  • 当概率P大于某一阈值的时候是正例
  • 当概率P小于某一阈值的时候是负例

我们可以发现sigmod函数是一个关于点 ( 0 , 0.5 ) (0, 0.5) (0,0.5)对称的奇函数,
于是有:
f ( x ) + f ( − x ) = 1 f(x) + f(-x) = 1 f(x)+f(x)=1
这是一个很好的性质?我们正好可以认为当 P > 0.5 P > 0.5 P>0.5 的时候是正例,当 P ≤ 0.5 P \leq 0.5 P0.5的时候是负例。
于是Logistic回归就出来了:
y ^ = { 1 , P ( y ^ = 1 ) > p 阈 0 , P ( y ^ = 0 ) ≤ p 阈 \hat y = \begin{cases} 1, P(\hat y = 1) > p_{阈} \\ 0, P(\hat y = 0) \leq p_{阈} \\ \end{cases} y^={1,P(y^=1)>p0,P(y^=0)p
注:

  • y ^ \hat y y^表示预测结果
  • y y y表示实际结果
  • P ( y ^ = x ) P(\hat y = x) P(y^=x)表示sigmod函数,它可以取到不同的概率值
  • Y Y Y本质上就是一个类别(类别不是连续的,直接就是等于 0 0 0,或者等于 1 1 1,只有这两个值)

需要说明的是用线性回归做分类一定要慎重
因为阈值不好确定,本例中的sigmod函数正好关于点 ( 0 , 0.5 ) (0, 0.5) (0,0.5)对称,因此阈值是0.5很合理,但是如果不关于0.5对称呢?这个时候你所设定的阈值可能是盲目的,没有数学依据的.从而导致预测得不准确

求解参数 θ \theta θ

在线性回归里 P ( y ∣ x ) P(y|x) P(yx)符合正态分布: y ∣ x ∼ N ( θ T x , σ 2 ) y|x \sim N(\theta^Tx, \sigma^2) yxN(θTx,σ2)
为什么呢?我们可以画个图看下:
线性回归中的正态分布
在坐标轴中黑色的点表示实际的分布情况,红色的直线表示我们的预测结果,点到线的距离是不是呈正态分布呢?
可以考虑下极大似然估计
为了方便计算我们令$h_{\theta}(x)为sigmod函数,即:
h θ ( x i ) = 1 1 + e − θ x h_{\theta} (x^{i}) = \frac{1}{1 + e^{-\theta x}} hθ(xi)=1+eθx1
由上文推导出来的Logistic回归,
假设:
P ( y = 1 ∣ x ; θ ) = h θ ( x i ) P ( y = 0 ∣ x ; θ ) = 1 − h θ ( x i ) P ( y ∣ x ; θ ) = ( h θ ( x i ) ) y ( 1 − h θ ( x i ) ) 1 − y P(y=1 | x;\theta) = h_{\theta} (x^{i})\\ \\ P(y=0 | x; \theta)= 1 - h_{\theta} (x^{i}) \\ \\ P(y | x; \theta)= (h_{\theta} (x^{i}))^{y}(1 - h_{\theta} (x^{i}))^{1-y} P(y=1x;θ)=hθ(xi)P(y=0x;θ)=1hθ(xi)P(yx;θ)=(hθ(xi))y(1hθ(xi))1y
其实你可以认为将上面Logistic回归两人式合并为一个。

于是可以写出它的概率密度函数,也即似然函数:
L ( θ ) = ∏ P ( y 1 y 2 y 3 ⋯ y m ∣ x i ; θ ) L(\theta) = \prod P(y^{1}y^{2}y^{3} \cdots y^{m} | x_{i}; \theta) L(θ)=P(y1y2y3ymxi;θ)
不同的观测值之间是独立同分布的.
于是有:
L ( θ ) = P ( y ⃗ ∣ X ; θ ) = ∏ i = 1 m P ( y i ∣ x i ; θ ) = ∏ i = 1 m ( h θ ( x i ) ) y i ( 1 − h θ ( x i ) ) 1 − y i \begin{aligned} L(\theta) &= P(\vec{y} | X; \theta) \\ &= \prod_{i=1}^{m} P(y^{i} | x_{i}; \theta)\\ &=\prod_{i=1}^{m}(h_{\theta} (x^{i}))^{y^{i}}(1 - h_{\theta} (x^{i}))^{1-y^{i}} \end{aligned} L(θ)=P(y X;θ)=i=1mP(yixi;θ)=i=1m(hθ(xi))yi(1hθ(xi))1yi
OK,现在我们求解 L ( θ ) L(\theta) L(θ)的极大值就行了,即极大似然估计。
由于 ln ⁡ L ( θ ) \ln L(\theta) lnL(θ) L ( θ ) L(\theta) L(θ)的单调性是相同的,而 ln ⁡ L ( θ ) \ln L(\theta) lnL(θ)的极值给比较好求,故我们可以求解 ln ⁡ L ( θ ) \ln L(\theta) lnL(θ)导数。
在对 ln ⁡ L ( θ ) \ln L(\theta) lnL(θ)求导之前,我们先对sigmod函数求导:
我们先来个简化版的:
g ( z ) = 1 1 + e − z g(z) = \frac{1}{1+ e^{-z}} g(z)=1+ez1
g ( z ) g(z) g(z)求导:
g ( z ) ′ = ( 1 1 + e − z ) ′ = ( − 1 ( 1 + e − z ) 2 ) ⋅ ( − e − z ) = e − z ( 1 + e − z ) 2 = 1 1 + e − z ⋅ e − z 1 + e − z = 1 1 + e − z ⋅ ( 1 − 1 1 + e − z ) = g ( z ) ( 1 − g ( z ) ) \begin{aligned} g(z) ' &= \left(\frac{1}{1+ e^{-z}}\right)' \\ &= \left(- \frac{1}{(1+e^{-z})^{2}}\right) \cdot \left(-e^{-z}\right) \\ &= \frac{e^{-z}}{(1+e^{-z})^{2}} \\ &= \frac{1}{1 + e^{-z}} \cdot \frac{e^{-z}}{1+e^{-z}} \\ &= \frac{1}{1 + e^{-z}} \cdot \left(1- \frac{1}{1 + e^{-z}}\right) \\ &= g(z)\left(1- g(z) \right) \end{aligned} g(z)=(1+ez1)=((1+ez)21)(ez)=(1+ez)2ez=1+ez11+ezez=1+ez1(11+ez1)=g(z)(1g(z))
于是我们可以知道 h θ ( x i ) h_{\theta}(x^{i}) hθ(xi)的导数为:
h θ ′ ( x i ) = h θ ( x i ) ( 1 − h θ ( x i ) ) h_{\theta}'(x^{i}) = h_{\theta}(x^{i})(1- h_{\theta}(x^{i})) hθ(xi)=hθ(xi)(1hθ(xi))

L ( θ ) L(\theta) L(θ)取对数:
ln ⁡ L ( θ ) = ln ⁡ ∏ i = 1 m ( h θ ( x i ) y i ⋅ ( 1 − h θ ( x i ) 1 − y i ) = ∑ i = 1 m ( y i ⋅ ln ⁡ h θ ( x i ) − ( 1 − y i ) ⋅ ln ⁡ h θ ( x i ) ) = ∑ i = 1 m ( y i ln ⁡ h θ ( x i ) + ( 1 − y i ) ⋅ ln ⁡ ( 1 − h θ ( x i ) ) ) \begin{aligned} \ln L(\theta) &=\ln \prod_{i=1}^{m}\left(h_{\theta} (x^{i})^{y^{i}} \cdot (1 - h_{\theta} (x^{i})^{1-y^{i}}\right) \\ &= \sum_{i=1}^{m}\left(y^{i} \cdot \ln h_{\theta}(x^{i}) - (1 - y^{i}) \cdot \ln h_{\theta}(x^{i})\right) \\ &= \sum_{i=1}^{m} \left(y^{i} \ln h_{\theta}(x^{i}) + (1 - y^{i}) \cdot \ln (1- h_{\theta}(x^{i}))\right) \\ \end{aligned} lnL(θ)=lni=1m(hθ(xi)yi(1hθ(xi)1yi)=i=1m(yilnhθ(xi)(1yi)lnhθ(xi))=i=1m(yilnhθ(xi)+(1yi)ln(1hθ(xi)))
OK,准备工作已经完成了,现在可以对 ln ⁡ L ( θ ) \ln L(\theta) lnL(θ)关于 θ \theta θ求偏导了:
∂ ln ⁡ L ( θ ) ∂ θ j = ( ∑ i = 1 m ( y i ln ⁡ h θ ( x i ) + ( 1 − y i ) ⋅ ln ⁡ ( 1 − h θ ( x i ) ) ) ) ′ = ∑ i = 1 m ( y i h θ ( x i ) − 1 − y i 1 − h θ ( x i ) ) ⋅ ∂ h θ ( x i ) ∂ θ j \begin{aligned} \frac{\partial \ln L(\theta)}{\partial\theta_{j}} &=\left(\sum_{i=1}^{m} \left(y^{i} \ln h_{\theta}(x^{i}) + (1 - y^{i}) \cdot \ln (1- h_{\theta}(x^{i}))\right)\right)' \\ &= \sum_{i=1}^{m} \left(\frac{y^{i}}{h_{\theta}(x^{i})} - \frac{1 - y^{i}}{1- h_{\theta}(x^{i})} \right) \cdot \frac{\partial h_{\theta}(x^{i})}{\partial\theta_{j}} \end{aligned} θjlnL(θ)=(i=1m(yilnhθ(xi)+(1yi)ln(1hθ(xi))))=i=1m(hθ(xi)yi1hθ(xi)1yi)θjhθ(xi)
g ( θ T x i ) = h θ ( x i ) g(\theta^{T}x^{i}) = h_{\theta}(x^{i}) g(θTxi)=hθ(xi),于是有:
∂ ln ⁡ L ( θ ) ∂ θ j = ∑ i = 1 m ( y i g ( θ T x i ) − 1 − y i 1 − g ( θ T x i ) ) ⋅ ∂ g ( θ T x i ) ∂ θ j \frac{\partial \ln L(\theta)}{\partial\theta_{j}} = \sum_{i=1}^{m} \left(\frac{y^{i}}{g(\theta^{T}x^{i})} - \frac{1 - y^{i}}{1- g(\theta^{T}x^{i})} \right) \cdot \frac{\partial g(\theta^{T}x^{i})}{\partial\theta_{j}} θjlnL(θ)=i=1m(g(θTxi)yi1g(θTxi)1yi)θjg(θTxi)

剩下的就是对 g ( θ T x i ) g(\theta^{T}x^{i}) g(θTxi)关于 θ \theta θ求偏导。
根据微分链式法则,我们可以先对 g ( θ T x i ) g(\theta^{T}x^{i}) g(θTxi)求偏导,再对 θ T x i \theta^{T}x^{i} θTxi求偏导。
g ( θ T x i ) g(\theta^{T}x^{i}) g(θTxi)就是sigmod函数,上文我们已经求出了它的导数即:
g ( θ T x i ) = g ( θ T x i ) ⋅ ( 1 − g ( θ T x i ) ) g(\theta^{T}x^{i}) = g(\theta^{T}x^{i}) \cdot (1 - g(\theta^{T}x^{i})) g(θTxi)=g(θTxi)(1g(θTxi))
然后就是对 θ T x i \theta^{T}x^{i} θTxi求偏导,
θ T x i \theta^{T}x^{i} θTxi θ T \theta^{T} θT是个向量, x x x是个矩阵, x i x^{i} xi则是个向量,二者相乘展开为:
g ( θ T x i ) = θ 1 x 1 + θ 2 x 2 + θ 3 x 3 + ⋯ + θ n x n g(\theta^{T}x^{i}) = \theta_{1}x_{1} + \theta_{2}x_{2} + \theta_{3}x_{3} + \cdots + \theta_{n}x_{n} g(θTxi)=θ1x1+θ2x2+θ3x3++θnxn
关于 θ \theta θ求偏导,除了第 i i i项外,其他的都是 0 0 0
于是对 θ T x i \theta^{T}x^{i} θTxi关于 θ j \theta_{j} θj求偏导的结果为:
∂ ( θ T x i ) ∂ θ j = x j j \frac{\partial(\theta^{T}x^{i})}{\partial \theta_{j}} = x_{j}^{j} θj(θTxi)=xjj

g ( θ T x i ) g(\theta^{T}x^{i}) g(θTxi)关于 θ \theta θ求偏导的结果就出来了:
∂ g ( θ T x i ) ∂ θ j = g ( θ T x i ) ⋅ ( 1 − g ( θ T x i ) ) ⋅ x j j \frac{\partial g(\theta^{T}x^{i})}{\partial\theta_{j}} = g(\theta^{T}x^{i}) \cdot (1 - g(\theta^{T}x^{i})) \cdot x_{j}^{j} θjg(θTxi)=g(θTxi)(1g(θTxi))xjj
∂ ln ⁡ L ( θ ) ∂ θ j \frac{\partial \ln L(\theta)}{\partial\theta_{j}} θjlnL(θ)的偏导也出来了:
∂ ln ⁡ L ( θ ) ∂ θ j = ∑ i = 1 m ( y i g ( θ T x i ) − 1 − y i 1 − g ( θ T x i ) ) ⋅ ∂ g ( θ T x i ) ∂ θ j = ∑ i = 1 m ( y i g ( θ T x i ) − 1 − y i 1 − g ( θ T x i ) ) ⋅ g ( θ T x i ) ⋅ ( 1 − g ( θ T x i ) ) ⋅ x j j = ∑ i = 1 m ( y i ⋅ ( 1 − g ( θ T x i ) ) − ( 1 − y i ) ⋅ g ( θ T x i ) )   ⋅ x j j = ∑ i = 1 m ( y i − y i g ( θ T x i ) − g ( θ T x i ) + y i g ( θ T x i ) )   ⋅ x j j = ∑ i = 1 m ( y i − g ( θ T x i ) )   ⋅ x j j \begin{aligned} \frac{\partial \ln L(\theta)}{\partial\theta_{j}} &= \sum_{i=1}^{m} \left(\frac{y^{i}}{g(\theta^{T}x^{i})} - \frac{1 - y^{i}}{1- g(\theta^{T}x^{i})} \right) \cdot \frac{\partial g(\theta^{T}x^{i})}{\partial\theta_{j}} \\ &= \sum_{i=1}^{m} \left(\frac{y^{i}}{g(\theta^{T}x^{i})} - \frac{1 - y^{i}}{1- g(\theta^{T}x^{i})} \right) \cdot g(\theta^{T}x^{i}) \cdot \left(1 - g(\theta^{T}x^{i})\right) \cdot x_{j}^{j} \\ &= \sum_{i=1}^{m} \left(y^{i} \cdot \left(1 - g(\theta^{T}x^{i})\right) - (1 - y^{i}) \cdot g(\theta^{T}x^{i}) \right) \ \cdot x_{j}^{j} \\ &= \sum_{i=1}^{m} \left(y^{i} - y^{i}g(\theta^{T}x^{i}) - g(\theta^{T}x^{i}) + y^{i}g(\theta^{T}x^{i}) \right) \ \cdot x_{j}^{j} \\ &= \sum_{i=1}^{m} \left(y^{i} - g(\theta^{T}x^{i}) \right) \ \cdot x_{j}^{j} \\ \end{aligned} θjlnL(θ)=i=1m(g(θTxi)yi1g(θTxi)1yi)θjg(θTxi)=i=1m(g(θTxi)yi1g(θTxi)1yi)g(θTxi)(1g(θTxi))xjj=i=1m(yi(1g(θTxi))(1yi)g(θTxi)) xjj=i=1m(yiyig(θTxi)g(θTxi)+yig(θTxi)) xjj=i=1m(yig(θTxi)) xjj

OK, L ( θ ) L(\theta) L(θ)的极大似然估计就出来了,它与 ln ⁡ L ( θ ) \ln L(\theta) lnL(θ)取得极大值的位置是一样的,即:
∂ ln ⁡ L ( θ ) ∂ θ j = ∑ i = 1 m ( y i − g ( θ T x i ) )   ⋅ x j j \frac{\partial \ln L(\theta)}{\partial\theta_{j}} = \sum_{i=1}^{m} \left(y^{i} - g(\theta^{T}x^{i}) \right) \ \cdot x_{j}^{j} θjlnL(θ)=i=1m(yig(θTxi)) xjj
我们可以看下梯度下降法的公式:
θ j = θ j + α ∑ i = 1 m ( y i − h θ ( x i ) ) ⋅ x j i \theta_{j} = \theta_{j} + \alpha\sum_{i=1}^{m}\left( y^{i} - h_{\theta}(x^{i}) \right) \cdot x_{j}^{i} θj=θj+αi=1m(yihθ(xi))xji
二者是不是很像呢?
然后我们就可以用梯度下降法来求解Logistic回归了。
写得实在是太长了,也实在是太久了,Logistic回归的损失函数和代码实现等有机会了再写吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值