【机器学习300问】16、逻辑回归模型实现分类的原理?

        在上一篇文章中,我初步介绍了什么是逻辑回归模型,从它能解决什么问题开始介绍,并讲到了它长什么样子的。如果有需要的小伙伴可以回顾一下,链接我放在下面啦:                             
【机器学习300问】15、什么是逻辑回归模型?

        在这篇文章中,我们深入了解一下逻辑回归模型是怎么实现分类的?我想我可以分成三个层次,层层递进的为大家介绍。

一、找到决策边界便能轻松分类

        我想试着从直观的图表入手,反过来推我们需要做些什么才能实现如图的效果。

(1)什么是决策边界?

        大家看到这图的一瞬间,就能想到画一条从左上到右下的线便可以将圈圈数据和叉叉数据分开,这一条线就决策边界。

        用更加通用的语句定义一下,在逻辑回归模型中,我们通常通过设置一个阈值,比如0.5,来决定预测的分类。当预测的概率大于等于这个阈值时,我们将其分类为正类,反之则分类为负类。这个阈值就形成了一个决策边界。

(2)这个决策边界和逻辑回归模型什么关系?

        首先复习一下逻辑回归模型长什么样子的,它是一个函数由两个部分组成,样子如下:

        f_{\overrightarrow{w},b}(\overrightarrow{x}) = g(\overrightarrow{w}\cdot \overrightarrow{x}+b) = \frac{1}{1+e^{-(\overrightarrow{w}\cdot \overrightarrow{x}+b)}} = P(y=1|x;\overrightarrow{w},b)

        长相有点吓人!我来解释一下:

式子解释
f_{\overrightarrow{w},b}(\overrightarrow{x})这是逻辑回归模型的预测值,也可以理解为\widehat{y}
g(\overrightarrow{w}\cdot \overrightarrow{x}+b)这是sigmoid函数,只不过在上一篇文章中写作\sigma (z),这个z= \overrightarrow{w}\cdot \overrightarrow{x}+b
P(y=1|x;\overrightarrow{w},b)P表示给定特征 x 的条件下,样本属于正类y=1的概率

        可以看到,逻辑回归模型本质是一个多项式套在sigmoid函数里面,那么我们就可以从sigmoid函数图像中看出些许端倪。

        我们以sigmoid函数y=0.5为一个阈值,这里的y只是一个符号,为了与上文统一也可以写成\sigma=0.5或者g=0.5都是一个意思,当y>0.5的时候我们认为预测结果是正类,当y<0.5的时候我们认为预测结果是负类。

        当y=0.5的时候z=0,又因为z= \overrightarrow{w}\cdot \overrightarrow{x}+b,所以决策边界就出来了!即:

        \overrightarrow{w}\cdot \overrightarrow{x}+b=0

         我们还是拿这个图举例说明,在图中z=0的方程可以写作 w_{1}x_1+w_{2}x_{2}+b= 0,这里只有两个特征量所以就直接写而不是向量形式书写了。

        从图中可以看出,能让z=0的线有很多条,我随便画了一条,这条线的w_{1}=1,w_{2}=1,b=-3 你能感觉到w和b的不同对应了不同z决策边界,而能让训练集分成合适的两个部分的决策边界不止一条。在这里我是凭借经验或者说直觉找的一对w和b确定了一个决策边界。

(3)当样本无法用直线来区分时

        决策边界的形状取决于特征和参数的选择。如果引入的特征是一组线性的,那么得到的决策边界是线性的;如果引入的特征是非线性的,那么得到的决策边界是非线性的。

        比如这个图中,就可以用 z = x_{1}^{2} + x_{2}^{2} -1来做决策边界,令z=0就可以得到x_{1}^{2} + x_{2}^{2} =1画出图像来的话就是一个圆,如下图

二、如何找到决策边界?

        决策边界的作用是尽可能完美的把正类和负类分开,那么我们就可以用分的准不准作为评判标准。回到逻辑回归模型所解决的问题——二分类问题,真实值y只有可能是0或者1。那么说明我的预测值\hat{y}也只可能是0或者1。

(1)逻辑回归模型的损失函数

        在线性回归模型中,介绍了一种叫做MSE均方误差的代价函数,来评价预测值与真实值之间的差距,进而判断模型是否尽可能的拟合数据。

        在逻辑回归模型中,也存在一种Loss损失函数,来判断预测值与真实值之间的差距。它长这样:

