Logistic Regression 逻辑斯蒂回归

article/2025/10/14 2:25:28

文章目录

    • 5、Logistic Regression 逻辑斯蒂回归
      • 5.1 回归任务
        • 5.1.1 MNIST Dataset
        • 5.1.2 CIFAR-10 Dataset
      • 5.2 Regression vs Classification 回归 vs 分类
      • 5.3 Sigmoid functions
        • 5.3.1 Logistic Function [0, 1]
        • 5.3.2 Other Functions [-1, 1]
      • 5.4 Model 模型
        • 5.5.1 torch.sigmoid()、torch.nn.Sigmoid()、torch.nn.functional.sigmoid()
      • 5.5 Loss Function 损失函数
      • 5.6 Implementation 实施
        • 5.6.1 Prepare Dataset 准备数据集
        • 5.6.2 Design Model 设计模型
        • 5.6.3 Construct Loss and Optimizer 构造损失和优化器
        • 5.6.4 Training Cycle 训练周期
        • 5.6.5 Test Model 测试模型
        • 5.6.6 绘图
        • 5.6.7 完整代码

5、Logistic Regression 逻辑斯蒂回归

B站视频教程传送门:PyTorch深度学习实践 - 逻辑斯蒂回归

5.1 回归任务

在开始学习逻辑斯蒂回归之前,我们先简单复习一下之前学过的线性回归

并且我们使用的数据集也非常的简单:

当我们使用复杂的数据集时,比如 MNIST Dataset 或 CIFAR-10 dataset,就涉及到了分类的问题。

5.1.1 MNIST Dataset

这是一个手写数字的数据库,来源于 MNIST Dataset:

  • 训练集:60000个样本
  • 测试集:10000个样本
  • 类:10(0,1,2,…,9)

可通过以下方式进行下载并使用:

import torchvision
train_set = torchvision.datasets.MNIST(root='../dataset/mnist', train=True, download=True)
test_set = torchvision.datasets.MNIST(root='../dataset/mnist', train=False, download=True

5.1.2 CIFAR-10 Dataset

这是一个各种图像的数据库,来源于 CIFAR-10 Dataset:

  • 训练集:50000个样本
  • 测试集:10000个样本
  • 类:10(airplane,automobile,bird,…)

可通过以下方式进行下载并使用:

import torchvision
train_set = torchvision.datasets.CIFAR10(root='../dataset/cifar10', train=True, download=True)
test_set = torchvision.datasets.CIFAR10(root='../dataset/cifar10', train=False, download=True

5.2 Regression vs Classification 回归 vs 分类

回归: y ∈ R 连续的空间

逻辑斯蒂回归: 主要是做分类的,估算 y 属于哪一个类别,不是让 y 等于某一个特定值(因为类别无法进行比较),而是估算其属于每个分类的概率,概率较大的则是分类的结果。

二分类: 只有两个类别的分类问题,且 P(y = 1) + P(y = 0) = 1

想计算概率属于[0, 1],而不是实数,可以使用 sigmod() 函数将实数空间映射到[0, 1]之间。

5.3 Sigmoid functions

5.3.1 Logistic Function [0, 1]

维基百科 - Logistic Function:https://en.wikipedia.org/wiki/Logistic_function

5.3.2 Other Functions [-1, 1]

5.4 Model 模型

Linear Model:

class LinearModel(torch.nn.Module):def __init__(self):super(LinearModel, self).__init__()self.linear = torch.nn.Linear(1, 1)def forward(self, x):y_pred = self.linear(x)return y_pred

Logistic Regression Model:

class LogisticRegressionModel(torch.nn.Module):def __init__(self):super(LogisticRegressionModel, self).__init__()self.linear = torch.nn.Linear(1, 1)def forward(self, x):y_pred = F.sigmoid(self.linear(x)) # 注意:使用F.sigmoid()会报错,可替换为torch.sigmoid()return y_pred

5.5.1 torch.sigmoid()、torch.nn.Sigmoid()、torch.nn.functional.sigmoid()

当导入 torch.nn.functional as F 并使用 F.sigmoid() ,会报错 UserWarning: nn.functional.sigmoid is deprecated. Use torch.sigmoid instead.。表明 nn.functional.sigmoid 已经被弃用,如果需要可以使用 torch.sigmoid

我们来看一下3种 sigmoid() 函数的区别:

1、torch.sigmoid() 函数

2、torch.nn.Sigmoid() 类

3、torch.nn.functional.sigmoid() 函数

5.5 Loss Function 损失函数

Loss function for (Linear Regression - Binary Classification) 如下图所示:

Mini-Batch Loss function for Binary Classification 如下图所示:

# 1、Linear Model 线性模型
criterion = torch.nn.MSELoss(reduction='sum')#2、Logistic Regression Model 逻辑斯蒂回归模型
criterion = torch.nn.BCELoss(reduction='sum')

注意1、在函数 MSELossBCELoss 中,参数 size_averagereduce 均已被弃用:

注意2、MSELossBCELoss 的区别:

  • MSELoss: Mean Squared Error Loss 均方误差损失

  • BCELoss: Binary Cross Entropy Loss 二元交叉熵损失

5.6 Implementation 实施

在具体代码实现之前,我们需要导入所需要的包:

import torch
import numpy as np
import matplotlib.pyplot as plt
from torch import nn

5.6.1 Prepare Dataset 准备数据集

x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[0], [0], [1]])

