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

【机器学习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)梯度下降算法的步骤

       重复如下步骤即可

相关文章:

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

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

OPC【4】:物理包

概述 OPC遵循zip标准&#xff0c;因此可以使用python标准库zipfile对docx格式的物理文件进行读写操作。在OPC中&#xff0c;物理包与抽象包是一对相对的概念&#xff0c;后续可以看到抽象包内的内容是将物理包内的信息进行编排形成地。简单点理解&#xff0c;物理包的作用在于…...

关于 Go 协同程序(Coroutines 协程)、Go 汇编及一些注意事项。

参考&#xff1a; Go 汇编函数 - Go 语言高级编程 Go 嵌套汇编 - 掘金 (juejin.cn) 前言&#xff1a; Golang 适用 Go-Runtime&#xff08;Go 运行时&#xff0c;嵌入在被编译的PE可执行文件之中&#xff09;来管理调度协同程式的运行。 Go 语言没有多线程&#xff08;MT&a…...

深入剖析BaseMapperPlus扩展接口及其在MyBatis-Plus中的实践价值

前言 BaseMapperPlus并非MyBatis-Plus&#xff08;MP&#xff09;官方提供的标准接口&#xff0c;而是社区开发者基于MP的BaseMapper接口进行二次封装和增强后创建的一个自定义接口。这个概念可能因不同项目或个人实践而有所差异&#xff0c;但其核心思想是为了解决特定场景下…...

Linux之安装配置VCentOS7+换源

目录 一、安装 二、配置 三、安装工具XSHELL 3.1 使用XSHELL连接Linux 四、换源 前言 首先需要安装VMware虚拟机&#xff0c;在虚拟机里进行安装Linux 简介 Linux&#xff0c;一般指GNU/Linux&#xff08;单独的Linux内核并不可直接使用&#xff0c;一般搭配GNU套件&#…...

[极客大挑战 2019]LoveSQL1

万能密码测试&#xff0c;发现注入点 注意这里#要使用url编码才能正常注入 测试列数&#xff0c;得三列 查看table&#xff0c;一个是geekuser另一个是l0ve1ysq1 查看column&#xff0c;有id&#xff0c;username&#xff0c;password&#xff0c;全部打印出来&#xff0c;…...

网络安全的介绍

1.什么是网络安全 网络安全是一门关注保护计算机系统、网络基础设施和数据免受未经授权访问、破坏或窃取的学科。随着数字化时代的发展&#xff0c;网络安全变得尤为重要&#xff0c;因为大量的个人信息、商业机密和政府数据都储存在电子设备和云端系统中。以下是网络安全的概…...

django邮件通知功能-

需求&#xff1a; 1&#xff1a;下单人员下订单时需要向组长和投流手发送邮件通知 2&#xff1a;为何使用邮件通知功能&#xff1f;因为没钱去开通短信通知功能 设计 1&#xff1a;给用户信息表添加2个字段 第一个字段为&#xff1a;是否开通邮件通知的布尔值 第二个字段为: 用…...

C++ 类定义

C 类定义 定义一个类需要使用关键字 class&#xff0c;然后指定类的名称&#xff0c;并类的主体是包含在一对花括号中&#xff0c;主体包含类的成员变量和成员函数。 定义一个类&#xff0c;本质上是定义一个数据类型的蓝图&#xff0c;它定义了类的对象包括了什么&#xff0…...

IntelliJ IDE 插件开发 | (五)VFS 与编辑器

系列文章 IntelliJ IDE 插件开发 |&#xff08;一&#xff09;快速入门IntelliJ IDE 插件开发 |&#xff08;二&#xff09;UI 界面与数据持久化IntelliJ IDE 插件开发 |&#xff08;三&#xff09;消息通知与事件监听IntelliJ IDE 插件开发 |&#xff08;四&#xff09;来查收…...

金融OCR领域实习日志(一)

一、OCR基础 任务要求&#xff1a; 工作原理 OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;是指电子设备&#xff08;例如扫描仪或数码相&#xff09;检查纸上打印的字符&#xff0c;经过检测暗、亮的模式肯定其形状&#xff0c;而后用…...

CC++编译和链接介绍

介绍 C语言的编译和链接是将源代码转换为可执行文件的两个关键步骤。以下是详细的流程&#xff1a; 编译过程&#xff08;Compilation&#xff09; 预处理&#xff08;Preprocessing&#xff09;&#xff1a; 编译器首先对源代码进行预处理&#xff0c;这个阶段处理#include包…...

Element-UI中的el-upload插件上传文件action和headers参数

官网给的例子action都是绝对地址&#xff0c;我现在需要上传到自己后台的地址&#xff0c;只有一个路由地址/task/upload 根据 config/index.js配置&#xff0c;那么action要写成/api/task/upload&#xff0c;另外也可以传入函数来返回地址:action"uploadUrl()"。 …...

在IntelliJ IDEA中通过Spring Boot集成达梦数据库:从入门到精通

目录 博客前言 一.创建springboot项目 新建项目 选择创建类型​编辑 测试 二.集成达梦数据库 添加达梦数据库部分依赖 添加数据库驱动包 配置数据库连接信息 编写测试代码 验证连接是否成功 博客前言 随着数字化时代的到来&#xff0c;数据库在应用程序中的地位越来…...

docker相关

下载Ubuntu18.04文件64位&#xff08;32位安装不了MySQL&#xff09; https://old-releases.ubuntu.com/releases/18.04.4/?_ga2.44113060.1243545826.1617173008-2055924693.1608557140 Linux ubuntu16.04打开控制台&#xff1a;到桌面&#xff0c;可以按快捷键ctrlaltt 查…...

生产力工具|卸载并重装Anaconda3

一、Anaconda3卸载 &#xff08;一&#xff09;官方方案一&#xff08;Uninstall-Anaconda3-不能删除配置文件&#xff09; 官方推荐的方案是两种&#xff0c;一种是直接在Anaconda的安装路径下&#xff0c;双击&#xff1a; &#xff08;可以在搜索栏或者使用everything里面搜…...

大模型学习与实践笔记(十二)

使用RAG方式&#xff0c;构建opencv专业资料构建专业知识库&#xff0c;并搭建专业问答助手&#xff0c;并将模型部署到openxlab 平台 代码仓库&#xff1a;https://github.com/AllYoung/LLM4opencv 1&#xff1a;创建代码仓库 在 GitHub 中创建存放应用代码的仓库&#xff…...

Vulnhub靶机:FunBox 5

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.15&#xff09; 靶机&#xff1a;FunBox 5&#xff08;10.0.2.30&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://www.vulnhub.com/entry/funb…...

性能优化(CPU优化技术)-NEON指令介绍

「发表于知乎专栏《移动端算法优化》」 本文主要介绍了 NEON 指令相关的知识&#xff0c;首先通过讲解 arm 指令集的分类&#xff0c;NEON寄存器的类型&#xff0c;树立基本概念。然后进一步梳理了 NEON 汇编以及 intrinsics 指令的格式。最后结合指令的分类&#xff0c;使用例…...

【极数系列】Flink环境搭建(02)

【极数系列】Flink环境搭建&#xff08;02&#xff09; 引言 1.linux 直接在linux上使用jdk11flink1.18.0版本部署 2.docker 使用容器部署比较方便&#xff0c;一键启动停止&#xff0c;方便参数调整 3.windows 搭建Flink 1.18.0版本需要使用Cygwin或wsl工具模拟unix环境…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...