机器学习 (3)——逻辑回归

本贴最后更新于 2235 天前,其中的信息可能已经时移世改

0x00 逻辑回归(Logistic Regression)

逻辑回归就是这样的一个过程:面对一个回归或者分类问题,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,然后测试验证我们这个求解的模型的好坏。

Logistic 回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题(即输出只有两种,分别代表两个类别)

回归模型中,y 是一个定性变量,比如 y=0 或 1,logistic 方法主要应用于研究某些事件发生的概率。

0x01 逻辑回归模型

它的核心思想是,如果线性回归的结果输出是一个连续值,而值的范围是无法限定的,那我们有没有办法把这个结果值映射为可以帮助我们判断的结果呢。而如果输出结果是 (0,1) 的一个概率值,这个问题就很清楚了。

在数学上有 sigmoid 函数可以帮助我们实现这一思想。

sigmoid 函数表达式:

二元逻辑回归时,将 t 换成 ax+b,可以得到二元逻辑回归模型的参数形式:

sigmoid 函数图形:

其中,如果是二元回归时,我们 P(x)的值可以理解为某一分类概率的大小,如果 P(x)值为 0.6,代表输出为 1 的概率是 60%,补集部分是输出为 0 的概率 40%。

此时 P(x)的值越小,而分类为 0 的的概率越高,反之,值越大的话分类为 1 的的概率越高。如果靠近临界点即靠近 0.6 时,分类准确率会下降。

0x02 决策边界(decision boundary)

决策边界就是能够把样本正确分类的一条边界,从图像上可以直观的看到

如线性决策边界:

非线性决策边界:

在上面二元逻辑回归的例子中,我们用 y 表示输出的离散值 0 或 1,写为函数形式为:

然后我们逻辑函数 g 要做到,在输入大于等于零时,输出大于等于 0.6;在输入小于零时,输出小于等于 0.6。即:

决策边界是假设函数的属性,由参数决定,而不是由数据集的特征决定。

0x03 成本函数(Cost Function)

线性回归中也说过成本函数,也叫代价函数,在逻辑回归中,我们也需要定义成本函数对其取值的好坏进行评估。

而逻辑回归如果取用和线性回归一样的方式计算成本函数,那么图形是“非凸”的。

这样就会产生很多个局部最小值,无法使用梯度下降算法。所以我们需要一个新的成本函数。

在逻辑回归中,损失函数是用来估计预测值(y^(i))与期望输出值(y(i))之间的差异。

统计学习中常用的损失函数有以下几种:

(1) 0-1 损失函数(0-1 loss function):

(2) 平方损失函数(quadratic loss function)

(3) 绝对损失函数(absolute loss function)

(4) 对数损失函数(logarithmic loss function) 或对数似然损失函数(log-likelihood loss function)

损失函数越小,模型就越好。

所以在逻辑回归中,为了保证全局收敛,我们采用对数似然损失函数。

也就是说,如下两个情况:

如果是正确答案为 y=1 的情况:

当 y=1, 则 Cost=0,也就是预测的值和真实的值完全相等的时候成本为 0;但是如果 y=0,Cost 接近无穷大,也就是说此时成本会非常大。

如果是正确答案为 y=0 的情况:

当 y=0, 则 Cost=0,也就是预测的值和真实的值完全相等的时候成本为 0;但是如果 y=1,Cost 接近无穷大,也就是说此时成本会非常大。

0x04 简化成本函数

在上面式子中,由于 y 只能等于 0 或 1,所以可以将逻辑回归中的 Cost function 的两个公式合并可以将我们的成本函数的两个条件案例压缩成一个案例:

当 y 等于 1 时,第二项(1-y)log(1- hθ(x))将为零,并且不会影响结果。如果 y 等于 0,则所述第一术语-ylog(1-hθ(X))将为零,且不会影响结果。

所以最终整个逻辑回归的成本函数如下:

0x05 梯度下降

与线性回归相似,这里我们同样采用梯度下降算法来学习参数

迭代函数

算法就是迭代这个公式每次更新参数值,上篇已经详细说过

0x06 优化(Advanced Optimization)

优化算法除了梯度下降算法外,还包括:

  • Conjugate gradient method(共轭梯度法)
  • Quasi-Newton method(拟牛顿法)
  • BFGS method
  • L-BFGS(Limited-memory BFGS)

后二者由拟牛顿法引申出来,与梯度下降算法相比,这些算法的优点是:

  • 1.不需要手动的选择步长
  • 2.通常比梯度下降算法快

因为算法太过复杂,我们不需要手动编写代码,只需要在库中调用相关的函数即可。

0x07 多分类问题(Multiclass Classification: One-vs-all)

我们大多时候遇到的分类并不止两类,这个时候就产生了多分类问题。

首先,二分类问题时候图形如下:

那么多分类问题的图形就如下:

对于多分类问题,我们可以将其先看成二分类问题,保留一类之后剩余的划作另一类。

对上面的三类问题,我们需要三次划分,如图:

最终的 One-vs-all 方法:

  • 对于每一个类 i 训练一个逻辑回归模型的分类器,并且预测 y = i 时的概率。
  • 对于一个新的输入变量 x,分别对每一个类进行预测,取概率最大的那个类作为分类结果。

也就是说,如果输入一个 x,此时分类器 A 概率为 0.3,分类器 B 概率为 0.4,分类器 C 概率为 0.5,那么他就属于 C 这个分类。

  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    83 引用 • 37 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 22 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    34 引用 • 467 回帖 • 742 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 232 回帖 • 2 关注
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    286 引用 • 248 回帖 • 62 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    190 引用 • 1057 回帖
  • 安全

    安全永远都不是一个小问题。

    199 引用 • 816 回帖 • 1 关注
  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖 • 1 关注
  • 电影

    这是一个不能说的秘密。

    120 引用 • 599 回帖
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 531 关注
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    47 引用 • 25 回帖 • 1 关注
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 99 关注
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 362 关注
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 471 关注
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 18 关注
  • 持续集成

    持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

    15 引用 • 7 回帖 • 1 关注
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    17 引用 • 236 回帖 • 328 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    107 引用 • 295 回帖
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 384 关注
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    32 引用 • 130 回帖 • 2 关注
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    12 引用 • 54 回帖 • 63 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