当前位置: 首页 > article >正文

逻辑回归Review

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

1、逻辑回归为什么使用对数损失而不用平方损失

损失函数一般有四种,平方损失函数,对数损失函数,HingeLoss0-1损失函数,绝对值损失函数。

将极大似然函数取对数以后等同于对数损失函数。在逻辑回归这个模型下,对数损失函数的训练求解参数的速度是比较快的,因为梯度的更新速度只和xij,yi相关。和sigmod函数本身的梯度是无关的。这样更新的速度是可以自始至终都比较的稳定。

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

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

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

如果在损失函数最终收敛的情况下,其实就算有很多特征高度相关也不会影响分类器的效果。但是对特征本身来说的话,假设只有一个特征,在不考虑采样的情况下,你现在将它重复 100 遍。训练完以后,数据还是这么多,但是这个特征本身重复了 100 遍,实质上将原来的特征分成了 100 份,每一个特征都是原来特征权重值的百分之一。如果在随机采样的情况下,其实训练收敛完以后,还是可以认为这100个特征和原来那一个特征扮演的效果一样,只是可能中间很多特征的值正负相消了。

3.为什么在训练过程中将高度相关的特征去掉

  • 1.去掉高度相关的特征会让模型的可解释性更好
  • 2.可以大大提高训练的速度。如果模型当中有很多特征高度相关的话,就算损失函数本身收敛了,但实际上参数是没有收敛的,这样会拉低训练的速度。其次是特征多了,本身就会增大训练的时间。

6.逻辑回归为什么要对特征进行离散化

https://blog.csdn.net/yang090510118/article/details/39478033
在工业界,很少直接将连续值作为特征喂给逻辑回归模型,而是将连续特征离散化为一系列0、1特征交给逻辑回归模型,这样做的优势有以下几点:

  1. 稀疏向量内积乘法运算速度快,计算结果方便存储,容易scalable(扩展)。
  2. 离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰。
  3. 逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合。
  4. 离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力。
  5. 特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问。
    李沐少帅指出,模型是使用离散特征还是连续特征,其实是一个“海量离散特征+简单模型” 同 “少量连续特征+复杂模型”的权衡。既可以离散化用线性模型,也可以用连续特征加深度学习。就看是喜欢折腾特征还是折腾模型了。通常来说,前者容易,而且可以n个人一起并行做,有成功经验;后者目前看很赞,能走多远还需拭目以待。
    大概的理解:
    1)计算简单
    2)简化模型
    3)增强模型的泛化能力,不易受噪声的影响

4.逻辑回归模型中,为什么常常要做特征组合(特征交叉)

逻辑回归模型属于线性模型,线性模型不能很好处理非线性特征,特征组合可以引入非线性特征,提升模型的表达能力。另外,基本特征可以认为是全局建模,组合特征更加精细,是个性化建模,但对全局建模会对部分样本有偏,对每一个样本建模又会导致数据爆炸,过拟合,所以基本特征+特征组合兼顾了全局和个性化。

5.逻辑回归和线性回归

  • 逻辑回归是一种广义线性模型,它引入了Sigmod函数,是非线性模型,但本质上还是一个线性回归模型,因为除去Sigmod函数映射关系,其他的算法原理,步骤都是线性回归的。
  • 逻辑回归和线性回归首先都是广义的线性回归,在本质上没多大区别,区别在于逻辑回归多了个Sigmod函数,使样本映射到[0,1]之间的数值,从而来处理分类问题。另外逻辑回归是假设变量服从伯努利分布,线性回归假设变量服从高斯分布。逻辑回归输出的是离散型变量,用于分类,线性回归输出的是连续性的,用于预测。逻辑回归是用最大似然法去计算预测函数中的最优参数值,而线性回归是用最小二乘法去对自变量因变量关系进行拟合。

6.正则化

  • 过拟合
    过拟合表现在训练数据上的误差非常小,而在测试数据上误差反而增大。原因是模型过于复杂,过分的去拟合数据的噪声。
    正则化项是对模型参数添加先验,使得模型复杂度较小,对于噪声扰动相对较小。
  • 防止过拟合
    在目标函数或代价函数后面加上一个正则项,一般有L1正则与L2正则。
  • L1正则和L2正则
    • 相同点:都用于避免过拟合
    • 不同点:
      1.两者引入的关于模型参数的先验条件不一样,L1是拉普拉斯分布,L2是正态分布。
      2.L1偏向于使模型参数变得稀疏(但实际上并不那么容易),L2偏向于使模型每一个参数都很小,但是更加稠密,从而防止过拟合。

