什么是逻辑回归?
逻辑回归的实质是事件发生的概率除以事件不发生的概率后取对数。这种变换,将自变量和因变量的关系变成了线性的。逻辑回归经常被用于二分类问题。当然,它也是可以应用与多分类问题的。下面我们一步一步来看逻辑回归的数学推导。
逻辑回归的主要思想
首先,我们定义样本
x的类后验概率估计:
p(y=1∣x) 和
p(y=0∣x)
则下面的对数几率函数反映了
x作为正例的相对可能性:
lnp(y=0∣x)p(y=1∣x)=wTx+b(1)
显然,我们可以得到:
p(y=1∣x)=1+ewTx+bewTx+b
如果我们将其转化为Sigmoid的形式,则:
p(y=1∣x)=1+e−(wTx+b)1p(y=0∣x)=1+ewTx+b1(2)(3)
有了上面的两个概率,我们就可以用极大似然估计法去估计参数
w和
b了。为了简化计算,我们将采用对数似然(log-likelihood):
l(w,b)=i=1∑mln[p(yi∣xi,w,b)](4)给定数据集{(xi,yi)}i=1m
上述最大似然函数是为了找到令各个样本属于其真实标记的可能性最大的参数
w和
b
如何求得参数
w和
b?
为了方便讨论,令
β=(w;b),x^(x;1), 假设每个样本用
n个特征,下面的式子中
xi表示样本
x的第
i个特征。此时我们有:
wT+b=βTx^=w1x1+w2x2+w3x2+...+wnxn+bx^=⎝⎜⎜⎜⎜⎜⎛x1x2⋮xn1⎠⎟⎟⎟⎟⎟⎞β=⎝⎜⎜⎜⎜⎜⎛w1w2⋮wnb⎠⎟⎟⎟⎟⎟⎞
再令:
p1(x^;β)=p(y=1∣x^,β)=1+eβTx^eβTx^p0(x^;β)=p(y=0∣x^,β)=1+eβTx^1
则
p(yi∣xi,w,b)=yip1(x^i;β)+(1−yi)p0(x^i;β)(5)此处x^i表示第i个样本,yi表示第i个样本的取值
分析式子(5):
当yi=1时,p(yi=1∣xi,w,b)=p1(x^i;β)当yi=0时,p(yi=0∣xi,w,b)=p0(x^i;β)
将式(2),(3),(5)代入式(4)可得:
l(w,b)=i=1∑mln(1+eβTx^iyi⋅eβTx^i+1+eβTx^i1−yi)=i=1∑m[ln(yi⋅eβTx^i+1−yi)−ln(1+eβTx^i)]
当yi=1时,ln(yi⋅eβTx^i+1−yi)=ln(1)=0当yi=0时,ln(yi⋅eβTx^i+1−yi)=ln(eβTx^i)=βTx^i⇒ln(yi⋅eβTx^i+1−yi)=yi⋅βTx^i
由于最大化似然函数
⇔最小化似然函数的负数。因此,我们的目标是最小化
−l(β)=i=1∑m(−yi⋅βTx^i+ln(1+eβTx^i))(6)
式子(6)是关于
β的可导凸函数。根据凸优化理论,用梯度下降法,牛顿法即可求得其最优解:
β∗=argminβ −l(β)(7)
至此,我们已经完成了逻辑回归的所有数学推导。接下来,就是如何求得式(7)的解。
牛顿法
以牛顿法为例,其
t+1轮的迭代更新公式为:
βt+1=βt−⟮∂β⋅∂βT∂2(−l(β))⟯−1∂β∂(−l(β))(8)
求
−l(β)的一阶导数:
∂β∂(−l(β))=∂β∂∑i=1m(−yi⋅βTx^i+ln(1+eβTx^i))=i=1∑m(−yi⋅x^i+1+eβTx^ix^i⋅eβTx^i)=−i=1∑mx^i(yi−1+eβTx^ieβTx^i)=−i=1∑mx^i(yi−p1(x^i;β))(9)
求
−l(β)的二阶导数:
∂β⋅∂βT∂2(−l(β))=∂β⋅∂βT∂[−∑i=1mx^i(yi−1+eβTx^ieβTx^i)]=i=1∑m x^i⋅(1+eβTx^i)2x^iT⋅eβTx^i⋅(1+eβTx^i)−x^iT⋅eβTx^i⋅eβTx^i=i=1∑m x^i⋅x^iT⋅1+eβTx^ieβTx^i⋅1+eβTx^i1=i=1∑m x^i⋅x^iT⋅p1(x^i;β)⋅(1−p1(x^i;β))(10)
以上三个式子一直迭代至前后轮的差值小于某一阈值为止。即
βt+1−βt<ε
模型使用
当我们遇到新的样本时想要判断其属于1类还是0类。只需用上面得到的
β计算
p1(x^i;β)即可。若得到的结果大于0.5则取1类,小于0.5则取0类。
p1(x^;β)=p(y=1∣x^,β)=1+eβTx^eβTx^或p1(x^;β)=p(y=1∣x^,β)=1+e−(βTx^)1
Python代码实现
https://github.com/Haifei-ZHANG/machine-learning-algorithms/tree/master/Logistic Regresssion