5.6.2 Design Model 设计模型

class Liang(nn.Module):def __init__(self):super(Liang, self).__init__()self.linear = nn.Linear(1, 1)def forward(self, x):y_pred = torch.sigmoid(self.linear(x))return y_predmodel = Liang()

5.6.3 Construct Loss and Optimizer 构造损失和优化器

criterion = torch.nn.BCELoss(reduction='sum')
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

5.6.4 Training Cycle 训练周期

for epoch in range(1000):y_pred = model(x_data)loss = criterion(y_pred, y_data)print(epoch, loss.item())optimizer.zero_grad()loss.backward()optimizer.step()

5.6.5 Test Model 测试模型

# Output weight and bias
print('w = ', model.linear.weight.item())
print('b = ', model.linear.bias.item())# Test
x_test = torch.Tensor([[4.0]])
y_test = model(x_test)
print('y_pred = ', y_test.item())

5.6.6 绘图

x = np.linspace(0, 10, 200)  # 返回0~10等间距的200个数
x_t = torch.Tensor(x).view((200, 1))  # 200行1列的Tensor
y_t = model(x_t)
y = y_t.data.numpy()  # 将torch.Tensor转换为numpy.ndarrayplt.plot(x, y)
plt.plot([0, 10], [0.5, 0.5], color='red')  # 画线,x取0~10,y取0.5
plt.xlabel('Hours')
plt.ylabel('Probability of Pass')
plt.grid()  # 显示网格线(1或True 默认显示;0或False 不显示)
plt.show()

5.6.7 完整代码

import torch
import numpy as np
import matplotlib.pyplot as plt
from torch import nn# Prepare dataset
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[0], [0], [1]])# Design model
class Liang(nn.Module):def __init__(self):super(Liang, self).__init__()self.linear = nn.Linear(1, 1)def forward(self, x):y_pred = torch.sigmoid(self.linear(x))return y_predmodel = Liang()# Construct loss and optimizer
criterion = torch.nn.BCELoss(reduction='sum')
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)# Training cycle
for epoch in range(1000):y_pred = model(x_data)loss = criterion(y_pred, y_data)print(epoch, loss.item())optimizer.zero_grad()loss.backward()optimizer.step()# Output weight and bias
print('w = ', model.linear.weight.item())
print('b = ', model.linear.bias.item())# Test Model
x_test = torch.Tensor([[4.0]])
y_test = model(x_test)
print('y_pred = ', y_test.item())# Result
x = np.linspace(0, 10, 200)  # 返回0~10等间距的200个数
x_t = torch.Tensor(x).view((200, 1))  # 200行1列的Tensor
y_t = model(x_t)
y = y_t.data.numpy()  # 将torch.Tensor转换为numpy.ndarrayplt.plot(x, y)
plt.plot([0, 10], [0.5, 0.5], color='red')  # 画线,x取0~10,y取0.5
plt.xlabel('Hours')
plt.ylabel('Probability of Pass')
plt.grid()  # 显示网格线(1或True 默认显示;0或False 不显示)
plt.show()
0 2.7373640537261963
1 2.693269729614258
2 2.651460647583008
...
995 1.0572519302368164
996 1.0567638874053955
997 1.0562764406204224
998 1.055789589881897
999 1.0553032159805298
w =  1.1830791234970093
b =  -2.858741283416748
y_pred =  0.8668714165687561


