机器学习入门之逻辑回归

逻辑回归

第一步先选择函数集

步骤一:函数集

接上一篇,我们知道,给定一个x,它属于类别C1C_1的概率为Pw,b(C1x)P_{w,b}(C_1|x),
如果Pw,b(C1x)0.5P_{w,b}(C_1|x)\geq0.5则属于C1C_1;否则属于C2C_2

最后我们得到
Pw,b(C1x)=σ(z),σ(z)=11+exp(z)P_{w,b}(C_1|x) = \sigma(z),\quad \sigma(z)=\frac{1}{1+exp(-z)}

z=wx+b=iwixi+b z = w \cdot x + b = \sum_i w_ix_i + b
所以我们的函数集是fw,b(x)=Pw,b(C1x)f_{w,b}(x) = P_{w,b}(C_1|x),包含所有不同的wwbb

图形化表示如下:

机器学习入门之逻辑回归

这个就是逻辑回归,我们与线性回归做一个比较。

机器学习入门之逻辑回归

因为Sigmoid函数的取值范围是0到1,因此逻辑回归的输出也是0到1;而线性回归的输出可以是任何值。

接下来判断函数的好坏

步骤2: 函数有多好

机器学习入门之逻辑回归

假设我们有N个训练数据,每个训练数据都标明了属于哪个类别(C1C_1C2C_2)

并且假设这些数据是从fw,b(x)=Pw,b(C1x)f_{w,b}(x) = P_{w,b}(C_1|x)所产生的。

那么给定一组wwbb,那如何计算某一组wwbb产生这些数据的概率:

L(w,b)=fw,b(x1)fw,b(x2)(1fw,b(x3))fw,b(xN) L(w,b) = f_{w,b}(x^1)f_{w,b}(x^2)(1-f_{w,b}(x^3))\cdots f_{w,b}(x^N)

其中x3x^3是属于C2C_2,因此它的计算方法有点不同。

最好的wwbb会产生产生最大的L(w,b)L(w,b)

w,b=argmaxw,bL(w,b) w^*,b^* = arg\,\max_{w,b}L(w,b)
做个数学上的转换,将上式右边取对数,并加上负号,变成计算最小的:

w,b=argminw,blnL(w,b) w^*,b^* = arg\,\min_{w,b}-\ln L(w,b)

取对数的好处是使得相乘变成相加:

lnL(w,b)=lnfw,b(x1)lnfw,b(x2)ln(1fw,b(x3)) -\ln L(w,b) = \\ -\ln f_{w,b}(x^1)\\ -\ln f_{w,b}(x^2)\\ -\ln (1-f_{w,b}(x^3)) \\ \cdots

但是这个式子不好写个SUM的形式,因此需要做符号转换
机器学习入门之逻辑回归

如果y^n=1\hat{y}^n=1则说明它属于类别C1C_1;若等于0,说明属于类别C2C_2,那么就有

lnfw,b(x1)[y^1lnf(x1)+(1y^1)ln(1f(x1))]lnfw,b(x2)[y^2lnf(x2)+(1y^2)ln(1f(x2))]ln(1fw,b(x3))[y^3lnf(x3)+(1y^3)ln(1f(x3))] -\ln f_{w,b}(x^1) \Longrightarrow -[\hat{y}^1 \ln f(x^1) + (1 - \hat{y}^1) \ln (1-f(x^1))]\\ -\ln f_{w,b}(x^2) \Longrightarrow -[\hat{y}^2 \ln f(x^2) + (1 - \hat{y}^2) \ln (1-f(x^2))]\\ -\ln (1-f_{w,b}(x^3)) \Longrightarrow -[\hat{y}^3 \ln f(x^3) + (1 - \hat{y}^3) \ln (1-f(x^3))]\\ \cdots
这样,就能得到一个函数:

因为y^n\hat{y}^n取0或1,因此y^nlnf(xn)+(1y^n)ln(1f(xn))\hat{y}^n \ln f(x^n) + (1 - \hat{y}^n) \ln (1-f(x^n))中+号左右两边总有一个式子等于0。

