机器学习之理解逻辑回归

一、逻辑回归简介

逻辑回归其实是一个线性分类器,其本质是由线性回归变化而来,是一种广泛使用于分类问题中的广义回归算法。其中线性回归模型如下图(向量形式):
多项式的向量表示

模型的求解方法有最小二乘法

image

而逻辑回归则是将线性回归通过Sigmoid函数映射到(0,1)之间如图:

Sigmoid函数图像

Tips:最小二乘法和梯度下降的区别
最小二乘法求解系数theta主要数学上的求极值的方法,求偏导然后使偏导为零。
梯度下降法,首先目标函数(假设只有theta0和theta1):

在这里插入图片描述

然后其求解的迭代公式:
在这里插入图片描述

将线性回归模型带入Sigmoid函数得到逻辑回归的一般形式:

在这里插入图片描述

其取值在(0,1)之间,并且y(x)和1-y(x)相加必然为1,令y(x)除以1-y(x)并取对数,计算推导最终得到线性回归z的函数:

在这里插入图片描述

y(x)表示事件发生的概率,1-y(x)表示事件不发生的概率。y(x)/(1-y(x))表示事件的Odds。
Odds的概念:Odds的意思是几率、可能性。在统计学里,概率(Probability)和Odds都是用来描述某件事情发生的可能性。概率是事件发生的次数和所有事件发生的总次数之比。Odds指的是事件发生的概率与事件不发生的概率之比。所以,逻辑回归又叫对数几率回归

线性回归对数据的要求很严格,比如标签必须满足正态分布,特征之间的多重共线性需要消除等,而现实中很多真实情景的数据无法满足这些要求,因此线性回归在很多现实情境的应用效果有限。逻辑回归是由线性回归变化而来,因此它对数据也有一些要求。并且要很好的了解逻辑回归需要理解损失函数、正则化、梯度下降、海森矩阵(Hessian)等等概念,才能很好的对逻辑回归进行调优。


多重共线指的是自变量(解释变量)之间彼此相关的现象,即一个解释变量的变化引起另一个解释变量的变化。当线性回归出现严重共线性问题时,则会出现意想不到的问题。一般使用VIF值检测自变量是否有多重共线性,一般认为VIF>10(严格是5),代表模型存在严重的共线问题。

处理方法:1、相关性分析,计算相关系数,一般>0.7的可以移除其中一个自变量。2、逐步回归法。3、增加样本容量。4、使用岭回归。


一般离散变量的分类任务都用朴素贝叶斯、支持向量机、决策树、随机森林等。连续变量的分类任务会用到逻辑回归。

逻辑回归的优点:

  1. 逻辑回归对线性关系的拟合效果非常好。特征与标签之间的线性关系极强的数据,比如金融领域中的信用卡欺诈,评分卡制作,电商中的营销预测等等相关的数据,都是逻辑回归的强项。即使现在有了梯度提升树GDBT。
  2. 逻辑回归计算非常快。对于线性数据,逻辑回归的拟合和计算都非常快,计算效率优于SVM和随机森林。尤其是在大数据集训练中,区别很明显。
  3. 逻辑回归返回的分类结果不是固定的0或1,而是以小数形式呈现的类概率值。
  4. 逻辑回归的抗噪能力强。
二、二元逻辑回归的损失函数

逻辑回归的损失函数是用来衡量参数θ的模型拟合训练集时产生的信息损失的大小,并以此衡量参数θ的优劣。

损失函数:
很亮参数θ的优劣的评估指标,用来求解最优参数的工具
损失函数小,模型在训练集上表现优异,拟合充分,参数优秀
损失函数大,模型在训练集上表现差劲,拟合不足,参数槽糕
我们追求能够让损失函数最小化的参数组合

注意: 没有“求解参数”需求的模型没有损失函数,比如KNN,决策树等

逻辑回归的损失函数是由极大似然估计推导出来的,具体过程如下(权重w就是参数θ):

为了训练权重(w)和偏置量(b),需要定义一个代价函数。如下:
预测值表达式:

在这里插入图片描述

损失函数测量的是预测值和样本真实值之间的差异。计算单个样本。

在这里插入图片描述

代价函数测量的是整个数据集损失函数的平均值,目的是为了找到参数w和b,使得代价函数最小化。

在这里插入图片描述

损失函数推导过程:

在这里插入图片描述

三、sklearn.linear_model.LogisticRegression的重要参数
class sklearn.linear_model.LogisticRegression (penalty='l2', dual=False, tol=0.0001, 
                                               C=1.0,fit_intercept=True, intercept_scaling=1,
                                               class_weigt=None, random_state=None, solver='warn',
                                               max_iter=100, multi_class='warn', verbose=0, 
                                               warm_start=False, n_jobs=None)
  1. penalty和C:
    penalty参数是规定LogisticRegression的正则化方法的参数,其给出了两种方式l1和l2。其中l1表现为参数向量中的每个参数的绝对值之和,l2表现为参数向量中的每个参数的平方和的开方值。如下sklearn中带正则项的损失函数:

    在这里插入图片描述

    其中J(θ)是损失函数,C是用来控制正则化程度的超参数,n是方程中特征的总数,也是方程中参数的总数,j代表每个参数。在这里,j要大于0,因为参数向量θ中第一个参数是偏置项,也就是截距,它通常不参与正则化。

    有时候带有正则项的损失函数也可以写成如下公式:

    在这里插入图片描述

    其中正则项前面的参数就相当于C,两种写法的本质是一样的。


    l1正则化和l2正则化都是可以控制过拟合。虽然他们的作用相同,但最后取得的效果并不相同,当正则化强度逐渐增大(即C逐渐变小),参数θ的取值会逐渐变小,但是l1正则化会将参数压缩为0。l2正则化只会让参数尽量小,不会取到0

