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

sklearn逻辑回归 极大似然 损失_算法 | 一个硬币与逻辑回归的故事

利用先验知识,寻找经验损失最小的模型。

李航《统计学习方法》

和线性回归一样,逻辑回归也是常用的算法之一,如果熟悉深度学习的话,可以发现,在很多时候,深度学习就是逻辑回归变体与进化。逻辑回归的推导问题,也是面试中最常问的问题之一。本篇文章,就详细介绍逻辑回归的两种重要思路:极大似然估计梯度下降


从一个特殊的硬币开始

这是我曾遇到的一个面试题:假设一枚不规则的硬币,要知道它正面的概率是多少,抛了10次,其中6次正面,4次背面,请用极大似然估计计算硬币正面的概率? 想要解决这一问题,首先做一些设定,假设硬币正面概率为p, 硬币是反面时概率为(1-p)。那么如果抛两次硬币分别是一次正面,一次是反面,这一事件发生的概率P,可以表示为:

d6f6837d43831debfca19f8d7f3f5436.png

如果是抛10次,6次正面,4次背面,那么这一事件P发生的概率就可以写成:

43418804d710d842e8fa0a57a3663e82.png

极大似然估计,就是要使得事件发生的概率P最大。那么这个问题就可以转换成,当P最大时得到的p,就是要求的硬币正面的概率。如何求最大的P和正面概率p?
  1. 将最大值问题转换成最小值问题,求P最大值的问题转变成求-P的最小值的问题。(这一步是为了配合梯度下降,可以不做,如果不转换,可以用梯度上升的方法,其他不变。)

    bd32477c2710ab690c885df79f859bf1.png

  2. 将公式两边同时取对数,这也可以叫做对数似然;指数运算复杂度较高,取对数可以将乘法变成加法,其次对数并不会改变原函数的单调性。原公式变为:

    3243a95d4b53f821d9a5b80695b89bd1.png

  3. 对 l 求导数,从上面的图像可以知道,当导数等于0时,获得最小值。

    027d694d10a3e736b3135fe23b04de96.png

  4. 对上面的导数求解,就可以得到极大似然估计求解的硬币正面的概率p=0.6

这就是极大似然估计硬币正面概率的方法,。那么,将上面的解题步骤进行推广,就可以得到逻辑回归的推导过程。

8ee1513208ba69bea7dd5c21ff675a6a.png

逻辑回归本质是分类!

逻辑回归,本质上就是把线性回归的方程放到Sigmoid的函数里,公式是:

817435ace16577e12aa57d3579f11075.png

把这个函数放到坐标系里,它长这样:

0c71d19a64b14aa2ad4676bbef6e2b02.png

所以,逻辑回归的过程,就是将线性回归的结果进行"弯折",使得其结果在0-1,而这个结果,就是样本是正样本y=1时的概率。
来个通俗的例子: 成年人的平均体重w是60kg,平均身高h是170cm,未成年的平均体重是40kg,平均身高是140cm(为了计算方便,并不是真实数据,别较真)。假设我们训练的线性回归模型是y=0.005w+0.005h,我们直观的感受就是,成年人的回归结果要在1.15附近,未成年人的回归结果在90附近。但是单纯依靠回归结果,我们没办法对未知样本进行一个类别判定,所以,就需要逻辑回归的"弯折"。 当预测一个新的样本时,w=60, h=160,线性回归的结果是110,经过逻辑回归,Ta是成年人的概率:

5a1d8e01f3cd36a009d16b0f5d75de0a.png

即,如果我们假设当概率超过0.5时(这个阈值可以改动),就将样本认定为正样本,那么这个待预测的人就是成年人。 这也就是逻辑回归的过程。如果进一步推广,将一个逻辑回归模型变成多个,形成一层的逻辑回归,然后一层变成多层逻辑回归,这就变成了神经网络,而单个逻辑回归的"弯折"能力通过叠加,也就可以处理一些非线性、不规则的情况。

8ee1513208ba69bea7dd5c21ff675a6a.png

逻辑回归的梯度下降

逻辑回归的梯度下降和线性回归的梯度下降,在原理上是一样的,一样可以按照NP-hard的思路进行拆解。
  • 目标函数:可以将硬币问题进行一般化处理,得到使得经验损失最小,也就是样本所代表的事件,发生的概率最大。

84141e609b620294f7a6440b50597823.png

其中,n代表了样本的数量,y_i第i个样本的真实标签(0或1),目标函数的图像可以参考本文第一幅图。

  • 输入序列/值:与线性回归相同,也是w和b的组合。

  • 约束条件:与线性回归相同。

如果对梯度下降不太熟悉,建议看下:算法 | 换个角度理解下:线性回归与梯度下降!

