pytorch实现逻辑回归(代码实现)

pytorch实现线性回归

注:pytorch实现逻辑回归与线性回归部分大体结构相似,想细致了解可以转至线性回归

逻辑回归(分类)

核心任务:计算属于每一类的概率:

逻辑回归损失用交叉熵BCE(二元):
在这里插入图片描述
将小批量数据的所有BCE损失求和并求均值:
在这里插入图片描述

代码实现

本例中输入x = [1, 2, 3] 输出y = [0, 0, 1] 0表示负类,1表示正类 由此构建逻辑回归模型,并画出预测曲线

import torch.nn
import torch.nn.functional as F

#准备数据
x_data = torch.Tensor([[1], [2], [3]])
y_data = torch.Tensor([[0], [0], [1]])

#构造模型
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))
        return y_pred
model = LogisticRegressionModel()

#构造损失和优化器
#这里采用交叉熵
criterion = torch.nn.BCELoss(size_average=False)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

#训练的循环
for epoch in range(1000):
    y_pred = model(x_data)  #前馈
    l = criterion(y_pred, y_data)  #计算损失
    print(epoch, l.item())

    optimizer.zero_grad()   #梯度清零
    l.backward()  #反向传播
    optimizer.step()   #更新梯度

#预测
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(1, 10, 200)
x_test = torch.Tensor(x).view((200, 1))  #这里相当于一个reshape
y_test = model(x_test)
y = y_test.data.numpy()  #在这里需要将Tensor转化回numpy
plt.plot(x, y)
plt.plot([0, 10], [0.5, 0.5], c='r')
plt.xlabel('hours')
plt.ylabel('probability of pass')
plt.grid()
plt.show()
运行结果

在这里插入图片描述
如图可以看到当输入为2.5时正类和负类的概率相等,大于2.5为正类,小于2.5为负类
在这里插入图片描述

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值