Logistic Regression对数几率回归

Logistic Regression 对数几率回归

首先logistic regression不是叫逻辑回归,而是叫对数几率回归。然后对数几率回归也不是用来解决回归问题的,而是解决分类问题的。

一、由线性回归引入对数几率回归

设有训练集{X,Y}N\{X,Y\}\in \Bbb N{x0,x1,x2,...,xn}X\{x_0,x_1,x_2,...,x_n\}\in X{y0,y1,y2,..,yn}Y\{y_0,y_1,y_2,..,y_n\}\in Y。先构造线性回归函数:

f(x)=wTx+bf(x)={\bf w}^T {\bf x}+b

这个大家应该都知道怎么来的,x\bf x为输入向量,w,b{\bf w},b为参数向量。
考虑二分类问题,线性回归的输出是真实数,而二分类问题的输出则是阶跃函数:

f(z)={0,if z<0.50.5,if z=0.51,if z>0.5f(z)=\begin{cases}0, & \text{if $z<0.5$} \\0.5, & \text{if $z=0.5$} \\1, & \text{if $z>0.5$} \end{cases}

那么如何将线性回归输出的真实数转化为阶跃函数的0/1(0.5抛弃不用)呢。这里考虑sigmoid函数,构造sigmoid函数如下:
σ(z)=11+ez\sigma(z)=\cfrac{1}{1+e^{-z} } z=wTx+bz={\bf w}^T {\bf x}+b

其函数图像如下:

Logistic Regression对数几率回归

sigmoid函数图

该函数的导如下,因为可以用自身来表示,接下来用到的时候,就知道它的好处了

σ(z)=(11+ez)=ez(1+ez)2=1+ez1(1+ez)2=11+ez(1+11+ez)=σ(z)(1σ(z)) \begin{aligned} \sigma(z)^\prime & = (\cfrac{1}{1+e^z})^\prime \\ & = \cfrac {e^{-z}}{(1+e^{-z})^2} \\ & = \cfrac {1+e^{-z}-1}{(1+e^{-z})^2} \\ & = \cfrac {1}{1+e^{-z}}(1+\cfrac {-1}{1+e^{-z}}) \\ & = \sigma(z) (1-\sigma(z)) \end{aligned}

二、损失函数

目前已知对数几率函数如下:

σ(x)=11+e(wTx+b)\sigma(x)=\cfrac{1}{1+e^{-({\bf w^Tx}+b)}}

现在问题变成如何求解该函数的两个未知参数w,b。由于分类问题为有监督学习,对于训练集来说,我们是已知其分布的。那么已知数据分布,求解能够使最大限度地其服该分布的参数,可以用极大似然估计来解决。构造极大似然函数

l(w,b)=i=0nP(yixi;w,b)l(w,b)= \prod_{i=0}^n P(y_i|x_i;w,b)

要使学习算法尽可能地学习到训练集特征,即是说预测出来的当前数据类别是真实类别的概率要尽可能大,那么就要最大化极大似然函数。则有下面等价变换(取对数是一般极大似然估计函数的解法,转累乘为累加,转最大化为最小化,因为目标函数为凸函数。这部分可以看看极大似然函数相关知识):

w,b=arg maxw,bl(w,b)=arg minw,blnl(w,b) \begin{aligned} w^*,b^* & = arg \text{ } max_{w,b}l(w,b) \\ & = arg \text{ } min_{w,b}-lnl(w,b) \\ \end{aligned}

在本二分类问题中,设类别0为y0y^0,设类别1为y1y^1,对于任意xXx\in X,设其为类别0的概率为p(x)=P(y0x)p(x)=P(y^0|x),则其为类别1的概率为P(y1x)=1p(x)P(y^1|x)=1-p(x)
设训练集中第一个数据为类别0,第二个数据为类别1,第三个数据为类别0,……,
则极大似然函数可展开为:

lnl(w,b)=ln[p(x0)(1p(x1))p(x2)...]=[y0lnp(x0)+(1y0)ln(1p(x0))] [y1lnp(x1)+(1y1)ln(1p(x1))] [y2lnp(x2)+(1y2)ln(1p(x2))]   ... \begin{aligned} -lnl(w,b) & = -ln[p(x_0)(1-p(x_1))p(x_2)...] \\ & = -[ {\color{#F0F}{y_0}}*lnp(x_0)+ {\color{#F0F}{(1-y_0)}}*ln(1-p(x_0)) ] \\ & \quad \, -[ {\color{#F0F}{y_1}}*lnp(x_1)+ {\color{#F0F}{(1-y_1)}}*ln(1-p(x_1))] \\ & \quad \, -[ {\color{#F0F}{y_2}}*lnp(x_2)+ {\color{#F0F}{(1-y_2)}}*ln(1-p(x_2)) ] \\ & \quad \; \, ... \end{aligned}

注意粉色部分对应其真实类别,因此与真实类别不符的一边就会为0,从而消去,得到的结果也是符合实际要求的。这样我们需要最小化的损失函数就如下:

lnl(w,b)=i[yilnp(xi)+(1yi)ln(1p(xi))]-lnl(w,b)=\sum_{i} -[y_i*lnp(x_i)+(1-y_i)*ln(1-p(x_i))]

接下来可以用很多方法来最小化这个函数,比如牛顿法或者梯度下降法。这里使用梯度下降法来解:
lnl(w,b)w=i[yilnp(xi)w+(1yi)ln(1p(x))w]=i[yilnσ(z)zzw+(1yi)ln(1σ(z))zzw]=i[yi1σ(z)σ(z)z(wTxi+b)w+(1yi)11σ(z)σ(z)z(wTxi+b)w]σ(z)z前面已经提过=i[yi(1σ(z))xi(1yi)σ(z)xi]=i[yi(1σ(z))(1yi)σ(z)]xi=i(yiσ(z))xi \begin{aligned} \cfrac {-lnl(w,b)}{\partial w} & =\sum_{i}-[y_i*\cfrac {lnp(x_i)}{\partial w}+(1-y_i)*\cfrac {ln(1-p(x))}{\partial w}] \\ & = \sum_{i} -[y_i*\cfrac {ln \sigma(z)}{\partial z} \cfrac {\partial z}{\partial w}+(1-y_i)* \cfrac{ln(1-\sigma(z))}{\partial z} \cfrac{\partial z}{\partial w}] \\ & = \sum_{i} -[y_i * \cfrac {1}{\sigma(z)} \cfrac { \partial \sigma(z)}{ \partial z} \cfrac { \partial (w^Tx_i + b)}{ \partial w}+(1-y_i)* \cfrac {1}{1- \sigma(z)} \cfrac {- \partial \sigma(z)}{ \partial z} \cfrac { \partial (w^Tx_i + b)}{ \partial w}] \qquad \text{$ \cfrac{\partial{ \sigma(z)}}{ \partial z}$前面已经提过} \\ & = \sum_{i}-[y_i*(1- \sigma(z))x_i-(1-y_i) \sigma(z)x_i] \\ & = \sum_{i}-[y_i*(1- \sigma(z))-(1-y_i) \sigma(z)]x_i \\ & = \sum_{i}-(y_i- \sigma(z))x_i \end{aligned}

则有ww更新公式,其中η\etalearning  ratelearning \; rate,即学习率:
wi+1=wiηi(yiσ(z))xiw_{i+1}=w_i- \eta \sum_i-(y_i- \sigma(z))x_i

有机会再更新手写logistic regression。

有写的不对的地方还望不吝指教。