逻辑回归分类器

2023-11-06

版权归作者所有,任何形式转载请联系作者。
作者:junior(来自豆瓣)
来源:https://www.douban.com/note/573235939/


Logistic的算法实现非常简单,但它背后的逻辑挺复杂的。前天学完很快又忘了,只记得算法怎么写,推导过程怎么都想不起来了,十分懊恼,所以决定自己动手写一遍推导过程,虽然花了将近五个小时,但感觉记得更牢了一些。
所以说,好记性真的不如烂笔头啊朋友们~~一定要勤记笔记,因为你会忘记,你以为你会记得,但你就是会忘记。尤其年纪大了,学新知识似乎更费劲了,我要更加努力,直到让努力化解了努力的痕迹,知识才会真正进入我的身体。


1. Logistic分类器的适用范围:
    ※ y必须是二分类变数,比如“是否为垃圾邮件”、“是否为体育新闻”、‘病患是否得了流感’等。


2. 推导步骤:
    1)建模:确定x和y之间的关系
    2)推导损失函数
    3)模型优化:找到最佳拟合的线性回归系数,也就是最大化似然Maximum Likelihood和最小化损失Minimum Loss的过程,最大化似然和最小化损失是一体两面。


3. Logistic模型:简单来说,Logistic是由一个线性模型+一个阈值转换函数组成的。


Logistic模型
    它的有趣之处在于,它不是直接假设x和P(y=1)之间的关系,而是设计了一个过渡变数z,中介x和P(y=1)的关系,和x线性相关的是z,而不是P(y),然后再使用Sigmoid函数把z投射到一个[0,1]的范围中,投射得到的就是概率P(y=1)。


    阈值转换:Sigmoid函数的分布:


Logsitic模型的分布
    Sigmoid函数分布特征:
    1) 介于[0,1]之间,可以直接将计算得到的因变量视作类别1的概率。
    2) 如果Sigmoid函数的自变项z足够大的话,横坐标会被拉长,Sigmoid函数看起来会非常像一个阶跃函数。
    3) 尽管这个函数是单调上升,但它不是匀速上升的,在自变量z很小的时候,它的上升速度缓慢(导数很小),z=0时上升速度最大,z>0以后上升速度放缓。(Sigmoid函数长得很像常态分布的概率累积函数)


    光看公式有点太抽象了,我们还是要回到它的使用脉络里,去理解Sigmoid函数的物理意义吧。
    Sigmoid函数最初被用于生态学模型中,用来解释一个生态系统中某种生物数量的变化。比如对于【地球人口】,我们有两个基本的认知:①人口基数越大,人口增长率越快,②但人口数不会无止境地增长,当外部资源与环境不变时,地球可容纳的人口是有限的,当迈过某个门槛后,人口增长率会开始放缓,也就是说人口增长率不仅和人口基数有关,也和系统中的空位vaccancy有关。Sigmoid函数正好可以模拟这个情况。
    而在新闻文本分类的情况下,我们可以理解为,①如果“体育类新闻”的特徵词汇(比如运动员、奥运会、跑道等)出现次数越多,判断为类别A的概率也越大,②但新闻文本长度有限,特徵词汇出现次数超过某个门槛后,概率上升空间也不多,比如新闻中如果提到6次奥运会,就有九成把握是体育类新闻,九成!很难比这个概率更高了好吗,所以之后“奥运会”的出现次数每增加一次,概率上升的速度会越来越慢...只有一成的上升空间了,要珍惜,慢慢来....


    了解了Sigmoid的特征以及使用情况以后,我们就可以知道为什么我们的分类模型需要拆分成两步骤来执行:一来不用特别限制线性模型因变量的大小,二来也更切合现实情况,概率上升速度是先慢后快再慢。


4. 损失函数Cost Function:
    如果一则娱乐新闻被判断有80%可能性是体育新闻,就说明预测出现了80%的错误。我们可以用【对数损失函数】来测量「预测的错误程度」:

