机器学习入门之逻辑回归

逻辑回归

第一步先选择函数集

步骤一:函数集

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

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

z = w x + b = i w i x i + b z = w \cdot x + b = \sum_i w_ix_i + b
所以我们的函数集是 f w , b ( x ) = P w , b ( C 1 x ) f_{w,b}(x) = P_{w,b}(C_1|x) ,包含所有不同的 w w b b

图形化表示如下:

在这里插入图片描述

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

在这里插入图片描述

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

接下来判断函数的好坏

步骤2: 函数有多好

在这里插入图片描述

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

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

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

L ( w , b ) = f w , b ( x 1 ) f w , b ( x 2 ) ( 1 f w , b ( x 3 ) ) f w , b ( x N ) 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)

其中 x 3 x^3 是属于 C 2 C_2 ,因此它的计算方法有点不同。

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

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

w , b = a r g min w , b ln L ( w , b ) w^*,b^* = arg\,\min_{w,b}-\ln L(w,b)

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

ln L ( w , b ) = ln f w , b ( x 1 ) ln f w , b ( x 2 ) ln ( 1 f w , b ( x 3 ) ) -\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 则说明它属于类别 C 1 C_1 ;若等于0,说明属于类别 C 2 C_2 ,那么就有

ln f w , b ( x 1 ) [ y ^ 1 ln f ( x 1 ) + ( 1 y ^ 1 ) ln ( 1 f ( x 1 ) ) ] ln f w , b ( x 2 ) [ y ^ 2 ln f ( x 2 ) + ( 1 y ^ 2 ) ln ( 1 f ( x 2 ) ) ] ln ( 1 f w , b ( x 3 ) ) [ y ^ 3 ln f ( x 3 ) + ( 1 y ^ 3 ) ln ( 1 f ( x 3 ) ) ] -\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 ^ n ln f ( x n ) + ( 1 y ^ n ) ln ( 1 f ( x n ) ) \hat{y}^n \ln f(x^n) + (1 - \hat{y}^n) \ln (1-f(x^n)) 中+号左右两边总有一个式子等于0。

L ( w , b ) = f w , b ( x 1 ) f w , b ( x 2 ) ( 1 f w , b ( x 3 ) ) f w , b ( x N ) ln L ( w , b ) = ( ln f w , b ( x 1 ) + ln f w , b ( x 2 ) + l n ( 1 ln f w , b ( x 3 ) ) = n [ y ^ n ln f w , b ( x n ) + ( 1 y ^ n ) ln ( 1 f w , b ( x n ) ) ] \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 ^ n ln f w , b ( x n ) + ( 1 y ^ n ) ln ( 1 f w , b ( x n ) ) ] -[\hat{y}^n \ln f_{w,b}(x^n) + (1 - \hat{y}^n) \ln (1-f_{w,b}(x^n))] 其实就是两个伯努利分布的交叉熵,交叉熵主要用于衡量两个分布有多接近,如果一模一样的话,那么就是0。

在这里插入图片描述

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

在这里插入图片描述

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

步骤3:找到最好的函数

ln L ( w , b ) = n [ y ^ n ln f w , b ( x n ) + ( 1 y ^ n ) ln ( 1 f w , b ( x n ) ) ] -\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))] \\
找到最好的函数需要找到一组 w w b b 使得上式的结果最小。

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

ln L ( w , b ) w i = n [ y ^ n ln f w , b ( x n ) w i + ( 1 y ^ n ) ln ( 1 f w , b ( x n ) ) w i ] \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}]

其中 f w , b ( x ) = σ ( z ) = 1 1 + e x p ( z ) f_{w,b}(x) = \sigma(z) =\frac{1}{1 + exp(-z)} , z = w x + b = i w i x i + b z = w \cdot x + b = \sum_i w_ix_i + b

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

ln f w , b ( x ) w i = ln f w , b ( x ) z z w i \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}

z z 的表达式知 z w i = x i \frac{\partial z}{\partial w_i} = x_i

ln f w , 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 ) = ( 1 1 + e z ) = 0 ( e z ) ( 1 + e z ) 2 = 1 + e z 1 ( 1 + e z ) 2 = 1 ( 1 + e z ) ( 1 1 ( 1 + e z ) ) = σ ( 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 ( 1 f w , b ( x ) ) w i = ln ( 1 f w , b ( x ) ) σ ( z ) z w i z w i = x i \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 ) = 1 1 σ ( z ) z σ ( z ) = 1 1 σ ( 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)