7.工程上,怎么实现LR的并行化?有哪些并行化的工具

逻辑回归的并行化最主要的就是对目标函数梯度计算的并行化。

算法的并行化有两种:

  • 1.无损的并行化:算法天然可以并行,并行只是提高了计算的速度和解决问题的规模,但和正常执行的结果是一样的。
  • 2.有损的并行化:算法本身不是天然并行的,需要对算法做一些近似来实现并行化,这样并行化之后的双方和正常执行的结果并不一致,但是相似的。

基于Batch的算法(Batch-GD, LBFGS, OWLQN)都是可以进行无损的并行化的。而基于SGD的算法(Ad Predictor, FTRL-Proximal)都只能进行有损的并行化。

并行化的工具MPI和OpenMP

8.逻辑回归的优缺点

  • 优点
    • 1.形式简单,模型的可解释性非常好。从特征的权重可以看到不同的特征对最后结果的影响,某个特征的权重值比较高,那么这个特征最后对结果的影响会比较大
    • 2.逻辑回归的对率函数是任意阶可导函数,数学性质好,易于优化
    • 3.逻辑回归不仅可以预测类别,还可以得到近似的概率预测
    • 4.模型效果不错。在工程上是可以接受的(作为baseline),如果特征工程做得好,效果不会太差,并且特征工程可以大家并行开发,大大加快开发的速度
    • 训练速度较快。分类的时候,计算量仅仅只和特征的数目有关。并且逻辑回归的分布式优化sgd发展比较成熟,训练的速度可以通过堆机器进一步提高,这样我们可以在短时间内迭代好几个版本的模型
    • 方便输出结果调整。逻辑回归可以很方便的得到最后的分类效果,因为输出的是每个样本的概率分数,我们可以很容易的对这些概率分数进行cut off,也就是划分阈值(大于某个阈值的是一类,小于某个阈值的是一类)
  • 缺点
    • 1.准确率并不是很高。因为形式非常的简单(非常类似线性模型),很难去拟合数据的真实分布
    • 2.很难处理数据不平衡的问题。比如:如果我们对于一个正负样本非常不平衡的问题比如正负样本比10000:1。我们把所有样本都预测为正也能使损失函数的值比较小,但是作为一个分类器,它对正负样本的区分能力不会很好
    • 3.处理非线性数据较麻烦,逻辑回归在不引入其他方法的情况下,只能处理线性可分的数据
    • 4.逻辑回归本身无法筛选特征。有时候,我们会用gbdt来筛选特征,然后再上逻辑回归。

9.LR与SVM的关系

  • 相同点
    • 1.都是有监督分类方法,判别模型(直接估计y=f(x)或p(y|x))
    • 2.都是线性分类方法(指不用核函数的情况)
  • 不同点
    • 1.loss不同。LR是交叉熵,SVM是Hinge loss,最大化函数间隔
    • 2.LR决策考虑所有样本点,SVM决策仅仅取决于支持向量
    • 3.LR受数据分布影响,尤其是样本不均衡时影响大,要先做平衡,SVM不直接依赖于分布
    • 4.LR可以产生概率,SVM不能
    • 5.LR是经验风险最小化,需要另外加正则,SVM自带结构风险最小化不需要加正则项
    • 6.LR每两个点之间都要做内积,而SVM只需要计算样本和支持向量的内积,计算量更小

11、逻辑回归为什么不直接预测值?而是引入概率且设置一个阀值,之后再进行判断?


逻辑回归的核心目标是解决二分类问题,其输出需要表达样本属于某一类别的概率,而不是直接输出一个离散的类别标签。这样做有几个原因:

概率输出便于表达不确定性
逻辑回归通过对输入特征做线性组合后,再用 sigmoid 函数将结果映射到 0 到 1 之间,从而得到一个概率值。这种概率输出不仅告诉我们最终分类结果,还反映了模型对该预测的信心。例如,一个预测概率为 0.95 表示模型非常确信样本属于正类别,而 0.55 则表示不确定性较高。

