逻辑回归算法梳理

一. 逻辑回归原理

之前是讨论了如何使用线性模型进行回归学习,但若要做的是分类任务改怎么办?比如二分类问题,将X对应的y分为类别和类别。因为之前提及的线性回归的输出是连续的,现在我们需要将连续的值分为离散的0和1,那我们需要什么处理?这样很容易想到找到一个函数,模型输出值转换到0,1之间。
可能大家首先想到单位阶跃函数(unit-step Function),函数图像如下:
在这里插入图片描述
函数原型如下:
y = { 0 , z &lt; 0 0.5 , z = 0 1 , z &gt; 0 y=\begin{cases} 0,\quad z&lt; 0\\ 0.5, \quad z=0\\ 1, \quad z&gt;0 \end{cases} y=0,z<00.5,z=01,z>0
即若预测值大于0判断为正例,小于0判断为反例,为临界值0的则可任意判别。
在这里插入图片描述
但从图中可以看出单位阶跃函数不连续,为什么需要连续 ,所以我们希望找到一定程度上近似单位解决函数的“替代函数”,并希望它单调可微。这样Sigmoid函数,也就是对数几率函数是一个常用的替代函数: y = 1 1 + e − z y = \frac{1}{1+e^{-z}} y=1+ez1
图是:
在这里插入图片描述
从图中可以看出对数几率函数,是将z值转换到接近0或1的y值,并且其输出值在z=0附近变化很陡。
我们对数几率模型带入到广义线性回归模型中 y = g − 1 ( w T x + b ) y = g^{-1}(w^T x + b) y=g1(wTx+b)中,就得到了逻辑回归的数学原型:
(1.1) y = 1 1 + e − ( w T x + b ) y = \frac {1}{1+e^{-(w^Tx+b)}}\tag{1.1} y=1+e(wTx+b)1(1.1)
从式子可以看出,实际是上使用线性回归模型的预测结果去逼近真实标记的对数几率,因而被称为“对数几率回归”。注意虽然名字是回归,实际上式一种分类方法。

二. 逻辑回归损失函数推导及优化

确定好原理之后,我们需要确定公式最优参数w和b。我们可以从上面的公式(1.1)变成为 (2.1) l n y 1 − y = w T x + b ln\frac{y}{1-y} = w^Tx+b\tag{2.1} ln1yy=wTx+b(2.1)
这时我们将公式(2.1)中的y视为类后验概率估计p(y=1|x),则改写成:
(2.2) l n p ( y = 1 ∣ x ) p ( y = 0 ∣ x ) = w T x + b ln\frac{p(y=1|x)}{p(y=0|x)} = w^Tx+b\tag{2.2} lnp(y=0x)p(y=1x)=wTx+b(2.2)
显然有:
(2.3) p ( y = 1 ∣ x ) = e w T x + b 1 + e w T x + b p(y=1|x)= \frac{e^{w^Tx+b}}{1+e^{w^Tx+b}} \tag{2.3} p(y=1x)=1+ewTx+bewTx+b(2.3)
(2.4) p ( y = 1 ∣ x ) = e w T x + b 1 + e w T x + b p(y=1|x)= \frac{e^{w^Tx+b}}{1+e^{w^Tx+b}} \tag{2.4} p(y=1x)=1+ewTx+bewTx+b(2.4)
然后我们可通过“极大似然法”来估计w和b。给定数据集 ( x i , y i ) i = 1 m {(x_i,y_i)}^m_{i=1} (xi,yi)i=1m,对率回归模型最大化“对数似然”
(2.5) l ( w , b ) = ∑ i = 1 m l n p ( y i ∣ x i ; w , b ) l(w, b) = \sum_{i=1}^m ln {p(y_i|x_i; w,b)} \tag{2.5} l(w,b)=i=1mlnp(yixi;w,b)(2.5)
即令每个样本属于其真实标记概率越大越好。为便于讨论,令 β = ( x ; b ) , x ^ = ( x ; 1 ) \beta = (x;b),\hat{x}=(x;1) β=(x;b),x^=(x;1),则 w T x + b w^Tx + b wTx+b可简写为 β x ^ \beta \hat{x} βx^。在令 p 1 ( x ^ ; β ) = p ( y = 1 ∣ x ^ ; β ) , p 0 ( x ^ ; β ) = p ( y = 0 ∣ x ^ ; β ) = 1 − p 1 ( x ^ ; β ) p_1(\hat{x};\beta) = p(y=1 | \hat{x}; \beta), p_0(\hat{x};\beta) = p(y=0 | \hat{x}; \beta) = 1-p_1(\hat{x};\beta) p1(x^;β)=p(y=1x^;β),p0(x^;β)=p(y=0x^;β)=1p1(x^;β),则式(2.5)中的似然项可重写为:
(2.6) p ( y i ∣ x i ; w , b ) = y i p 1 ( x i ^ ; β ) + ( 1 − y i ) p o ( x i ^ ; β ) p(y_i|x_i;w,b) = y_ip_1(\hat{x_i};\beta)+(1-y_i)p_o(\hat{x_i};\beta) \tag{2.6} p(yixi;w,b)=yip1(xi^;β)+(1yi)po(xi^;β)(2.6)
将公式(2.6)代入(2.5),并根据(2.3)和(2.4)可知,最大化式(2.5)等价于最小化
(2.7) l ( β ) = ∑ i = 1 m ( − y i β T x i ^ + l n ( 1 + e β T x i ^ ) ) l(\beta) = \sum_{i=1}^m (-y_i\beta^T\hat{x_i} + ln(1+e^{\beta^T \hat{x_i}})) \tag{2.7} l(β)=i=1m(yiβTxi^+ln(1+eβTxi^))(2.7)
式(2.7)是关于 β \beta β的高阶可导连续凸函数(这个是逻辑回归损失函数的推导)。
根据凸优化理论,我们可以根据经典的数值优化算法如梯度下降法、牛顿法等来求的其最优解,于是就得到
(2.8) β ∗ = arg ⁡ min ⁡ l ( β ) \beta ^* =\mathop{\arg\min}l(\beta) \tag{2.8} β=argminl(β)(2.8)
以牛顿法为例,其第t+1轮迭代解的更新公式为:
(2.9) β t + 1 = β t − ( ∂ 2 l ( β ) ∂ β   ∂ β T ) − 1 ∂ l ( β ) ∂ β \beta_{t+1} = \beta_{t} - (\frac{\partial ^2l(\beta)}{\partial \beta \ \partial \beta^T})^{-1} \frac {\partial l( \beta)}{\partial \beta} \tag{2.9} βt+1=βt(β βT2l(β))1βl(β)(2.9)
其中关于 β \beta β的一阶、二阶导数分别为:
(2.10) ∂ l ( β ) ∂ β = − ∑ i = 1 m x i ^ ( y i − p 1 ( x i ^ ; β ) ) \frac{\partial l(\beta)}{\partial \beta} = - \sum_{i=1}^m \hat{x_i}(y_i - p_1(\hat{x_i};\beta)) \tag{2.10} βl(β)=i=1mxi^(yip1(xi^;β))(2.10)
(2.11) ∂ 2 l ( β ) ∂ β   ∂ β T = − ∑ i = 1 m x i ^ x i ^ T p 1 ( x i ^ ; β ) ( 1 − p 1 ( x i ^ ; β ) ) \frac{\partial ^2l(\beta)}{\partial \beta \ \partial \beta ^T} = - \sum_{i=1}^m \hat{x_i}\hat{x_i}^T p_1(\hat{x_i};\beta)(1- p_1(\hat{x_i};\beta)) \tag{2.11} β βT2l(β)=i=1mxi^xi^Tp1(xi^;β)(1p1(xi^;β))(2.11)

三. 正则化与函数评估指标

1.正则化

在这里插入图片描述
左图是过拟合,就是逻辑回归模型在训练集都没有拟合好,训练误差大。中间分类比较好,右图是过拟合现象,就是这个模型可以把训练集分类很好,但是在新的数据上却无法使用。
我们可以通过正则化(regularization)惩罚参数 θ \theta θ,防止其取得过大,以此避免过拟合问题。首先看代价函数(cost function):
在这里插入图片描述
其中红色框起来的那一项为正则项。
再来看对应的梯度下降(gradient descent):
在这里插入图片描述

2.分类评估指标:

先说基本概念

真正(True Positive , TP):被模型预测为正的正样本。
假正(False Positive ,FP):被模型预测为正的负样本。
假负(False Negative , FN):被模型预测为负的正样本。
真负(True Negative,TN):被模型预测为负的负样本。

准确率(Accuracy):
最常用的分类性能指标。
Accuracy = )= (TP +TN)/(TP+FN+FP+TN),即正确预测的正反例数 /总数

