ML模型3:逻辑回归模型

逻辑回归模型

逻辑回归假设数据服从伯努利分布,通过极大化似然函数的方法,运用梯度下降来求解参数,来达到将数据二分类的目的。

1. 问题引入

线性回归是进行回归学习,但如果要做分类任务该怎么办呢

在广义线性模型下,可以利用一个单调可微的函数将分类任务的标签y与线性回归模型的预测结果联系起来。

实值z → 0/1值?(Q1. 逻辑回归和线性回归有什么区别?

选用理想的单位阶跃函数 → 单位阶跃函数不连续 → 寻找替代函数 - 对数几率函数(sigmoid函数)
g(z)=11+ezg(z) = \frac{1}{1+e^{-z}}
下图所示 - 红色单位阶跃函数/黑色sigmoid函数
ML模型3:逻辑回归模型

:以下以常见二分类为例。且样本集和线性回归相似,只是输出y为离散值。

2. 模型描述

Sigmoid函数:
g(z)=11+ezg(z) = \frac{1}{1+e^{-z}}

z=xθz = x\theta,得到逻辑回归的一般形式
hθ(x;θ)=11+exθ{h_\theta }(x;\theta ) = {1 \over {1 + {e^{ - x\theta }}}}

逻辑回归的基本假设 - 假设数据服从伯努利分布

伯努利分布的简单例子就是抛硬币:抛中为正面的概率是p,抛中为反面的概率是1−p。


P(y=1x;θ)=hθ(x)=11+exθP(y = 1|x;\theta ) = {h_\theta }(x) = {1 \over {1 + {e^{ - x\theta }}}}P(y=0x;θ)=1hθ(x)=111+exθP(y = 0|x;\theta ) = 1 - {h_\theta }(x) = 1 - {1 \over {1 + {e^{ - x\theta }}}}

3. 损失函数

损失函数是基于最大似然估计推导得到的。

1)综合上述输入xx下分类结果0/1的概率,得:
P(yx;θ)=(hθ(x))y(1hθ(x))1yP(y|x;\theta ) = {\left( {{h_\theta }(x)} \right)^y}{\left( {1 - {h_\theta }(x)} \right)^{1 - y}}
2)取似然函数为:
L(θ)=i=1mP(y(i)x(i);θ)=i=1m(hθ(x(i)))y(i)(1hθ(x(i)))1y(i)\begin{aligned} L\left( \theta \right) &= \prod\limits_{i = 1}^m {P\left( {{y^{\left( i \right)}}|{x^{\left( i \right)}};\theta } \right)} \\ &= \prod\limits_{i = 1}^m {{{\left( {{h_\theta }({x^{\left( i \right)}})} \right)}^{{y^{\left( i \right)}}}}{{\left( {1 - {h_\theta }({x^{\left( i \right)}})} \right)}^{1 - {y^{\left( i \right)}}}}} \end{aligned}
3)对数似然函数为:
l(θ)=logL(θ)=i=1m[y(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]\begin{aligned} l\left( \theta \right)&=\log L\left( \theta \right)\\ &= \sum\limits_{i = 1}^m {\left[ {{y^{\left( i \right)}}\log {h_\theta }\left( {{x^{\left( i \right)}}} \right) + \left( {1 - {y^{\left( i \right)}}} \right)\log \left( {1 - {h_\theta }\left( {{x^{\left( i \right)}}} \right)} \right)} \right]} \end{aligned}

最大似然估计就是求得使l(θ)l\left( \theta \right)取最大值时的 θ\theta,这里可以使用梯度上升法求解,求得的 θ\theta 就是要求的最佳参数。

4)为了统一用梯度下降法求解,通常将损失函数定义如下:(Q2. 为什么要除以样本数m?
J(θ)=1ml(θ)=1mi=1m[y(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]\begin{aligned} J\left( \theta \right) &= - {1 \over m}l\left( \theta \right)\\ &= - {1 \over m}\sum\limits_{i = 1}^m {\left[ {{y^{\left( i \right)}}\log {h_\theta }\left( {{x^{\left( i \right)}}} \right) + \left( {1 - {y^{\left( i \right)}}} \right)\log \left( {1 - {h_\theta }\left( {{x^{\left( i \right)}}} \right)} \right)} \right]} \end{aligned}

4. 模型求解

显然逻辑回归最终拟合函数是非线性的(sigmoid函数分线性),所以此处选择用迭代法-梯度下降法求解。

1)输入:损失函数 J(θ)=1mi=1m[y(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]J\left( \theta \right) = - {1 \over m}\sum\limits_{i = 1}^m {\left[ {{y^{\left( i \right)}}\log {h_\theta }\left( {{x^{\left( i \right)}}} \right) + \left( {1 - {y^{\left( i \right)}}} \right)\log \left( {1 - {h_\theta }\left( {{x^{\left( i \right)}}} \right)} \right)} \right]}
初始值 θ\theta 和学习步长 α\alpha

2)更新方程
θj=θjαθjJ(θ),(j=0,1...n){\theta _j} = {\theta _j} - \alpha {\partial \over {\partial {\theta _j}}}J\left( \theta \right),\left( {j = 0,1...n} \right)

3)损失函数的梯度计算如下:
θjJ(θ)=1mi=1m[y(i)1hθ(x(i))θjhθ(x(i))(1y(i))11hθ(x(i))θjhθ(x(i))]=1mi=1m[y(i)1g(x(i)θ)(1y(i))11g(x(i)θ)]θjg(x(i)θ)=1mi=1m[y(i)1g(x(i)θ)(1y(i))11g(x(i)θ)]g(x(i)θ)(1g(x(i)θ))xj(i)=1mi=1m[y(i)(1g(x(i)θ))(1y(i))g(x(i)θ)]xj(i)=1mi=1m[y(i)g(x(i)θ)]xj(i)=1mi=1m[y(i)hθ(x(i))]xj(i)=1mi=1m[hθ(x(i))y(i)]xj(i)\begin{aligned} {\partial \over {\partial {\theta _j}}}J\left( \theta \right) &= - {1 \over m}\sum\limits_{i = 1}^m {\left[ {{y^{\left( i \right)}}{1 \over {{h_\theta }\left( {{x^{\left( i \right)}}} \right)}}{\partial \over {\partial {\theta _j}}}{h_\theta }\left( {{x^{\left( i \right)}}} \right) - \left( {1 - {y^{\left( i \right)}}} \right){1 \over {1 - {h_\theta }\left( {{x^{\left( i \right)}}} \right)}}{\partial \over {\partial {\theta _j}}}{h_\theta }\left( {{x^{\left( i \right)}}} \right)} \right]}\\ &= - {1 \over m}\sum\limits_{i = 1}^m {\left[ {{y^{\left( i \right)}}{1 \over {g\left( {{x^{\left( i \right)}}\theta } \right)}} - \left( {1 - {y^{\left( i \right)}}} \right){1 \over {1 - g\left( {{x^{\left( i \right)}}\theta } \right)}}} \right]} {\partial \over {\partial {\theta _j}}}g\left( {{x^{\left( i \right)}}\theta } \right)\\ &=- {1 \over m}\sum\limits_{i = 1}^m {\left[ {{y^{\left( i \right)}}{1 \over {g\left( {{x^{\left( i \right)}}\theta } \right)}} - \left( {1 - {y^{\left( i \right)}}} \right){1 \over {1 - g\left( {{x^{\left( i \right)}}\theta } \right)}}} \right]} g\left( {{x^{\left( i \right)}}\theta } \right)\left( {1 - g\left( {{x^{\left( i \right)}}\theta } \right)} \right)x_j^{\left( i \right)}\\ &= - {1 \over m}\sum\limits_{i = 1}^m {\left[ {{y^{\left( i \right)}}\left( {1 - g\left( {{x^{\left( i \right)}}\theta } \right)} \right) - \left( {1 - {y^{\left( i \right)}}} \right)g\left( {{x^{\left( i \right)}}\theta } \right)} \right]} x_j^{\left( i \right)}\\ &= - {1 \over m}\sum\limits_{i = 1}^m {\left[ {{y^{\left( i \right)}} - g\left( {{x^{\left( i \right)}}\theta } \right)} \right]} x_j^{\left( i \right)}\\ &= - {1 \over m}\sum\limits_{i = 1}^m {\left[ {{y^{\left( i \right)}} - {h_\theta }\left( {{x^{\left( i \right)}}} \right)} \right]} x_j^{\left( i \right)}\\ &= {1 \over m}\sum\limits_{i = 1}^m {\left[ {{h_\theta }\left( {{x^{\left( i \right)}}} \right) - {y^{\left( i \right)}}} \right]} x_j^{\left( i \right)} \end{aligned}

