【机器学习】Logistic回归#1基于Scikit-Learn的简单Logistic回归

主要参考学习资料:

《机器学习算法的数学解析与Python实现》莫凡 著

前置知识:线性代数-Python

目录

  • 问题背景
  • 数学模型
    • 类别表示
    • Logistic函数
    • 假设函数
    • 损失函数
    • 训练步骤
  • 代码实现
  • 特点

问题背景

分类问题是一类预测非连续(离散)值的问题,即预先设定类别,向模型输入带有类别信息的训练集样本,最后进行预测。

待分类别只有两个的分类问题为二元分类问题,超过两个为多分类问题

多分类问题可以拆解为多次关于正类(是)和负类(否)的二元逻辑分类问题,形成数据结构中的二叉搜索树来解决。

数学模型

类别表示

用数值表示类别的形式有三种:

①数字形式:最直接,例如0为A类,1为B类,2为C类,本文从该形式入门。

②向量形式:广泛应用于深度学习,n元分类使用n个线性无关的n维向量来表示,例如[1,0,0]为A类,[0,1,0]为B类,[0,0,1]为C类。

③概率值形式:预测结果为每个类的可能概率,例如向量[0.114,0.514,0.810]的每个元素分别代表A、B、C三类的概率。

Logistic函数

离散数据往往与阶跃特征紧密联系,一个最基本的阶跃函数如下:

