机器学习算法——逻辑回归

1. 逻辑回归简介

线性回归的模型是求出真实值Y和输入样本的特征X之间的线性关系系数θ\theta,最终求得线性回归模型Y=XθY=X\theta.当给出新的特征时, 我们希能够带入到Y=XθY=X\theta中,求出预测值Y是连续值。归为回归模型。
当Y是离散值时,我们就需要对线性回归模型的Y做一次函数变换,将连续值转换成离散值。这时我们就引入逻辑回归。
逻辑回归(LogisticRegression)也叫对数几率回归。
机器学习算法可以分为回归算法和分类算法,逻辑回归算法并不是回归算法,仅为在线性回归的基础上,套用了一个逻辑函数 ,用来解决分类问题,因此将它归为分类算法。

2. 逻辑回归模型

逻辑回归可以解决二分类问题,也可以解决多分类问题。这里先讲述二分类问题,多分类问题待补充。
在逻辑回归(二分类)中,我们一般用sigmoid函数将连续值转换成离散值,实现二分类。
为什么要用sigmoid函数作为假设函数

假设函数

用sigmoid函数作为假设函数

sigmoid函数形式如下:

(1)g(z)=11+ez\tag{1}g(z)=\frac{1}{1+e^{-z}}

sigmoid函数的导数形式如下:
(2)g(z)=g(z)(1g(z))=ez(1+e(z))2\tag{2}g^{'}(z) = g(z)(1-g(z))=\frac{e^{-z}}{(1+e^{(-z)})^{2}}

sigmoid函数图像:

机器学习算法——逻辑回归
sigmoid函数的性质:
x>0x>0时,yy趋于1;
x=0x=0时,y=0.5y=0.5
x<0x<0时,yy趋于0;

数据集
(3)Y=(y1y2yi)\tag{3} Y=\begin{pmatrix} &y^1\\ &y^2\\ &\cdots\\ &y^i \end{pmatrix}
(3)X=(x11,x21,x31, ,xn1x12,x22,x32,xn2x1i,x2i,x3i,xni)\begin{aligned} \tag{3}X=\begin{pmatrix} &x_1^1, &x_2^1, &x_3^1,&\cdots, &x_n^1 \\ &x_1^2, &x_2^2, &x_3^2,&\cdots &x_n^2 \\ &\cdots\\ &x_1^i, &x_2^i, &x_3^i,&\cdots &x_n^i \end{pmatrix} \end{aligned}
Xb=(1,x11,x21,x31, ,xn11,x12,x22x32,xn21,x1i,x2i,x3ixni)\begin{aligned} X_b= \begin{pmatrix} &1,&x_1^1, &x_2^1, &x_3^1,&\cdots, &x_n^1 \\ &1,&x_1^2, &x_2^2 &x_3^2,&\cdots &x_n^2 \\ &\cdots\\ &1,&x_1^i, &x_2^i, &x_3^i&\cdots &x_n^i \end{pmatrix} \end{aligned}
Y=XbθY=X_b\theta
最终要求的模型参数(4)θ=(θ0θ1θn)\tag{4} \theta=\begin{pmatrix} &\theta_0 \\ &\theta_1\\ &\cdots\\ &\theta_n \end{pmatrix}

θ0{\theta_0为截距}
z=θ0+θ1x1+θ2x2++θnxn=Xiθz=\theta_0+\theta_1x_1+\theta_2x_2+\cdots +\theta_nx_n=X^i\theta得:
构造假设函数,假设数据服从伯努利分布

(5)p^=hθ(x)=11+ez=11+eXiθ\tag{5}\hat p=h_{\theta}(x)=\frac{1}{1+e^{-z}}=\frac{1}{1+e^{-X^i\theta}}
y={1p^0.5,Xiθ00p^<0.5,Xiθ<0y = \begin{cases} 1 & \hat p \geqslant0.5 , 即 X^i\theta\geqslant0 \\ 0 & \hat p<0.5, 即X^i\theta<0 \end{cases}
hθ(x)[0,1]h_\theta(x)∈[0,1],假设hθ(x)h_{\theta}(x)是样本xx为正例的可能性,1hθ(x)1-h_{\theta}(x)是样本xx为反例的可能性

正例:(y=1y=1):P(y=1xθ)=hθ(x)=11+eXiθP(y=1|x;\theta)=h_{\theta}(x)=\frac{1}{1+e^{-X^i\theta}}
反例:(y=0y=0):P(y=0xθ)=1hθ(x)=111+eXiθP(y=0|x;\theta)=1-h_{\theta}(x)=1-\frac{1}{1+e^{-X^i\theta}}

两者的比值对数称为对数几率:lnhθ(x)1hθ(x)ln\frac{h_{\theta}(x)}{1-h_{\theta}(x)}
决策边界:
Xiθ=0.5X^i\theta = 0.5

  • 如果X有两个特征
  • θ0+θ1x1+θ2x2=0\theta_0+\theta_1x_1+\theta_2x_2=0
  • x2=θ0θ1x1θ2x_2=\frac{-\theta_0-\theta_1x_1}{\theta_2}

损失函数推导

损失函数是基于极大似然估计 得到的

  1. 将上述概率合并,得:P(yx;θ)=[hθ(x)]y[1hθ(x)]1yP(y|x;\theta) = [h_\theta(x)]^y[1-h_\theta(x)]^{1-y}
  2. 构造逻辑回归模型的似然函数为:(7)L(θ)=i=1mp(y=1xi)y(i)p(y=0xi)1y(i)\tag{7}L(\theta)= \prod_{i=1}^{m}p(y=1|x_i)^{y^{(i)}}p(y=0|x_i)^{1-y^{(i)}}l(θ)l(\theta)为样本的似然函数,有θ\theta^{*}使得l(θ)l(\theta)的取值最大,那么θ\theta^{*}就叫做参数θ\theta的极大似然估计值
  3. 对数似然函数:(8)l(θ)=i=1m[y(i)lnp(y=1xi)+(1y(i))lnp(y=0xi)]\tag{8}l(\theta)=\sum_{i=1}^{m}[y^{(i)}lnp(y=1|x_i)+(1-y^{(i)})lnp(y=0|x_i)]化简
    l(θ)=i=1m[y(i)lnhθ(x)+(1y(i))ln(1hθ(x))]l(\theta)=\sum_{i=1}^{m}[y^{(i)}lnh_{\theta}(x)+(1-y^{(i)})ln(1-h_{\theta}(x))]
    令每个样本属于其真实标记的概率越大越好,l(θ)l(\theta)是高阶连续可到的凸函数,

取对数的原因:
根据前面你的似然函数公式,是一堆的数字相乘,这种算法求导会非常麻烦,而取对数是一种很方便的手段,由于ln对数属于单调递增函数,因此不会改变极值点,由于对数的计算法则:lnab=blna,lnab=lna+lnblna^b=blna,lnab=lna+lnb,这样求导就很方便了。

损失函数

求最大似然函数,就是损失函数(对似然函数先取负号)最小化。所以加个负号就成了损失函数;最小化损失函数可以梯度下降法求解。
除以样本数m —— 数量越多误差越大,所以平滑一下
(9)J(θ)=1ml(θ)=1mi=1m[y(i)lnhθ(x)+(1y(i))ln(1hθ(x))]=1mi=1m[y(i)log(p^)+(1y(i))log(1p^)]\tag{9} \begin{aligned} &J(\theta)=-\frac{1}{m}l(\theta)\\ &=-\frac{1}{m}\sum_{i=1}^{m}[y^{(i)}lnh_{\theta}(x)+(1-y^{(i)})ln(1-h_{\theta}(x))]\\ &=-\frac{1}{m}\sum_{i=1}^{m}[y^{(i)}log(\hat p)+(1-y^{(i)})log(1-\hat p)] \end{aligned}

模型求解

模型求解的过程实际上就是求损失函数最小时的参数θ\theta,求解的方法有梯度下降法,坐标轴下降法,牛顿法等,这里用梯度下降法推导!!!

  1. 对损失函数求导(10)J(θ)=(J(θ)θ0J(θ)θ1J(θ)θn)\tag{10}\triangledown J(\theta)=\begin{pmatrix} \frac{\partial J(\theta)}{\partial \theta_0}\\ \frac{\partial J(\theta)}{\partial \theta_1}\\ \cdots\\ \frac{\partial J(\theta)}{\partial \theta_n}\\ \end{pmatrix}
  2. p^\hat {p}求导(10)p^=hθ(x)=eXiθ(1+e(Xiθ))2\tag{10}\hat {p}^{'}=h_{\theta}^{'}(x) = \frac{e^{-X^i\theta}}{(1+e^{(-X^i\theta)})^{2}}
  3. log[hθ(xi)]对log[h_\theta(x^i)]求导(12)log[hθ(xi)]=1hθ(xi)hθ(xi)=(1+eXiθ)(1+eXiθ)2eXiθ=(1+eXiθ)1eXiθ=eXiθ1+eXiθ=111+eXiθ=1hθ(xi)\tag{12}\begin{aligned} &log[h_\theta(x^i)]^{'}\\ &=\frac {1}{ h_\theta(x^i)}·h_\theta(x^i)^{'}\\ &= (1+e^{-X^i\theta})(1+e^{-X^i\theta})^{-2}·e^{-X^i\theta}\\ &=(1+e^{-X^i\theta})^{-1}·e^{-X^i\theta}\\ &=\frac{e^{-X^i\theta}}{1+e^{-X^i\theta}}\\ &=1-\frac{1}{1+e^{-X^i\theta}}\\ &=1-h_\theta(x^i) \end{aligned}
  4. log[1hθ(xi)]对log[1-h_\theta(x^i)]求导
    (13)log[1hθ(xi)]=11hθ(xi)(1)hθ(xi)=1+exiexi(1+exi)2exi=hθ(xi)\tag{13}\begin{aligned} &log[1-h_\theta(x^i)]^{'}\\ &=\frac{1}{1-h_\theta(x^i)}·(-1)·h_\theta(x^i)^{'}\\ &=-\frac{1+e^{-x^i}}{e^{-x^i}}·(1+e^{-x^i})^{-2}·e^{-x^i}\\ &=-h_\theta(x^i)\\ &\end{aligned}
  5. (1y(i))log[1hθ(xi)](1-y^{(i)})log[1-h_\theta(x^i)]求导
    (14)d[(1y(i))log(1hθ(xi)]dθj=(1y(i))(hθ(xi))Xj(i)\tag {14} \begin{aligned} &\frac{d[(1-y^{(i)})log(1-h_\theta(x^i)]}{d\theta_j}\\ &= (1-y^{(i)})·(-h_\theta(x^i))·X_j^{(i)} \end{aligned}
  6. y(i)log(hθ(xi))]y^{(i)}log(h_\theta(x^i))]求导
    (15)d[y(i)log(hθ(xi))]dθj=y(i)(1hθ(xi))Xj(i)\tag {15} \begin{aligned} &\frac{d[y^{(i)}log(h_\theta(x^i))]}{d\theta_j}\\ &=y^{(i)}(1-h_\theta(x^i))·X_j^{(i)} \end{aligned}

最终求化简结果(16)J(θ)θj=1mi=1m(hθ(xi)y(i))Xj(i)=1mi=1m(y^(i)y(i))Xj(i) \begin{aligned}\tag{16} &\frac{J(\theta)}{\theta_j}=-\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^i)-y^{(i)})X_j^{(i)}\\ &=-\frac{1}{m}\sum_{i=1}^{m}(\hat y^{(i)}-y^{(i)})X_j^{(i)} \end{aligned}