精确率(Precision)
精确率容易和准确率被混为一谈。其实,精确率只是针对预测正确的正样本而不是所有预测正确的样本。表现为预测出是正的里面有多少真正是正的。可理解为查准率。
Precision = TP/(TP+FP),即正确预测的正例数 /预测正例总数

召回率(Recall)
就是实际的正样本中,有多少样本被被分类器预测出来。
Recall = TP/(TP+FN),即正确预测的正例数 /实际正例总数

F1 score
F值是精确率和召回率的调和值,更接近于两个数较小的那个,所以精确率和召回率接近时,F值最大。很多推荐系统的评测指标就是用F值的。
2/F1 = 1/Precision + 1/Recall

ROC曲线
逻辑回归里面,对于正负例的界定,通常会设一个阈值,大于阈值的为正类,小于阈值为负类。如果我们减小这个阀值,更多的样本会被识别为正类,提高正类的识别率,但同时也会使得更多的负类被错误识别为正类。为了直观表示这一现象,引入ROC。根据分类结果计算得到ROC空间中相应的点,连接这些点就形成ROC curve,横坐标为False Positive Rate(FPR假正率),纵坐标为True Positive Rate(TPR真正率)。一般情况下,这个曲线都应该处于(0,0)和(1,1)连线的上方,如图:
在这里插入图片描述

