一、逻辑回归简介

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

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

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

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参数是逻辑回归中的样本不均衡参数,在实际业务中很多数据是天生就不均衡的,比如银行的违约和不违约的人数。

机器学习之理解逻辑回归相关推荐

  1. 机器学习:理解逻辑回归及二分类、多分类代码实践

    作者 | caiyongji   责编 | 张红月 来源 | 转载自 caiyongji(ID:cai-yong-ji) 本文的概念相对简单,主要侧重于代码实践.现实生活中不止有预测的问题还有分类的问 ...

  2. 【机器学习基础】(三):理解逻辑回归及二分类、多分类代码实践

    本文是机器学习系列的第三篇,算上前置机器学习系列是第八篇.本文的概念相对简单,主要侧重于代码实践. 上一篇文章说到,我们可以用线性回归做预测,但显然现实生活中不止有预测的问题还有分类的问题.我们可以从 ...

  3. 机器学习(三):理解逻辑回归及二分类、多分类代码实践

    本文是机器学习系列的第三篇,算上前置机器学习系列是第八篇.本文的概念相对简单,主要侧重于代码实践. 上一篇文章说到,我们可以用线性回归做预测,但显然现实生活中不止有预测的问题还有分类的问题.我们可以从 ...

  4. 机器学习算法应用30篇(十一)-理解逻辑回归及二分类、多分类代码实践

    一.逻辑回归:二分类 1.1 理解逻辑回归 我们把连续的预测值进行人工定义,边界的一边定义为1,另一边定义为0.这样我们就把回归问题转换成了分类问题. 如上图,我们把连续的变量分布压制在0-1的范围内 ...

  5. 机器学习算法 03 —— 逻辑回归算法(精确率和召回率、ROC曲线和AUC指标、过采样和欠采样)

    文章目录 系列文章 逻辑回归 1 逻辑回归介绍 1.1 逻辑回归原理 输入 激活函数 1.2 损失以及优化 2 逻辑回归API介绍 3 案例:肿瘤良性恶性预测 4 分类模型的评估 4.1 分类评估方法 ...

  6. 吴恩达机器学习 8.6 逻辑回归(Logistic Regression)

    6.1 分类问题 参考文档: 6 - 1 - Classification (8 min).mkv 在这个以及接下来的几个视频中,开始介绍分类问题. 在分类问题中,你要预测的变量 $y$ 是离散的值, ...

  7. 理解逻辑回归中的ROC曲线和KS值

    1.回归和分类任务 分类和回归都属于监督学习(训练样本带有信息标记,利用已有的训练样本信息学习数据的规律预测未知的新样本标签) 分类预测的结果是离散的(例如预测明天天气-阴,晴,雨) 回归预测的任务是 ...

  8. 机器学习笔记(5)——逻辑回归

    上一篇:机器学习笔记(4)--多变量线性回归 逻辑回归实际是一种有监督学习中的分类算法,称为回归是历史原因 前言 前面我们已经学习了线性回归,线性回归适用于预测一个连续值,就是说预测值可能的范围存在连 ...

  9. 吴恩达机器学习课后习题——逻辑回归

    机器学习课后作业-逻辑回归 逻辑回归 逻辑回归算法,是一种给分类算法,这个算法的实质是:它输出值永远在0到 1 之间. 将要构建一个逻辑回归模型来预测,某个学生是否被大学录取.设想你是大学相关部分的管 ...

最新文章

  1. sed替换每行最后一个字符
  2. 51.1AP!单阶段检测器的新纪录,TOOD:即插即用的检测器换头术,显著提升性能
  3. 关于SSIS中解密数据库字符串的方法
  4. 写出程序删除链表中的所有接点
  5. 104.全排列(深搜)搜索与回溯
  6. php mysql查询结果_php对mysql查询结果进行分页 - ceil
  7. [零基础学JAVA]Java SE应用部分-34.Java常用API类库
  8. 怎么打_这比赛怎么能够这样打?
  9. Fckeditor漏洞利用总结
  10. Vue H5 项目模板
  11. python+django+mysql运动场地预约系统毕业设计毕设开题报告
  12. linux网络测试工具
  13. 大同linux培训班,大同一对一高中辅导中心地址
  14. 小程序转 App 帮助企业打开营销局面
  15. Android中 根据电话号码获取联系人姓名
  16. 【JDK7】新特性(6) 监听文件系统的更改
  17. Matlab:合并来自各自变量的日期和时间
  18. 华为OD机试 - 硬件产品销售方案(Java JS Python)
  19. altera soceds 工具编译preloader与uboot过程分析
  20. 在VC 6.0里Win32 Application和Win32 console Application的区别

热门文章

  1. PHP各种各样的面试题目整理
  2. after effect cc入门教程
  3. 医疗器械的分类与查询
  4. 环氧大豆油的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  5. MyBatis-Plus分页插件——PageHelper和IPage原理介绍
  6. QueryDict和模型表知识补充
  7. python作业题2 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
  8. 浅析ActiveSLAM
  9. python lib error
  10. vfp中写入文本文件_将vfp中的数据写入到wps文档中