梯度下降法中的更新公式:(18)θj=θjαmi=1m(y^(i)y(i))Xj(i)\tag {18}\theta_j=\theta_j- \frac{\alpha}{m}\sum_{i=1}^{m}(\hat y^{(i)}-y^{(i)})X_j^{(i)}

i=1,2,3, ,mi= 1,2,3,\cdots,m

j=1,2,3, ,nj=1,2,3,\cdots,n

α\alpha为学习率

正则化方法

为防止模型过拟合,提高模型的泛化能力,通常会在损失函数的后面添加一个正则化项。L1正则化和L2正则化可以看做是损失函数的惩罚项。所谓【惩罚】是指对损失函数中的某些参数做一些限制

L1正则化(ℓ1 -norm)

使用L1正则化的模型建叫做Lasso Regularization(Lasso回归),直接在原来的损失函数基础上加上权重参数的绝对值,η\eta为正则化参数:
假设损失函数为(1)J0=i=1m(y(i)θ0θ1x1θ2x2θnxn)\tag{1}J_0=\sum_{i=1}^{m}(y^{(i)}-\theta_0-\theta_1x_1-\theta_2x_2-\cdots-\theta_nx_n)则Lasso Regularization为:
(2)J=J0+ηi=1mθ\tag{2}J=J_0+\eta \sum_{i=1}^{m}|\theta|
JJ 是带有绝对值符号的函数,因此JJ是不完全可微的。当我们在原始损失函数J0J_0后添加L1L_1正则化项时,相当于对J0J_0做了一个约束。令L1=ηi=1mθL_1=\eta\sum_{i=1}^{m}|\theta|,则J=J0+L1J=J_0+L_1,此时我们的任务变成在LL约束下求出JJ取最小值时的θ\theta
η\eta 被称为正则化系数.