所以

ln L ( w , b ) w i = n [ y ^ n ln f w , b ( x n ) w i + ( 1 y ^ n ) ln ( 1 f w , b ( x n ) ) w i ] = n [ y ^ n ( 1 f w , b ( x n ) ) x i n ( 1 y ^ n ) f w , b ( x n ) x i n ] = n [ y ^ n y ^ n f w , b ( x n ) f w , b ( x n ) + y ^ n f w , b ( x n ) ] x i n = n ( y ^ n f w , b ( x n ) ) x i n \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}

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

w i w i η n ( y ^ n f w , b ( x n ) ) x i n w_i \leftarrow w_i - \eta \sum_n -(\hat{y}^n - f_{w,b}(x^n))x_i^n

y ^ n f w , b ( x n ) \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 ( C 1 x ) = σ ( w x + b ) P(C_1|x) = \sigma(w \cdot x + b)

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

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

在这里插入图片描述

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

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

在这里插入图片描述

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3Zwkz3lK-1575170875866)(_v_images/20191128222330408_20997.png)]

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

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

P ( C 1 ) = 1 13 P(C_1) = \frac{1}{13} 给定类别 C 1 C_1 ,第一个特征是1的几率 P ( x 1 = 1 C 1 ) = 1 P(x_1 = 1|C_1) = 1 ,第二个特征是1的几率 P ( x 2 = 1 C 1 ) = 1 P(x_2 = 1|C_1) = 1 ,也是1。

P ( C 2 ) = 12 13 P(C_2) = \frac{12}{13} ,给定类别 C 2 C_2 ,第一个特征是1的几率 P ( x 1 = 1 C 1 ) = 1 3 P(x_1 = 1|C_1) = \frac{1}{3} ,第二个特征是1的几率 P ( x 2 = 1 C 1 ) = 1 3 P(x_2 = 1|C_1) = \frac{1}{3}

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

P ( C 1 x ) = p ( x C 1 ) P ( C 1 ) p ( x C 1 ) P ( C 1 ) + p ( x C 2 ) P ( C 2 ) 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 ( C 1 x ) < 0.5 P(C_1|x) < 0.5 ,因此判断它属于类别2;而用逻辑回归判断它属于类别1。

多分类问题

多分类问题是指类别超过2个的分类问题。

假设有3个类别,每个类别都有两组参数,我们怎么计算某个样本属于这三个类别的几率分别是多少。
我们计算 z 1 , z 2 , z 3 z_1,z_2,z_3

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NdygqjrG-1576922710102)(_v_images/20191221151028052_18544.png)]

假设有个函数Softmax,它的输入就是 z 1 , z 2 , z 3 z_1,z_2,z_3 ,输出 y 1 , y 2 , y 3 y_1,y_2,y_3

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AVDZnhqb-1576922710103)(_v_images/20191221151319828_11014.png)]

假设输入是3,1,-3

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eDW3R771-1576922710103)(_v_images/20191221151455807_14751.png)]

首先取e的指数,得到20,2.7,0.05 再把这些数加起来得到22.75,输出就是根据e的指数除以这个加起来的总数。

可以把这些输出当成概率,它们的和刚好是1。 y i = P ( C i x ) y_i = P(C_i|x)

我们把 z 1 , z 2 , z 3 z_1,z_2,z_3 经过Softmax函数后,得到 y 1 , y 2 , y 3 y_1,y_2,y_3 ,我们要计算这些输出和对应的target(实际类别)的交叉熵。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NygYxVu4-1576922710103)(_v_images/20191221151957297_29237.png)]

y ^ \hat{y} 的表示如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-siQ9zDEW-1576922710104)(_v_images/20191221172401045_27026.png)]

逻辑回归的限制

逻辑回归其实有很大的限制的,以一个简单的二分类问题来举例。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0If06Xme-1576922710104)(_v_images/20191221172818211_14903.png)]

它只有两个特征,如果都是0,则属于类别2;如果 x 1 = 0 , x 2 = 1 x_1=0,x_2=1 则属于类别1。