在L1正则化在逐渐加强的过程中,携带信息量小的、对模型贡献不大的特征的参数,会比携带大量信息的、对模型有巨大贡献的特征的参数更快地变成0,所以L1正则化本质是一个特征选择的过程,掌管了参数的“稀疏性”。L1正则化越强,参数向量中就越多的参数为0,参数就越稀疏,选出来的特征就越少,以此来防止过拟合。因此,如果特征量很大,数据维度很高,我们会倾向于使用L1正则化。由于L1正则化的这个性质,逻辑回归的特征选择可以由Embedded嵌入法来完成。
相对的,L2正则化在加强的过程中,会尽量让每个特征对模型都有一些小的贡献,但携带信息少,对模型贡献不大的特征的参数会非常接近于0。通常来说,如果我们的主要目的只是为了防止过拟合,选择L2正则化就足够了。但是如果选择L2正则化后还是过拟合,模型在未知数据集上的效果表现很差,就可以考虑L1正则化。

在实际操作中两种正则化方式,一般我们都默认使用l2,看模型效果,若是l1正则化效果更好则选用l1,此时可以看一下模型得到的参数结果,去掉参数结果是0对应的特征。

逻辑回归中的特征工程:
当特征数量很多时,我们首先考虑业务层面的选择,根据自己的业务能力或者做业务的相关人员了解特征对标签的影响。从而选择需要的特征。
一般情况下,逻辑回归和线性回归一样,是探索特征x和标签y的关系。而PCA和SVD降维会失去特征原来的性质,造成无法解释特征和标签的关系。因此一般不用PCA和SVD降维
统计方法的特征选择可以考虑,但不是非常必要,由于逻辑回归不使用最小二乘法来求解,所以对数据的要求并没有线性回归那么严格,对数据的总体分布和方差没有要求,也不需要排除特征之间的共线性。对于线性回归,多重共线性对其结果影响较大,所以需要使用方差过滤或者方差膨胀因子VIF(variance inflation factor)来消除共线性,但是对于逻辑回归并不需要。
嵌入法embedded进行特征选择,由于L1正则化会使得部分特征对应的参数为0,因此L1正则化可以用来做特征选择,结合sklearn.feature_selection中的模块SelectFromModel,可以很容易筛选出让模型十分高效的特征。代码:

# SelectFromModel有几个参数:estimator(评估器),threshold(阈值,用来做特征选择),
LR_ = LR(solver='liblinear', C=0.9, random_state=420)
X_embedded = SelectFromModel(LR_, norm_order=1).fit_transform(X, y)

使用嵌入法选取特征,怎么才能让模型的拟合效果更好,下面介绍两种调整方式:

  1. 调节SelectFromModel的参数threshold。嵌入法的阈值,表示删除所有参数的绝对值低于这个阈值的特征。逻辑回归中的特征系数coef_的大小和决策树中的feature_importances_以及降维算法中的可解释性方差explained_vairance_概念相似,都是衡量特征的重要程度和贡献度。
  2. 通过调节逻辑回归中的参数C。
  3. 系数累加法,在PCA中,我们通过绘制累积可解释方差贡献率曲线来选择超参数,在逻辑回归中我 们可以使用系数coef_来这样做,并且我们选择特征个数的逻辑也是类似的:找出曲线由锐利变平滑的转折点,转折点之前被累加的特征都是我们需要的,转折点之后的我们都不需要。不过这种方法相对比较麻烦,因为我们要先对特征系数进行从大到小的排序,还要确保我们知道排序后的每个系数对应的原始特征的位置,才能够正确找出那 些重要的特征。如果要使用这样的方法,不如直接使用嵌入法来得方便。
  4. 包装法。
  1. max_iter
    参数max_iter是求解损失函数J(θ)最小化的θ值的最大迭代次数。
    在逻辑回归中求解θ的方法有很多,包含梯度下降法、坐标下降法、牛顿法等,最常见的就是梯度下降法。这些方法涉及的数据原理虽然不同,但是计算形式类似。

梯度下降求解逻辑回归:
在多元函数上对各个自变量求∂偏导数,把求得的各个自变量的偏导数以向量的形式写出来,就是梯度。梯度是一个向量,它既有大小也有方向。其大小就是向量的模,方向就是损失函数J(θ)的值增加最快的方向。
在这里插入图片描述

其中最后公式的中的α为超参数,被称为步长。在计算过程中,它是梯度沿方向变化的比例,影响梯度下降的快慢。

在这里插入图片描述

sklearn中的逻辑回归是通过设置max_iter最大迭代次数来控制步长,max_iter越大,代表步长越小,模型迭代时间越长,反之,则代表步长设置很大,模型迭代时间很短。
3. solver & multi_class
solver参数是模型的求解器,sklearn中给了如下的几种:
在这里插入图片描述

multi_class参数是设置多分类的类型,有一对多(ovr)、多对多(multinomial)。
4. class_weight
class_weight参数是逻辑回归中的样本不均衡参数,在实际业务中很多数据是天生就不均衡的,比如银行的违约和不违约的人数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值