逻辑回归
第一步先选择函数集
步骤一:函数集
接上一篇,我们知道,给定一个x,它属于类别C1的概率为Pw,b(C1∣x),
如果Pw,b(C1∣x)≥0.5则属于C1;否则属于C2
最后我们得到
Pw,b(C1∣x)=σ(z),σ(z)=1+exp(−z)1
z=w⋅x+b=i∑wixi+b
所以我们的函数集是fw,b(x)=Pw,b(C1∣x),包含所有不同的w和b。
图形化表示如下:
这个就是逻辑回归,我们与线性回归做一个比较。
因为Sigmoid函数的取值范围是0到1,因此逻辑回归的输出也是0到1;而线性回归的输出可以是任何值。
接下来判断函数的好坏
步骤2: 函数有多好
假设我们有N个训练数据,每个训练数据都标明了属于哪个类别(C1或C2)
并且假设这些数据是从fw,b(x)=Pw,b(C1∣x)所产生的。
那么给定一组w和b,那如何计算某一组w和b产生这些数据的概率:
L(w,b)=fw,b(x1)fw,b(x2)(1−fw,b(x3))⋯fw,b(xN)
其中x3是属于C2,因此它的计算方法有点不同。
最好的w和b会产生产生最大的L(w,b)
w∗,b∗=argw,bmaxL(w,b)
做个数学上的转换,将上式右边取对数,并加上负号,变成计算最小的:
w∗,b∗=argw,bmin−lnL(w,b)
取对数的好处是使得相乘变成相加:
−lnL(w,b)=−lnfw,b(x1)−lnfw,b(x2)−ln(1−fw,b(x3))⋯
但是这个式子不好写个SUM的形式,因此需要做符号转换
如果y^n=1则说明它属于类别C1;若等于0,说明属于类别C2,那么就有
−lnfw,b(x1)⟹−[y^1lnf(x1)+(1−y^1)ln(1−f(x1))]−lnfw,b(x2)⟹−[y^2lnf(x2)+(1−y^2)ln(1−f(x2))]−ln(1−fw,b(x3))⟹−[y^3lnf(x3)+(1−y^3)ln(1−f(x3))]⋯
这样,就能得到一个函数:
因为y^n取0或1,因此y^nlnf(xn)+(1−y^n)ln(1−f(xn))中+号左右两边总有一个式子等于0。
L(w,b)−lnL(w,b)=fw,b(x1)fw,b(x2)(1−fw,b(x3))⋯fw,b(xN)=−(lnfw,b(x1)+lnfw,b(x2)+ln(1−lnfw,b(x3))⋯=n∑−[y^nlnfw,b(xn)+(1−y^n)ln(1−fw,b(xn))]
−[y^nlnfw,b(xn)+(1−y^n)ln(1−fw,b(xn))]其实就是两个伯努利分布的交叉熵,交叉熵主要用于衡量两个分布有多接近,如果一模一样的话,那么就是0。
所以在逻辑回归中,定义一个函数的好坏就通过两个类别分布的交叉熵之和:
我们需要最小化这个交叉熵,也就是希望函数的输出和目标函数的输出越接近越好。
步骤3:找到最好的函数
−lnL(w,b)=n∑−[y^nlnfw,b(xn)+(1−y^n)ln(1−fw,b(xn))]
找到最好的函数需要找到一组w和b使得上式的结果最小。
计算该式对w中某个特征的微分。
∂wi−lnL(w,b)=n∑−[y^n∂wi∂lnfw,b(xn)+(1−y^n)∂wi∂ln(1−fw,b(xn))]
其中fw,b(x)=σ(z)=1+exp(−z)1 ,z=w⋅x+b=∑iwixi+b
一项一项来求,左项可以写成
∂wi∂lnfw,b(x)=∂z∂lnfw,b(x)∂wi∂z
由z的表达式知 ∂wi∂z=xi
∂z∂lnfw,b(x)=∂z∂lnσ(z)=σ(z)1∂z∂σ(z)=σ(z)1σ(z)(1−σ(z))=(1−σ(z))
其中∂z∂σ(z)=σ(z)(1−σ(z)) 证明如下:
σ′(z)=(1+e−z1)′=(1+e−z)20−(−e−z)=(1+e−z)21+e−z−1=(1+e−z)1(1−(1+e−z)1)=σ(z)(1−σ(z))
而右项
∂wi∂ln(1−fw,b(x))=∂σ(z)∂ln(1−fw,b(x))∂wi∂z∂wi∂z=xi
也就是
∂σ(z)∂ln(1−σ(z))=−1−σ(z)1σ(z)∂z=−1−σ(z)1σ(z)(1−σ(z))=−σ(z)
所以
∂wi−lnL(w,b)=n∑−[y^n∂wi∂lnfw,b(xn)+(1−y^n)∂wi∂ln(1−fw,b(xn))]=n∑−[y^n(1−fw,b(xn))xin−(1−y^n)fw,b(xn)xin]=n∑−[y^n−y^nfw,b(xn)−fw,b(xn)+y^nfw,b(xn)]xin=n∑−(y^n−fw,b(xn))xin
得到的式子很简单。如果用梯度下降算法来更新它的话,可以写成:
wi←wi−ηn∑−(y^n−fw,b(xn))xin
y^n−fw,b(xn)表示理想的目标与模型的输出的差距,如果差距越大,
那么更新的量应该要越大。
接下来比较下逻辑回归和线性回归更新时的式子:
会发现表达式是一模一样的。唯一不同的是逻辑回归的y^n取0或1,f是0~1之间的数值;而线性回归的y^n是任意实数,输出也可以是任何实数。
生成模型VS判别模型
我们上面讨论的逻辑回归是判别模型(Discriminative),用高斯分布描述的概率分布模型是生成模型(Generative)。
它们的函数集是一样的 P(C1∣x)=σ(w⋅x+b)
用逻辑回归能直接找出w和b;如果是生成模型,那么需要找到μ1,μ2,Σ−1,进而求出wT和b
根据同一组训练数据,同样的函数集,上面两种模型会得到不同的函数。
如果用上所有的特征,判别模型的准确率更好。
假设有一个非常简单的二元分类问题,每个数据都有两个特征。
Class1我们只有一份数据,它的两个特征都是1;Class2有12份数据,如上。
如果给一份测试数据,它的两个特征都是1:
那么它属于哪个类别的概率大呢?
我们先来看下生成模型,选用朴素贝叶斯模型,朴素说的是每个特征都是独立的。
P(x∣Ci)=P(x1∣Ci)P(x2∣Ci)
P(C1)=131 给定类别C1,第一个特征是1的几率P(x1=1∣C1)=1,第二个特征是1的几率P(x2=1∣C1)=1,也是1。
P(C2)=1312 ,给定类别C2,第一个特征是1的几率P(x1=1∣C1)=31,第二个特征是1的几率P(x2=1∣C1)=31
接下来计算这个测试数据属于类别1的几率
P(C1∣x)=p(x∣C1)P(C1)+p(x∣C2)P(C2)p(x∣C1)P(C1)
计算得P(C1∣x)<0.5 ,因此判断它属于类别2;而用逻辑回归判断它属于类别1。