L(f_{\overrightarrow{w},b}(x^{i}),y^{i}) = \left\{\begin{matrix} -log(f) & ,y^{i}=1\\ -log(1-f)&,y^{i}=0 \end{matrix}\right.

        这里暂不讨论它为什么是长这样,只是简单说一下,长这样有一个好处,那就是这是一个凸函数,没有局部最小值,可以很方便的使用梯度下降算法来求得最佳的w和b参数,进而确定决策边界,当决策边界定了就意味着逻辑回归模型也训练完成了。

        另外补充说,上面这种形式的损失函数叫做交叉熵误差,它有如下的特点:

  1. 当模型预测的概率分布与真实分布完全一致时,交叉熵损失取得最小值0,当预测结果完全错误时,交叉熵误差趋近于无穷大。取值范围[0, 1]
  2. 它惩罚了模型预测概率远离真实概率的程度,鼓励模型学习更加准确的概率分布。
  3. 便于通过梯度下降等优化算法更新模型参数。

(2)从图像中简单理解损失函数

        f_{\overrightarrow{w},b}(x^{i})写的太复杂了我还是写成\hat{y}。这样构建的L(f_{\overrightarrow{w},b}(x^{i}),y^{i})函数的特点是:当实际的y=1且预测值\hat{y}也为 1 时误差为 0,当y=1\hat{y}不为1时误差随着\hat{y}变小而变大;当实际的y=0\hat{y}也为 0 时误差为 0,当y=0\hat{y}不为 0时误差随着\hat{y}的变大而变大。

三、逻辑回归模型中的梯度下降算法

(1)梯度下降算法的目的

        梯度下降算法在逻辑回归中的目的是为了找到决策边界,找决策边界其实就是来确定w和b的值,故梯度下降算法就是为了寻找最佳的w和b。

        在逻辑回归模型中的梯度下降算法的目标函数是损失函数J,那么梯度下降算法具体目标就变成了找到损失函数J的最小值,在上面我们介绍的L(f_{\overrightarrow{w},b}(x^{i}),y^{i})是针对某一个点的损失,现在我们计算所有点的损失,也就是整体损失后得到损失函数的终极形态:

       先将损失函数写成一行   L(f_{\overrightarrow{w},b}(x^{i}),y^{i})=-y^{i}log(f)-(1-y^{i})log(1-f)

       在计算整体损失   J(\hat{w},b)=\frac{1}{m}\sum_{i=1}^{m}[L(f_{\overrightarrow{w},b}(x^{i}),y^{i})]

(2)梯度下降算法的步骤

       重复如下步骤即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/652283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#,计算几何,二维贝塞尔拟合曲线(Bézier Curve)参数点的计算代码

Pierre Bzier Bzier 算法用于曲线的拟合与插值。 插值是一个或一组函数计算的数值完全经过给定的点。 拟合是一个或一组函数计算的数值尽量路过给定的点。 这里给出 二维 Bzier 曲线拟合的参数点计算代码。 区别于另外一种读音接近的贝塞耳插值算法&#xff08;Bessels int…

【CAD全套教程】第1阶段 CAD软件教程 002+003基础界面设置

002基础界面设置 1.切换界面至AutoCAD经典界面 方式一&#xff1a;任务栏点击后直接选择 方式二&#xff1a;右下角点击齿轮图标&#xff08;切换工作空间&#xff09;后直接选择 界面图 2.AutoCAD常用命令 工具栏右键单击&#xff0c;选择AutoCAD 3.命令提示行 最下方&#xf…

【Docker】实现JMeter分布式压测

一个JMeter实例可能无法产生足够的负载来对你的应用程序进行压力测试。如本网站所示&#xff0c;一个JMeter实例将能够控制许多其他的远程JMeter实例&#xff0c;并对你的应用程序产生更大的负载。JMeter使用Java RMI[远程方法调用]来与分布式网络中的对象进行交互。JMeter主站…

【前端web入门第二天】01 html语法实现列表与表格_合并单元格

html语法实现列表与表格 文章目录: 1.列表 1.1 无序列表1.2 有序列表1.3 定义列表 2.表格 2.1 表格基本结构2.2 表格结构标签2.3 合并单元格 写在最前,第二天学习目标: 列表 表格 表单 元素为嵌套关系 1.列表 作用:布局内容排列整齐的区域。 列表分类:无序列表、有序列表…

数字IC实践项目(8)—CNN加速器(ASIC_Flow;付费项目补充)

数字IC实践项目&#xff08;8&#xff09;—CNN加速器&#xff08;ASIC_Flow&#xff1b;付费项目补充&#xff09; 更新说明项目整体框图神经网络框图File tree 项目简介和学习目的软件环境要求 Area、QOR、Power&Timing报告Area & QORTiming & Power 总结 更新说…

【C++】类与对象(一)

前言 类与对象&#xff08;一&#xff09; 文章目录 一、面向对象和面向过程的对比二、类的引入2.1 C中的结构体2.2 类2.3 类定义方法2.4 修饰限定符2.5 封装2.6 类的实例化2.7 类对象的大小 三、this指针3.1 this 指针的使用 一、面向对象和面向过程的对比 面向过程编程是将程…

GoJS—交互式图表开发的神器(海量案例)

一、GoJS是什么&#xff1a; GoJS是一个用于创建交互式可视化图表和图形的JavaScript库。它提供了丰富的功能和工具&#xff0c;使开发人员能够轻松地构建各种类型的图表&#xff0c;包括流程图、组织结构图、网络拓扑图等。GoJS具有灵活的布局和样式设置&#xff0c;可以通过简…

Python中Numba库装饰器

一、运行速度是Python天生的短板 1.1 编译型语言&#xff1a;C 对于编译型语言&#xff0c;开发完成以后需要将所有的源代码都转换成可执行程序&#xff0c;比如 Windows 下的.exe文件&#xff0c;可执行程序里面包含的就是机器码。只要我们拥有可执行程序&#xff0c;就可以随…

基于STM32的智能手环设计与实现

需要原理图工程&#xff0c;源码&#xff0c;PCB工程的朋友收藏&#xff0c;这篇文章关注我&#xff0c;私我吧&#xff01;&#xff01;&#xff01; 基于STM32的智能手环设计与实现 摘要一、研究背景及意义二、实现功能三、系统方案设计系统方案设计框图3.1 单片机芯片选择3…

[HGAME 2023 week1]easyenc

查壳 IDA打开 字符串打开就发现了明显的标志 int __cdecl main(int argc, const char **argv, const char **envp) {__int64 v3; // rbx__int64 v4; // raxchar v5; // alchar *v6; // rcxint v8[10]; // [rsp20h] [rbp-19h]char v9; // [rsp48h] [rbpFh]__int128 v10[3]; //…

【Java】SpringMVC参数接收(一)

1、接收单个参数 &#xff08;1&#xff09;直接接收参数 RequestMapping("/hello") RestController public class HelloSpring {RequestMapping("/t2")public String t2(String name){return "name" name;} } 当没有传入参数时&#xff0c;返…

《汇编语言:基于linux环境》eatsyscall汇编程序

当阅读此书&#xff0c;作者编写了一个这样的程序&#xff0c;我也想试一下。照着书中的代码写了下&#xff0c;可以使用nasm正常编译&#xff0c;ld也可以正常链接&#xff0c;但是无法正常执行。总是报错。 ; nasm -f elf64 -g -F stabs eatsyscall.asm ; ld -o eatsysca…

sqli-labs靶场第七关

7、第七关 id1 --单引号报错,id1" --双引号不报错,可以判断是单引号闭合 id1) --也报错&#xff0c;尝试两个括号闭合&#xff0c;id1)) --不报错 接下来用脚本爆库 import stringimport requestsnumbers [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] letters2 list(string.ascii_…

【销售数据分析】客户画像分析之总体画像

前一段时间把财务分析的一些报表及分析场景讲得差不多了&#xff0c;接下来想和大家讲一下销售分析中的一些场景。今年看了许多企业的数据&#xff0c;发现大家2023年比疫情三年更难&#xff01;从财务的几张报表就会发现净利润亏损的居多&#xff0c;而亏损的主要原因基本上都…

Easysearch:语义搜索、知识图和向量数据库概述

什么是语义搜索&#xff1f; 语义搜索是一种使用自然语言处理算法来理解单词和短语的含义和上下文以提供更准确的搜索结果的搜索技术。旨在更好地理解用户的意图和查询内容&#xff0c;而不仅仅是根据关键词匹配&#xff0c;还通过分析查询的语义和上下文来提供更准确和相关的…

什么是DevOps?DevOps是如何提效的?

文章目录 前言一、DevOps是什么&#xff1f;二、DevOps是如何提效的&#xff1f;总结 前言 随着软件行业的不断发展&#xff0c;如何打破开发、运维、测试之间的边界&#xff0c;使工作更加高效成为了企业的新一个难题&#xff0c;本文将向大家介绍DevOps文化&#xff0c;以及…

巨杉数据库携手广发证券入选2023大数据“星河”案例

近期&#xff0c;中国信息通信研究院、中国通信标准化协会大数据技术标准推进委员会(CCSA TC601)连续七年共同组织的大数据“星河&#xff08;Galaxy&#xff09;”案例征集活动发布公示。本次征集活动&#xff0c;旨在通过总结和推广大数据产业发展的优秀成果&#xff0c;推动…

C++多线程1(复习向笔记)

创建线程以及相关函数 当用thread类创建线程对象绑定函数后&#xff0c;该线程在主线程执行时就已经自动开始执行了,join起到阻塞主线程的作用 #include <iostream> #include <thread> #include <string> using namespace std; //测试函数 void printStrin…

被鹅厂最新开源AI绘画工具PhotoMaker圈粉了,多风格头像生成器就靠它了!

要说本周AIGC开源爆火项目&#xff0c;腾讯的PhotoMaker 可以入选其一。而 PhotoMaker 是腾讯Arc于4天前开源上线到GitHub的&#xff0c;更有一众互联网科技领域大V体验推荐&#xff0c;当前Star已经有4.7k了&#xff01; 相信小编这篇文章发布时star预测可能达到5k了。而 Pho…

js打地鼠

文章目录 1实现效果2代码实现 1实现效果 游戏难度&#xff1a;简单&#xff0c;一般&#xff0c;困难&#xff0c;噩梦&#xff08;控制setInterval的time参数&#xff09; 按钮功能&#xff1a;结束&#xff08;可以通过修改gameScore的值来修改判定结束的分数&#xff09;&am…