其中第一个等号用到下式:
θjloghθ(x(i))=1hθ(x(i))θjhθ(x(i)){\partial \over {\partial {\theta _j}}}\log {h_\theta }\left( {{x^{\left( i \right)}}} \right){\rm{ = }}{1 \over {{h_\theta }\left( {{x^{\left( i \right)}}} \right)}}{\partial \over {\partial {\theta _j}}}{h_\theta }\left( {{x^{\left( i \right)}}} \right)
θjlog(1hθ(x(i)))=11hθ(x(i))θjhθ(x(i)){\partial \over {\partial {\theta _j}}}\log \left( {1 - {h_\theta }\left( {{x^{\left( i \right)}}} \right)} \right) = - {1 \over {1 - {h_\theta }\left( {{x^{\left( i \right)}}} \right)}}{\partial \over {\partial {\theta _j}}}{h_\theta }\left( {{x^{\left( i \right)}}} \right)
第三个等号用到下式:
g(z)=11+ezg(z) = {1 \over {1 + {e^{ - z}}}}
g(z)=ez(1+ez)2=g(z)(1g(z))g'(z) = {{{e^{ - z}}} \over {{{\left( {1 + {e^{ - z}}} \right)}^2}}} = g(z)\left( {1 - g(z)} \right)
θjg(x(i)θ)=g(x(i)θ)(1g(x(i)θ))xj(i){\partial \over {\partial {\theta _j}}}g\left( {{x^{\left( i \right)}}\theta } \right) = g\left( {{x^{\left( i \right)}}\theta } \right)\left( {1 - g\left( {{x^{\left( i \right)}}\theta } \right)} \right)x_j^{\left( i \right)}

