Logistic Regression原理详细总结

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_40449129/article/details/102541838

       逻辑回归(Logistic Regression)是一个分类算法,既可以用来解决二分类问题也可以解决多分类问题。那么为什么名为“回归“的算法却是用来解决分类问题的呢?本文将对逻辑回归的由来及原理做出详细的总结。

1)线性回归(Linear Regression)

       线性回归一般化的描述指通过计算输入变量的加权和,并加上一个常数偏置项(截距项)来得到一个预测值。线性回归预测模型如下(向量形式):
                                                y ^ = h Θ ( X ) = Θ T X \hat{y} =h_\Theta (X)=\Theta ^TX
       线性回归是求出输出特征向量 y ^ \hat{y} 和输入样本矩阵 X X 之间的线性关系系数 θ θ ,然后给定一个特征向量 X X ,输出一个预测值 y ^ \hat{y} 。由于 y ^ \hat{y} 的值是一个连续的数值,因此线性回归是一个回归模型。

2)分类问题(Classification Problem)
       对于一个二分类问题,假如给定一个样本x,我们需要估计该样本属于特定的一个类别的概率(比如是否是垃圾短信?)。假如我们估计样本 x x 是垃圾概率的概率大于50%,则我们认为他是正类( l a b e l = 1 label=1 ),否则我们认为它是负类( l a b e l = 0 o r l a b e l = 1 label=0 or label = -1 )。这就是一个二分类问题。
       那么对于多分类问题,我们可以其转换成多个二分类问题,比如最简单的OVA(One-vs-all)方法,也可以直接用多元逻辑回归的方法解决,比如Many-vs-Many(MvM)。

3)回归问题到分类问题(Linear Regression To Classification Problem)
       那么如何用连续的数值去预测离散的标签值?我们能否将线性回归输出的一个连续的数值变成一个标签呢?一个比较直观的想法是设定一个阈值,比如回归模型输出的y大于0时,属于正类,y小于0时属于负类,这种方法叫做感知机(Perceptron)。
       感知机的方法可以很好的将一个连续的数值变成一个标签,但它有一个问题,即将y等于1时,和y等于100时,视为完全一样,都归为正类。那我们是否有更好的一个方法,将y等于1和y等于100都归为正类的同时,也考虑它们各自属于正类的置信度呢?
       这种方法就是逻辑回归(Logistic Regression),我们不直接去预测类别,而是预测类别为正的概率。如果样本类别为正的概率大于0.5,则认为样本为正类,否则为负类。

4 )逻辑函数(Logistic Function)
       那么如何将线性回归的输出值y,y属于(-∞, +∞),转换成[0,1]的概率的呢?
                                                y ^ = h Θ ( X ) = σ ( Θ T X ) \hat{y} =h_\Theta (X)=\sigma(\Theta ^TX)
       正好,有一个Sigmoid函数,表达式和函数图像如下:
                                                σ ( t ) = 1 1 + e t \sigma(t)=\frac{1}{1+e^{-t}}
sigmoid函数图像
       一旦逻辑回归能够估计样本X属于正类的概率 p ^ = h θ ( x ) \hat{p}=h_\theta(\mathbf{x}) ,那么很容易通