下面通过图像来说明如何在约束条件L1L_1下求JJ的最小值。
机器学习算法——逻辑回归
最终的损失函数就是求等高圆圈+黑色黑色矩形的和的最小值。由图可知等高圆圈+黑色黑色矩形首次相交时,JJ取得最小值。
为什么L1L_1正则化项能够防止过拟合的情况?
对损失函数的参数优化求解过程进行分析
(3)Jθ=J0θ+αsgn(θ)\tag{3}\frac{\partial J}{\partial \theta}=\frac{\partial J_0}{\partial \theta}+\alpha sgn(\theta)

上式中sgn(θ)sgn(\theta)表示θ\theta的符号。那么权重θ\theta的更新规则为:
(4)θθηi=1mJiθηαsgn(θ)\tag{4}\theta \rightarrow \theta - \eta\sum_{i=1}^{m} \frac{\partial J_i}{\partial \theta}-\eta \alpha sgn(\theta)

比原始的更新规则多出了ηαsgn(θ)η \alpha sgn(\theta)这一项。当θ\theta为正时,更新后的θ\theta变小。当θ\theta为负时,更新后的θ\theta变大——因此它的效果就是让η\eta往0靠,使网络中的权重尽可能为0,也就相当于减小了网络复杂度,防止过拟合。