u ( t ) = { 0 , t < 0 1 , t > 0 u(t)=\left\{\begin{matrix}0,t<0\\1,t>0\end{matrix}\right. u(t)={0,t<01,t>0

请

该函数的输出非0即1,符合二元分类问题的背景,但阶跃函数的不可导为机器学习的优化算法带来问题。

Logistic函数是一种Sigmoid函数(S型函数),作为扮演类似阶跃函数角色的可导函数,其表达式为:

L o g i s t i c ( z ) = 1 1 − e − z \mathrm{Logistic}(z)=\displaystyle\frac1{1-e^{-z}} Logistic(z)=1ez1

其图像为:

可见横坐标尺度越大,图像越近似于阶跃函数。

假设函数

利用Logistic函数将线性模型预测的连续值映射到分类问题所需的非连续值,得到假设函数:

H ( x ) = 1 1 + e − ( w T x i + b ) H(x)=\displaystyle\frac1{1+e^{-(\boldsymbol w^Tx_i+b)}} H(x)=1+e(wTxi+b)1

损失函数

Logistic回归的损失函数为对数损失函数/交叉熵损失函数

L ( x ) = − y log ⁡ y ^ − ( 1 − y ) log ⁡ ( 1 − y ^ ) L(x)=-y\log \hat y-(1-y)\log(1-\hat y) L(x)=ylogy^(1y)log(1y^)

从分类的两种情况来理解它:

若真实值为1,则预测值趋于1时损失值趋于0;

若真实值为0,则预测值趋于0时损失值趋于0;

训练步骤

Logistic回归算法的训练步骤与线性回归算法类似,只不过输出从连续变成了离散。

代码实现

#导入LogisticRegression类
from sklearn.linear_model import LogisticRegression  
#导入鸢尾花分类数据集
from sklearn.datasets import load_iris  
import numpy as np  
import matplotlib.pyplot as plt  
#载入鸢尾花数据集
iris = load_iris()  
#选择前两个特征作为输入(方便可视化)
X = iris.data[:, :2]
#提取分类标签
y = iris.target  
#训练Logistic回归模型
clf = LogisticRegression().fit(X, y)  
#用于可视化的函数
def plot_decision_boundary(X, y, model):  #根据两个特征的最值确定坐标边界x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1  y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1  #meshgrid方法生成分别以两个列表为横、纵坐标二维网格#二维数组xx和yy分别为网格各点的横、纵坐标矩阵xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01), np.arange(y_min, y_max, 0.01))  #ravel方法将坐标矩阵展开到一维#c_方法按列连接矩阵,即将横、纵坐标一一组合#用模型遍历所有坐标得到各点预测值Z = model.predict(np.c_[xx.ravel(), yy.ravel()])  #将预测值调整为xx的形状Z = Z.reshape(xx.shape)  #contourf方法绘制等高线,横纵坐标xx和yy,高度Zplt.contourf(xx, yy, Z, alpha=0.8, cmap=plt.cm.coolwarm)  #绘制训练数据的散点图plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o', cmap=plt.cm.coolwarm) #绘制轴标签和标题 plt.xlabel('Feature 1')  plt.ylabel('Feature 2')  plt.title('Logistic Regression Decision Boundary')  plt.show()  
plot_decision_boundary(X, y, clf)

运行结果:

可见模型对鸢尾花数据集中蓝色数据点分类较为准确,而浅色和红色效果较差,这是因为数据点在选取的两个特征维度下线性不可分。

可以通过 model.score(X,y) \texttt{model.score(X,y)} model.score(X,y)对模型进行性能评估。

特点

优点:形式简单,可解释性强,容易理解和实现,计算代价较低。

缺点:效果有时不好,容易欠拟合。

应用领域:二分类领域,或作为其他算法的部件,例如神经网络算法的激活函数。

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

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

相关文章

频域分析:利用傅里叶变换(Fourier Transform)对图像进行深度解析

在图像处理和计算机视觉领域&#xff0c;傅里叶变换&#xff08;Fourier Transform&#xff09;是一项基础而强大的工具。它将时域信号&#xff08;如图像&#xff09;转化为频域信号&#xff0c;为我们提供了图像的频率特性&#xff0c;这对于图像的分析、压缩、去噪和特征提取…

WPF+WebView 基础

1、基于.NET8&#xff0c;通过NuGet添加Microsoft.Web.WebView2。 2、MainWindow.xaml代码如下。 <Window x:Class"Demo.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/win…

Python----数据分析(Matplotlib二:绘图一:折线图,条形图,直方图)

一、折线图 折线图是一种常用的数据可视化工具&#xff0c;它主要用于展示随时间或有序类别变化的数据趋势。 plt.plot(x, y, fmt, **kwargs) 名称描述x这个参数是数据点的 x 轴坐标&#xff0c;可以是一个列表或者数组。如果 x 没有被指 定&#xff0c;那么它默认为 range(l…

利用Adobe Acrobat 实现PPT中图片分辨率的提升

1. 下载适用于 Windows 的 64 位 Acrobat 注册方式参考&#xff1a;https://ca.whu.edu.cn/knowledge.html?type1 2. 将ppt中需要提高分辨率的图片复制粘贴到新建的pptx问价中&#xff0c;然后执行“文件—>导出---->创建PDF、XPS文档” 3. 我们会发现保存下来的distrib…

从零开始实现机器臂仿真(UR5)

1. UR5软件配置 # 安装 MoveIt! 依赖 sudo apt install ros-humble-moveit ros-humble-tf2-ros ros-humble-moveit-setup-assistant ros-humble-gazebo-ros-pkgs # 安装 UR 官方 ROS2 驱动 sudo apt update sudo apt install ros-humble-ur-robot-driver ros-humble-ur-descri…

Jupyter Notebook 入门教程

Jupyter Notebook 是一个功能强大的交互式计算环境&#xff0c;广泛应用于数据科学、机器学习和数据分析领域。它允许用户在浏览器中创建和共享包含代码、文本、数学公式、图表等的文档。本文将为您提供一份简明的 Jupyter Notebook 入门教程&#xff0c;帮助您快速上手。 1. 什…

【大模型原理与技术】1.2基于学习的语言模型

机器学习的要素&#xff1a; 训练数据 假设类 归纳偏置 学习算法 学习范式 机器学习的过程&#xff1a; 在某种学习范式下&#xff0c;基于训练数据&#xff0c;利用学习算法&#xff0c;从受归纳偏置限制的假设类中选取出可以达到学习目标的假设&#xff0c;该假设可以泛化到…

抽奖系统(从0-1)(上)

hu项目的开发流程介绍 1. 项目启动阶段 • 项⽬概述&#xff1a;介绍项⽬的背景、⽬标和预期成果。 • 团队组建&#xff1a;建跨职能团队&#xff0c;包括产品经理、UI/UX 设计师、开发⼈员、测试⼈员等。 • ⻆⾊定义&#xff1a;明确团队中各个⻆⾊的职责和⼯作内容。 2. 需…

Python第十三课:数据库交互 | 信息帝国的基石

&#x1f3af; 本节目标 理解SQL与NoSQL的核心差异掌握SQL基础语法与设计范式学会使用ORM简化数据库操作开发实战项目&#xff1a;电商订单系统掌握索引优化与事务管理 1️⃣ 数据库理论基石&#xff08;先懂原理再写代码&#xff09; &#x1f4a1; 数据库类型对比 &#…

GPU/CUDA 发展编年史:从 3D 渲染到 AI 大模型时代

目录 文章目录 目录1960s~1999&#xff1a;GPU 的诞生&#xff1a;光栅化&#xff08;Rasterization&#xff09;3D 渲染算法的硬件化实现之路学术界算法研究历程工业界产品研发历程光栅化技术原理光栅化技术的软件实现&#xff1a;OpenGL 3D 渲染管线设计1. 顶点处理&#xff…

流程设计5原则与流程执行5要点

流程设计5原则与流程执行5要点 汉捷咨询 胡红卫 企业创造价值、为客户服务是通过业务流来实现的&#xff0c;而业务流程是业务流的载体和表现形式。把业务流程设计好、执行好&#xff0c;就能够持续提升企业各项活动的质量和效率&#xff0c;确保端到端的优质交付&#xff0c…

[Python学习日记-85] 并发编程之多进程 —— Process 类、join 方法、僵尸进程与孤儿进程

[Python学习日记-85] 并发编程之多进程 —— Process 类、join 方法、僵尸进程与孤儿进程 简介 multiprocessing 模块 Process 类 僵尸进程与孤儿进程 简介 在前面的进程理论的介绍当中我们已经介绍了进程的概念、并发与并行的区别以及进程并发的实现理论&#xff0c;这些都…

Linux : 环境变量

目录 一 环境变量 1.基本概念 二 常见环境变量 三 查看环境变量的方法 1.env:查看系统中所有环境变量 2. echo $NAME 四 如何不带路径也能运行的自己的程序 1.将自己的程序直接添加到PATH指定的路径下 五 环境变量与本地变量 1.本地变量 2. 环境变量 六C、C中main()…

【YashanDB认证】yashandb23.3.1 个人版单机部署安装实践

YCA报名链接如下: YashanDB|崖山数据库系统YashanDB学习中心-YCA认证详情 目前免费 主要参考文档&#xff1a; 单机&#xff08;主备&#xff09;部署 | YashanDB Doc 另外还参考摩天轮文章&#xff1a; YashanDB 23.2.9.101 企业版安装步骤抢先看&#xff01; - 墨天轮 …

Stiring-PDF:开源免费的PDF文件处理软件

Stiring-PDF是一款开源免费且比较好用的PDF文件处理工具。 Stiring-PDF官网网址为&#xff1a;https://www.stiringpdf.com/。Stiring-PDF是一款专业的PDF文件处理工具&#xff0c;支持Windows和macOS操作系统&#xff1b;提供丰富的PDF编辑和转换功能&#xff0c;适用于日常工…

docker-compose安装anythingLLM

1、anythingLLM的docker-compose文件 version: 3.8 services:anythingllm:image: mintplexlabs/anythingllm:latestcontainer_name: anythingllmports:- "23001:3001"cap_add:- SYS_ADMINenvironment:# Adjust for your environment- STORAGE_DIR/app/server/storage…

maven推送jar包到nexus

1.背景2.推送jar包到nexus3.从nexus拉取jar包4.release和snapshot区别 1.背景 本地虚拟机centos7.9(110.110.110.100)安装好了nexus 下面演示把本地的maven项目打包推送到nexus。 2.推送jar包到nexus 我项目的命名如下: 下面演示把这个项目jar包推送到nexus仓库 <groupI…

微信小程序上如何使用图形验证码

1、php服务器生成图片验证码的代码片段如下&#xff1a; 注意红框部分的代码&#xff0c;生成的是ArrayBuffer类型的二进制图片 2、显示验证码 显示验证码&#xff0c;不要直接image组件加上src显示&#xff0c;那样拿不到cookie&#xff0c;没有办法做图形验证码的验证&…

comfyui使用ComfyUI-AnimateDiff-Evolved, ComfyUI-Advanced-ControlNet节点报错解决

comfyui使用animate-diff生成动画&#xff0c;各种报错解决 报错1&#xff1a; ‘cond_obj’ object has no attribute ‘hooks’ 报错2&#xff1a; AdvancedControlBase.get_control_inject() takes 5 positional arguments but 6 were given 报错3&#xff1a; ‘ControlN…

centos搭建 Node.js 开发环境

Node.js &#xff0c;通常简称为Node&#xff0c;是一个事件驱动 I/O 服务端 JavaScript 环境&#xff0c;基于 Chrome V8引擎&#xff0c;具备速度快、性能强等特点&#xff0c;可用于搭建各类网络应用&#xff0c;及作为小程序后端服务环境。npm 和 npx 都是和 Node.js 相关的…