过以下公式去判断样本x属于哪个类别:
                                    y ^ = { 1 p ^ > 0.5 0 p ^ < 0.5 \hat{y} = \begin{cases} 1\qquad\hat{p}>0.5 \\ 0\qquad\hat{p}<0.5\\ \end{cases}
       注意: Θ T X \Theta ^TX 为正数, y ^ \hat{y} 为1, Θ T X \Theta ^TX 为负数, y ^ \hat{y} 为0。
       因此,逻辑回归的函数为:
                                    P ( Y X ) = 1 1 + e ( w T X + b ) = σ ( w T X + b ) P(\frac{Y}{X}{})=\frac{1}{1+e^{-(w^TX+b)}}=\sigma(w^TX+b)
       对于二分类问题,逻辑回归函数可以写成:
                                    p ( y = 1 / x , w ) = 1 1 + e ( w T X + b ) = σ ( w T X + b ) p(y=1/x,w)=\frac{1}{1+e^{-(w^TX+b)}}=\sigma(w^TX+b)
                                    p ( y = 0 / x , w ) = e ( w T X + b ) 1 + e ( w T X + b ) = 1 σ ( w T X + b ) p(y=0/x,w)=\frac{e^{-(w^TX+b)}}{1+e^{-(w^TX+b)}}=1-\sigma(w^TX+b)
       将两式合并,可写成:
                                    p ( y / x , w ) = p ( y = 1 / x , w ) y [ 1 p ( y = 1 / x , w ) y ] 1 y p(y/x,w)=p(y=1/x,w)^y[1- p(y=1/x,w)^y]^{1-y}

5)决策边界(Decision Boundaries)
       对于二分类问题,逻辑回归函数为:

                                    p ( y = 1 / x , w ) = 1 1 + e ( w T X + b ) = σ ( w T X + b ) p(y=1/x,w)=\frac{1}{1+e^{-(w^TX+b)}}=\sigma(w^TX+b)
                                    p ( y = 0 / x , w ) = e ( w T X + b ) 1 + e ( w T X + b ) = 1 σ ( w T X + b ) p(y=0/x,w)=\frac{e^{-(w^TX+b)}}{1+e^{-(w^TX+b)}}=1-\sigma(w^TX+b)
       由于位于决策边界上的点属于正负类的概率相等,因此对于二分类问题一下两式相等:

                                    p ( y = 0 / x , w ) = p ( y = 1 / x , w ) p(y=0/x,w)=p(y=1/x,w)
                                    1 1 + e ( w T X + b ) = e ( w T X + b ) 1 + e ( w T X + b ) \frac{1}{1+e^{-(w^TX+b)}} =\frac{e^{-(w^TX+b)}}{1+e^{-(w^TX+b)}}
                                    1 = e ( w T X + b ) 1=e^{-(w^TX+b)}
                                    l o g 1 = ( w T X + b ) log1 = -(w^TX+b) (左右两边分别取log)
                                    w T X + b = 0 w^TX+b=0
       因此逻辑回归的决策边界是线性函数,因此逻辑回归是线性分类器。

6)目标函数(Objective Function)
       假设我们有数据集 D = { ( x i , y i ) } i = 1 n D=\left\{ (x_i,y_i) \right\}^n_{i=1} x i R d x_i\in R^d y i { 0 , 1 } y_i\in\left\{ 0,1\right\} 。对于二分类逻辑回归有:
                                    p ( y / x , w ) = p ( y = 1 / x , w ) y [ 1 p ( y = 1 / x , w ) y ] 1 y p(y/x,w)=p(y=1/x,w)^y[1- p(y=1/x,w)^y]^{1-y}
       我们需要最大化目标函数:
                                    w ^ M L E , b ^ M L E = a r g m a x w , b i = 1 n p ( y i / x i , w , b ) \hat{w}_{MLE},\hat{b}_{MLE}=argmax_{w,b}\prod _{i=1}^np(y_i/x_i,w,b)
                                                            = a r g m a x w , b l o g ( i = 1 n p ( y i / x i , w , b ) ) =argmax_{w,b}log(\prod _{i=1}^np(y_i/x_i,w,b)) (取log不改变函数的单调性)
                                                            = a r g m a x w , b i = 1 n l o g p ( y i / x i , w , b ) =argmax_{w,b}\sum _{i=1}^nlog\,p(y_i/x_i,w,b) (由于我们习惯求最小值,因此加负号)
                                                            = a r g m i n w , b i = 1 n l o g p ( y i / x i , w , b ) =-argmin_{w,b}\sum _{i=1}^nlog\,p(y_i/x_i,w,b)
将逻辑回归函数带入目标函数得:
         w ^ M L E , b ^ M L E = a r g m i n w , b i = 1 n l o g p ( y i / x i , w , b ) \hat{w}_{MLE},\hat{b}_{MLE}=-argmin_{w,b}\sum _{i=1}^nlogp(y_i/x_i,w,b)
                                   = a r g m i n w , b i = 1 n y i l o g p ( y = 1 / x i , w , b ) + ( 1 y i ) l o g p [ 1 ( y = 1 / x i , w , b ) ] =-argmin_{w,b}\sum _{i=1}^ny_ilogp(y=1/x_i,w,b)+(1-y_i)log\,p[1-(y=1/x_i,w,b)]

