logistic Regression Model - webdancer's Blog
logistic Regression Model
在前面已经学习了线性回归模型来解决回归问题,这里我们看一下解决分类问题的一个常用模型logistic regression,是一种用来解决分类问题的概率判别模型。概率判别模型是直接给出后验概率,这与概率生成模型有很大不同[1],在生成模型中,首先假设先验和似然,然后根据贝叶斯定理,计算出后验概率。logistic regression的模型与前面的linear regression类似,可以将其归为线性模型。
logistic regression model
\begin{equation}
p(C_1|X,\theta) = \sigma(\theta^{T}X)
\label{labelpos}
\end{equation}
\]
\begin{equation}
\sigma(z)=\frac{1}{1+e^{-z}}
\label{sigmoidfun}
\end{equation}
\]
\begin{equation}
p(C_2|X,\theta) = 1-p(C_1|X,\theta)
\label{labelpos2}
\end{equation}
\]
\begin{equation}
p(\mathbf t|\mathbf X,\theta)=\prod_{n=1}^{N}{(y^n)}^{t^n}{(1-y^n)}^{(1-t^n)}
\label{mlf}
\end{equation}
\]
\begin{eqnarray}
\label{crossentro}
\mathbb E(\theta) &=& -\ln p(\mathbf t|\mathbf X,\theta)\\
\nonumber &=& -\ln[\prod_{n=1}^{N}{(y^n)}^{t^n}{(1-y^n)}^{(1-t^n)}]\\
\nonumber &=& -\sum_{n=1}^{N}[t^n\ln(y^n)+(1-t^n)\ln{(1-y^n)}]
\end{eqnarray}
\]
交叉熵误差函数优化
\begin{eqnarray}
\bigtriangledown \mathbb E(\theta) &=& \frac{\partial}{\partial \theta}\mathbb E(\theta)\\
\nonumber &=& \sum_{n=1}^{N}(y^n-t^n)X^n\\
\nonumber &=& \mathbf X(\mathbf y-\mathbf t)
\label{gradient}
\end{eqnarray}
\]
高级优化算法
\begin{eqnarray}
\mathbf H = \bigtriangledown \bigtriangledown \mathbb E(\theta) &=& \mathbf X S \mathbf X^{T}
\label{hessian}
\end{eqnarray}
\]
function [eVal, gradient] = costFunction(theta) eval = [...code to compute E(theta)...]; gradient = [...code to compute derivative of E(theta)...];
options = optimset('GradObj', 'on', 'MaxIter', '100'); initialTheta = zeros(2,1); [optTheta, functionVal, exitFlag] = fminunc(@costFunction,initialTheta,options);
模型的扩展
基于以上讨论的二分类的logistic regression model,我们可以进行扩展,来增强模型的能力。一下只简单的介绍一些思路,暂时不展开扩展。
- 扩展到多分类问题(multi class problem)。将logistic sigmoid function变为softmax function,logistic regression就可以处理都分类问题了,这个过程非常容易(有很多模型,将其扩展到多类问题是比较困难的,比如SVM)。在多类时候,目标随机变量符合multinomial distribution(categorical distribution),这样似然函数就可以写成下面的形式:
\[
p(\mathbf t|\mathbf X, \mathbf \Theta) = \prod_{n=1}^{N}\prod_{k=1}^{K}(y_k^{n})^{t_k^{n}}
\]
其中,$y_k^{n}=\frac{\exp(\Theta^k \mathbf X^n)}{\sum_i \exp(\Theta^i\mathbf X^n)}$。这样我们很容易写出似然函数的相反数(negative likelihood),也就是我们的错误函数:
\[
\begin{eqnarray}
\label{crossentro1}
\mathbb E(\Theta) &=& -\ln p(\mathbf t|\mathbf X, \mathbf \Theta)\\
\nonumber &=&- \sum_{n=1}^{N}\sum_{k=1}^{K}t_k^{n}\ln(y_k^{n})
\end{eqnarray}
\]
这就是多类logistic regression要优化的目标函数。下面的目标就是优化该目标函数了,如果使用梯度下降方法,还得求梯度;如果使用其他的高级优化算法,可能还需要求海森矩阵。其中,梯度的求解过程如下:
\[
\begin{eqnarray}
\label{gra2}
\frac{\partial \mathbb E(\Theta) }{\partial \Theta^j} &=&\frac{\partial \mathbb E(\Theta) }{\partial a^j}\frac{\partial a^j}{\partial \Theta^j}\\
\nonumber &=& -\sum_{n=1}^{N}\sum_{k=1}^{K}t_k^n\frac{1}{y_k^n}y_k^n(I_{k,j}-y_j^n)X^n\\
\nonumber &=& -\sum_{n=1}^{N}\sum_{k=1}^{K}t_k^n(I_{k,j}-y_j^n)X^n\\
\nonumber &=& -\sum_{n=1}^{N}(t_j^n-y_j^n)X^n
\end{eqnarray}
\]
其中,用到了$\frac{\partial y_k}{\partial a^j} = y_k(I_{k,j}-y_j)$,$ \sum_kt_k^n=1$。
- 处理overfitting的问题。上面讨论的式子在小样本的情况下,极有可能出现overfitting的问题。可以通过正则化框架(regularization framework)来处理,增强模型的泛化能力,比如常用的l1 norm, l2 norm等。如果使用l2 norm,则对二分类问题来说,目标函数可以写成下面的形式:
\[
J(\theta) = arg\min_\theta\mathbb E(\theta)+\lambda \parallel \theta \parallel ^2
\]
对多类问题,则目标函数可以写成下面形式:
J(\Theta) = arg\min_\Theta\mathbb E(\Theta)+\sum_k^K\lambda_k \parallel \Theta^k \parallel ^2
\]
- 不用MLE来估计模型中的参数$\theta$,使用Baysian method来处理。
实例
结果:
logistic regression, best f_score : 0.897090 logistic regression with l1 penalty, best f_score : 0.908755 logistic regression with l2 penalty, best f_score: 0.905211
从结果可以看出,添加了惩罚项以后,我们可以提高模型的预测性能,这与我们上面的理论是一致的。在实验结果中,l1 penalty的结果比l2要好,这可能与超参数$C$的取值相关,我们可以通过调参数,在验证集上取得更好的效果。