1. 逻辑回归简介
线性回归的模型是求出真实值Y和输入样本的特征X之间的线性关系系数θ,最终求得线性回归模型Y=Xθ.当给出新的特征时, 我们希能够带入到Y=Xθ中,求出预测值Y是连续值。归为回归模型。
当Y是离散值时,我们就需要对线性回归模型的Y做一次函数变换,将连续值转换成离散值。这时我们就引入逻辑回归。
逻辑回归(LogisticRegression)也叫对数几率回归。
机器学习算法可以分为回归算法和分类算法,逻辑回归算法并不是回归算法,仅为在线性回归的基础上,套用了一个逻辑函数 ,用来解决分类问题,因此将它归为分类算法。
2. 逻辑回归模型
逻辑回归可以解决二分类问题,也可以解决多分类问题。这里先讲述二分类问题,多分类问题待补充。
在逻辑回归(二分类)中,我们一般用sigmoid函数将连续值转换成离散值,实现二分类。
为什么要用sigmoid函数作为假设函数
假设函数
用sigmoid函数作为假设函数
sigmoid函数形式如下:
g(z)=1+e−z1(1)
sigmoid函数的导数形式如下:
g′(z)=g(z)(1−g(z))=(1+e(−z))2e−z(2)
sigmoid函数图像:
sigmoid函数的性质:
x>0时,y趋于1;
x=0时,y=0.5;
x<0时,y趋于0;
数据集
Y=⎝⎜⎜⎛y1y2⋯yi⎠⎟⎟⎞(3)
X=⎝⎜⎜⎛x11,x12,⋯x1i,x21,x22,x2i,x31,x32,x3i,⋯,⋯⋯xn1xn2xni⎠⎟⎟⎞(3)
Xb=⎝⎜⎜⎛1,1,⋯1,x11,x12,x1i,x21,x22x2i,x31,x32,x3i⋯,⋯⋯xn1xn2xni⎠⎟⎟⎞
Y=Xbθ
最终要求的模型参数θ=⎝⎜⎜⎛θ0θ1⋯θn⎠⎟⎟⎞(4)
θ0为截距
令z=θ0+θ1x1+θ2x2+⋯+θnxn=Xiθ得:
构造假设函数,假设数据服从伯努利分布:
p^=hθ(x)=1+e−z1=1+e−Xiθ1(5)
y={10p^⩾0.5,即Xiθ⩾0p^<0.5,即Xiθ<0
hθ(x)∈[0,1],假设hθ(x)是样本x为正例的可能性,1−hθ(x)是样本x为反例的可能性
正例:(y=1):P(y=1∣x;θ)=hθ(x)=1+e−Xiθ1
反例:(y=0):P(y=0∣x;θ)=1−hθ(x)=1−1+e−Xiθ1
两者的比值对数称为对数几率:ln1−hθ(x)hθ(x)
决策边界:
Xiθ=0.5
- 如果X有两个特征
- 则θ0+θ1x1+θ2x2=0
- x2=θ2−θ0−θ1x1
损失函数推导
损失函数是基于极大似然估计 得到的
- 将上述概率合并,得:P(y∣x;θ)=[hθ(x)]y[1−hθ(x)]1−y
- 构造逻辑回归模型的似然函数为:L(θ)=i=1∏mp(y=1∣xi)y(i)p(y=0∣xi)1−y(i)(7)l(θ)为样本的似然函数,有θ∗使得l(θ)的取值最大,那么θ∗就叫做参数θ的极大似然估计值
- 对数似然函数:l(θ)=i=1∑m[y(i)lnp(y=1∣xi)+(1−y(i))lnp(y=0∣xi)](8)化简
l(θ)=i=1∑m[y(i)lnhθ(x)+(1−y(i))ln(1−hθ(x))]
令每个样本属于其真实标记的概率越大越好,l(θ)是高阶连续可到的凸函数,
取对数的原因:
根据前面你的似然函数公式,是一堆的数字相乘,这种算法求导会非常麻烦,而取对数是一种很方便的手段,由于ln对数属于单调递增函数,因此不会改变极值点,由于对数的计算法则:lnab=blna,lnab=lna+lnb,这样求导就很方便了。
损失函数
求最大似然函数,就是损失函数(对似然函数先取负号)最小化。所以加个负号就成了损失函数;最小化损失函数可以梯度下降法求解。
除以样本数m —— 数量越多误差越大,所以平滑一下
J(θ)=−m1l(θ)=−m1i=1∑m[y(i)lnhθ(x)+(1−y(i))ln(1−hθ(x))]=−m1i=1∑m[y(i)log(p^)+(1−y(i))log(1−p^)](9)
模型求解
模型求解的过程实际上就是求损失函数最小时的参数θ,求解的方法有梯度下降法,坐标轴下降法,牛顿法等,这里用梯度下降法推导!!!
- 对损失函数求导▽J(θ)=⎝⎜⎜⎜⎛∂θ0∂J(θ)∂θ1∂J(θ)⋯∂θn∂J(θ)⎠⎟⎟⎟⎞(10)
- 对p^求导p^′=hθ′(x)=(1+e(−Xiθ))2e−Xiθ(10)
-
对log[hθ(xi)]求导log[hθ(xi)]′=hθ(xi)1⋅hθ(xi)′=(1+e−Xiθ)(1+e−Xiθ)−2⋅e−Xiθ=(1+e−Xiθ)−1⋅e−Xiθ=1+e−Xiθe−Xiθ=1−1+e−Xiθ1=1−hθ(xi)(12)
-
对log[1−hθ(xi)]求导
log[1−hθ(xi)]′=1−hθ(xi)1⋅(−1)⋅hθ(xi)′=−e−xi1+e−xi⋅(1+e−xi)−2⋅e−xi=−hθ(xi)(13)
- 对(1−y(i))log[1−hθ(xi)]求导
dθjd[(1−y(i))log(1−hθ(xi)]=(1−y(i))⋅(−hθ(xi))⋅Xj(i)(14)
- 对y(i)log(hθ(xi))]求导
dθjd[y(i)log(hθ(xi))]=y(i)(1−hθ(xi))⋅Xj(i)(15)
最终求化简结果θjJ(θ)=−m1i=1∑m(hθ(xi)−y(i))Xj(i)=−m1i=1∑m(y^(i)−y(i))Xj(i)(16)
梯度下降法中的更新公式:θj=θj−mαi=1∑m(y^(i)−y(i))Xj(i)(18)
i=1,2,3,⋯,m
j=1,2,3,⋯,n
α为学习率
正则化方法
为防止模型过拟合,提高模型的泛化能力,通常会在损失函数的后面添加一个正则化项。L1正则化和L2正则化可以看做是损失函数的惩罚项。所谓【惩罚】是指对损失函数中的某些参数做一些限制
L1正则化(ℓ1 -norm)
使用L1正则化的模型建叫做Lasso Regularization(Lasso回归),直接在原来的损失函数基础上加上权重参数的绝对值,η为正则化参数:
假设损失函数为J0=i=1∑m(y(i)−θ0−θ1x1−θ2x2−⋯−θnxn)(1)则Lasso Regularization为:
J=J0+ηi=1∑m∣θ∣(2)
J 是带有绝对值符号的函数,因此J是不完全可微的。当我们在原始损失函数J0后添加L1正则化项时,相当于对J0做了一个约束。令L1=η∑i=1m∣θ∣,则J=J0+L1,此时我们的任务变成在L约束下求出J取最小值时的θ。
η 被称为正则化系数.
下面通过图像来说明如何在约束条件L1下求J的最小值。
最终的损失函数就是求等高圆圈+黑色黑色矩形的和的最小值。由图可知等高圆圈+黑色黑色矩形首次相交时,J取得最小值。
为什么L1正则化项能够防止过拟合的情况?
对损失函数的参数优化求解过程进行分析
∂θ∂J=∂θ∂J0+αsgn(θ)(3)
上式中sgn(θ)表示θ的符号。那么权重θ的更新规则为:
θ→θ−ηi=1∑m∂θ∂Ji−ηαsgn(θ)(4)
比原始的更新规则多出了ηαsgn(θ)这一项。当θ为正时,更新后的θ变小。当θ为负时,更新后的θ变大——因此它的效果就是让η往0靠,使网络中的权重尽可能为0,也就相当于减小了网络复杂度,防止过拟合。
L2正则化(ℓ2 -norm)
使用L2正则化的模型叫做Ridge Regularization(岭回归),直接在原来的损失函数基础上加上权重参数的平方和:
令损失函数为J0,则Ridge Regularization为:
J=J0+21ηi=1∑nθ2(5)
使最终的损失函数最小,要考虑J0和L2=21ηi=1∑nθ2(6)两个因素,最终的损失函数就是求等高 圆圈+黑色圆圈的和的最小值。由图可知两个圆相交时,J取得最小值。
为什么L2正则化项能够防止过拟合的情况?
对损失函数的参数优化求解过程进行分析
∂θ∂J=∂θ∂J0+αθ(7)
∂b∂J=∂b∂J(8)
可以发现L2正则化项对b的更新没有影响,但是对于θ的更新有影响:
θ→θ−ηi=1∑m∂θ∂Ji−ηαθ
=(1−ηα)θ−ηi=1∑m∂θ∂Ji(9)
在不使用L2正则化时,求导结果中θ前系数为1,现在θ前面系数为 1−ηα ,因为η、α都是正的,所以 1−ηα小于1,它的效果是减小θ,这也就是权重衰减(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,⋯,CN训练时两两组合为二分类进行训练,新样本通过这CN2个分类器后会得到2N(N−1)个分类结果,最终结果可根据这些分类结果投票产生。
OvR(One vs Rest)
训练时一个类作为正例,其余所有类作为反例。这样共有N个二分类器进行训练,新样本通过分类器时预测结果为正例的即为最终结果。
MvM(Many vs Many)
MvM是每次将若干各类作为正例,剩下的若干个类作为反例,OvO和OvR其实是MvM的特殊情况。但是MvM的正反例构造必须有特殊的设计,不能随意选取。这里我们介绍一种最常用的MvM技术:“纠错输出码”(ECOC)
类别不平衡问题
逻辑回归面经
参考文献
逻辑回归原理小结
scikit-learn 逻辑回归类库使用小结
Logistic Regression(逻辑回归)原理及公式推导
机器学习算法–逻辑回归原理介绍
正则化方法