http://chatgpt.dhexx.cn/article/25slnb5U.shtml

相关文章

机器学习-逻辑斯蒂回归(Logistic Regression)

注:内容转自https://github.com/NLP-LOVE/ML-NLP/tree/master/Machine%20Learning,略有修改。 目录 逻辑 1. 什么是逻辑斯蒂回归 2. 什么是Sigmoid函数 3. 损失函数是什么 4.可以进行多分类吗? 5.逻辑斯蒂回归有什么优缺点 6. 逻辑斯…

逻辑斯蒂回归

一:二元逻辑回归模型 二项逻辑斯蒂回归模型是如下的条件概率分布: 其中,Y为输出,w称为权值向量,b称为偏置。逻辑斯蒂回归比较两个条件概率值的大小,将实例x分到概率值较大的那一类。 一个事件的几率是指该…

【笔记】逻辑斯蒂回归

一、逻辑斯蒂回归概述 (1)逻辑斯蒂回归的目的:分类。 逻辑斯蒂回归常常解决分类问题,特别是二分类问题。 (2)逻辑斯蒂回归的过程:回归。 计算结果是0~1之间的连续值,代表发生的可…

逻辑斯蒂回归java_逻辑斯蒂回归模型

http://blog.csdn.net/hechenghai/article/details/46817031 主要参照统计学习方法、机器学习实战来学习。下文作为参考。 第一节中说了,logistic 回归和线性回归的区别是:线性回归是根据样本X各个维度的Xi的线性叠加(线性叠加的权重系数wi就是模型的参数…

逻辑斯蒂回归算法详解

逻辑斯蒂回归算法可用于分类问题,其本质是在线性回归的算法上用sigmoid函数进行模型变换,使得目标值介于0-1之间。本文用于对逻辑斯蒂回归算法(Logistics Regression)进行详细讲述。 逻辑斯蒂回归基本假设 我们知道线性回归的基…

【机器学习实验五】逻辑斯蒂回归

目录 一、逻辑斯蒂回归基本概念 1.1、基本概念 1.2、特点 1.3、Logistic分布 1.4、逻辑斯蒂回归模型 二、利用逻辑斯蒂模型进行分类测试 2.1、数据准备 2.2、编写代码查看数据集的分布情况 2.3、训练分类算法 2.4、绘制决策边界 三、从疝气病症状预测病马的死亡率 …

Logistic regression(逻辑斯蒂)回归分析