点(0,1):即FPR=0, TPR=1,意味着FN=0且FP=0,将所有的样本都正确分类。
点(1,0):即FPR=1,TPR=0,最差分类器,避开了所有正确答案。
点(0,0):即FPR=TPR=0,FP=TP=0,分类器把每个实例都预测为负类。
点(1,1):分类器把每个实例都预测为正类。
总之:ROC曲线越接近左上角,该分类器的性能越好。而且一般来说,如果ROC是光滑的,那么基本可以判断没有太大的overfitting:

AUC
AUC(Area Under Curve)被定义为ROC曲线下的面积(ROC的积分),通常大于0.5小于1。随机挑选一个正样本以及一个负样本,分类器判定正样本的值高于负样本的概率就是 AUC 值。AUC值(面积)越大的分类器,性能越好,如图:
在这里插入图片描述
PR曲线
PR曲线的横坐标是精确率P,纵坐标是召回率R。评价标准和ROC一样,先看平滑不平滑(蓝线明显好些)。一般来说,在同一测试集,上面的比下面的好(绿线比红线好)。当P和R的值接近时,F1值最大,此时画连接(0,0)和(1,1)的线,线和PRC重合的地方的F1是这条线最大的F1(光滑的情况下),此时的F1对于PRC就好像AUC对于ROC一样。一个数字比一条线更方便调型。
在这里插入图片描述

四. 逻辑回归的优缺点

逻辑回归是解决工业规模问题最流行的算法。在工业应用上,如果需要分类的数据拥有很多有意义的特征,每个特征都对最后的分类结果有或多或少的影响,那么最简单最有效的办法就是将这些特征线性加权,一起参与到决策过程中。比如预测广告的点击率,从原始数据集中筛选出符合某种要求的有用的子数据集等等。

优点:1)适合需要得到一个分类概率的场景。2)计算代价不高,容易理解实现。LR在时间和内存需求上相当高效。它可以应用于分布式数据,并且还有在线算法实现,用较少的资源处理大型数据。3)LR对于数据中小噪声的鲁棒性很好,并且不会受到轻微的多重共线性的特别影响。(严重的多重共线性则可以使用逻辑回归结合L2正则化来解决,但是若要得到一个简约模型,L2正则化并不是最好的选择,因为它建立的模型涵盖了全部的特征。)

缺点:1)容易欠拟合,分类精度不高。2)数据特征有缺失或者特征空间很大时表现效果并不好。

五 样本不均衡问题解决办法

样本不均衡大体三类做法:
1.直接对训练集的反例样例进行“欠采样”,即去除一些反例使得正、反例数目接近,然后再进行学习;
2.是对训练集里的正类样例进行“过采样”,即增加一些正例使得正、反例数目接近,然后再进行学习;
3.直接基于原始训练集进行学习,但在用训练好的分类器进行预测时,将 y ′ 1 − y ′ = y 1 − y × m − m + , ( m + 表 示 正 样 本 的 数 据 , m − 表 示 负 样 本 的 数 目 ) \frac{y^{\prime}}{1-y^{\prime}}=\frac{y}{1-y}×\frac{m^-}{m^+},(m^+表示正样本的数据,m^-表示负样本的数目) 1yy=1yy×m+m,(m+m)嵌入到其决策过程中,称为“阈值移动”。

六 sklearn参数

class sklearn.linear_model.LogisticRegression(penalty=’l2’, dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver=’warn’, max_iter=100, multi_class=’warn’, verbose=0, warm_start=False, n_jobs=None)[source]
penalty:在“l1”,“l2”的正则化中选择
dual:双重或原始配方(不是很能理解)
tol:停止标准的容忍度
C: 正规化强度的逆
fit_intercept: 是否要将一个参量调价到决策函数

七 逻辑回归与线性回归的联系与区别

1)线性回归要求变量服从正态分布,logistic回归对变量分布没有要求。
2)线性回归要求因变量是连续性数值变量,而logistic回归要求因变量是分类型变量。
3)线性回归要求自变量和因变量呈线性关系,而logistic回归不要求自变量和因变量呈线性关系
4)logistic回归是分析因变量取某个值的概率与自变量的关系,而线性回归是直接分析因变量与自变量的关系
总之, logistic回归与线性回归实际上有很多相同之处,最大的区别就在于他们的因变量不同,其他的基本都差不多,正是因为如此,这两种回归可以归于同一个家族,即广义线性模型(generalized linear model)。这一家族中的模型形式基本上都差不多,不同的就是因变量不同,如果是连续的,就是多重线性回归,如果是二项分布,就是logistic回归。logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释。所以实际中最为常用的就是二分类的logistic回归。

参考文献:
https://zhuanlan.zhihu.com/p/39363869
西瓜书
https://blog.csdn.net/u012328159/article/details/51093922
吴恩达2014年机器学习
https://blog.csdn.net/login_sonata/article/details/54288653
http://blog.sina.com.cn/s/blog_537ed51201019gu1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值