深度学习 -- 逻辑回归 PyTorch实现逻辑回归

这篇具有很好参考价值的文章主要介绍了深度学习 -- 逻辑回归 PyTorch实现逻辑回归。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

线性回归解决的是回归问题,而逻辑回归解决的是分类问题,这两种问题的区别是前者的目标属性是连续的数值类型,而后者的目标属性是离散的标称类型。

可以将逻辑回归视为神经网络的一个神经元,因此学习逻辑回归能帮助理解神经网络的工作原理。

什么是逻辑回归?

逻辑回归是一种广义的线性回归分析模型,是监督学习的一种重要方法,主要用于二分类问题,但也可以用于多分类问题。

逻辑回归的主要思想是,对于一个二分类问题,先根据样本数据计算出每个特征的概率,然后根据这些概率计算出每个样本属于每个类别的概率,最后根据这些概率来预测测试集数据属于每个类别的概率。

逻辑回归介绍

逻辑回归的推导过程与计算方式类似于回归的过程,但实际上主要是用来解决二分类问题。 在逻辑回归中,输入数据集D被分成两个部分:一类是训练集D_train,一类是测试集D_test。在每次训练时,我们使用一部分数据来训练模型,然后使用另一部分数据来评估模型的性能。 在测试时,我们使用所有的数据来评估模型的性能。

在实际使用中,逻辑回归可以使用各种不同的损失函数来最小化训练数据集和测试数据集之间的均方误差。常见的逻辑回归损失函数包括均方误差损失函数、交叉熵损失函数、对数损失函数等。

Sigmoid函数

Sigmoid函数是一个在生物学中常见的S型函数,也称为S型生长曲线。在信息科学中,由于其单增以及反函数单增等性质,Sigmoid函数常被用作神经网络的激活函数,将变量映射到0,1之间。

在神经网络中经常使用Sigmoid函数作为激活函数,因为它能够有效的输出0-1之间的概率。

代价函数

代价函数(Cost Function)是深度学习模型中用于评估模型性能的函数,它是优化算法的目标函数。代价函数通常定义为损失函数(Loss Function)的平方,这样可以简单地通过计算损失函数值来评估模型的性能。

在深度学习中,代价函数通常是指均方误差(MSE)损失函数,因为均方误差是深度学习中最常用的损失函数之一。均方误差损失函数定义为:

J(y_true, y_pred) = 1/N - ∑i=1N(yi - y_i)^2

其中,y_true是真实标签,y_pred是模型预测的标签,N是样本数量,yi是真实标签对应的样本值。

代价函数的作用是评估模型的性能,其中J(y_true, y_pred)表示真实标签和模型预测标签之间的均方误差。优化算法会在代价函数上进行最小化操作,以最小化损失函数值。

除了均方误差损失函数,还有其他类型的损失函数,如交叉熵损失函数、对数损失函数等,它们在不同的场景下可能更有效或更适合。

逻辑回归在PyTorch中的实现

1 从头开始实现一个逻辑回归

  • 首先定义一个逻辑回归模型
import torch


def sigmoid(z):
    '''s型激活函数'''
    g = 1 / (1+torch.exp(-z))
    return g

def model(x,w,b):
    '''逻辑回归模型'''
    return sigmoid(x.mv(w)+b)

# w是向量,b是标量,而x是矩阵,使用x.mv(w) 可以实现矩阵x与向量w的相乘

注意:这里w是向量,b是标量,而x是矩阵,使用x.mv(w) 可以实现矩阵x与向量w的相乘文章来源地址https://www.toymoban.com/news/detail-457236.html

  • 然后定义损失函数和损失函数求导
# 定义损失函数
def loss_fn(y_pred,y):
    '''损失函数'''
    loss = - y.mul(y_pred.view_as(y)) - (1-y).mul(1-y_pred.view_as(y))
    return loss.mean()

# 损失函数求导
def grad_loss_fn(y_pred,y):
    '''损失函数求导'''
    return y_pred.view_as(y)-y

  • 接着定义一个梯度函数
# 定义梯度函数
def grad_fn(x,y,y_pred):
    '''梯度函数'''
    grad_w = grad_loss_fn(y_pred,y)*x
    grad_b = grad_loss_fn(y_pred,y)
    return torch.cat((grad_w.mean(dim=0),grad_b.mean().unsqueeze(0)),0)

  • 模型训练函数
# 模型训练函数
def model_training(x,y,n_epochs,learning_rate,params,print_params=True):
    '''训练'''
    for epoch in range(1,n_epochs+1):
        w,b = params[:-1],params[-1]
        
        # 前向传播
        y_pred = model(x,w,b)
        # 计算损失
        loss = loss_fn(y_pred,y)
        # 梯度
        grad = grad_fn(x,y,y_pred)
        # 更新参数
        params -= learning_rate*grad
        
        if epoch == 1 or epoch%10 == 1:
            print('轮次:%d,\t损失:%f'%(epoch,float(loss)))
            if print_params:
                print(f'参数:{params.detach().numpy()}')
                print(f'梯度:{grad.detach().numpy()}')
                
    return params
  • 最后定义main函数
