PyTorch实现多维度特征输入逻辑回归

目录
  • 一、实现过程
    • 1、准备数据
    • 2、设计模型
    • 4、训练过程
    • 5、结果展示
  • 二、参考文献

一、实现过程

1、准备数据

本文数据采取文献[1]给出的数据集,该数据集前8列为特征,最后1列为标签(0/1)。本模型使用pandas处理该数据集,需要注意的是,原始数据集没有特征名称,需要自己在第一行添加上去,否则,pandas会把第一行的数据当成特征名称处理,从而影响最后的分类效果。

代码如下:

# 1、准备数据
import torch
import pandas as pd
import numpy as np
xy = pd.read_csv('G:/datasets/diabetes/diabetes.csv',dtype=np.float32)    # 文件路径
x_data = torch.from_numpy(xy.values[:,:-1])
y_data = torch.from_numpy(xy.values[:,[-1]])

2、设计模型

本文采取文献[1]的思路,激活函数使用ReLU,最后一层使用Sigmoid函数,

代码如下:

class Model(torch.nn.Module):
    def __init__(self):
        super(Model,self).__init__()
        self.linear1 = torch.nn.Linear(8,6)
        self.linear2 = torch.nn.Linear(6,4)
        self.linear3 = torch.nn.Linear(4,1)
        self.activate = torch.nn.ReLU()
    
    def forward(self, x):
        x = self.activate(self.linear1(x))
        x = self.activate(self.linear2(x))
        x = torch.sigmoid(self.linear3(x))
        return x
model = Model()

将模型和数据加载到GPU上,代码如下:

### 将模型和训练数据加载到GPU上
# 模型加载到GPU上
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model.to(device)
# 数据加载到GPU上
x = x_data.to(device)
y = y_data.to(device)
3、构造损失函数和优化器
criterion = torch.nn.BCELoss(reduction='mean')
optimizer = torch.optim.SGD(model.parameters(),lr=0.1)

4、训练过程

epoch_list = []
loss_list = []
epochs = 10000
for epoch in range(epochs):
    # Forward
    y_pred = model(x)
    loss = criterion(y_pred, y)
    print(epoch, loss)

    epoch_list.append(epoch)
    loss_list.append(loss.data.item())

    # Backward
    optimizer.zero_grad()
    loss.backward()

    # Update
    optimizer.step()

5、结果展示

查看各个层的权重和偏置:

model.linear1.weight,model.linear1.bias
model.linear2.weight,model.linear2.bias
model.linear3.weight,model.linear3.bias

损失值随迭代次数的变化曲线:

# 绘图展示
plt.plot(epoch_list,loss_list,'b')
plt.xlabel('epoch')
plt.ylabel('loss')
plt.grid()
plt.show()

最终的损失和准确率:

# 准确率
y_pred_label = torch.where(y_pred.data.cpu() >= 0.5,torch.tensor([1.0]),torch.tensor([0.0]))
acc = torch.eq(y_pred_label, y_data).sum().item()/y_data.size(0)

print("loss = ",loss.item(), "acc = ",acc)

loss =  0.4232381284236908 acc =  0.7931488801054019

二、参考文献