7)最小化目标函数(Minimizing the Function)
       由上节可知,逻辑回归目标函数为:
        L ( w , b ) = a r g m i n w , b i = 1 n y i l o g p ( y = 1 / x i , w , b ) + ( 1 y i ) l o g p [ 1 ( y = 1 / x i , w , b ) ] L(w,b)=-argmin_{w,b}\sum _{i=1}^ny_ilog\,p(y=1/x_i,w,b)+(1-y_i)log\,p[1-(y=1/x_i,w,b)]
  ,     由于逻辑回归目标函数对于求解最小化损失函数的 θ \theta 是没有公式解(没有等价的正态方程)。 但好消息是,这个目标函数是凸函数,所以利用梯度下降算法(或任何其他优化算法)一定能够找到全局最小值。
       首先我们用损失函数 L ( w , b ) L(w,b) 对参数 w w 求偏导,
                       L ( w , b ) = a r g m i n w , b i = 1 n y i l o g p ( y = 1 / x i , w , b ) + ( 1 y i ) l o g p [ 1 ( y = 1 / x i , w , b ) ] L(w,b)=-argmin_{w,b}\sum _{i=1}^ny_ilog\,p(y=1/x_i,w,b)+(1-y_i)log\,p[1-(y=1/x_i,w,b)]
                       δ L ( w , b ) δ w = i = 1 n y i σ ( w T x i + b ) [ 1 σ ( w T x i + b ) ] x i σ ( w T x i + b ) + ( 1 y i ) σ ( w T x i + b ) [ 1 σ ( w T x i + b ) ] x i 1 σ ( w T x i + b ) \frac{\delta L(w,b)}{\delta w}=-\sum _{i=1}^ny_i\frac{\sigma(w^Tx_i+b)[1-\sigma(w^Tx_i+b)]x_i}{\sigma(w^Tx_i+b)}+(1-y_i)\frac{-\sigma(w^Tx_i+b)[1-\sigma(w^Tx_i+b)]x_i}{1-\sigma(w^Tx_i+b)}
                       = i = 1 n y i ( 1 σ ( w T x i + b ) ) x i + ( y i 1 ) σ ( w T x i + b ) x i =-\sum _{i=1}^ny_i{(1-\sigma(w^Tx_i+b))x_i}+(y_i-1){\sigma(w^Tx_i+b)x_i}
                       = i = 1 n y i x i σ ( w T x i + b ) x i =-\sum _{i=1}^ny_ix_i-{\sigma(w^Tx_i+b)x_i}
                       = i = 1 n [ σ ( w T x i + b ) y i ] x i =\sum _{i=1}^n[\sigma(w^Tx_i+b)-y_i]x_i
       其中, δ ( l o g a x ) δ x = ( l o g a x ) = 1 x l n a \frac{\delta (log_ax)}{\delta x}=(log_ax)'=\frac{1}{xlna}
        δ ( σ ( w T x + b ) ) δ x = ( 1 1 + e ( w T X + b ) ) = e ( w T X + b ) ( 1 + e ( w T X + b ) ) 2 = 1 1 + e ( w T X + b ) e ( w T X + b ) 1 + e ( w T X + b ) = σ ( w T x + b ) ( 1 σ ( w T x + b ) ) \frac{\delta ( \sigma(w^Tx+b))}{\delta x} = (\frac{1}{1+e^{-(w^TX+b)}})'=\frac{e^{-(w^TX+b)}}{(1+e^{-(w^TX+b))^2}}=\frac{1}{1+e^{-(w^TX+b)}}\frac{e^{-(w^TX+b)}}{1+e^{-(w^TX+b)}}=\sigma(w^Tx+b)(1-\sigma(w^Tx+b))
       同理,可对参数b求偏导,得:
                      δ L ( w , b ) δ b = i = 1 n [ σ ( w T x i + b ) y i ] \frac{\delta L(w,b)}{\delta b}=\sum _{i=1}^n[\sigma(w^Tx_i+b)-y_i]
       下面我们用梯度下降算法(GD)更新参数 w , b w,b
                      w t + 1 = w t η i = 1 n [ σ ( w T x i + b ) y i ] x i w^{t+1}=w^{t}-\eta \sum_{i=1}^n[\sigma(w^Tx_i+ b)-y_i]x_i
                      b t + 1 = b t η i = 1 n [ σ ( w T x i + b ) y i ] b^{t+1}=b^{t}-\eta \sum_{i=1}^n[\sigma(w^Tx_i+ b)-y_i]
       当样本量非常大时,每一次更新参数 w , b w,b 时的计算复杂度为 O ( n ) O(n) ,因此有了随机梯度下降算法(SGD),批量梯度下降算法(BGD)。在深度学习中,通常我们运用批量梯度下降算法。