L2正则化(ℓ2 -norm)

使用L2正则化的模型叫做Ridge Regularization(岭回归),直接在原来的损失函数基础上加上权重参数的平方和:
令损失函数为J0J_0,则Ridge Regularization为:
(5)J=J0+12ηi=1nθ2\tag{5}J=J_0+\frac{1}{2}\eta \sum_{i=1}^{n}\theta^2
使最终的损失函数最小,要考虑J0J_0(6)L2=12ηi=1nθ2\tag{6}L_2=\frac{1}{2}\eta \sum_{i=1}^{n} \theta^2两个因素,最终的损失函数就是求等高 圆圈+黑色圆圈的和的最小值。由图可知两个圆相交时,JJ取得最小值。

机器学习算法——逻辑回归

为什么L2L_2正则化项能够防止过拟合的情况?
对损失函数的参数优化求解过程进行分析
(7)Jθ=J0θ+αθ\tag{7}\frac{\partial J}{\partial \theta}=\frac{\partial J_0}{\partial \theta}+\alpha \theta

(8)Jb=Jb\tag{8}\frac{\partial J}{\partial b}=\frac{\partial J}{\partial b}
可以发现L2正则化项对b的更新没有影响,但是对于θ\theta的更新有影响:
θθηi=1mJiθηαθ\theta \rightarrow \theta - \eta\sum_{i=1}^{m} \frac{\partial J_i}{\partial \theta}-\eta \alpha \theta

(9)=(1ηα)θηi=1mJiθ\tag{9}=(1-\eta \alpha )\theta - \eta \sum_{i=1}^{m}\frac{\partial J_i}{\partial \theta}

在不使用L2正则化时,求导结果中θ\theta前系数为1,现在θ\theta前面系数为 1ηα1−η\alpha ,因为η、α\alpha都是正的,所以 1ηα1−η\alpha小于1,它的效果是减小θ\theta,这也就是权重衰减(weight decay)的由来。