if __name__ == '__main__':
    # 随机生成数据
    x = torch.randn(2,2)
    y = torch.tensor([[1.,0.],
                      [0.,1.]])
    # 模型参数初始化
    w = torch.zeros(2)  # tensor([0., 0.])
    b = torch.zeros(1)  # tensor([0.])

    params = model_training(x=x,y=y,n_epochs=500,learning_rate=0.1,params=torch.tensor([0.0,0.0,0.0]))

    print(params.numpy())

到了这里,关于深度学习 -- 逻辑回归 PyTorch实现逻辑回归的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【AI】《动手学-深度学习-PyTorch版》笔记(九):从零开始实现线性回归的训练

    在深度学习中,用来训练的数据集通过标注来实现。 咱们在这一步使用函数来生成一组数据集 定义数据生成函数:synthetic_data

    2024年02月14日
    浏览(43)
  • pytorch深度学习逻辑回归 logistic regression

    结果  

    2024年02月16日
    浏览(57)
  • PyTorch深度学习实战 | 预测工资——线性回归

    通过员工工作年限与工资的对应关系表,找出二者之间的关系,并预测在指定的年限时,工资会有多少。 通过员工工作年限与工资的对应关系表,找出二者之间的关系,并预测在指定的年限时,工资会有多少。 可以看出,这是一个用工作年限预

    2023年04月11日
    浏览(48)
  • 深度学习之pytorch实现逻辑斯蒂回归

    logistic 适用于分类问题,这里案例( y为0和1 ,0和 1 分别代表一类) 于解决二分类(0 or 1)问题的机器学习方法,用于估计某种事物的可能性 也是用y=wx+b的模型来举例,之前的输出y属于实数集合R,现在我们要输出一个一个概率,也就是在区间[0,1]之间。我们就想到需要找出一

    2024年02月20日
    浏览(34)
  • 深度学习之pytorch实现线性回归

    作用j进行线性变换 Linear(1, 1) : 表示一维输入,一维输出 优化器对象 9961 tensor(4.0927e-12, grad_fn=) 9962 tensor(4.0927e-12, grad_fn=) 9963 tensor(4.0927e-12, grad_fn=) 9964 tensor(4.0927e-12, grad_fn=) 9965 tensor(4.0927e-12, grad_fn=) 9966 tensor(4.0927e-12, grad_fn=) 9967 tensor(4.0927e-12, grad_fn=) 9968 tensor(4.0927e-12, grad_fn

    2024年02月19日
    浏览(37)
  • 线性神经网路——线性回归随笔【深度学习】【PyTorch】【d2l】

    线性回归是显式解,深度学习中绝大多数遇到的都是隐式解。 3.1.1、PyTorch 从零实现线性回归 生成数据集及标签 d2l.plt.scatter(,,) ,使用d2l库中的绘图函数来创建散点图。 这个函数接受三个参数: features[:,1].detach().numpy() 是一个二维张量features的切片操作,选择了所有行的第二

    2024年02月15日
    浏览(60)
  • 【AI】《动手学-深度学习-PyTorch版》笔记(八):线性回归

    线性函数如下: y ^ = w 1 x 1 + . . . + w d x d

    2024年02月14日
    浏览(51)
  • 深度学习 -- pytorch 计算图与动态图机制 autograd与逻辑回归模型

    pytorch中的动态图机制是pytorch这门框架的优势所在,阅读本篇博客可以使我们对动态图机制以及静态图机制有更直观的理解,同时在博客的后半部分有关于逻辑回归的知识点,并且使用pytorch中张量以及张量的自动求导进行构建逻辑回归模型。 计算图是用来描述运算的有向无环

    2024年02月01日
    浏览(45)
  • python机器学习(五)逻辑回归、决策边界、代价函数、梯度下降法实现线性和非线性逻辑回归

    线性回归所解决的问题是把数据集的特征传入到模型中,预测一个值使得误差最小,预测值无限接近于真实值。比如把房子的其他特征传入到模型中,预测出房价, 房价是一系列连续的数值,线性回归解决的是有监督的学习。有很多场景预测出来的结果不一定是连续的,我们

    2024年02月15日
    浏览(88)
  • PyTorch深度学习实战 | 基于线性回归、决策树和SVM进行鸢尾花分类

    鸢尾花数据集是机器学习领域非常经典的一个分类任务数据集。它的英文名称为Iris Data Set,使用sklearn库可以直接下载并导入该数据集。数据集总共包含150行数据,每一行数据由4个特征值及一个标签组成。标签为三种不同类别的鸢尾花,分别为:Iris Setosa,Iris Versicolour,Iri

    2023年04月10日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包