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

【机器学习】逻辑回归的原理、应用与扩展

文章目录

    • 一、逻辑回归概述
    • 二、Sigmoid函数与损失函数
      • 2.1 Sigmoid函数
      • 2.2 损失函数
    • 三、多分类逻辑回归与优化方法
      • 3.1 多分类逻辑回归
      • 3.2 优化方法
    • 四、特征离散化

一、逻辑回归概述

逻辑回归是一种常用于分类问题的算法。大家熟悉的线性回归一般形式为 Y = a X + b \mathbf{Y} = \mathbf{aX} + \mathbf{b} Y=aX+b,其输出范围是 [ − ∞ , + ∞ ] [-∞, +∞] [,+]。然而,对于分类问题,我们需要将输出结果映射到一个有限的区间,这样才能实现分类。

这时候,我们可以借助一个非线性变换函数,即 Sigmoid 函数。Sigmoid 函数的定义为:
S ( Y ) = 1 1 + e − Y \mathbf{S(Y)} = \frac{1}{1 + e^{-\mathbf{Y}}} S(Y)=1+eY1
该函数可以将任意实数映射到 [ 0 , 1 ] [0, 1] [0,1] 区间内。我们可以将线性回归模型的输出 Y \mathbf{Y} Y 带入 Sigmoid 函数,得到一个介于 [ 0 , 1 ] [0, 1] [0,1] 之间的值 S \mathbf{S} S,这个值可以解释为一个概率。

在实际应用中,我们通常将 S \mathbf{S} S 视为样本属于正类的概率。如果我们设定一个概率阈值,比如 0.5 0.5 0.5,当 S \mathbf{S} S 大于 0.5 0.5 0.5 时,我们认为样本属于正类;反之,当 S \mathbf{S} S 小于 0.5 0.5 0.5 时,我们认为样本属于负类。通过这种方式,逻辑回归模型就能够对样本进行分类。

总的来说,逻辑回归通过线性回归模型输出结果并应用 Sigmoid 函数,将连续值映射为概率,从而实现对分类问题的处理。这种方法不仅简单有效,而且在二分类问题中具有广泛的应用。

二、Sigmoid函数与损失函数

2.1 Sigmoid函数

Sigmoid 函数是一种常用于分类模型中的激活函数,其定义上一小节有写。通常,分类问题有两种结果:一种是“是”,另一种是“否”。我们可以将 0 0 0 对应于“否”, 1 1 1 对应于“是”。

在这里插入图片描述

既然输出是 [ 0 , 1 ] [0, 1] [0,1] 的连续区间,为什么结果只有 0 0 0 1 1 1?这里我们引入一个阈值(通常设为 0.5 0.5 0.5)。当输出的概率大于 0.5 0.5 0.5 时,我们将其归为正类(即 1 1 1 类);当输出的概率小于 0.5 0.5 0.5 时,我们将其归为负类(即 0 0 0 类)。当然,这个阈值可以根据具体问题的需要自行设定。

接下来,我们将线性模型 a X + b \mathbf{aX + b} aX+b 代入 Sigmoid 函数中,就得到了逻辑回归的一般模型方程:
H ( a , b ) = 1 1 + e − ( a X + b ) \mathbf{H(a, b)} = \frac{1}{1 + e^{-(\mathbf{aX + b})}} H(a,b)=1+e(aX+b)1
其中, H ( a , b ) \mathbf{H(a, b)} H(a,b) 表示样本属于正类的概率。当该概率大于 0.5 0.5 0.5 时,我们将其判定为正类;当该概率小于 0.5 0.5 0.5 时,我们将其判定为负类。这样,逻辑回归通过将线性回归模型的输出映射到 [ 0 , 1 ] [0, 1] [0,1] 区间,从而实现分类的目的。

2.2 损失函数