按照极大似然估计求解硬币正面概率的步骤:
  1. 对目标函数(损失函数)取对偶问题(转换成求最小值),然后取对数;

    0e4432255b4a8db91a50278fe3f73374.png

  2. 对目标函数分别求w的偏导数;

    448b7cc2d2c5719cf1d6b94352a08b0c.png

    非常神奇的是,逻辑回归函数的导数有个特性,h'(x)=h(x)(1-h(x)),那么上面的公式简化下就是:

    0da88832a0211cb0bdd95e0a5ce2575f.png

    再次化简!注意上面h(x)(1-h(x))是在求和函数Sum之外的,此时x并没有指定,当与Sum求乘积的时候,h(x)就相当于h(x_i),最后。就可以得到一个非常眼熟的公式:

    6583748163176e4f16457974f38e593c.png

  3. 让偏导数变为0,然后加个学习率,就可以得到w迭代前进的方向;

    4e0e0cab92406fd2e9419c193385345d.png

  4. 更新权重w,继续迭代。

用同样的方法,计算偏差b,感兴趣可以自己推导下。

8ee1513208ba69bea7dd5c21ff675a6a.png

突然哲学的广义线性模型

仔细观察损失函数最后对w求偏导数得到的梯度下降公式,与线性回归的梯度下降公式在本质上是完全一样的。数学上为了追求简洁和统一,于是把这些类似的模型统称为:广义线性模型(GML)。这类模型包括:线性回归、多项式回归、逻辑回归、岭回归(Ridge,也是L2正则)、Lasso回归(L1正则)等。想要更详细的了解,建议移步skLearn官网~
最后补充一个小总结:线性回归通过最小二乘估计法获取损失函数,逻辑回归是通过极大似然估计法获得损失函数,两者都可以通过梯度下降法寻找最优解(w和b的组合)。求求各位点个关注吧~~~

6a4f38fffef06f609a588aa95b54aafd.png

相关文章:算法 | 换个角度理解下:线性回归与梯度下降!算法|NP-hard可能没那么难。?面向对象我会了,请问对象哪儿领?其他有趣的故事:入狱小技巧|我们总算做了一件有用的事!缓存|高并发下与数据库的读写一致性ES | 让搜索变得简单高效

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • restful api和普通api有什么特点_Django REST Framework教程(1): 为什么要学习DRF, 什么是序列化和RESTful的API...
  • sql语言编程学习_在读大学生是否该重点学习一门编程语言,以及该如何选择编程语言...
  • .net 反编译_.net反编译的相关问题
  • class括号里的object_Class文件结构全面解析(下)
  • 标签打印模板_海鸟贴纸打印机:工作和生活中的得力助手!专治强迫症
  • gitlab run成功 但无法访问_用 GitLab 做 CI/CD 是什么感觉,太强了!!
  • 当前操作系统缺少黑体等字体_OpenBSD6.6正式版发布:多平台,类Unix的最安全操作系统...
  • wps 模拟分析 规划求解_基于长时间尺度的园区综合能源系统随机规划
  • 纬地8.0支持的cad版本_智慧社区弱电工程设计图纸,可编辑(CAD版本)弱电新人学习!...
  • markdown 公式_还在用MathType编写数学公式吗,markdown纯手撸复杂数学公式
  • tipi 深入理解php内核 pdf_深入理解 PHP7 内核之 HashTable
  • ps cs6 磨皮插件_Portraiture 3 for mac(ps磨皮滤镜插件) v3.5.4(3540)版
  • python index函数是左闭右开吗_Python容器类型公共方法总结
  • flutter 图表_Flutter 与 Chrome OS 珠联璧合
  • 计算加减乘除混合运算python实现_python,实现计算器程序,加减乘除混合运算加括号,完善实现...
  • ES6指北【2】—— 箭头函数
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【技术性】Search知识
  • gitlab-ci配置详解(一)
  • isset在php5.6-和php7.0+的一些差异
  • Java IO学习笔记一
  • Java小白进阶笔记(3)-初级面向对象
  • Magento 1.x 中文订单打印乱码
  • magento2项目上线注意事项
  • MobX
  • Node 版本管理
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • spring boot 整合mybatis 无法输出sql的问题
  • 飞驰在Mesos的涡轮引擎上
  • 机器学习 vs. 深度学习
  • 基于游标的分页接口实现
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 微服务核心架构梳理
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 白色的风信子
  • ​Java基础复习笔记 第16章:网络编程
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #1014 : Trie树
  • #mysql 8.0 踩坑日记
  • #职场发展#其他
  • (19)夹钳(用于送货)
  • (day6) 319. 灯泡开关
  • (el-Date-Picker)操作(不使用 ts):Element-plus 中 DatePicker 组件的使用及输出想要日期格式需求的解决过程
  • (k8s)Kubernetes本地存储接入
  • (二)c52学习之旅-简单了解单片机
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (四)Linux Shell编程——输入输出重定向
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET Framework、.NET Core 、 .NET 5、.NET 6和.NET 7 和.NET8 简介及区别
  • .NET Framework杂记
  • .Net Redis的秒杀Dome和异步执行
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题