4)最终更新方程为
θj=θjαθjJ(θ)=θjαmi=1m[hθ(x(i))y(i)]xj(i)\begin{aligned} {\theta _j} &= {\theta _j} - \alpha {\partial \over {\partial {\theta _j}}}J\left( \theta \right)\\ &= {\theta _j} - {\alpha \over m}\sum\limits_{i = 1}^m {\left[ {{h_\theta }\left( {{x^{\left( i \right)}}} \right) - {y^{\left( i \right)}}} \right]} x_j^{\left( i \right)} \end{aligned},其中j=0,1...n{j = 0,1...n}

直到Δθ\Delta \theta小于阈值ε\varepsilon
Δθ=θJ(θ)<ε\Delta \theta {\rm{ = }}{\partial \over {\partial \theta }}J\left( \theta \right) < \varepsilon

5. 向量化表示

面试题

更新方程为:
θ=θαmxT(11+exθy)\theta = \theta - {\alpha \over m}{x^T}\left( {{1 \over {1 + {e^{ - x\theta }}}} - y} \right)
Trick:可以用矩阵维数来判断向量化表示应该如何写。xxm×nm \times n维,θ\thetan×1n \times 1维,yym×1m \times 1维。

x=[x1(0)x2(0)...xn(0)x1(1)x2(1)...xn(1)............x1(m)x2(m)...xn(m)]y=[y(0)y(1)...y(m)] x = \begin{bmatrix} x_1^{\left( 0 \right)} & x_2^{\left( 0 \right)} & ... & x_n^{\left( 0 \right)} \\ x_1^{\left( 1 \right)} & x_2^{\left( 1 \right)} & ... & x_n^{\left( 1 \right)} \\ ... & ... & ... & ... \\ x_1^{\left( m \right)} & x_2^{\left( m \right)} & ... & x_n^{\left( m \right)} \end{bmatrix},y = \begin{bmatrix} y^{\left( 0 \right)} \\ y^{\left( 1 \right)} \\ ... \\ y^{\left( m \right)} \end{bmatrix}
θ=(θ0,θ1,...,θn)T\theta = {({\theta _0},{\theta _1},...,{\theta _n})^T}