损失函数

    也可以表达为:


损失函数
    当y=1时,正确预测的概率是P(y=1),则P(y=1)越大,预测越准确,损失函数越小。
    *注:损失函数取负就是似然函数。
    *注:用log损失函数,而非平方损失函数,是因为sigmoid的平方损失函数是non-convex非凸函数,有很多个局部最小值,用梯度下降法递归时,容易收敛于不好的答案:




non-convex cost function


   
5. 模型优化:
    模型优化,是一个变换回归系数w,来达到最小化损失函数的过程。我们可以使用梯度下降法(Gradient Descend)来找到回归系数w的局部最佳解。
    梯度,和函数切线很相似,是一个指向函数值上升最快的方向,梯度的长度为导数大小,代表着函数值上升的速度。而梯度取负,表示的就是函数值下降最快的方向。在梯度下降法中,我们希望找到损失函数下降最快的方向,也就是损失函数的梯度取负的方向,而下降的速度,也就是收敛速度,我们可以定一个够小的常数,比如0.001,也可以根据迭代次数,动态设置一个参数,比如0.001+1/i(i为迭代次数,迭代越多,步长越小,收敛越慢)。
   
    具体推导步骤:
    1) 计算梯度:
     第一种方法:参考这篇文章(http://blog.csdn.net/bitcarmanlee/article/details/51473567):




     很精彩! 最值得学习的地方是:P(z)导数=P(Z)(1-P(z)),用原函数代表导数,而不是用z去表达P(z)的导数,这样可以抵消前边的导数项,其实这并非是神来之笔,这个求导形式的出处正是前面提到的生态学模型,即P的增长率和P正相关、又和空位数1-P正相关,是先有了导数形式,然后求积分才制造出Sigmoid函数,而不是相反(可能跟逻辑式回归的伯努利分布假设[线性回归是高斯分布假设]也有关,待议)。
     第二种方法,老老实实推导,简单粗暴、土耕火种:




    (事实上logit regression的log损失函数的求导结果和linear regression的OLS求导结果一样,都是(y'-y)*x)


     2) 梯度下降法:已知-▽E(w)是损失函数下降最快的方向,那么我们就按照这个方向对w进行改进,w=w-α▽E(w),α为前面提到的步长,设为常数0.001:




         假设我们收集了n个个案,每个个案有m个自变项(X0,X1,X2,...,Xm),则X是一个n x m的矩阵,而y是n x 1的标签列,所以上面这个公式可以转换成以下矩阵表示,其中Xt为X的转置:






      *梯度上升法:推导步骤几乎和梯度下降法一致,只不过梯度上升是沿着梯度方向寻找最大值,而梯度下降则是对梯度取负号,往梯度下降最快的方向(即上升的反方向)走,用于寻找最小值。在模型优化时,可以使用梯度上升法求似然函数的最大值,也可以用梯度下降法求损失函数的最小值。


最后贴一张我训练得到的成果图,五个错误哈哈哈哈哈!!开心!!



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

逻辑回归分类器 的相关文章

  • Python深度学习-u4.1:分类和回归术语表

    分类和回归都包含很多专业术语 这些术语在机器学习领域都有确切的定义 本文对常见术语进行整理 样本 sample 或输入 input 进入模型的数据点 预测 prediction 或输出 output 从模型出来的结果 目标 target 真
  • 软件测试的艺术(2)代码走查,检查与评审

    人工测试 代码检查 走查以及可用性测试是三种主要的人工测试方法 这种人工测试方法有点像是若干个人员坐在一起开 头脑风暴会 也就是说 目的是为了找出错误 而不是调试 优点 1 一旦发现错误 就能在代码中对其进行精准的定位 降低了调试的成本 2
  • 【读书笔记】5G与车联网

    5G与车联网 by 李俨 曹一卿 陈书平等人 Quanlcomm Technologies Inc 车联网背景 2015年 麻省理工科技评论 将车车通信评为年度十大突破技术之一 V2V V2X比无人驾驶更容易实现 V2V V2X提供一种超视
  • 途客圈创业记--读书笔记

    一 初创公司股权结构 2011年6月公司创立 自筹启动资金50万 1 陈天和Alex 每人出资25万元 总计50万元 作为启动资金 2 陈天 CTO兼董事长 股份60 因为是想法的发起人 且在实现这个想法的过程中 Alex CEO 股份40
  • 做你自己

    2017 03 06 2017 03 10将彼得 巴菲特的书籍 做你自己 个股神巴菲特送给儿子的人生礼物 读完了 感受颇深 沃伦 巴菲特的名言 出生时嘴里含着的金汤匙 最后可能会变成扎在背上的金匕首 考虑不周的赠与会浇灭一个人的雄心并枯竭他
  • 机器学习实战:逻辑回归(3)-Sklearn实现病马死亡率预测

    from sklearn linear model import LogisticRegression 函数说明 使用Sklearn构建Logistic回归分类器 Parameters 无 Returns 无 def colicSklear
  • c陷阱与缺陷

    第一章 词法陷阱 1 这一章没有太多 干货 唯一比较有趣的就是 1 3 语法分析中的 贪心法 所讲内容 这个 贪心 就是编译器会读入字符 如果能新读入的字符和之前所读入字符能组成符号 则编译器会继续读入下一个字符 直到读入的字符不能和之前的
  • 《大话数据结构》-程杰 读书笔记

    认为程序设计的实质是对确定的问题选择一种好的结构 加上设计一种好的算法 可见 数据结构在程序设计当中占据了重要的地位 程序设计 数据结构 算法 要你相信自己一定可以学得会 学得好 既然无数人已经掌握了 你凭什么不行 于每个链表来说 它所占用
  • 读书笔记2

    深度学习入门 基于Python的理论与实现 高清中文版 pdf 1 python基础 numpy matplotlib Batch Normalization Dropout Adam 图像识别 自然语言处理 语音识别 不闻不若闻之 闻之不
  • 《Android 开发艺术探索》笔记7--RemoteViews的内部机制和意义

    RemoteViews的内部机制和意义思维导图 RemoteViews的内部机制 RemoteViews的意义可以模拟一个通知栏效果并实现跨进程的UI更新 参看文章 RemoteViews的内部机制和意义思维导图 RemoteViews的内
  • 【读书笔记】Linux高性能服务器编程(第二篇 第五章)

    第五章 Linux网络编程基础API 5 1 socket地址API 5 1 1 主机字节序和网络字节序 字节序分为 1 大端字节序 一个整数的高位字节 23 31 bit 存储在内存的低地址处 低位字节 0 7 bit 存储在内存的高地址
  • 《Android 开发艺术探索》笔记5--View工作原理

    View工作原理思维导图 ViewRoot和DecorView MeasureSpec 理解MeasureSpec MeasureSpec和LayoutParams关系 View的工作流程 measure过程 正确获取宽高方法 layout
  • wireshark数据包分析实战 读书笔记

    由头 永久链接 之前读了很多书籍 但是现在回顾的时候 很多内容仅仅是熟悉 而不是真正掌握 所以尝试一种新的方式 将读书时觉得比较重要的 或者是自己还不理解的东西记录下来 达到这本书我已经不需要再去翻 只要看笔记即可的效果 第一章 数据包分析
  • softmax用于分类问题/逻辑回归

    参考 d2l 线性回归问题最后输出一个参数用于预测 多分类问题最后输出多个维度的数据 多少个output channels就有多少个类别 softmax是一种激活函数 它常见于分类问题的最后一层激活函数 目的是让输出属于一个概率密度函数 我
  • 《学会提问》-批判性思维

    这本书名为学会提问 但实际内容是讲解如何训练批判性思维能力 如何通过提问 来质疑别人的观点 选择正确的论证 来形成自己的理性决策 批判性思维的最终结果就是要求一个人虚怀若谷地接纳各种观点 理性评判这些观点 然后在理性判断的基础上决定采取哪些
  • 手写体数字识别例程——LeNet-5模型

    上一篇博客中介绍了Caffe环境的搭建 本片博客中介绍一下 在caffe中训练的第一个CNN模型LeNet 5 如果存在不正确的地方欢迎指正 该例程用的数据集是MNIST 该数据集中包含60000个训练集和10000个测试集 使用的CNN模
  • 逻辑回归(Logistic Regression, LR)简介

    逻辑回归 Logistic Regression LR 简介 标签 空格分隔 机器学习 机器学习最通俗的解释就是让机器学会决策 对于我们人来说 比如去菜市场里挑选芒果 从一堆芒果中拿出一个 根据果皮颜色 大小 软硬等属性或叫做特征 我们就会
  • 大话数据结构读书笔记 1---线性表

    大话数据结构读书笔记 编程基础 数据结构 算法 1 线性表 顺序储存结构的结构代码 define MAXSIZE 20 储存空间的起始分配量 typedef int ElemType ElemType类型根据实际类型而定 这里假设是int
  • 【读书笔记】-《工业互联网-技术与实践》

    前言 现在的技术发展潮流 基本上往大数据 人工智能的方向发展 但是归根结底 是什么推动了这些技术产业的发展 是什么支撑的 主要说的话 这和互联网的发展息息相关 也就是说现在一些主要的发达国家是如何拓展先技术新领域 并且如何把这些新技术应用到
  • 【华为数据之道学习笔记】5-9图模型设计

    图模型作为当前流行的信息处理加工技术 自提出以来 迅速在 学术界和工业界得到了普及 在智能推荐 决策分析等方面有着广泛的应用 图模型由节点和边组成 节点表示实体或概念 边则由属性或关 系构成 实体指的是具有可区别性且独立存在的某种事物 如某

随机推荐

  • Unity面试题:热更新篇

    请简要介绍Unity热更新的原理和实现方式 答 Unity热更新的原理是通过将游戏的资源和代码分离 将代码部分放置在服务器端 游戏启动时通过网络下载更新的代码并动态加载 以达到实现热更新的目的 实现方式包括AssetBundle ILRun
  • 查看是否有主键_详解MySQL数据库主键信息及无主键表

    概述 总结一下MySQL数据库查看无主键表的一些sql 一起来看看吧 1 查看表主键信息 查看表主键信息 SELECT t TABLE NAME t CONSTRAINT TYPE c COLUMN NAME c ORDINAL POSIT
  • 弱网测试出现的问题解决思路

    摘自弱网测试时碰到的问题和解决方案再加上自己的一些遇到的解决 1 没进入到后台 可以在前端请求开始时候加个定时器 在请求完毕 或者一定时间 删除定时器 2 现象 用户登录应用时下载初始化数据 下载过程中因网速太慢点击取消并重新登录 数据初始
  • Pytorch 基础之张量索引

    本次将介绍一下 Tensor 张量常用的索引与切片的方法 1 index 索引 index 索引值表示相应维度值的对应索引 a torch rand 4 3 28 28 print a 0 shape 返回维度一的第 0 索引 tensor
  • jfinal-admin 后台框架永久开源

    jfinal admin 是什么 jfinal admin是一个基于jfinal的后台管理开发框架 能帮助你使用很少的时间和代码量开发出功能完备的管理后台 最新代码请切换到 develop 分支 集组织机构管理 用户管理 角色管理 菜单管理
  • C语言【判断一个整数是否为素数】

    include
  • U-Boot命令大全(功能参数及用法)

    本文转载至 http www cnblogs com farsight2011 p 3301126 html U Boot上电启动后 按任意键可以退出自动启动状态 进入命令行 U Boot 2010 03 Sep 25 2011 16 18
  • NZ系列工具NZ02:VBA读取PDF使用说明

    分享成果 随喜正能量 时光绽放并蒂莲 更是一份殷殷嘱托 更是一份诚挚祝福 是一份时光馈赠 又是一份时光陪伴 我的教程一共九套及VBA汉英手册一部 分为初级 中级 高级三大部分 是对VBA的系统讲解 从简单的入门 到数据库 到字典 到高级的网
  • Java学习日记10——Java中的变量及其传递

    Java学习日记10 变量及其传递 引用类型和基本类型变量的传递区别 变量的定义在前面已经讲解过了 点击这里 可以查看原文 这里的分类会略微不通过与之前 这里的变量主要分为字段变量和局部变量 1 在存储角度来看 字段变量是对象的一部分 存放
  • 【K8S】kubernetes集群架构与组件

    文章目录 K8S kubernetes集群架构与组件 kubernetes 组件 master组件 node组件 整体流程 POD终止过程 K8S kubernetes集群架构与组件 kubernetes 组件 K8S是属于主从设备模型 M
  • 华为OD机试真题 Java 实现【记票统计】【牛客练习题】

    一 题目描述 请实现一个计票统计系统 你会收到很多投票 其中有合法的也有不合法的 请统计每个候选人得票的数量以及不合法的票数 注 不合法的投票指的是投票的名字不存在n个候选人的名字中 数据范围 每组输入中候选人数量满足 1 n 100 总票
  • 一个将字符串转驼峰式的函数

    function camelCase str return str split map v gt v replace b w g function fl return fl toUpperCase jion camelCase hello
  • MediaScannerService研究

    2019独角兽企业重金招聘Python工程师标准 gt gt gt MediaScannerService研究 侯 亮 本文以Android 5 1为准 1 概述 MediaScannerService是Android平台提供的一个用于扫描
  • 通过navigator判断运行环境

    一 Navigator是什么 Navigator 对象包含有关浏览器的信息 二 参数 1 用户代理 navigator userAgent 用户代理 Mozilla 5 0 Windows NT 10 0 WOW64 AppleWebKit
  • eggjs&sequelize使用教程一(环境搭建)

    前言 原来想写express sequelize的 但是公司现在放弃了express 转战eggjs 所以这个的教程就以egg为基础 安装egg 官方有完整的教程 需要安装的模块 package js zengwe zengwe PC eg
  • 关于activiti流程通过、驳回、会签、转办、中止、挂起等核心操作功能的封装

    package com famousPro process service impl import java util ArrayList import java util HashMap import java util List imp
  • linux内网穿透(内外网服务器端口映射)

    1 安装sshpass CentOS7 rpm ivh sshpass 1 06 1 el7 x86 64 rpm 若内网无法连接网络 可下载后 在上传至内网服务器 下载地址 https centos pkgs org 7 epel x86
  • Linux学习第11天:字符设备驱动开发:一字一符总见情

    本文是驱动开发的第一篇笔记 主要内容是字符设备驱动开发最基础的内容 主要包括字符设备的概念 开发步骤以及一个十分重要的概念 设备号 其思维导图能简单的显示本文的基本框架 如下 一 字符设备 字符设备就是一个一个字节 按照字节流进行读写操作的
  • 软件测试52讲-用机器设计测试用例:基于模型的测试

    MBT 的基本原理是通过建立被测系统的设计模型 然后结合不同的算法和策略来遍历该模型 以此生成测试用例的设计 执行 MBT 的过程就好比你把软件系统的设计画为了一张由节点和边构成的数据结构意义上的 图 然后通过一定的算法 比如 深度遍历或者
  • 逻辑回归分类器

    版权归作者所有 任何形式转载请联系作者 作者 junior 来自豆瓣 来源 https www douban com note 573235939 Logistic的算法实现非常简单 但它背后的逻辑挺复杂的 前天学完很快又忘了 只记得算法怎