逻辑回归

回归与分类

在机器学习中,模型根据预测结果的不同分为回归分类。如果我们希望模型预测一个或者多个连续值,这类问题被称为回归问题,像常见的未来股票价格的估计、未来温度估计等都是回归问题。还有一类呢是分类问题,模型的预测结果是一个离散值,也就是只有固定的种类的结果,常见的有垃圾邮件识别等。

让我们先回到线性回归,线性回归中 y = W X + b y = WX + b y=WX+b。我们可以通过 W W W b b b 求出 X X X 对应的 y y y,这里的 y y y 是一个连续值,是一个回归模型。但如果我们希望用这个模型来做分类呢,应该怎么办呢?很容易想到,我们可以人为地设置阈值:若 y > 0 y > 0 y>0 分类是 1,若 y < 0 y < 0 y<0 分类是 0。从表面上来看,这当然是可以的,但实际上这样操作会出现很多问题。

  • 如下图想(左),若是样本比较标准,使用线性回归完全可以起到分类的作用;但是实际场景中,总会有一些不按套路出牌的点,如下图(右),此时再设置阈值的话就没有效果了。
  • 另外,如果我们简单地设计一个阈值来做判断,那么会导致最后的 y y y 是一个分段函数,而分段函数不连续,使得我们没有办法对它求梯度。

Alt

逻辑回归

当然,实际应用场景中,将会比上例更加复杂,线性回归 + 阈值 的方式已经不足以完成一个鲁棒性很好的分类器,于是,就有了 逻辑回归,函数表达式为
S ( t ) = 1 1 + e − t S(t) = \frac{1}{1 + e^{-t}} S(t)=1+et1

图像为
Alt
如下所示,左图是一个线性的决策边界,右图是非线性的决策边界
Alt

函数推导

线性边界的函数形式为:
θ 0 + θ 1 x 1 + . . . + θ n x n = ∑ i = 1 n θ i x i = θ T x \theta_0 + \theta_1x_1 + ... + \theta_n x_n = \sum_{i=1}^{n}\theta_ix_i = \theta^Tx θ0+θ1x1+...+θnxn=i=1nθixi=θTx

预测函数为
h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x h_\theta(x) = g(\theta^Tx) = \frac{1}{1 + e^{-\theta^Tx}} hθ(x)=g(θTx)=1+eθTx1