6. 逻辑回归模型-优缺点分析

优点:简单易用,易理解;

缺点:准确率并不是很高;很难处理数据不平衡的问题(注意选取合适的评价指标)

7. Code

from sklearn import linear_model
clf = linear_model.LogisticRegression(C=1.0, penalty='l1', tol=1e-6)

参数解释
C - 正则项权重
penalty - 可选择为"l1"和"l2",分别对应L1和L2正则化,默认是L2正则化
tol - 截止条件,Δθ\Delta \theta的阈值ε\varepsilon

8. 拓展 - 其他知识点

**函数选择sigmoid函数 - 梯度消失/梯度爆炸
优化方法和正则化需详解(同线性回归)
学习步长的选择

Q&A

Q1. 逻辑回归和线性回归有什么区别?面试题

预测结果 - 线性回归的预测结果是连续的,逻辑回归的结果是离散的;
假设函数 - 逻辑回归在线性回归的实数范围输出上施加了sigmoid函数,将值收敛在0-1之间
损失函数 - 线性回归差平方和逻辑回归对数似然函数

Q2. 为什么要除以样本数m?面试题

数量越多误差越大,所以平滑一下

Q3. 关于损失函数的选择

  1. 为什么要用对数损失函数作为损失函数?

损失函数一般有四种:平方损失函数/对数损失函数/HingeLoss0-1损失函数/绝对值损失函数。
对极大似然函数取对数可以推得对数损失函数
θj=θjαmi=1m[hθ(x(i))y(i)]xj(i){\theta _j} = {\theta _j} - {\alpha \over m}\sum\limits_{i = 1}^m {\left[ {{h_\theta }\left( {{x^{\left( i \right)}}} \right) - {y^{\left( i \right)}}} \right]} x_j^{\left( i \right)}
从上式可以看出,逻辑回归模型下,对数损失函数的训练求解参数的速度是比较快的。因为θj{\theta _j}的更新速度只和xj(i)x_j^{\left( i \right)}y(i){{y^{\left( i \right)}}}相关,和sigmoid函数本身的梯度无关。这样更新的速度是可以自始至终都比较稳定

  1. 为什么不选平方损失函数的呢?

如果使用平方损失函数,会发现梯度更新的速度和sigmoid函数本身的梯度是很相关的。sigmoid函数在它在定义域内的梯度都不大于0.25。这样训练会非常的慢。

Q4.逻辑回归在训练的过程中,如果有很多的特征高度相关/有一个特征重复了很对遍,会造成怎样的影响?

如果损失函数最终收敛,就算有很多特征高度相关也不会影响分类器的效果。
但我们通常选择去掉高度相关的特征,因为这样会让模型的可解释性更好,也会加快训练速度。

Ref
机器学习–Logistic回归计算过程的推导
逻辑回归的常见面试点总结