L(w,b)=fw,b(x1)fw,b(x2)(1fw,b(x3))fw,b(xN)lnL(w,b)=(lnfw,b(x1)+lnfw,b(x2)+ln(1lnfw,b(x3))=n[y^nlnfw,b(xn)+(1y^n)ln(1fw,b(xn))] \begin{aligned} L(w,b) &= f_{w,b}(x^1)f_{w,b}(x^2)(1-f_{w,b}(x^3))\cdots f_{w,b}(x^N) \\ -\ln L(w,b) &= -(\ln f_{w,b}(x^1) + \ln f_{w,b}(x^2) + ln(1-\ln f_{w,b}(x^3)) \cdots \\ &= \sum_n -[\hat{y}^n \ln f_{w,b}(x^n) + (1 - \hat{y}^n) \ln (1-f_{w,b}(x^n))] \\ \end{aligned}

[y^nlnfw,b(xn)+(1y^n)ln(1fw,b(xn))]-[\hat{y}^n \ln f_{w,b}(x^n) + (1 - \hat{y}^n) \ln (1-f_{w,b}(x^n))]其实就是两个伯努利分布的交叉熵,交叉熵主要用于衡量两个分布有多接近,如果一模一样的话,那么就是0。

机器学习入门之逻辑回归

所以在逻辑回归中,定义一个函数的好坏就通过两个类别分布的交叉熵之和:

机器学习入门之逻辑回归

我们需要最小化这个交叉熵,也就是希望函数的输出和目标函数的输出越接近越好。

步骤3:找到最好的函数

lnL(w,b)=n[y^nlnfw,b(xn)+(1y^n)ln(1fw,b(xn))] -\ln L(w,b) = \sum_n -[\hat{y}^n \ln f_{w,b}(x^n) + (1 - \hat{y}^n) \ln (1-f_{w,b}(x^n))] \\
找到最好的函数需要找到一组wwbb使得上式的结果最小。

计算该式对w中某个特征的微分。

lnL(w,b)wi=n[y^nlnfw,b(xn)wi+(1y^n)ln(1fw,b(xn))wi] \frac{-\ln L(w,b)}{\partial w_i} = \sum_n -[\hat{y}^n \frac{\partial \ln f_{w,b}(x^n)}{\partial w_i} + (1 - \hat{y}^n) \frac{ \partial \ln (1-f_{w,b}(x^n))}{\partial w_i}]

其中fw,b(x)=σ(z)=11+exp(z)f_{w,b}(x) = \sigma(z) =\frac{1}{1 + exp(-z)} ,z=wx+b=iwixi+bz = w \cdot x + b = \sum_i w_ix_i + b

一项一项来求,左项可以写成

lnfw,b(x)wi=lnfw,b(x)zzwi \frac{\partial \ln f_{w,b}(x)}{\partial w_i} = \frac{\partial \ln f_{w,b}(x)}{\partial z} \frac{\partial z}{\partial w_i}

zz的表达式知 zwi=xi\frac{\partial z}{\partial w_i} = x_i

lnfw,b(x)z=lnσ(z)z=1σ(z)σ(z)z=1σ(z)σ(z)(1σ(z))=(1σ(z)) \frac{\partial \ln f_{w,b}(x)}{\partial z} = \frac{\partial \ln \sigma(z)}{\partial z} = \frac{1}{\sigma(z)} \frac{\partial \sigma(z)}{\partial z} = \frac{1}{\sigma(z)} \sigma(z)(1-\sigma(z)) = (1 - \sigma(z))

其中σ(z)z=σ(z)(1σ(z))\frac{\partial \sigma(z)}{\partial z} = \sigma(z)(1-\sigma(z)) 证明如下:

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

而右项

ln(1fw,b(x))wi=ln(1fw,b(x))σ(z)zwizwi=xi \frac{ \partial \ln (1-f_{w,b}(x))}{\partial w_i} = \frac{ \partial \ln (1-f_{w,b}(x))}{\partial \sigma(z)} \frac{\partial z}{\partial w_i} \quad \frac{\partial z}{\partial w_i} = x_i

也就是

ln(1σ(z))σ(z)=11σ(z)zσ(z)=11σ(z)σ(z)(1σ(z))=σ(z) \frac{ \partial \ln (1-\sigma(z))}{\partial \sigma(z)} = - \frac{1}{1- \sigma(z)} \frac{\partial z}{\sigma(z)} = - \frac{1}{1- \sigma(z)} \sigma(z) (1-\sigma(z)) = -\sigma(z)

所以

lnL(w,b)wi=n[y^nlnfw,b(xn)wi+(1y^n)ln(1fw,b(xn))wi]=n[y^n(1fw,b(xn))xin(1y^n)fw,b(xn)xin]=n[y^ny^nfw,b(xn)fw,b(xn)+y^nfw,b(xn)]xin=n(y^nfw,b(xn))xin \begin{aligned} \frac{-\ln L(w,b)}{\partial w_i} &= \sum_n - [\hat{y}^n \frac{\partial \ln f_{w,b}(x^n)}{\partial w_i} + (1 - \hat{y}^n) \frac{ \partial \ln (1-f_{w,b}(x^n))}{\partial w_i}] \\ &= \sum_n -[\hat{y}^n(1-f_{w,b}(x^n))x_i^n - (1 - \hat{y}^n)f_{w,b}(x^n)x_i^n] \\ &= \sum_n -[\hat{y}^n - \bcancel{\hat{y}^n f_{w,b}(x^n)} - f_{w,b}(x^n) + \bcancel{\hat{y}^nf_{w,b}(x^n)}]x_i^n \\ &= \sum_n -(\hat{y}^n - f_{w,b}(x^n))x_i^n \end{aligned}

得到的式子很简单。如果用梯度下降算法来更新它的话,可以写成:

wiwiηn(y^nfw,b(xn))xin w_i \leftarrow w_i - \eta \sum_n -(\hat{y}^n - f_{w,b}(x^n))x_i^n

y^nfw,b(xn)\hat{y}^n - f_{w,b}(x^n)表示理想的目标与模型的输出的差距,如果差距越大,
那么更新的量应该要越大。

接下来比较下逻辑回归和线性回归更新时的式子:

机器学习入门之逻辑回归

会发现表达式是一模一样的。唯一不同的是逻辑回归的y^n\hat{y}^n取0或1,f是0~1之间的数值;而线性回归的y^n\hat{y}^n是任意实数,输出也可以是任何实数。

生成模型VS判别模型

我们上面讨论的逻辑回归是判别模型(Discriminative),用高斯分布描述的概率分布模型是生成模型(Generative)。

它们的函数集是一样的 P(C1x)=σ(wx+b)P(C_1|x) = \sigma(w \cdot x + b)

用逻辑回归能直接找出wwbb;如果是生成模型,那么需要找到μ1,μ2,Σ1\mu^1,\mu^2,\Sigma^{-1},进而求出wTw^Tbb

根据同一组训练数据,同样的函数集,上面两种模型会得到不同的函数。

机器学习入门之逻辑回归

如果用上所有的特征,判别模型的准确率更好。

假设有一个非常简单的二元分类问题,每个数据都有两个特征。

机器学习入门之逻辑回归

Class1我们只有一份数据,它的两个特征都是1;Class2有12份数据,如上。

如果给一份测试数据,它的两个特征都是1:

机器学习入门之逻辑回归

那么它属于哪个类别的概率大呢?

我们先来看下生成模型,选用朴素贝叶斯模型,朴素说的是每个特征都是独立的。
P(xCi)=P(x1Ci)P(x2Ci)P(x|C_i) = P(x_1|C_i)P(x_2|C_i)

P(C1)=113P(C_1) = \frac{1}{13} 给定类别C1C_1,第一个特征是1的几率P(x1=1C1)=1P(x_1 = 1|C_1) = 1,第二个特征是1的几率P(x2=1C1)=1P(x_2 = 1|C_1) = 1,也是1。

P(C2)=1213P(C_2) = \frac{12}{13} ,给定类别C2C_2,第一个特征是1的几率P(x1=1C1)=13P(x_1 = 1|C_1) = \frac{1}{3},第二个特征是1的几率P(x2=1C1)=13P(x_2 = 1|C_1) = \frac{1}{3}

接下来计算这个测试数据属于类别1的几率

P(C1x)=p(xC1)P(C1)p(xC1)P(C1)+p(xC2)P(C2) P(C_1|x) = \frac{p(x|C_1)P(C_1)}{p(x|C_1)P(C_1) + p(x|C_2)P(C_2)} \\

机器学习入门之逻辑回归

计算得P(C1x)<0.5P(C_1|x) < 0.5 ,因此判断它属于类别2;而用逻辑回归判断它属于类别1。