当前位置: 首页 > 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环境…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

【笔记】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 官方安…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

UE5 音效系统

一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类&#xff0c;将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix&#xff0c;将上述三个类翻入其中&#xff0c;通过它管理每个音乐…...