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

pytorch实现线性回归

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

逻辑回归(分类)

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

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

代码实现

本例中输入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()

运行结果

pytorch实现逻辑回归(代码实现)_第2张图片
如图可以看到当输入为2.5时正类和负类的概率相等,大于2.5为正类,小于2.5为负类
pytorch实现逻辑回归(代码实现)_第3张图片

你可能感兴趣的:(深度学习,pytorch,逻辑回归,深度学习)