Bootstrap

Pytorch实现逻辑斯蒂回归模型 代码实操

初学者学习Pytorch系列

第一篇 Pytorch初学简单的线性模型代码实操
第二篇 Pytorch实现逻辑斯蒂回归模型 代码实操



前言

  1. 上一篇的数据中,是这样子的例子
    x_data代表的学习的时间
    y_data代表的是分数
    如下:
    [1.0], [2.0], [3.0]
    [2.0], [4.0], [6.0]

  2. 与上一篇文章不同,本文的数据是用于分类识别的,x_data依然是代表学习时间,但是y_data代表是能否通过考试,所以y_data设计成这样子[0], [0], [1]
    (0代表不通过,1代表通过)

  3. 这里就诞生一个问题,在原来的linear模型中求出来是分数,而我们要求的是通过考试的概率(概率大则判定为通过,为1,反之为0),所以要用sigmoid函数将数值转换为0-1之间的值作为概率。


一、先上代码

代码如下(解释已经写在代码中):

import torch
import torch.nn.functional as F  # 导入sigmoid函数
import numpy as np
import matplotlib.pyplot as plt

x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[0], [0], [1]])


class LogisticsRegression(torch.nn.Module):
    def __init__(self):
        super(LogisticsRegression, self).__init__()
        self.linear = torch.nn.Linear(1, 1)

    def forward(self, x):
        y_pred = F.sigmoid(self.linear(x))      # 用sigmoid函数可以将数值转换成0-1的概率值
        return y_pred


model = LogisticsRegression()

# 二分类交叉熵
criterion = torch.nn.BCELoss(reduction='sum')

# SGD是Stochastic gradient descent,随机梯度下降算法
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

# 训练过程
for epoch in range(1000):
    y_pred = model(x_data)
    loss = criterion(y_pred, y_data)
    print(epoch, loss.item())
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

print(f"w={model.linear.weight.item()},b={model.linear.bias.item()}")

# 测试数据并绘图
x = np.linspace(1, 10, 200)  # 生成一个数列,把1-10划分成200x_t = torch.Tensor(x).view((200, 1))  # view可以改变Tensor的形状,(2001)指的是2001y_t = model(x_t)  # 计算结果
y = y_t.data.numpy()  # 转成列表
plt.plot(x, y)                          # 传入x轴的信息和y轴的信息(x,y是列表)
plt.plot([0, 10], [0.5, 0.5], c='r')    # 在0-100.5的地方画一条线,以便我们看出那个地方是不确定的
plt.xlabel('Hours')                     # 设置x坐标信息
plt.ylabel("Probability of Pass")       # 设置y坐标信息
plt.grid()                              # 显示显示网格线
plt.show()                              # 画图显示

二、测试结果

1. 数据结果

980 轮开始展示
轮数 损失
980 1.1843305826187134
981 1.1836894750595093
982 1.1830494403839111
983 1.1824101209640503
984 1.1817715167999268
985 1.1811339855194092
986 1.1804969310760498
987 1.1798609495162964
988 1.1792256832122803
989 1.178591251373291
990 1.177957534790039
991 1.1773250102996826
992 1.1766928434371948
993 1.1760615110397339
994 1.175431251525879
995 1.1748015880584717
996 1.1741727590560913
997 1.1735448837280273
998 1.1729176044464111
999 1.1722912788391113
w=0.9891612529754639,b=-2.4005227088928223

2.画图结果

画图结果


总结

以上就是今天要讲的内容,本文仅仅简单介绍了pytorch实现逻辑斯蒂线性回归的基本使用。代码一些解释在上一篇文章也有的。

;