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

机器学习 - 关于逻辑回归的若干问题

在《词袋模型(Bag of Words)实现文本情感分类的详细示例》一文中,对于为什么采用逻辑回归及相关操作,存在一些疑问,因而去做了了解和调研,整理后做个记录,加深对逻辑回归的理解。

一、机器学习中逻辑回归,是判断概率大小的嘛?

逻辑回归主要用于二分类问题,其核心目标就是估计样本属于某一类别的概率。具体来说,逻辑回归通过以下步骤实现这一目标:

  1. 线性组合
    对输入特征 xx 进行线性组合,计算线性模型的输出:

    其中 w 是权重向量,b 是偏置项。

  2. Sigmoid 函数转换为概率
    将线性输出 z 输入到 sigmoid 函数中,得到一个位于 (0, 1) 区间的数值:

    这个数值表示样本属于正类别的概率 P(y=1∣x)。

  3. 判断概率大小
    根据计算得到的概率,可以设置一个阈值(通常为 0.5),如果 σ(z)≥0.5 则预测为正类,否则预测为负类。
    此外,概率输出还可以反映分类的置信度,概率越接近 0 或 1,分类器对该预测的信心越高。

因此,逻辑回归确实是通过判断输出概率的大小来进行分类决策。它不仅给出类别标签,同时提供了类别的概率估计,帮助我们理解模型的信心程度。

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

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

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

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

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

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

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

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

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

  1. 默认值 0.5

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

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

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

    • 如果正负样本分布不平衡,直接采用 0.5 可能无法达到最佳效果,此时需要根据样本比例调整阈值,或通过调整类别权重来改善模型表现。

总之,阈值的选取通常结合数据特点、任务需求和性能指标。虽然 0.5 是常见的默认值,但在实际应用中,往往需要通过试验、评估(如 ROC、PR 曲线分析)以及业务背景来确定最合适的阈值。

http://www.dtcms.com/a/17143.html

相关文章:

  • 零基础开发自己的微信小程序(工具箱之父)(二)
  • CPP集群聊天服务器开发实践(三):群组聊天业务
  • 请求超时处理
  • 软考教材重点内容 信息安全工程师 第16章 网络安全风险评枯技术原理与应用
  • 【愚公系列】《Python网络爬虫从入门到精通》009-使用match()进行匹配
  • 十四、GitLab 流水线自动化部署之 Windows Server
  • python轻量级框架-flask
  • 135,【2】 buuctf web bestphp‘s revenge
  • AI辅助编程工具详细介绍
  • SSH 登录到 Linux 服务器为什么没有要求输入密码
  • JVM的类加载器
  • 高效利用Python爬虫获取淘宝店铺详情:电商数据挖掘
  • Linux 设备驱动 -- I2C 子系统快速入门
  • 【教程】MySQL数据库学习笔记(七)——多表操作(持续更新)
  • DeepSeek从入门到精通(清华大学)
  • CRMEB 多商户版v3.0.1源码全开源+PC端+Uniapp前端+搭建教程
  • 不需要移植和配置xinetd 等相类似执行文件,tftp-hpa服务器交叉移植使用说明
  • 【流程图】在 .NET (WPF 或 WinForms) 中实现流程图中的连线算法
  • 青少年编程与数学 02-009 Django 5 Web 编程 07课题、数据迁移
  • SQL 语句的详细解释
  • redis底层数据结构——整数集合
  • Jenkins | Jenkins安装
  • Qt开发①Qt的概念+发展+优点+应用+使用
  • Redis 集群:从基础到实战的面试指南
  • Svelte前端框架
  • Mybatis源码02 - 初始化基本过程(引导层部分)
  • weak的实现原理
  • 3.3.4 VO-O语法- 算子分类(一)
  • Netty的基本架构详解
  • Next.js 15【实用教程】2025最新版