pytorch实现逻辑回归

 更新时间:2021年04月09日 17:33:20   作者:逝去〃年华  
这篇文章主要为大家详细介绍了pytorch实现逻辑回归,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了pytorch实现逻辑回归的具体代码,供大家参考,具体内容如下

一、pytorch实现逻辑回归

逻辑回归是非常经典的分类算法,是用于分类任务,如垃圾分类任务,情感分类任务等都可以使用逻辑回归。

接下来使用逻辑回归模型完成一个二分类任务:

# 使用逻辑回归完成一个二分类任务
# 数据准备
import torch
import matplotlib.pyplot as plt

x1 = torch.randn(365)+1.5   # randn():输出一个形状为size的标准正态分布Tensor
x2 = torch.randn(365)-1.5
#print(x1.shape)  # torch.Size([365])
#print(x2.shape)  # torch.Size([365])
data = zip(x1.data.numpy(),x2.data.numpy())  # 创建一个聚合了来自每个可迭代对象中的元素的迭代器。 x = [1,2,3]

pos = []
neg = []
def classification(data):
    for i in data:
        if (i[0] > 1.5+0.1*torch.rand(1).item()*(-1)**torch.randint(1,10,(1,1)).item()):
            pos.append(i)
        else:
            neg.append(i)

classification(data)
# 将正、负两类数据可视化
pos_x = [i[0] for i in pos]
pos_y = [i[1] for i in pos]
neg_x = [i[0] for i in neg]
neg_y = [i[1] for i in neg]
plt.scatter(pos_x,pos_y,c = 'r',marker = "*")
plt.scatter(neg_x,neg_y,c = 'b',marker = "^")
plt.show()

# 构造正、负两类数据可视化结果如上图所示

# 构建模型
import torch.nn as nn
class LogisticRegression(nn.Module):
    def __init__(self):
        super(LogisticRegression, self).__init__()
        self.linear = nn.Linear(2,1)
        self.sigmoid = nn.Sigmoid()

    def forward(self,x):
        return self.sigmoid(self.linear(x))

model = LogisticRegression()
criterion = nn.BCELoss()
optimizer = torch.optim.SGD(model.parameters(),0.01)
epoch = 5000
features = [[i[0],i[1]] for i in pos]
features.extend([[i[0],i[1]] for i in neg])   #extend 接受一个参数,这个参数总是一个 list,并且把这个 list 中的每个元素添加到原 list 中
features = torch.Tensor(features)   # torch.Tensor 生成单精度浮点类型的张量

label = [1 for i in range(len(pos))]
label.extend(0 for i in range(len(neg)))
label = torch.Tensor(label)
print(label.shape)

for i in range(500000):
    out = model(features)
    #print(out.shape)
    loss = criterion(out.squeeze(1),label)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    # 分类任务准确率
    acc = (out.ge(0.5).float().squeeze(1)==label).sum().float()/features.size()[0]
    if (i % 10000 ==0):
        plt.scatter(pos_x, pos_y, c='r', marker="*")
        plt.scatter(neg_x, neg_y, c='b', marker="^")
        weight = model.linear.weight[0]
        #print(weight.shape)
        wo = weight[0]
        w1 = weight[1]
        b = model.linear.bias.data[0]
        # 绘制分界线
        test_x = torch.linspace(-10,10,500)   # 500个点
        test_y = (-wo*test_x - b) / w1
        plt.plot(test_x.data.numpy(),test_y.data.numpy(),c="pink")
        plt.title("acc:{:.4f},loss:{:.4f}".format(acc,loss))
        plt.ylim(-5,3)
        plt.xlim(-3,5)
        plt.show()

附上分类结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 用Python制作灯光秀短视频的思路详解

    用Python制作灯光秀短视频的思路详解

    这篇文章主要介绍了用Python制作灯光秀短视频的思路详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-04-04
  • python传到前端的数据,双引号被转义的问题

    python传到前端的数据,双引号被转义的问题

    这篇文章主要介绍了python传到前端的数据,双引号被转义的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • 不到40行代码用Python实现一个简单的推荐系统

    不到40行代码用Python实现一个简单的推荐系统

    这篇文章主要给大家介绍了如何利用不到40行python代码实现一个简单的推荐系统,文中通过示例代码介绍的非常详细,对大家学习或者使用Python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • 详解python中list的使用

    详解python中list的使用

    这篇文章主要介绍了python中list的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 基于python实现微信好友数据分析(简单)

    基于python实现微信好友数据分析(简单)

    本文主要介绍利用网页端微信获取数据,实现个人微信好友数据的获取,并进行一些简单的数据分析,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-02-02
  • 举例讲解Python中is和id的用法

    举例讲解Python中is和id的用法

    这篇文章主要介绍了举例讲解Python中is和id的用法,是Python学习当中的基础知识,作者举例进行了简单说明,需要的朋友可以参考下
    2015-04-04
  • anconda的pip下载包出现的问题解决

    anconda的pip下载包出现的问题解决

    本文主要介绍了anconda的pip下载包出现的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • python实现支持目录FTP上传下载文件的方法

    python实现支持目录FTP上传下载文件的方法

    这篇文章主要介绍了python实现支持目录FTP上传下载文件的方法,适用于windows及Linux平台FTP传输文件及文件夹,需要的朋友可以参考下
    2015-06-06
  • Python编程快速上手——强口令检测算法案例分析

    Python编程快速上手——强口令检测算法案例分析

    这篇文章主要介绍了Python强口令检测算法,结合实例形式分析了Python针对密码口令强度检测的相关算法实现技巧,需要的朋友可以参考下
    2020-02-02
  • Linux中安装Python的交互式解释器IPython的教程

    Linux中安装Python的交互式解释器IPython的教程

    IPython是一种基于Python的Shell,由于有了Python编程语言的支撑,而比一般的Shell更加强大.下面就来看一下Linux中安装Python的交互式解释器IPython的教程
    2016-06-06

最新评论