8)正则惩罚项(Penalty)
       当逻辑回归面临过拟合的问题,我们可以通过在损失函数中加入正则惩罚项。常见的正则有L1正则和L2正则。
       二元逻辑回归加入L1正则后,目标函数为:
                      w ^ M L E , b ^ M L E = a r g m i n w , b i = 1 n l o g p ( y i / x i , w , b ) + λ w 1 \hat{w}_{MLE},\hat{b}_{MLE}=-argmin_{w,b}\sum _{i=1}^nlogp(y_i/x_i,w,b)+\lambda |||w_1||
       加入L2正则后,目标函数为:
                      w ^ M L E , b ^ M L E = a r g m i n w , b i = 1 n l o g p ( y i / x i , w , b ) + λ w 2 2 \hat{w}_{MLE},\hat{b}_{MLE}=-argmin_{w,b}\sum _{i=1}^nlogp(y_i/x_i,w,b)+\lambda ||w_2||^2
       既加入L1正则,又加入L2正则(elasticnet),目标函数为:
                      w ^ M L E , b ^ M L E = a r g m i n w , b i = 1 n l o g p ( y i / x i , w , b ) + λ 1 w 1 + λ 2 w 2 2 \hat{w}_{MLE},\hat{b}_{MLE}=-argmin_{w,b}\sum _{i=1}^nlogp(y_i/x_i,w,b)+\lambda_1 ||w_1||+\lambda_2 ||w_2||^2
其中超参数 λ \lambda 用交叉验证的方式去选择最好的超参数。
       一般来说,既加入L1正则,又加入L2正则,模型表现要比 只加L1好,因为当特征数量比样本的数量大的时候,或者特征之间有很强的相关性时,L1正则可能会表现的不规律。
       L1正则化就是在损失函数后边所加正则项为L1范数,加上L1范数容易得到稀疏解(0比较多),所以可以用来做特征选择;L2正则化就是损失函数后边所加正则项为L2范数的平方,加上L2正则相比于L1正则来说,得到的解比较平滑(不是稀疏),但是同样能够保证解中接近于0(但不是等于0,所以相对平滑)的维度比较多,降低模型的复杂度。

9)Softmax Regression
       逻辑回归模型可以直接推广到支持多类别分类,不必要组合和训练多个二分类器,其称为 Softmax 回归或多类别 Logistic 回归。
       Softmax原理很简单:在给定一个实例 x x 时,Softmax回归模型首先计算k类的分数 s k ( x ) s_k(x) ,然后将分数应用在Softmax函数(也称为归一化指数)上做归一化处理,估计出每类的概率。
                                           s k ( x ) = Θ k T x s_k(x)=\Theta_k^Tx
                                           p k ^ = σ ( s ( x ) ) k = e x p ( s k ( x ) ) j = 1 K e x p ( s j ( x ) ) \hat{p_k}=\sigma(s(x))_k=\frac{exp(s_k(x))}{\sum_{j=1}^Kexp({s_j(x)})}
和 Logistic 回归分类器一样,Softmax 回归分类器将估计概率最高(它只是得分最高的类)的那类作为预测结果。
                                           y ^ = a r g m a x σ ( s ( x ) ) k = a r g m a x s k ( x ) = a r g m a x ( Θ k T x ) \hat{y}=argmax\,\sigma(s(x))_k=argmax\,s_k(x)=argmax\,(\Theta _k^Tx)
       现在我们知道这个模型如何估计概率并进行预测,接下来将介绍如何训练。和二分类类似,多分类目标函数如下:
                                           L ( w , b ) = a r g m a x w , b i = 1 m k = 1 K p ( y i / x i , w , b ) L(w,b)=argmax_{w,b}\prod _{i=1}^m\prod _{k=1}^Kp(y_i/x_i,w,b)
经过优化,多元逻辑回归的目标函数为:
                                           L ( w , b ) = a r g m i n w , b i = 1 m k = 1 K y i k l o g p ( p i ^ k ) L(w,b)=-argmin_{w,b}\sum _{i=1}^m\sum _{k=1}^Ky_i^klogp(\hat{p_i}^k)
同理,多元逻辑回归的目标函数优化方法和二元逻辑回归类似,这里就不累述。

10)小结
       逻辑回归尤其是二元逻辑回归是非常常见的模型,训练速度很快,虽然使用起来没有支持向量机(SVM)那么占主流,但是解决普通的分类问题是足够了,训练速度也比起SVM要快不少。

(欢迎转载,转载请注明出处。)

猜你喜欢

转载自blog.csdn.net/weixin_40449129/article/details/102541838