发布时间:2023-04-18 文章分类:电脑基础 投稿人:樱花 字号: 默认 | | 超大 打印

PyTorch深度学习-06逻辑斯蒂回归(快速入门)

“梦想成真之前,看上去总是那么遥不可及”

  • 博主主页:@璞玉牧之
  • 本文所在专栏:《PyTorch深度学习》
  • 博主简介:21级大数据专业大学生,科研方向:深度学习,持续创作中

目录

  • 1.Logistic Tutorial (逻辑斯蒂回归)
    • 1.1 Why use Logistic (为什么用逻辑斯蒂回归)
    • 1.2 Regression VS Classification (比较回归与分类)
    • 1.3 How to map:R->[0,1] (怎样将实数集映射到区间 [0,1])
  • 2.Sigmoid functions (其他Sigmoid函数)
  • 3.Logistic Regression Model (逻辑斯蒂回归模型)
  • 4.Loss function for Binary Classification (二分类的损失函数)
  • 5.Implementation of Logistic Regression (线性单元和Logistic单元代码比较)
  • 6.总结-完整代码
  • 7.结果截图

1.Logistic Tutorial (逻辑斯蒂回归)

虽然叫回归,但用处是分类

1.1 Why use Logistic (为什么用逻辑斯蒂回归)

PyTorch深度学习-06逻辑斯蒂回归(快速入门)

PyTorch深度学习-06逻辑斯蒂回归(快速入门)

  • download:是否从网上下载数据集,若第一次使用,之前未下载过,就标为True。
  • train:是否为训练集

1.2 Regression VS Classification (比较回归与分类)

PyTorch深度学习-06逻辑斯蒂回归(快速入门)

二分类问题需计算y_hay=1和y_hay=0的概率,但实际上只计算一个值即可。二分类问题只输出1个实数,这个实数表示其中某一个分类的概率,通常y_hat=1的概率为通过考试的概率,若输出值为0.8,就表示通过考试的概率是0.8,判定为通过考试。若输出值范围在0.4-0.6,则会输出不确定。

1.3 How to map:R->[0,1] (怎样将实数集映射到区间 [0,1])

PyTorch深度学习-06逻辑斯蒂回归(快速入门)

回归中y_hat的值属于实数集,分类中y_hat的值属于区间 [0,1],所在分类时,要找到一个函数,把线性模型的输出值由实数空间映射到区间 [0,1],要找的函数就是Logistic函数

ps:饱和函数:输入达到一定的值以后,输出就不再变化,达到饱和。Logistic是饱和函数
PyTorch深度学习-06逻辑斯蒂回归(快速入门)

把线性模型输出的y_hat作为x输入到Logistic函数中,得到的结果就是通过考试的概率。

2.Sigmoid functions (其他Sigmoid函数)

PyTorch深度学习-06逻辑斯蒂回归(快速入门)

Sigmoid函数需要满足的条件:

  1. 是饱和函数
  2. 函数值有极限
  3. 是单调增函数

3.Logistic Regression Model (逻辑斯蒂回归模型)

PyTorch深度学习-06逻辑斯蒂回归(快速入门)


σ
\sigma
σ
代表Logistic函数

Logistic函数重要性质:能保证输出值在0 ~ 1之间

有是希望函数的输出值在-1 ~ 1之间(均值为0),这时就会用到其他Sigmoid函数。

4.Loss function for Binary Classification (二分类的损失函数)

Loss function for Binary Classification 简称::BCE Loss

PyTorch深度学习-06逻辑斯蒂回归(快速入门)

PyTorch深度学习-06逻辑斯蒂回归(快速入门)

公式分析:PyTorch深度学习-06逻辑斯蒂回归(快速入门)

5.Implementation of Logistic Regression (线性单元和Logistic单元代码比较)

PyTorch深度学习-06逻辑斯蒂回归(快速入门)
BCE:交叉熵 (cross-entropy)
PyTorch深度学习-06逻辑斯蒂回归(快速入门)

6.总结-完整代码

PyTorch深度学习-06逻辑斯蒂回归(快速入门)

import numpy as np
import matplotlib.pyplot as plt
import torch
import torch.nn.functional as F
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
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)
    loss = criterion(y_pred, y_data)
    print(epoch, loss.item())
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
x = np.linspace(0, 10, 200)
x_t = torch.Tensor(x).view((200, 1))
y_t = model(x_t)
y = y_t.data.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()

7.结果截图

PyTorch深度学习-06逻辑斯蒂回归(快速入门)
PyTorch深度学习-06逻辑斯蒂回归(快速入门)
本文参考:《PyTorch深度学习实践》

At the end of my article

我是璞玉牧之,持续输出优质文章,希望和你一起学习进步!!!原创不易,如果本文对你有帮助,可以 点赞+收藏+评论 支持一下哦!我们下期见~~
PyTorch深度学习-06逻辑斯蒂回归(快速入门)