文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

pytorch实现逻辑回归

2024-04-02 19:55

关注

本文实例为大家分享了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()

附上分类结果:

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