Logistic Regression
1 前言
怎么将n维向量 x = [ x 1 , x 2 , . . . , x n ] x=[x_1,x_2,...,x_n] x=[x1,x2,...,xn]映射成一个点y呢?很容易想到就是将向量 x x x与另一个向量做内积。这个向量我们称为参数 θ \theta θ,即 θ = [ θ 0 , θ 1 , . . . , θ n ] \theta=[\theta_0, \theta_1, ...,\theta_n] θ=[θ0,θ1,...,θn]。所以做内积就是 x ⋅ θ x\cdot\theta x⋅θ【即行向量X乘以(行向量 θ \theta θ的转置)】得到一个数。
上面就是我们熟知的线性回归,这时的值域是 ( − ∞ , + ∞ ) (-\infty,+\infty) (−∞,+∞),但是我们要得到的是0或者1,所以要把值域限制一下,将值域正负无穷改为(0, 1),于是用到了sigmoid函数
2 二元逻辑回归模型
对线性回归的结果做一个在函数g上的转换,可以变化为逻辑回归。这个函数g在逻辑回归中我们一般取为sigmoid函数,形式如下:
g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+e−z1
函数图像如下:
它有一个非常好的性质,即当z趋于正无穷时, g ( z ) g(z) g(z)趋向于1,当z趋于负无穷时, g ( z ) g(z) g(z)趋向于0,这非常适合于我们的分类概率模型。另外,它还有一个很好的导数性质:
g ′ ( z ) = g ( z ) ( 1 − g ( z ) ) g^{'}(z)=g(z)(1-g(z)) g′(z)=g(z)(1−g(z))
如果我们另 g ( z ) g(z) g(z)函数中的z为: x θ x \theta xθ,这样就得到了二元逻辑回归模型的一般形式:
h θ ( x ) = 1 1 + e − x θ h_{\theta}(x) = \frac{1}{1+e^{-x\theta}} hθ(x)=1+e−xθ1
其中,x是样本数据输入, h θ ( x ) h_\theta(x) hθ(x)是模型输出,可以理解为某一分类的概率大小, θ \theta θ为模型参数,需要样本数据训练更新得最优。对于模型输出 h θ ( x ) h_\theta(x) hθ(x),我们将它与y联系起来为,当 x θ > 0 x\theta>0 xθ>0时, h θ ( x ) > 0.5 h_\theta(x)>0.5 hθ(x)>0.5,则y为1;当 x θ < 0 x\theta<0 xθ<0时, h θ ( x ) < 0.5 h_\theta(x)<0.5 hθ(x)<0.5,则y为0;当 x θ = 0 x\theta=0 xθ=0时, h θ ( x ) = 0.5 h_\theta(x)=0.5 hθ(x)=0.5,逻辑回归模型本身无法确定分类。
h θ ( x ) h_\theta(x) hθ(x)的值越小,而分类为0的的概率越高,反之,值越大的话分类为1的的概率越高。如果靠近临界点,则分类准确率会下降。
将模型写成矩阵模式如下:
h θ ( X ) = 1 1 + e − X θ h_\theta(X) = \frac{1}{1+e^{-X\theta}} hθ(X)=1+e−Xθ1
其中X为样本特征矩阵,维度为m*n, θ \theta θ为模型参数矩阵,维度为n*1, h θ ( X ) h_\theta(X) hθ(X)为模型输出,维度为m*1。
理解了二元分类回归的模型,接着我们就要看模型的损失函数了,我们的目标是极小化损失函数来得到对应的模型系数 θ \theta θ。
3 损失函数
对于解决分类问题的逻辑回归,如果使用均方误差,当函数输出值远离目标值和靠近目标值时,其偏导值都接近于0,导致距离目标值很远时,loss也很小,更新的速度慢,如果增大学习率的话,也无法确定输出值到底是远离目标值还是接近目标值。
不过我们可以用最大似然法来推导出我们的损失函数。
假设我们的样本输出是0或者1两类。那么我们有:
P ( y = 1 ∣ x , θ ) = h θ ( x ) P(y=1|x,\theta) = h_{\theta}(x) P(y=1∣x,θ)=hθ(x)
P ( y = 0 ∣ x , θ ) = 1 − h θ ( x ) P(y=0|x,\theta) = 1 - h_{\theta}(x) P(y=0∣x,θ)=1−hθ(x)
把这两个式子写成一个式子,就是:
P ( y ∣ x , θ ) = ( h θ ( x ) ) y ( 1 − h θ ( x ) ) ( 1 − y ) P(y|x,\theta) = (h_{\theta}(x))^y(1 - h_{\theta}(x))^{(1-y)} P(y∣x,θ)=(hθ(x))y(1−hθ(x))(1−y)
其中y的取值只能是0或者1。
得到了y的概率分布函数表达式,我们就可以用似然函数最大化来求解我们需要的模型系数θ。
为了方便求解,这里我们用对数似然函数最大化,对数似然函数取反即为我们的损失函数J(θ)。其中:
似然函数的代数表达式为:
L ( θ ) = ∏ i = 1 m ( h θ ( x ( i ) ) ) y ( i ) ( 1 − h θ ( x ( i ) ) ) 1 − y ( i ) L(\theta)=\prod_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)\right)^{y^{(i)}}\left(1-h_{\theta}\left(x^{(i)}\right)\right)^{1-y^{(i)}} L(θ)=i=1∏m(hθ(x(i)))y(i)(1−hθ(x(i)))1−y(i)
其中m为样本的个数。
对似然函数对数化取反的表达式,即损失函数表达式为:
J ( θ ) = − ln L ( θ ) = − ∑ i = 1 m ( y ( i ) log ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ) J(\theta)=-\ln L(\theta)=-\sum_{i=1}^{m}\left(y^{(i)} \log \left(h_{\theta}\left(x^{(i)}\right)\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right) J(θ)=−lnL(θ)=−i=1∑m(y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i))))
损失函数用矩阵法表达更加简洁:
J ( θ ) = − Y T l o g ( h θ ( X ) ) − ( E − Y ) T l o g ( E − h θ ( X ) ) J(\theta) = - Y^T log(h_{\theta}(X)) - (E-Y)^Tlog(E-h_{\theta}(X)) J(θ)=−YTlog(hθ(X))−(E−Y)Tlog(E−hθ(X))
其中E为全1向量。
4 二元逻辑回归的损失函数的优化方法
最常见的优化方法有梯度下降法,坐标轴下降法,等牛顿法等。这里推导出梯度下降法中θ每次迭代的公式。由于代数法推导比较的繁琐,这里给出矩阵法推导二元逻辑回归梯度的过程。
对于 J ( θ ) = − Y T l o g ( h θ ( X ) ) − ( E − Y ) T l o g ( E − h θ ( X ) ) J(\theta) = - Y^T log(h_{\theta}(X)) - (E-Y)^Tlog(E-h_{\theta}(X)) J(θ)=−YTlog(hθ(X))−(E−Y)Tlog(E−hθ(X)),我们用 J ( θ ) J(\theta) J(θ)对 θ \theta θ向量求导可得:
∂ ∂ θ J ( θ ) = X T [ 1 h θ ( X ) ⊙ h θ ( X ) ⊙ ( E − h θ ( X ) ) ⊙ ( − Y ) ] + X T [ 1 E − h θ ( X ) ⊙ h θ ( X ) ⊙ ( E − h θ ( X ) ) ⊙ ( E − Y ) ] \frac{\partial}{\partial \theta} J(\theta)=X^{T}\left[\frac{1}{h_{\theta}(X)} \odot h_{\theta}(X) \odot\left(E-h_{\theta}(X)\right) \odot(-Y)\right]+X^{T}\left[\frac{1}{E-h_{\theta}(X)} \odot h_{\theta}(X) \odot\left(E-h_{\theta}(X)\right) \odot(E-Y)\right] ∂θ∂J(θ)=XT[hθ(X)1⊙hθ(X)⊙(E−hθ(X))⊙(−Y)]+XT[E−hθ(X)1⊙hθ(X)⊙(E−hθ(X))⊙(E−Y)]
上式虽然很长,但只用了向量求导的链式法则,和下面三个基础求导公式的矩阵形式:
∂
∂
x
l
o
g
x
=
1
x
\frac{\partial}{\partial x}logx = \frac{1}{x}
∂x∂logx=x1
∂
∂
z
g
(
z
)
=
g
(
z
)
(
1
−
g
(
z
)
)
\frac{\partial}{\partial z}g(z) = g(z)(1-g(z))
∂z∂g(z)=g(z)(1−g(z))
∂
x
θ
∂
θ
=
x
\frac{\partial x\theta}{\partial \theta} = x
∂θ∂xθ=x
对于刚才的求导公式我们进行消解化简可得:
∂ ∂ θ J ( θ ) = X T ( h θ ( X ) − Y ) \frac{\partial}{\partial \theta} J(\theta)=X^{T}(h_\theta(X)-Y) ∂θ∂J(θ)=XT(hθ(X)−Y)
从而在梯度下降法中每一步向量 θ \theta θ的迭代公式如下:
θ = θ − η X T ( h θ ( X ) − Y ) \theta = \theta - \eta X^{T}(h_\theta(X)-Y) θ=θ−ηXT(hθ(X)−Y)
其中, η \eta η为参数更新的学习率。
5 二元逻辑回归的正则化
逻辑回归也会面临过拟合问题,所以我们也要考虑正则化。常见的有L1正则化和L2正则化。
逻辑回归的L1正则化的损失函数表达式如下,相比普通的逻辑回归损失函数,增加了L1的范数做作为惩罚,超参数 λ \lambda λ作为惩罚系数,调节惩罚项的大小。
二元逻辑回归的L1正则化损失函数表达式如下:
J ( θ ) = − Y T l o g ( h θ ( X ) ) − ( E − Y ) T l o g ( E − h θ ( X ) ) + λ ∣ ∣ θ ∣ ∣ 1 J(\theta) = - Y^T log(h_{\theta}(X)) - (E-Y)^Tlog(E-h_{\theta}(X)) + \lambda ||\theta||_1 J(θ)=−YTlog(hθ(X))−(E−Y)Tlog(E−hθ(X))+λ∣∣θ∣∣1
∣ ∣ θ ∣ ∣ 1 ||\theta||_1 ∣∣θ∣∣1为 θ \theta θ的L1范数。逻辑回归的L1正则化损失函数的优化方法常用的有坐标轴下降法和最小角回归法。
二元逻辑回归的L2正则化损失函数表达式如下:
J ( θ ) = − Y T l o g ( h θ ( X ) ) − ( E − Y ) T l o g ( E − h θ ( X ) ) + 1 2 λ ∣ ∣ θ ∣ ∣ 2 2 J(\theta) = - Y^T log(h_{\theta}(X)) - (E-Y)^Tlog(E-h_{\theta}(X)) + \frac{1}{2}\lambda ||\theta||^2_2 J(θ)=−YTlog(hθ(X))−(E−Y)Tlog(E−hθ(X))+21λ∣∣θ∣∣22
∣ ∣ θ ∣ ∣ 2 ||\theta||_2 ∣∣θ∣∣2为 θ \theta θ的L2范数。逻辑回归的L2正则化损失函数的优化方法和普通的逻辑回归类似。