逻辑回归的损失函数称为对数损失函数(log loss),也被称为对数似然损失函数(log-likelihood loss)。其具体形式如下:
Cost ( h θ ( x ) , y ) = { − log ⁡ ( h θ ( x ) ) if  y = 1 − log ⁡ ( 1 − h θ ( x ) ) if  y = 0 \text{Cost}(\mathbf{h_{\theta}(x)}, y) = \begin{cases} -\log(\mathbf{h_{\theta}(x)}) & \text{if } y = 1 \\ -\log(1 - \mathbf{h_{\theta}(x)}) & \text{if } y = 0 \end{cases} Cost(hθ(x),y)={log(hθ(x))log(1hθ(x))if y=1if y=0
在这个公式中, y = 1 y = 1 y=1 时使用第一个表达式,而 y = 0 y = 0 y=0 时使用第二个表达式。这是因为我们希望当模型预测接近真实值时,损失较小;反之,预测偏离真实值时,损失较大。

引入对数函数的原因在于其独特的性质:当真实值为 1 1 1 而模型预测概率 h \mathbf{h} h 接近 0 0 0 时, − log ⁡ ( h ) -\log(\mathbf{h}) log(h) 会趋向于无穷大,表示极大的惩罚。同样地,当真实值为 0 0 0 而模型预测概率 h \mathbf{h} h 接近 1 1 1 时, − log ⁡ ( 1 − h ) -\log(1 - \mathbf{h}) log(1h) 也会趋向于无穷大。因此,对数函数能够有效地对错误的预测进行严厉的惩罚,而对准确的预测则几乎没有惩罚。

通过使用梯度下降等优化算法,我们可以最小化损失函数,找到使损失函数达到最小值的参数,从而训练出最佳的逻辑回归模型。

三、多分类逻辑回归与优化方法

3.1 多分类逻辑回归

逻辑回归可以通过一种称为“一对多”(one-vs-rest)的策略来处理多分类问题。具体步骤如下:

  1. 首先,将某个类别视为正类,而将其他所有类别视为负类,然后训练一个逻辑回归模型来计算样本属于该类别的概率 p 1 \mathbf{p1} p1
  2. 接下来,将另一个类别(如 class2)视为正类,而将其他所有类别视为负类,训练另一个逻辑回归模型来计算样本属于该类别的概率 p 2 \mathbf{p2} p2
  3. 重复上述过程,对每一个类别都进行类似处理,计算样本属于每个类别的概率 p i \mathbf{p_i} pi

最终,我们将所有类别的概率进行比较,选择概率最大的那个类别作为最终预测结果。

通过这种方法,我们可以将多分类问题转化为多个二分类问题,并通过选择概率最大的类别来完成多分类任务。

3.2 优化方法

逻辑回归的优化方法包括一阶方法和二阶方法:

  • 一阶方法
    • 梯度下降:通过计算损失函数的梯度,并根据梯度更新参数。梯度下降的速度较慢,但简单易用。
    • 随机梯度下降(SGD):每次迭代只使用一个样本更新参数,速度更快,适用于大规模数据。
    • Mini-batch随机梯度下降:对数据进行小批量处理,结合了全量梯度下降和SGD的优点,提高计算效率。
  • 二阶方法
    • 牛顿法:通过二阶泰勒展开来更新参数,收敛速度较快,但计算Hessian矩阵的复杂度较高,且可能无法保证函数值稳定下降。
    • 拟牛顿法:不直接计算Hessian矩阵,而是构造其近似矩阵。常用的拟牛顿法包括DFP法(逼近Hessian的逆)、BFGS法(直接逼近Hessian矩阵)、L-BFGS法(减少存储空间需求)。

四、特征离散化

在逻辑回归中,特征离散化可以带来以下好处:

  1. 引入非线性:将连续特征离散化后,可以捕捉到非线性特征,提高模型的表达能力。
  2. 计算速度快:稀疏向量的内积运算速度较快,计算结果也便于存储和扩展。
  3. 鲁棒性强:离散化后的特征对异常数据具有较强的鲁棒性,减少了异常值对模型的影响。
  4. 特征组合:离散化后可以进行特征交叉,增加模型的复杂度和表达能力。
  5. 模型稳定性:离散化后,模型对特征的微小变化更为稳定,避免了极端值对模型的干扰。
  6. 简化模型:特征离散化有助于简化模型,降低过拟合的风险。

参考:

  • Logistics Regression
  • Sigmoid函数

在这里插入图片描述

相关文章:

【机器学习】逻辑回归的原理、应用与扩展

文章目录 一、逻辑回归概述二、Sigmoid函数与损失函数2.1 Sigmoid函数2.2 损失函数 三、多分类逻辑回归与优化方法3.1 多分类逻辑回归3.2 优化方法 四、特征离散化 一、逻辑回归概述 逻辑回归是一种常用于分类问题的算法。大家熟悉的线性回归一般形式为 Y a X b \mathbf{Y}…...

Ubuntu22.04系统装好后左上角下划线闪烁不开机(N卡)

折腾了半天以为是ubuntu的系统和硬件不匹配, 最后发现的确有点关系, 就是显卡驱动的问题 解决办法: 1. 进入到safty模式下, 然后配好网络环境 2. 移除所有的驱动相关的包, sudo apt-get remove --purge nvidia* 3.…...

Leetcode刷题4--- 寻找两个正序数组的中位数 Python

目录 题目及分析方法一:直接合并后排序方法二:二分查找法 题目及分析 (力扣序号4:[寻找两个正序数组的中位数](https://leetcode.cn/problems/median-of-two-sorted-arrays/description/) 给定两个大小分别为 m 和 n …...

springBoot(若依)集成camunda

1、下图为项目结构 2、最外层 pom引入依赖 <properties><!--camunda 标明版本&#xff0c;注意要个自己的Spring 版本匹配&#xff0c;匹配关系自行查询官网--><camunda.version>7.18.0</camunda.version> </properties> 3、common模块引入依赖 …...

【微信小程序知识点】自定义构建npm

在实际开发中&#xff0c;随着项目的功能越来越多&#xff0c;项目越来越复杂&#xff0c;文件目录也变得很繁琐&#xff0c;为了方便进行项目的开发&#xff0c;开发人员通常会对目录结构进行优化调整&#xff0c;例如&#xff1a;将小程序源码放到miniprogram目录下。 &…...

JCR一区 | Matlab实现GAF-PCNN-MATT、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断

JJCR一区 | Matlab实现GAF-PCNN-MATT、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断 目录 JJCR一区 | Matlab实现GAF-PCNN-MATT、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断分类效果格拉姆矩阵图GAF-PCNN-MATTGASF-CNNGADF-CNN 基本介绍程序设计参考资料 分…...

新手教学系列——高效管理MongoDB数据:批量插入与更新的实战技巧

前言 在日常开发中,MongoDB作为一种灵活高效的NoSQL数据库,深受开发者喜爱。然而,如何高效地进行数据的批量插入和更新,却常常让人头疼。今天,我们将一起探讨如何使用MongoDB的bulk_write方法,简化我们的数据管理流程,让代码更加简洁高效。 常规做法:find、insertone…...

C# Winform 自定义事件实战

在C#的WinForms中&#xff0c;自定义事件是一种强大的工具&#xff0c;它允许你创建自己的事件&#xff0c;从而在特定条件下通知订阅者。自定义事件通常用于封装业务逻辑&#xff0c;使代码更加模块化和易于维护。下面我将通过一个实战例子来展示如何在WinForms中创建和使用自…...

Python通过继承实现多线程

本套课在线学习视频&#xff08;网盘地址&#xff0c;保存到网盘即可免费观看&#xff09;&#xff1a; ​​https://pan.quark.cn/s/677661ea63b3​​ 本节将介绍如何利用Python中的thread模块和threading模块实现多线程&#xff0c;并通过继承threading.Thread类并重写run方…...

记一次项目经历

一、项目需求 1、设备四个工位&#xff0c;每个工位需要测试产品的电参数&#xff1b; 2、每个另外加四个位置温度&#xff1b; 3、显示4个通道电流曲线&#xff0c;16个通道温度曲线&#xff1b; 4、可切换工艺参数&#xff1b; 5、常规判定&#xff0c;测试数据保存到表格内&…...

Elasticsearch 8 支持别名查询

在 Elasticsearch 8 中&#xff0c;使用 Java 高级 REST 客户端进行别名管理的过程与之前的版本类似&#xff0c;但有一些API细节上的变化。以下是如何使用 Java 和 Elasticsearch 8 进行别名操作的例子&#xff1a; 引入依赖 确保你的项目中包含了 Elasticsearch 的高级 RES…...

【Spring Cloud】 使用Eureka实现服务注册与服务发现

文章目录 &#x1f343;前言&#x1f38d;解决方案&#x1f6a9;关于注册中⼼&#x1f6a9;CAP理论&#x1f6a9;常见的注册中心 &#x1f384;Eureka&#x1f6a9;搭建 Eureka Server&#x1f388;创建Eureka-server ⼦模块&#x1f388;引入依赖&#x1f388;项目构建插件&am…...

JDK安装详细教程(以JDK17为例)

一、JDK的下载 1. 前往oracle官网下载JDK Java Archive Downloads - Java SE 17 在这里选择对应的JDK版本&#xff0c;我这里就直接选择JDK17的版本了。 然后下载对应的软件包&#xff0c;我这里采用的是Windows的安装程序。 点击上述圈起来的链接即可下载安装包&#xff0c;…...

安装nodejs | npm报错

nodejs安装步骤: 官网&#xff1a;https://nodejs.org/en/ 在官网下载nodejs: 双击下载下来的msi安装包&#xff0c;一直点next&#xff0c;我选的安装目录是默认的: 测试是否安装成功&#xff1a; 输入cmd打开命令提示符&#xff0c;输入node -v可以看到版本&#xff0c;说…...

聊点基础---Java和.NET开发技术异同全方位分析

1. C#语言基础 1.1 C#语法概览 欢迎来到C#的世界&#xff01;对于刚从Java转过来的开发者来说&#xff0c;你会发现C#和Java有很多相似之处&#xff0c;但C#也有其独特的魅力和强大之处。让我们一起来探索C#的基本语法&#xff0c;并比较一下与Java的异同。 程序结构 C#程序…...

【C++】C++中SDKDDKVer.h和WinSDKVer.h函数库详解

目录 一.SDKDDKVer.h介绍 二.WinSDKVer.h介绍 三.WinSDKVer.h 和 SDKDDKVer.h 的区别 一.SDKDDKVer.h介绍 SDKDDKVer.h 是一个在 Windows 软件开发中常见的头文件&#xff0c;它用于定义软件开发工具包&#xff08;SDK&#xff09;和驱动开发工具包&#xff08;DDK&…...

uni-app 蓝牙传输

https://www.cnblogs.com/ckfuture/p/16450418.html https://www.cnblogs.com/yangxiaobai123/p/16021058.html 字符串转base64&#xff1a;https://www.cnblogs.com/sunny3158/p/17312158.html 将 ArrayBuffer 对象转成 Base64 字符串&#xff1a;基础 - uni.arrayBufferT…...

MBR10200CT-ASEMI智能AI应用MBR10200CT

编辑&#xff1a;ll MBR10200CT-ASEMI智能AI应用MBR10200CT 型号&#xff1a;MBR10200CT 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220 批号&#xff1a;最新 恢复时间&#xff1a;35ns 最大平均正向电流&#xff08;IF&#xff09;&#xff1a;10A 最大循环峰值反向…...

力扣 爬楼梯

动态规划算法基础篇。 class Solution {public int climbStairs(int n) {int[] f new int[n 1];f[0] 1;f[1] 1;//当爬到n阶楼梯时&#xff0c;可知是由n-1阶或n-2阶楼梯而来for(int i 2; i < n; i) {f[i] f[i - 1] f[i - 2];//后面的每一阶种数由前两个状态得到}ret…...

java设计模式之:策略模式+工厂模式整合案例实战(一)

本文介绍项目中常用的策略模式工厂模式的案例&#xff0c;该案例是针对策略类比较少的情况&#xff1b;下一篇会讲解策略类比较多的案例&#xff0c;下面直接开始&#xff1a; 案例1&#xff1a;项目中对系统中的客户和销售进行事件通知(短信、邮件、钉钉) 首先要有通知的策略…...

国内Ubuntu安装 stable-diffusion教程,换成国内镜像

安装依赖&#xff1a; 首先更新系统并安装Python 3.10和pip&#xff1a; sudo apt update sudo apt install python3.10 python3-pip 设置Python虚拟环境&#xff08;可选&#xff09;&#xff1a; 安装Python虚拟环境管理工具&#xff0c;并创建激活虚拟环境&#xff1a; su…...

JAVA final详细介绍

一、介绍 final 中文意思: 最后的,最终的. final 可以修饰类、属性、方法和局部变量, 在某些情况下,程序员可能有以下需求&#xff0c;就会使用到final&#xff1a; 1&#xff09;当不希望类被继承时,可以用final修饰。 //如果我们要求A类不能被其他类继承 //可以使用fin…...

45、tomcat+课后实验

tomcat 1、tomcat tomcat和php一样&#xff0c;都是用来处理动态页面的。 tomcat也可以作为web应用服务器&#xff0c;开源的。 php .php tomcat .jsp nginx .html tomcat 是用Java代码写的程序&#xff0c;运行的是Java的web应用程序。 tomcat的特点和功能&#xff1a…...

设计模式的七大原则

1.单一职责原则 单一职责原则(Single responsibility principle)&#xff0c;即一个类应该只负责一项职责。如类A负责两个不同职责&#xff1a;职责1&#xff0c;职责2。当职责1需求变更而改变A时&#xff0c;可能造成职责2执行错误&#xff0c;所以需要将类A的粒度分解为A1、…...

ThreeJS-3D教学十五:ShaderMaterial(noise、random)

ThreeJS-3D教学十四:ShaderMaterial(length、fract、step) 上面这篇主要是操作 fragmentShader 片元着色器,实现对物体颜色的修改,这次咱们来看下修改 vertexShader 顶点着色器,这个其实就是位移各个顶点的位置。 接下来我们先介绍下 noise 噪声函数(Perlin Noise、Sim…...

LeetCode 2974.最小数字游戏:排序+交换奇偶位

【LetMeFly】2974.最小数字游戏&#xff1a;排序交换奇偶位 力扣题目链接&#xff1a;https://leetcode.cn/problems/minimum-number-game/ 你有一个下标从 0 开始、长度为 偶数 的整数数组 nums &#xff0c;同时还有一个空数组 arr 。Alice 和 Bob 决定玩一个游戏&#xff…...

使用vllIm部署大语言模型

使用vllm部署大语言模型一般需要以下步骤&#xff1a; 一、准备工作 1. 系统要求 - 操作系统&#xff1a;常见的 Linux 发行版&#xff08;如 Ubuntu、CentOS&#xff09;或 Windows&#xff08;通过 WSL&#xff09;。 - GPU 支持&#xff1a;NVIDIA GPU 并安装了适当的驱动程…...

静态搜索iOS动态链接函数的调用位置

静态搜索iOS动态链接函数的调用位置 可执行文件格式mach-O,是在苹果的操作系统 macOS 和 iOS 上使用的一种二进制文件格式。 在一些iOS安全扫描中&#xff0c;可能存在需要获取函数具体调用位置的需求&#xff0c;能指导用户更精确的定位漏洞。 现在以NSLog函数为例&#xff…...

【鸿蒙学习笔记】尺寸设置・layoutWeight・对子组件进行重新布局

官方文档&#xff1a;尺寸设置 目录标题 layoutWeight&#xff1a;对子组件进行重新布局 layoutWeight&#xff1a;对子组件进行重新布局 设置了layoutWeight属性的子元素与兄弟元素占主轴尺寸按照权重进行分配&#xff0c;忽略元素本身尺寸设置。 // 引入包名 import { http…...

vue实现表单输入框数字类型校验功能

vue实现表单输入框数字类型校验功能 1. 样式代码 <el-form-item label"订单总价"><el-input size"small" v-model"form.totalPrice" placeholder"请输入订单总价 正整数或者2位数小数" input"check(form.totalPric…...

佛山正规网站建设哪家好/北大青鸟培训机构官网

IC卡解密工具 PN532工具XP 爆破版 By:lookyour 传送门 //2017/4/25 IC卡解密从零开始学1 (也许会有2) 解密工具V2 V3大放送http://www.52pojie.cn/thread-602693-1-1.htmlIC卡解密从零开始学2 解密工具PN532-mfoc-mfcuk-GUIhttp://www.52pojie.cn/thread-604402-1-1.html//当了…...

中和阗盛工程建设有限公司网站/企业网站制作多少钱

Kubernets 中的Node, Pod&#xff0c;Replication Controller, Service 等都可以看作一种资源对象&#xff0c;这些资源几乎都可以通过使用Kubernetes提供的kubectl 工具执行增删改查&#xff0c;并将其保存在etcd中持久化储存。通过跟踪对比etcd库中保存的“资源预设状态”与当…...

app开发公司杭州/网络舆情优化公司

经常有人问我有关“大数据”的问题&#xff0c;而且多半情况下我们似乎是在各种不同的抽象和理解级别进行交谈。实时 和高级分析 之类的词语频频现身&#xff0c;并且我们总是立即开始谈论产品&#xff0c;这通常并不是一个好主意。 希望将类似本文的技术文章发送到您的收件箱吗…...

个人房产查询系统网站官网/百度收录提交网站后多久收录

因为要讲座&#xff0c;随便写一下&#xff0c;等讲完有时间好好写一篇splay的博客。 先直接上题目然后贴代码&#xff0c;具体讲解都写代码里了。 参考的博客等的链接都贴代码里了&#xff0c;有空再好好写。 P2042 [NOI2005]维护数列 题目描述 请写一个程序&#xff0c;要求维…...

白银网站建设白银/线下营销方式主要有哪些

当FCoE应用于存储网络时&#xff0c;它的采用速度并没有想象中那么快。但是&#xff0c;用户最终克服了当时的障碍&#xff0c;使得FCoE被广泛采用。 是否该考虑在存储网络中使用以太网光纤通道(FCoE)? James Damoulakis&#xff1a;几年前&#xff0c;当FCoE应用于存储网络时…...

网站建设 长春/google推广 的效果

Python3.x 1 数据类型 1.0 标准数据类型 Python3.x标准数据类型有6中,如下: 序号数据类型描述1数字Number2字符串String3列表List4元组Tuple5字典Dictionary6集合Set 1.2 数字(Number) 数字包括整数,浮点数,布尔数据和复数四种,python3.x中将True和False定义成关键字,表示…...