逻辑回归
内容分三块,第一部分逻辑回归模型,第二部分是策略,第三部分是学习算法。
1. 构造分类函数
Logistic回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题(即输出只有两种,分别代表两个类别),所以利用了Logistic函数(或称为Sigmoid函数)。
函数形式为:
g(z)=ez1+ez
g(z)函数可以将自变量从
(−∞,∞) 映射到
(0,1) 。图形如下所示:
且g(z)求导有如下性质:
∇zg(z)=∇zez1+ez=ez(1+ez)−ez⋅ez(1+ez)2=ez(1+ez)2=ez1+ez(1−ez1+ez)=g(z)(1−g(z))
又对于特征的线性组合,有:
w0+w1∗x1+w2∗x2+⋯+wn∗xn=xTw
则构造分类函数:
hw(x)=g(xTw)=exTw1+exTw
所以这个分类函数是希望从特征中学习到一个0/1分类模型,这个分类模型是将特征的线性组合作为自变量,由于自变量的取值范围是
(−∞,∞) ,于是用logistic函数将其映射到
(0,1) 上,映射后的值被认为是属于
y=1 的概率。表达式如下所示:
P(Y=1|x(i);w)=hw(x(i))P(Y=0|x(i);w)=1−hw(x(i))
2. 构造损失函数
损失函数可以应用极大似然估计法得到。
对训练样本集来说,一个样本的概率为:
P(Y=yi|x(i);w)
似然函数为
L(w)=∏i=1mP(Y=yi|x(i);w)=∏i=1m[hw(x(i))]yi[1−hw(x(i))]1−yi
对数似然函数为
l(w)=log∏i=1m[hw(x(i))]yi[1−hw(x(i))]1−yi=∑i=1myilog(hw(x(i)))+(1−yi)log(1−hw(x(i)))
我们希望求得似然函数最大,即每个训练数据集样本概率乘积最大,也等价于对数似然函数最大。接下来我们需要对
l(w,b) 求极大值,得到w。
逻辑回归的学习策略是选择能使得对数似然函数最大的参数w。
3. 学习算法
到这里,问题已经变成了一个求对数似然函数最大的最优化问题,选择一种优化算法即可。
- gradient descent method(梯度下降法)
- Conjugate gradient method(共轭梯度法)
- Quasi-Newton method(拟牛顿法)
- BFGS method
- L-BFGS(Limited-memory BFGS
因为是求似然函数最大,这里采取梯度上升算法(与梯度下降算法同理,一个是负梯度方向时下降最快的方向,一个是正梯度方向是上升最快的方向)。
∇wj=∑i=1m[yi1hw(x(i))+(1−yi)−11−hw(x(i))]hw(x(i))(1−hw(x(i)))x(i)j=∑i=1m[yi(1−hw(x(i)))−(1−yi)hw(x(i))]x(i)j=∑i=1N(yi−hw(x(i)))x(i)j
即对于每一次迭代,有如下更新:
wj:=wj+α∇wj=wj−α∑i=1m(hw(x(i))−yi)x(i)j(j=0,1,2⋯n)
4. 向量化
向量化的目的是方便编程,减少for循环,提高运算效率。已知训练数据集x,y和权重w可表示为:
x=⎡⎣⎢⎢⎢⎢⎢x(1)x(2)⋮x(m)⎤⎦⎥⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢⎢⎢x(1)0x(2)0⋮x(m)0x(1)1x(2)1⋮x(m)1⋯⋯⋱⋯x(1)nx(2)n⋮x(m)n⎤⎦⎥⎥⎥⎥⎥⎥⎥y=⎡⎣⎢⎢⎢⎢⎢y(1)y(2)⋮y(m)⎤⎦⎥⎥⎥⎥⎥w=⎡⎣⎢⎢⎢⎢w0w1⋮wn⎤⎦⎥⎥⎥⎥
A=x⋅w=⎡⎣⎢⎢⎢⎢⎢⎢⎢x(1)0x(2)0⋮x(m)0x(1)1x(2)1⋮x(m)1⋯⋯⋱⋯x(1)nx(2)n⋮x(m)n⎤⎦⎥⎥⎥⎥⎥⎥⎥⋅⎡⎣⎢⎢⎢⎢w0w1⋮wn⎤⎦⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢⎢x(1)0w0+x(1)1w1+⋯+x(1)nwnx(2)0w0+x(2)1w1+⋯+x(2)nwn⋮x(m)0w0+x(m)1w1+⋯+x(m)nwn⎤⎦⎥⎥⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢A1A2⋮Am⎤⎦⎥⎥⎥⎥
E=hw(x)−y=⎡⎣⎢⎢⎢⎢⎢g(A1)−y1g(A2)−y2⋮g(Am)−ym⎤⎦⎥⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢E1E2⋮Em⎤⎦⎥⎥⎥⎥
则根据之前推导的更新公式,可以转化为:
wj:=wj+α∇wj:=wj−α∑i=1m(hw(x(i))−yi)x(i)j:=wj−α∑i=1mEix(i)j
即有:
w:=w−αxTE
整个计算步骤是:
- 输入x,y; 初始化 w
- 进行n_iter 次迭代:
- 求出 A=x⋅w
- 求出 E=hw(x)−y
- 求出 w=w−αxTE
- 判断此时的w,是否满足精度要求,满足即跳出
4. 正则化
由于我们是在训练数据集上去求得一个分类函数,使得在训练数据集上输入每一个样本在分类函数上得到的预测值能与真实值接近或一致,在本文中是通过求对数似然函数最大化来实现的,但我们过分追求在训练数据集上的一致性往往会导致过拟合(在训练数据集上非常吻合,而在未知数据集上效果较差),所以我们需要通过一些办法降低过拟合。
- 减少特征数量
- 缺点是丢掉了一些潜藏信息
- 人工选择,比如在本例中有 P(Y=yi|x(i);w) ,观察加入一个特征之后样本概率的变化
- deeplearning 自动选择特征
- 正则化
- 不减少特征,而是通过降低特征的权值 wi ,适用于特征较多的情况
- 正则项可以取不同的形式,在回归问题中取平方损失,就是参数的L2范数,也可以取L1范数。
在本文中,也可以构造损失函数,求对数似然函数最大化可以转化为求最小J(w),即:
J(w)=−l(w)
加入L1范数,L2范数分别为:
J(w)=−l(w)+λ∑i=0nwiJ(w)=−l(w)+λ∑i=0nw2i
λ>0 为正则化参数,它的设置有以下性质:
- 当值很大时,对模型的复杂度惩罚大。这样它会表现出很好的泛化能力,但可能不会过分拟合数据
- 当值很小时,对模型的复杂度惩罚小。这样它比较注重对训练数据的拟合,但可能会有较差的泛化能力
则正则化之后 w 的更新公式如下:
wj:=wj−α∑i=1m(hw(x(i))−yi)x(i)j−2αλwj(j=0,1,2⋯n)