文章目录
一. 逻辑回归原理
之前是讨论了如何使用线性模型进行回归学习,但若要做的是分类任务改怎么办?比如二分类问题,将X对应的y分为类别和类别。因为之前提及的线性回归的输出是连续的,现在我们需要将连续的值分为离散的0和1,那我们需要什么处理?这样很容易想到找到一个函数,模型输出值转换到0,1之间。
可能大家首先想到单位阶跃函数(unit-step Function),函数图像如下:
函数原型如下:
y
=
{
0
,
z
<
0
0.5
,
z
=
0
1
,
z
>
0
y=\begin{cases} 0,\quad z< 0\\ 0.5, \quad z=0\\ 1, \quad z>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+e−z1
图是:
从图中可以看出对数几率函数,是将z值转换到接近0或1的y值,并且其输出值在z=0附近变化很陡。
我们对数几率模型带入到广义线性回归模型中
y
=
g
−
1
(
w
T
x
+
b
)
y = g^{-1}(w^T x + b)
y=g−1(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}
ln1−yy=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=0∣x)p(y=1∣x)=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=1∣x)=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=1∣x)=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=1∑mlnp(yi∣xi;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=1∣x^;β),p0(x^;β)=p(y=0∣x^;β)=1−p1(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(yi∣xi;w,b)=yip1(xi^;β)+(1−yi)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=1∑m(−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−(∂β ∂βT∂2l(β))−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=1∑mxi^(yi−p1(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}
∂β ∂βT∂2l(β)=−i=1∑mxi^xi^Tp1(xi^;β)(1−p1(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^-表示负样本的数目)
1−y′y′=1−yy×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