方便使用统计方法进行参数估计
使用概率输出可以利用最大似然估计(MLE)来求解模型参数。MLE 的推导依赖于构建似然函数,并对参数进行优化,而对数似然函数的最大化能够简化推导过程。如果直接预测 0 或 1,模型的训练和参数优化将失去这种概率模型的统计基础。

灵活设置决策阈值
将输出作为概率后,可以根据具体应用场景灵活设定阈值(例如常见的 0.5 阈值),以便更好地平衡假正例和假负例的风险。在某些情况下,可能希望调整阈值来适应不同的业务需求,而直接输出类别标签无法提供这种灵活性。

与回归方法的数学一致性
如果直接输出 0 或 1,会使得模型看起来像是一个硬分类器,而逻辑回归实际上是在建构一个连续的概率函数,这使得优化过程和误差函数(如交叉熵损失)的构造更为自然和连续,从而便于使用梯度下降等连续优化算法。

总之,逻辑回归不直接预测离散的类别标签,而是通过预测概率,再结合预设的阈值来进行分类决策。这不仅能够表达模型的不确定性,还使得参数估计和模型训练过程更加科学和灵活。

十二、那么对于逻辑回归,阀值一般怎么选取呢 ?


在逻辑回归等概率模型中,我们通常会将模型输出的概率与一个阈值(阀值)比较,从而决定分类结果。阈值的选取没有绝对固定的数值,但常见的方法和考虑因素包括:

默认值 0.5

当正负样本比例比较平衡时,通常默认将 0.5 作为阈值。如果模型预测的正类概率大于或等于 0.5,则分类为正例,否则为负例。
根据业务需求调整

在实际应用中,不同场景对假正例和假负例的容忍度不同。例如:
在医疗诊断中,为了降低漏诊率(假负例),可能会将阈值设定得较低,让模型更容易判断为正例;
在垃圾邮件过滤中,为了避免误将正常邮件标为垃圾邮件(假正例),可能会将阈值设定得较高。
通过性能指标选择

可以使用 ROC 曲线(接收器操作特征曲线)和 PR 曲线(精确率-召回率曲线)来评估不同阈值下的模型性能。
寻找能使某个指标(例如 Youden 指数、F1-score)达到最优的阈值。
交叉验证也常用于确定一个最优阈值,从而在训练数据和验证数据上取得较好的平衡。
数据分布和类别不平衡问题

如果正负样本分布不平衡,直接采用 0.5 可能无法达到最佳效果,此时需要根据样本比例调整阈值,或通过调整类别权重来改善模型表现。
总之,阈值的选取通常结合数据特点、任务需求和性能指标。虽然 0.5 是常见的默认值,但在实际应用中,往往需要通过试验、评估(如 ROC、PR 曲线分析)以及业务背景来确定最合适的阈值。


http://www.kler.cn/a/592090.html

相关文章:

  • 【软考-架构】13.1、软件架构概述-构件技术
  • Java泛型是什么?有什么作用?
  • Linux 云计算运维三剑客grep、sed、awk简单对比
  • 拉取镜像太慢?一文解决!
  • 前端传参+后端接参对照
  • c++ 基础题目lambda
  • 【前端小组件实现】 鼠标经过标签元素显示,另一个元素宽度改变。float,inline-block,block
  • template mixin对装饰器设计模式的实现
  • 海康SDK协议在智联视频超融合平台中的接入方法
  • python开发订单查询功能(flask+orm bee)
  • 一文读懂 EtherNET/IP 转 Modbus RTU 网关
  • 蓝桥杯刷题day1:温度转换
  • SpacetimeDB 1.0 正式发布,Rust 编写的开源关系型数据库
  • 高并发场景下的淘宝API优化:如何设计商品数据采集系统?
  • 深入理解数据库:从概念到MySQL应用
  • docker安装node部分问题
  • Linux下OpenCFD-SCU源码编译安装及使用
  • C++反向迭代器
  • Unity导出WebGL
  • $.ajax的contentType设置及对应后端数据获取方式