到此这篇关于PyTorch实现多维度特征输入逻辑回归的文章就介绍到这了,更多相关PyTorch逻辑回归内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • PyTorch线性回归和逻辑回归实战示例

    线性回归实战 使用PyTorch定义线性回归模型一般分以下几步: 1.设计网络架构 2.构建损失函数(loss)和优化器(optimizer) 3.训练(包括前馈(forward).反向传播(backward).更新模型参数(update)) #author:yuquanle #data:2018.2.5 #Study of LinearRegression use PyTorch import torch from torch.autograd import Variable # train

  • PyTorch零基础入门之逻辑斯蒂回归

    目录 学习总结 一.sigmoid函数 二.和Linear的区别 三.逻辑斯蒂回归(分类)PyTorch实现 Reference 学习总结 (1)和上一讲的模型训练是类似的,只是在线性模型的基础上加个sigmoid,然后loss函数改为交叉熵BCE函数(当然也可以用其他函数),另外一开始的数据y_data也从数值改为类别0和1(本例为二分类,注意x_data和y_data这里也是矩阵的形式). 一.sigmoid函数 logistic function是一种sigmoid函数(还有其他sigmo

  • pytorch实现逻辑回归

    本文实例为大家分享了pytorch实现逻辑回归的具体代码,供大家参考,具体内容如下 一.pytorch实现逻辑回归 逻辑回归是非常经典的分类算法,是用于分类任务,如垃圾分类任务,情感分类任务等都可以使用逻辑回归. 接下来使用逻辑回归模型完成一个二分类任务: # 使用逻辑回归完成一个二分类任务 # 数据准备 import torch import matplotlib.pyplot as plt x1 = torch.randn(365)+1.5 # randn():输出一个形状为size的标准正

  • PyTorch实现多维度特征输入逻辑回归

    目录 一.实现过程 1.准备数据 2.设计模型 4.训练过程 5.结果展示 二.参考文献 一.实现过程 1.准备数据 本文数据采取文献[1]给出的数据集,该数据集前8列为特征,最后1列为标签(0/1).本模型使用pandas处理该数据集,需要注意的是,原始数据集没有特征名称,需要自己在第一行添加上去,否则,pandas会把第一行的数据当成特征名称处理,从而影响最后的分类效果. 代码如下: # 1.准备数据 import torch import pandas as pd import numpy

  • Pytorch实现逻辑回归分类

    本文实例为大家分享了Pytorch实现逻辑回归分类的具体代码,供大家参考,具体内容如下 1.代码实现 步骤: 1.获得数据2.建立逻辑回归模型3.定义损失函数4.计算损失函数5.求解梯度6.梯度更新7.预测测试集 import torch import torch.nn as nn import numpy as np import matplotlib.pyplot as plt from torch.autograd import Variable import torchvision.da

  • pytorch使用nn.Moudle实现逻辑回归

    本文实例为大家分享了pytorch使用nn.Moudle实现逻辑回归的具体代码,供大家参考,具体内容如下 内容 pytorch使用nn.Moudle实现逻辑回归 问题 loss下降不明显 解决方法 #源代码 out的数据接收方式      if torch.cuda.is_available():          x_data=Variable(x).cuda()          y_data=Variable(y).cuda()      else:          x_data=Var

  • 基于Pytorch实现逻辑回归

    本文实例为大家分享了Pytorch实现逻辑回归的具体代码,供大家参考,具体内容如下 1.逻辑回归 线性回归表面上看是“回归问题”,实际上处理的问题是“分类”问题,逻辑回归模型是一种广义的回归模型,其与线性回归模型有很多的相似之处,模型的形式也基本相同,唯一不同的地方在于逻辑回归会对y作用一个逻辑函数,将其转化为一种概率的结果.逻辑函数也称为Sigmoid函数,是逻辑回归的核心. 2.基于Pytorch实现逻辑回归 import torch as t import matplotlib.pyplo

  • python人工智能深度学习入门逻辑回归限制

    目录 1.逻辑回归的限制 2.深度学习的引入 3.深度学习的计算方式 4.神经网络的损失函数 1.逻辑回归的限制 逻辑回归分类的时候,是把线性的函数输入进sigmoid函数进行转换,后进行分类,会在图上画出一条分类的直线,但像下图这种情况,无论怎么画,一条直线都不可能将其完全分开. 但假如我们可以对输入的特征进行一个转换,便有可能完美分类.比如: 创造一个新的特征x1:到(0,0)的距离,另一个x2:到(1,1)的距离.这样可以计算出四个点所对应的新特征,画到坐标系上如以下右图所示.这样转换之后

  • python机器学习理论与实战(四)逻辑回归

    从这节算是开始进入"正规"的机器学习了吧,之所以"正规"因为它开始要建立价值函数(cost function),接着优化价值函数求出权重,然后测试验证.这整套的流程是机器学习必经环节.今天要学习的话题是逻辑回归,逻辑回归也是一种有监督学习方法(supervised machine learning).逻辑回归一般用来做预测,也可以用来做分类,预测是某个类别^.^!线性回归想比大家都不陌生了,y=kx+b,给定一堆数据点,拟合出k和b的值就行了,下次给定X时,就可以计

  • Python利用逻辑回归模型解决MNIST手写数字识别问题详解

    本文实例讲述了Python利用逻辑回归模型解决MNIST手写数字识别问题.分享给大家供大家参考,具体如下: 1.MNIST手写识别问题 MNIST手写数字识别问题:输入黑白的手写阿拉伯数字,通过机器学习判断输入的是几.可以通过TensorFLow下载MNIST手写数据集,通过import引入MNIST数据集并进行读取,会自动从网上下载所需文件. %matplotlib inline import tensorflow as tf import tensorflow.examples.tutori

  • TensorFlow教程Softmax逻辑回归识别手写数字MNIST数据集

    基于MNIST数据集的逻辑回归模型做十分类任务 没有隐含层的Softmax Regression只能直接从图像的像素点推断是哪个数字,而没有特征抽象的过程.多层神经网络依靠隐含层,则可以组合出高阶特征,比如横线.竖线.圆圈等,之后可以将这些高阶特征或者说组件再组合成数字,就能实现精准的匹配和分类. import tensorflow as tf import numpy as np import input_data print('Download and Extract MNIST datas

随机推荐