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

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

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 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    494 引用 • 928 回帖
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 4 关注
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖 • 1 关注
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    366 引用 • 1842 回帖 • 5 关注
  • 安全

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

    203 引用 • 818 回帖
  • Access
    1 引用 • 3 回帖 • 3 关注
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    36 引用 • 35 回帖
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    20 引用 • 7 回帖 • 3 关注
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    183 引用 • 1011 回帖
  • Sillot

    Insights(注意当前设置 master 为默认分支)

    汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。

    主仓库地址:Hi-Windom/Sillot

    文档地址:sillot.db.sc.cn

    注意事项:

    1. ⚠️ 汐洛仍在早期开发阶段,尚不稳定
    2. ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
    3. ⚠️ 汐洛绞架基于思源笔记,开发者尽最大努力与思源笔记保持兼容,但无法实现 100% 兼容
    29 引用 • 25 回帖 • 109 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    127 引用 • 169 回帖
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 1 关注
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    53 引用 • 40 回帖
  • 小薇

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

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

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

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

    3196 引用 • 8215 回帖
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    91 引用 • 384 回帖
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    199 引用 • 541 回帖 • 1 关注
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 677 关注
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    133 引用 • 1124 回帖 • 121 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    84 引用 • 324 回帖
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    92 引用 • 752 回帖
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1454 回帖
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    94 引用 • 901 回帖
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 316 关注
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 610 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 435 关注