函数 h θ ( x ) h_\theta(x) hθ(x)的值有特殊的含义,它表示结果取1的概率,对于输入x的分类结果为1或0的概率分别为
C o s t ( h θ ( x ) , y ) = { − l o g ( h θ ( x ) ) y = 1 − l o g ( 1 − h θ ( x ) ) y = 0 Cost(h_\theta(x), y) = \begin{cases} -log(h_\theta(x)) \quad y = 1\\ -log(1 - h_\theta(x)) \quad y = 0 \end{cases} Cost(hθ(x),y)={log(hθ(x))y=1log(1hθ(x))y=0

综合上式
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(yx;θ)=(hθ(x))y(1hθ(x))1y

取似然函数
L ( θ ) = ∏ i = 1 n P ( y i ∣ x i , θ ) = ∏ i = 1 n ( h θ ( x i ) ) y i ( 1 − h θ ( x i ) ) 1 − y i L(\theta) = \prod_{i=1}^{n}P(y_i | x_i, \theta) = \prod_{i=1}^{n}(h_\theta(x_i))^{y_i} (1 - h_\theta(x_i))^{1 - y_i} L(θ)=i=1nP(yixi,θ)=i=1n(hθ(xi))yi(1hθ(xi))1yi

取对数似然
l ( θ ) = l o g L ( θ ) = ∑ i = 1 n y i ⋅ l o g h θ ( x i ) + ( 1 − y i ) ⋅ l o g ( 1 − h θ ( x i ) ) l(\theta) = logL(\theta) = \sum_{i=1}^{n} y_i · logh_\theta(x_i) + (1 - y_i)· log(1 - h_\theta(x_i)) l(θ)=logL(θ)=i=1nyiloghθ(xi)+(1yi)log(1hθ(xi))

最大似然估计就是求函数取最大值时的 θ,但在函数最优化的时候我们更习惯让一个函数越小越好,所以在前边乘一个负的系数 − 1 m -\frac{1}{m} m1。此时,函数取最小值时的 θ 即为最佳参数。
J ( θ ) = 1 m ∑ i = 1 n C o s t ( h θ ( x i ) , y i ) = − 1 m [ ∑ i = 1 n y i ⋅ l o g h θ ( x i ) + ( 1 − y i ) ⋅ l o g ( 1 − h θ ( x i ) ) ] J(\theta) = \frac{1}{m} \sum_{i=1}^{n}Cost(h_\theta(x_i), y_i) = -\frac{1}{m} \left[ \sum_{i=1}^{n} y_i · logh_\theta(x_i) + (1 - y_i)· log(1 - h_\theta(x_i)) \right] J(θ)=m1i=1nCost(hθ(xi),yi)=m1[i=1nyiloghθ(xi)+(1yi)log(1hθ(xi))]

使用梯度下降法求最小值
δ δ θ j J ( θ ) = − 1 m ∑ i = 1 n ( y i 1 h θ ( x i ) δ δ θ j h θ ( x i ) − ( 1 − y i ) 1 1 − h θ ( x i ) δ δ θ j h θ ( x i ) ) = − 1 m ∑ i = 1 n ( y i 1 g ( θ T x i ) − ( 1 − y i ) 1 1 − g ( θ T x i ) ) δ δ θ j g ( θ T x i ) = − 1 m ∑ i = 1 n ( y i 1 g ( θ T x i ) − ( 1 − y i ) 1 1 − g ( θ T x i ) ) g ( θ T x i ) ( 1 − g ( θ T x i ) ) δ δ θ j θ T x i = − 1 m ∑ i = 1 n ( y i ( 1 − g ( θ T x i ) ) − ( 1 − y i ) g ( θ T x i ) ) x i j = − 1 m ∑ i = 1 n ( y i − g ( θ T x i ) ) x i j = 1 m ∑ i = 1 n ( h θ ( x i ) − y i ) x i j \begin{aligned} \frac{\delta}{\delta_{\theta_j}}J(\theta) &= -\frac{1}{m} \sum_{i=1}^{n} \left (y_i \frac{1}{h_\theta(x_i)} \frac{\delta}{\delta_{\theta_j}} h_\theta(x_i) - (1 - y_i) \frac{1}{1 - h_\theta(x_i)} \frac{\delta}{\delta_{\theta_j}} h_\theta(x_i) \right) \\ &= -\frac{1}{m} \sum_{i=1}^{n} \left (y_i \frac{1}{g(\theta^Tx_i)} - (1 - y_i) \frac{1}{1 - g(\theta^Tx_i)} \right) \frac{\delta}{\delta_{\theta_j}} g(\theta^Tx_i) \\ &= -\frac{1}{m} \sum_{i=1}^{n} \left (y_i \frac{1}{g(\theta^Tx_i)} - (1 - y_i) \frac{1}{1 - g(\theta^Tx_i)} \right) g(\theta^Tx_i) (1 - g(\theta^Tx_i)) \frac{\delta}{\delta_{\theta_j}} \theta^Tx_i \\ &= -\frac{1}{m} \sum_{i=1}^{n} \left (y_i (1 - g(\theta^Tx_i)) - (1 - y_i) g(\theta^Tx_i) \right) x_i^j \\ &= -\frac{1}{m} \sum_{i=1}^{n} \left (y_i - g(\theta^Tx_i) \right) x_i^j \\ &= \frac{1}{m} \sum_{i=1}^{n} \left (h_\theta(x_i) - y_i \right) x_i^j \end{aligned} δθjδJ(θ)=m1i=1n(yihθ(xi)1δθjδhθ(xi)(1yi)1hθ(xi)1δθjδhθ(xi))=m1i=1n(yig(θTxi)1(1yi)1g(θTxi)1)δθjδg(θTxi)=m1i=1n(yig(θTxi)1(1yi)1g(θTxi)1)g(θTxi)(1g(θTxi))δθjδθTxi=m1i=1n(yi(1g(θTxi))(1yi)g(θTxi))xij=m1i=1n(yig(θTxi))xij=m1i=1n(hθ(xi)yi)xij
即:
θ j : = θ j − α m ∑ n = 1 m ( h θ ( x i ) − y i ) x i j \theta_j := \theta_j - \frac{\alpha}{m} \sum_{n=1}^{m}(h_\theta(x_i) - y_i) x_i^j θj:=θjmαn=1m(hθ(xi)yi)xij

补充Sigmoid函数求导过程
g ′ ( z ) = g ′ ( θ T x ) = ( 1 1 + e − z ) ′ = ( 1 ) ′ ⋅ ( 1 + e − z ) + 1 ⋅ ( 1 + e − z ) ′ ( 1 + e − z ) 2 = e − z ( 1 + e − z ) 2 = 1 + e − z − 1 ( 1 + e − z ) 2 = 1 + e − z ( 1 + e − z ) 2 − 1 ( 1 + e − z ) 2 = 1 1 + e − z − 1 ( 1 + e − z ) 2 = g ( z ) − g ( z ) 2 = g ( z ) ⋅ ( 1 − g ( z ) ) \begin{aligned} g'(z) = g'(\theta^Tx) &= \left (\frac{1}{1 + e^{-z}} \right)' \\ &= \frac{(1)' · (1 + e^{-z}) + 1 · (1 + e^{-z})'}{(1 + e^{-z})^2} \\ &= \frac{e^{-z}}{(1 + e^{-z})^2} \\ &= \frac{1 + e^{-z} - 1}{(1 + e^{-z})^2} \\ &= \frac{1 + e^{-z}}{(1 + e^{-z})^2} - \frac{1}{(1 + e^{-z})^2} \\ &= \frac{1}{1 + e^{-z}} - \frac{1}{(1 + e^{-z})^2} \\ &= g(z) - g(z)^2 \\ &= g(z) · (1 - g(z)) \end{aligned} g(z)=g(θTx)=(1+ez1)=(1+ez)2(1)(1+ez)+1(1+ez)=(1+ez)2ez=(1+ez)21+ez1=(1+ez)21+ez(1+ez)21=1+ez1(1+ez)21=g(z)g(z)2=g(z)(1g(z))

y ′ = y ( 1 − y ) y' = y(1 - y) y=y(1y)

正则化

对于线性回归或逻辑回归的损失函数构成的模型,可能会造成有些权重很大,有些权重很小的情况发生,从而会导致过拟合,使得模型的复杂度提高,泛化能力变差。

过拟合问题往往源自过多的特征,解决方法为:

  • 减少特征数量(但减少特征会失去一些信息,即使特征选的很好)
  • 正则化,保留所有特征,但减少 θ 的大小

如下例所示

x = [ 1 , 1 , 1 , 1 ] x = [1, 1, 1, 1] x=[1,1,1,1]
w 1 = [ 1 , 0 , 0 , 0 ] w_1 = [1, 0, 0, 0] w1=[1,0,0,0]
w 2 = [ 0.25 , 0.25 , 0.25 , 0.25 ] w_2 = [0.25, 0.25, 0.25, 0.25] w2=[0.25,0.25,0.25,0.25]

w 1 ⋅ x = w 2 ⋅ x = 1 w_1 · x = w_2 · x = 1 w1x=w2x=1,但是明显 w 2 w_2 w2 的模型更好,于是就引入正则化惩罚项。正则项可以取不同的形式,在回归问题中取平方损失,就是参数的 L2 范数,也可以取 L1 范数。取平方损失时,模型的损失函数变为

J ( θ ) = 1 2 m ∑ i = 1 n ( h θ ( x i ) − y i ) 2 + λ ∑ j = 1 n θ j 2 J(\theta) = \frac{1}{2m} \sum_{i=1}^{n}(h_\theta(x_i) - y_i)^2 + \lambda \sum_{j=1}^{n} \theta_j^2 J(θ)=2m1i=1n(hθ(xi)yi)2+λj=1nθj2

λ \lambda λ 是正则项系数

  • 如果它的值很大,说明对模型的复杂度惩罚大,对拟合数据的损失惩罚小,这样它就不会过分拟合数据,在训练数据上的偏差较大,在未知数据上的方差较小,但是可能出现欠拟合的现象;
  • 如果它的值很小,说明比较注重对训练数据的拟合,在训练数据上的偏差会小,但是可能会导致过拟合。

正则化后的梯度下降算法 θ 的更新变为
θ j : = θ j − α m ∑ n = 1 m ( h θ ( x i ) − y i ) x i j − λ m θ j \theta_j := \theta_j - \frac{\alpha}{m} \sum_{n=1}^{m}(h_\theta(x_i) - y_i) x_i^j - \frac{\lambda}{m}\theta_j θj:=θjmαn=1m(hθ(xi)yi)xijmλθj

L1与L2的选择

L1和L2经常被用来解决过拟合问题。而L1正则也常被用来进行特征选择,主要原因在于L1正则化会使得较多的参数为0,从而产生稀疏解。我们可以将0对应的特征遗弃,进而用来选择特征。

但为什么L1正则会产生稀疏解呢?这里我们用梯度的方式介绍下

L 1 = ∣ w 1 ∣ + ∣ w 2 ∣ + . . . + ∣ w n ∣ , ∂ L 1 ∂ w i = s g n ( w i ) = 1 o r − 1 ( s g n 为 符 号 函 数 ) L1 = |w_1| + |w_2| + ... + |w_n|, \quad \frac{\partial_{L_1}}{\partial_{w_i}} = sgn(w_i) = 1 \quad or \quad -1 \quad (sgn为符号函数) L1=w1+w2+...+wn,wiL1=sgn(wi)=1or1(sgn)

L 2 = w 1 2 + w 2 2 + . . . + w n 2 , ∂ L 2 ∂ w i = w i L2 = w_1^2 + w_2^2 + ... + w_n^2, \quad \frac{\partial_{L_2}}{\partial_{w_i}} = w_i L2=w12+w22+...+wn2,wiL2=wi

假设 w i w_i wi 等于不为 0 的正浮点数,学习速率 η 为 0.5

L 1 L_1 L1 的权重更新公式为 w i = w i − η ∗ 1 = w i − 0.5 ⋅ 1 w_i = w_i - \eta * 1 = w_i - 0.5 · 1 wi=wiη1=wi0.51,也就是说每次权重更新都能减少一个特定的值( η = 0.5 \eta = 0.5 η=0.5),那么经过若干次迭代后,权重就有可能减少到0。

L2的权重更新公式为 w i = w i − η ∗ w i = w i − 0.5 ∗ w i w_i = w_i - \eta * w_i = w_i - 0.5 * w_i wi=wiηwi=wi0.5wi,也就是说权重每次都等于上一次的1/2,那么,虽然权重不断变小,但是因为每次都等于上一次的一半,所以很快会收敛到较小的值但永远不为0。

下面的图很直观的说明了这个变化趋势:
Alt
Alt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值