逻辑回归(Logistic Regression)是一个分类算法,既可以用来解决二分类问题也可以解决多分类问题。那么为什么名为“回归“的算法却是用来解决分类问题的呢?本文将对逻辑回归的由来及原理做出详细的总结。
1)线性回归(Linear Regression)
线性回归一般化的描述指通过计算输入变量的加权和,并加上一个常数偏置项(截距项)来得到一个预测值。线性回归预测模型如下(向量形式):
y^=hΘ(X)=ΘTX
线性回归是求出输出特征向量
y^和输入样本矩阵
X之间的线性关系系数
θ,然后给定一个特征向量
X,输出一个预测值
y^。由于
y^的值是一个连续的数值,因此线性回归是一个回归模型。
2)分类问题(Classification Problem)
对于一个二分类问题,假如给定一个样本x,我们需要估计该样本属于特定的一个类别的概率(比如是否是垃圾短信?)。假如我们估计样本
x是垃圾概率的概率大于50%,则我们认为他是正类(
label=1),否则我们认为它是负类(
label=0orlabel=−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)=σ(ΘTX)
正好,有一个Sigmoid函数,表达式和函数图像如下:
σ(t)=1+e−t1
一旦逻辑回归能够估计样本X属于正类的概率
p^=hθ(x),那么很容易通
过以下公式去判断样本x属于哪个类别:
y^={1p^>0.50p^<0.5
注意:
ΘTX 为正数,
y^为1,
ΘTX为负数,
y^为0。
因此,逻辑回归的函数为:
P(XY)=1+e−(wTX+b)1=σ(wTX+b)
对于二分类问题,逻辑回归函数可以写成:
p(y=1/x,w)=1+e−(wTX+b)1=σ(wTX+b)
p(y=0/x,w)=1+e−(wTX+b)e−(wTX+b)=1−σ(wTX+b)
将两式合并,可写成:
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+e−(wTX+b)1=σ(wTX+b)
p(y=0/x,w)=1+e−(wTX+b)e−(wTX+b)=1−σ(wTX+b)
由于位于决策边界上的点属于正负类的概率相等,因此对于二分类问题一下两式相等:
p(y=0/x,w)=p(y=1/x,w)
1+e−(wTX+b)1=1+e−(wTX+b)e−(wTX+b)
1=e−(wTX+b)
log1=−(wTX+b)(左右两边分别取log)
wTX+b=0
因此逻辑回归的决策边界是线性函数,因此逻辑回归是线性分类器。
6)目标函数(Objective Function)
假设我们有数据集
D={(xi,yi)}i=1n,
xi∈Rd,
yi∈{0,1}。对于二分类逻辑回归有:
p(y/x,w)=p(y=1/x,w)y[1−p(y=1/x,w)y]1−y
我们需要最大化目标函数:
w^MLE,b^MLE=argmaxw,b∏i=1np(yi/xi,w,b)
=argmaxw,blog(∏i=1np(yi/xi,w,b)) (取log不改变函数的单调性)
=argmaxw,b∑i=1nlogp(yi/xi,w,b) (由于我们习惯求最小值,因此加负号)
=−argminw,b∑i=1nlogp(yi/xi,w,b)
将逻辑回归函数带入目标函数得:
w^MLE,b^MLE=−argminw,b∑i=1nlogp(yi/xi,w,b)
=−argminw,b∑i=1nyilogp(y=1/xi,w,b)+(1−yi)logp[1−(y=1/xi,w,b)]
7)最小化目标函数(Minimizing the Function)
由上节可知,逻辑回归目标函数为:
L(w,b)=−argminw,b∑i=1nyilogp(y=1/xi,w,b)+(1−yi)logp[1−(y=1/xi,w,b)]
, 由于逻辑回归目标函数对于求解最小化损失函数的
θ是没有公式解(没有等价的正态方程)。 但好消息是,这个目标函数是凸函数,所以利用梯度下降算法(或任何其他优化算法)一定能够找到全局最小值。
首先我们用损失函数
L(w,b)对参数
w求偏导,
L(w,b)=−argminw,b∑i=1nyilogp(y=1/xi,w,b)+(1−yi)logp[1−(y=1/xi,w,b)]
δwδL(w,b)=−∑i=1nyiσ(wTxi+b)σ(wTxi+b)[1−σ(wTxi+b)]xi+(1−yi)1−σ(wTxi+b)−σ(wTxi+b)[1−σ(wTxi+b)]xi
=−∑i=1nyi(1−σ(wTxi+b))xi+(yi−1)σ(wTxi+b)xi
=−∑i=1nyixi−σ(wTxi+b)xi
=∑i=1n[σ(wTxi+b)−yi]xi
其中,
δxδ(logax)=(logax)′=xlna1,
δxδ(σ(wTx+b))=(1+e−(wTX+b)1)′=(1+e−(wTX+b))2e−(wTX+b)=1+e−(wTX+b)11+e−(wTX+b)e−(wTX+b)=σ(wTx+b)(1−σ(wTx+b))
同理,可对参数b求偏导,得:
δbδL(w,b)=∑i=1n[σ(wTxi+b)−yi]
下面我们用梯度下降算法(GD)更新参数
w,b:
wt+1=wt−η∑i=1n[σ(wTxi+b)−yi]xi
bt+1=bt−η∑i=1n[σ(wTxi+b)−yi]
当样本量非常大时,每一次更新参数
w,b时的计算复杂度为
O(n),因此有了随机梯度下降算法(SGD),批量梯度下降算法(BGD)。在深度学习中,通常我们运用批量梯度下降算法。
8)正则惩罚项(Penalty)
当逻辑回归面临过拟合的问题,我们可以通过在损失函数中加入正则惩罚项。常见的正则有L1正则和L2正则。
二元逻辑回归加入L1正则后,目标函数为:
w^MLE,b^MLE=−argminw,b∑i=1nlogp(yi/xi,w,b)+λ∣∣∣w1∣∣
加入L2正则后,目标函数为:
w^MLE,b^MLE=−argminw,b∑i=1nlogp(yi/xi,w,b)+λ∣∣w2∣∣2
既加入L1正则,又加入L2正则(elasticnet),目标函数为:
w^MLE,b^MLE=−argminw,b∑i=1nlogp(yi/xi,w,b)+λ1∣∣w1∣∣+λ2∣∣w2∣∣2
其中超参数
λ用交叉验证的方式去选择最好的超参数。
一般来说,既加入L1正则,又加入L2正则,模型表现要比 只加L1好,因为当特征数量比样本的数量大的时候,或者特征之间有很强的相关性时,L1正则可能会表现的不规律。
L1正则化就是在损失函数后边所加正则项为L1范数,加上L1范数容易得到稀疏解(0比较多),所以可以用来做特征选择;L2正则化就是损失函数后边所加正则项为L2范数的平方,加上L2正则相比于L1正则来说,得到的解比较平滑(不是稀疏),但是同样能够保证解中接近于0(但不是等于0,所以相对平滑)的维度比较多,降低模型的复杂度。
9)Softmax Regression
逻辑回归模型可以直接推广到支持多类别分类,不必要组合和训练多个二分类器,其称为 Softmax 回归或多类别 Logistic 回归。
Softmax原理很简单:在给定一个实例
x时,Softmax回归模型首先计算k类的分数
sk(x),然后将分数应用在Softmax函数(也称为归一化指数)上做归一化处理,估计出每类的概率。
sk(x)=ΘkTx
pk^=σ(s(x))k=∑j=1Kexp(sj(x))exp(sk(x))
和 Logistic 回归分类器一样,Softmax 回归分类器将估计概率最高(它只是得分最高的类)的那类作为预测结果。
y^=argmaxσ(s(x))k=argmaxsk(x)=argmax(ΘkTx)
现在我们知道这个模型如何估计概率并进行预测,接下来将介绍如何训练。和二分类类似,多分类目标函数如下:
L(w,b)=argmaxw,b∏i=1m∏k=1Kp(yi/xi,w,b)
经过优化,多元逻辑回归的目标函数为:
L(w,b)=−argminw,b∑i=1m∑k=1Kyiklogp(pi^k)
同理,多元逻辑回归的目标函数优化方法和二元逻辑回归类似,这里就不累述。
10)小结
逻辑回归尤其是二元逻辑回归是非常常见的模型,训练速度很快,虽然使用起来没有支持向量机(SVM)那么占主流,但是解决普通的分类问题是足够了,训练速度也比起SVM要快不少。
(欢迎转载,转载请注明出处。)