Logistic regression (逻辑回归)是当前业界比较常用的机器学习方法,用于估计某种事物的可能性。比如某用户购买某商品的可能性,某病人患有某种疾病的可能性,以及某广告被用户点击的可能性等。(注意这里是&a…

逻辑斯谛回归(Logistic回归)最详解

Logistic回归学习思路 一.逻辑回归模型的原理与定义(主要思想) 逻辑斯谛回归是经典的分类方法,它属于对数线性模型,原理是根据现有的数据对分类边界线建立回归公式,以此进行分类。(主要思想) …

常用服务器型号整理

转载于:https://www.cnblogs.com/quzq/p/11285548.html

查看linux cpu 内存 服务器型号 序列号 磁盘 raid信息

安装dmidecode:yum -y install dmidecode 查看cpu的型号: 查看cpu的颗数: dmidecode -t processor |grep "Version" dmidecode -t processor |grep "Socket" 查看内存最大容量: 查看内存插槽数量: 查看内存大…

浪潮官网服务器型号,浪潮服务器有哪些型号,哪位了解?

NF8520系列市场价格:¥152000-175000 浪潮英信NF8520采用全新QPI架构高速互联技术的四路服务器,支持最新英特尔至强处理器E7系列,成四个具备IOAT2VMDQ技术的高性能千兆网卡,在全面提升网络IO能力的同时,对虚…

服务器内存怎么看型号,怎么查看服务器内存的型号

怎么查看服务器内存的型号 内容精选 换一换 设备实时状态查询是检测设备在运行过程中的状态信息。用户可任选以下指令之一查看设备实时状态查询命令的可用参数。ascend-dmi -i -hascend-dmi -i --help各参数解释如表1所示。以查看芯片的详细信息为例。ascend-dmi -i -dt若推理服…

阿里云服务器型号大全及机型如何选择(建议收藏)

不同的阿里云实例规格可以提供的计算能力不同,适用于不同的业务场景和使用场景。 1、根据使用场景来选择 下图显示了阿里云ECS的部分通用计算和异构计算实例规格族及其对应的业务场景 简单来看,g6e和g6型能够满足一般的通用需求,对于比如金…

当前主流服务器型号,当前服务器的主流品牌 型号 配置

当前服务器的主流品牌 型号 配置 内容精选 换一换 Atlas 800 推理服务器(型号 3000)安装上架、服务器基础参数配置、安装操作系统等操作请参见《Atlas 800 推理服务器 用户指南(型号 3000)》,安装操作系统完成后,配置业务网口IP地址,请参见配…

系统里能看服务器型号,操作系统如何查看服务器型号

操作系统如何查看服务器型号 内容精选 换一换 硬件要求如表1所示。操作系统要求如表2所示。如果是全新安装操作系统,可选择“Minimal Install”安装方式并勾选Development Tools套件,否则很多软件包需要手动安装。 硬件要求如表1所示。操作系统要求如表2…

服务器主板型号命令,Linux通过命令查询服务器型号、主板、CPU、内存及硬盘信息...

测试环境:Dell服务器 CentOS 6.4 主要使用到的命令: dmidecode、cat、megaCli64、df 查询服务器型号: dmidecode -t 1 查询主板信息: dmidecode -t 2 查询CPU信息:查看CPU型号 cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 查看CPU物理个数 cat /proc/cpuinfo …

计算机服务器的品牌型号怎么看,戴尔服务器型号怎么看

在计算机流行的高科技时代,在使用计算机产品的时候,往往就会遇到各种各样的硬件问题以及操作系统带来的问题,如果在遇到这些问题之后自己无法处理,那么就需要报修,或者是咨询相关的官方人员,但是各位小伙伴…

华为服务器设备型号查询,查询服务器型号和操作系统

查询服务器型号和操作系统 内容精选 换一换 创建HECS时支持选择云平台提供的“公共镜像”和“市场镜像”。但不能在创建HECS时选择“私有镜像”和“共享镜像”。您可以使用云平台提供的“公共镜像”创建临时的HECS,通过“切换操作系统”功能,使用私有镜像切换临时云服务器的操…

什么命令能查看服务器的型号,查看服务器型号的命令

查看服务器型号的命令 内容精选 换一换 Linux操作系统云服务器的安全组出方向已按照元数据获取的前提条件进行配置,但是无法通过169.254.169.254获取元数据。在配置了静态IP的Linux系统云服务器中执行以下命令:# ip route| grep 169.254如果169.254.169.254路由不存在,并且1…

联想服务器型号更替,联想服务器型号对照表

型号及配置 万全T100 G10 S5800 2G/500S 万全T168 G6 S3430 一路塔式 2G/500S 万全T168 G6 S3430 2G/2*500S热插拔HR1 万全T168 G6 S3430 2G/3*500S热插拔HR5 万全T 万全T260 G3 S5506 500S热插拔HR HR1 2G/2*500S热插拔HR1 万全T260 G3 S5506 2G/146ANR4热插拔 万全T350 G7 S5…