把这四个样本画到二维坐标上是下面这个样子,蓝色的点是类别2;红色的点是类别1。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H4FXoQMF-1576922710105)(_v_images/20191221172921132_3791.png)]

假设现在用逻辑回归模型来训练 z = w 1 x 1 + w 2 x 2 + b z = w_1x_1 + w_2x_2 + b

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KLTVyVpS-1576922710105)(_v_images/20191221173059575_23261.png)]

输入 x 1 , x 2 x_1,x_2 ,分别把它们乘以 w 1 , w 2 w_1,w_2 加上 b b 得到 z z ,代入Sigmoid函数得到输出 y y

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7HuYNrL2-1576922710105)(_v_images/20191221173238516_226.png)]

对红色的点来说, z z 要大于等于0,对蓝色的点来说 z z 要<0。我们做的到吗?做不到。

z z 是一条直线,因为逻辑回归能做到的事情是画一条这样的直线其中一边属于类别1,另一边属于类别2。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OKocJ8MJ-1576922710106)(_v_images/20191221173610140_31033.png)]

不管怎么画,都无法画出满足条件的直线。

那么怎么办呢,还是有办法的,可以做特征转换。把蓝色点和红点转换成一条直线的两边。

比如可以这样,重新定义特征,把原特征 x 1 x_1 [ 0 , 0 ] T [0,0]^T 的距离定义成新特征 x 1 x^{\prime}_1 ,把原特征 x 2 x_2 [ 1 , 1 ] T [1,1]^T 的距离定义成新特征 x 2 x^{\prime}_2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vXF9znkW-1576922710106)(_v_images/20191221174257387_30253.png)]

比如原特征 [ 0 , 0 ] T [0,0]^T [ 0 , 0 ] T [0,0]^T 的距离是0,和 [ 1 , 1 ] T [1,1]^T 的距离是 2 \sqrt{2} ,就转换成上图左上角蓝色的点。

然后就可以画一条线将红蓝点分开。

但是特征转换并不总是那么的有用,因为这需要领域知识,要知道该怎么转换。

其实特征转换可以看很多个逻辑回归模型叠加的结果。

可以把 x 1 x_1 转换成 x 1 x^{\prime}_1 以及 x 2 x_2 转换成 x 2 x^{\prime}_2 看成是两个逻辑回归模型的结果。

也就是说,如下图蓝色的逻辑回归,输入是 x 1 , x 2 x_1,x_2 输出就是 x 1 x^{\prime}_1 ;而绿色的逻辑回归,输入是 x 1 , x 2 x_1,x_2 输出就是 x 2 x^{\prime}_2 。它们两个做特征转换,而红色的作用就是分类。

在这里插入图片描述

我们继续用刚才讲的例子来说明。

假设蓝色的逻辑回归的参数是-1( b b ),-2( w 1 w_1 ),2( w 2 w_2 ),就可以计算出 x 1 x^{\prime}_1 的值。

z = w 1 x 1 + w 2 x 2 + b z = w_1x_1 + w_2x_2 + b

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xkyfUQbu-1576922710107)(_v_images/20191221175536726_8190.png)]

也就可以计算出四个点的 x 1 x^{\prime}_1 ,同理可以计算出四个点的 x 2 x^{\prime}_2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GKizfYCs-1576922710107)(_v_images/20191221175704965_25266.png)]

接下来就可以根据这些 x 1 , x 2 x^{\prime}_1,x^{\prime}_2 重新画出一个新的图形。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pxoVY3No-1576922710108)(_v_images/20191221175824828_4115.png)]

而红色的逻辑回归测试的就是 x 1 , x 2 x^{\prime}_1,x^{\prime}_2 ,也就可以画出一条直线将它们分开。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EAqO35e4-1576922710108)(_v_images/20191221175949128_3366.png)]

我们可以把逻辑回归串接起来,一部分做特征转换,最后用一个做真正的分类。

那么问题来了,如何找到这些逻辑回归模型的参数呢?

这些逻辑回归的参数可以一起学习到的,只要告诉输入和输出,就可以一次把所有的逻辑回归的参数学习出来。

我们把上面每个逻辑回归模型叫做神经元,每个神经元串接起来后叫做神经网络,这就是深度学习

发布了131 篇原创文章 · 获赞 38 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/yjw123456/article/details/103333558