弹性网络(整理ing)

逻辑回归的优缺点

优点

1、它是直接对分类可能性建模,无需事先假设数据分布,这样就避免了假设分布不准确问题。

2、它不仅预测类别,而且可以得到近似概率预测,这对许多概率辅助决策的任务很有用。

3、对率函数是任意阶可导凸函数,有很好的数学性质,现有许多的数值优化算法都可以直接用于求解。

缺点

对数据和场景的适应能力有局限性,不如决策树算法适应性那么强

sklearn.linear_model.LogisticRegression参数说明

官方英文文档

参数 解释 数值类型(默认值) 选项
penalty 正则化选择参数。‘newton-cg’,‘sag’和’lbfgs’解算器只支持l2惩罚。版本0.19中的新功能:使用SAGA求解器的l1惩罚(允许’多项’+ L1) str (l1) ‘l1’或’l2’,
dual 对偶方法只用在求解线性多核(liblinear)的L2惩罚项上。当样本数量>样本特征的时候,dual通常设置为False。 bool (False) Ture/False
solver solver参数决定了我们对逻辑回归损失函数的优化方法 str(liblinear) newton-cg;lbfgs;liblinear;sag;saga。
multi_class multi_class参数决定了我们分类方式的选择 str(ovr) ovr;multinomial
class_weight 用于标示分类模型中各种类型的权重,可以是一个字典或者’balanced’字符串,默认为不输入,也就是不考虑权重,即为None。如果选择输入的话,可以选择balanced让类库自己计算类型权重,或者自己输入各个类型的权重。举个例子,比如对于0,1的二元模型,我们可以定义class_weight={0:0.9,1:0.1},这样类型0的权重为90%,而类型1的权重为10%。如果class_weight选择balanced,那么类库会根据训练样本量来计算权重。某种类型样本量越多,则权重越低,样本量越少,则权重越高。当class_weight为balanced时,类权重计算方法如下:n_samples / (n_classes * np.bincount(y))。n_samples为样本数,n_classes为类别数量,np.bincount(y)会输出每个类的样本数,例如y=[1,0,0,1,1],则np.bincount(y)=[2,3]。 dict/str 字典或者’balanced’字符串
tol 停止求解的标准 Float(1e-4)
c 正则化系统λ的倒数 Float(1.0)
verbose 日志冗长度 int(0)
warm_start 热启动参数,如果为True,则下一次训练是以追加树的形式进行(重新使用上一次的调用作为初始化)。 bool(False) Flase/Ture
n_jobs 并行数,用CPU的一个内核运行程序,2的时候,用CPU的2个内核运行程序。为-1的时候,用所有CPU的内核运行程序。 int(1)
max_iter 算法收敛最大迭代次数,仅在正则化优化算法为newton-cg, sag和lbfgs才有用,算法收敛的最大迭代次数。 int(10)
random_state 随机数种子,仅在正则化优化算法为sag,liblinear时有用。 Int(无)
fit_intercept 是否存在截距或偏差 bool(Ture) False/Ture

具体参数详解

逻辑回归处理多分类问题

OvO(One vs One)

假设训练集有N类样本,C1,C2, ,CNC_1,C_2,\cdots,C_N训练时两两组合为二分类进行训练,新样本通过这CN2C_N^{2}个分类器后会得到N(N1)2\frac {N(N−1)}{2}个分类结果,最终结果可根据这些分类结果投票产生。

OvR(One vs Rest)

训练时一个类作为正例,其余所有类作为反例。这样共有NN个二分类器进行训练,新样本通过分类器时预测结果为正例的即为最终结果。

MvM(Many vs Many)

MvM是每次将若干各类作为正例,剩下的若干个类作为反例,OvO和OvR其实是MvM的特殊情况。但是MvM的正反例构造必须有特殊的设计,不能随意选取。这里我们介绍一种最常用的MvM技术:“纠错输出码”(ECOC)

类别不平衡问题

逻辑回归面经

参考文献

逻辑回归原理小结
scikit-learn 逻辑回归类库使用小结
Logistic Regression(逻辑回归)原理及公式推导
机器学习算法–逻辑回归原理介绍
正则化方法