Python深度学习第五章知识点总结

本文介绍了Python深度学习中的线性回归和Logistic回归基础知识,包括最小二乘法的应用、广义线性模型的概念,以及如何使用PyTorch实现Logistic回归,涉及数据准备、模型结构、损失函数和优化算法等内容。
摘要由CSDN通过智能技术生成

前言:

   这是来自于我的python深度学习的第五章的知识点总结,部分知识点是基于前几篇博客而增加的,希望我的这篇博客可以帮到大家。

      注:有许多内容来自于课件PPT及网络摘抄。


学习目标:

1.线性回归简介

2.logistic回归简介

3.用PyTorch实现 Logistic回归


学习内容:

一、线性回归简介

        线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。其表达形式为y = w'x+e,e为误差服从均值为0的正态分布。        回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。

       

最小二乘法

       最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合,其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达 。最小二乘法因其原理简单、收敛速度较快、易于理解和实现而被广泛应用于参数估计中。

        在线性回归中,我们假设随机变量 𝑥 1 , ⋯ , 𝑥 𝑛 𝑦 之间的关系是线性的。但在实际中,我
们通常会遇到非线性关系。这个时候,我们可以使用一个非线性变换 𝑔(⋅) ,使得线性
回归模型 𝑓(⋅) 实际上对 𝑔(𝑦) 而非 𝑦 进行拟合,即:
                                 
其中 𝑓(⋅) 仍为:
                            
因此这样的回归模型称为 广义线性回归模型
       广义线性回归模型使用非常广泛。例如在二元分类任务中,我们的目标是拟合这样一
个分离超平面 𝑓(𝒙) = 𝒘 𝒙 + 𝑏 ,使得目标分类𝑦可表示为以下阶跃函数:
                                    
但是在分类问题中,由于 𝑦 取离散值,这个阶跃判别函数是不可导的。不可导的性质
使得许多数学方法不能使用。我们考虑使用一个函数 𝜎(⋅) 来近似这个离散的阶跃函数,
通常可以使用 logistic 函数。( Sigmoid 函数)

二、logistic回归简介

       logistic回归又称logistic回归分析,是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域。 逻辑回归根据给定的自变量数据集来估计事件的发生概率,由于结果是一个概率,因此因变量的范围在 0 和 1 之间。

(1)回归vs分类

       在之前的回归任务 中,我们是 预测 分值是多少 ; 在分类任务 中就可以变成根据学习时间判断是否能通过考试 ,即结果分为两类:fail pass 。 我们的任务就是计算不同学习时间x分别是 fail pass 的概率。(二分类问题其实只需要计算一个概率; 另一个概况就是1- 算的概率)如果预测pass 概率为 0.6 fail 概率就是0.4 ,那么判断为 pass。
        在分类问题中,模型输出的就是输 入属于哪一个类别的概率!概率取值[0,1], 预测值 y_hat 不一 定在这个取值区间。因此我们需要把得到的预测值 y_hat通过 激活函数 隐射为[0,1]区间。 sigmoid 函数
sigmoid函数在 x 无限趋近于正无穷、负无穷时,y 无线趋近于 1 0 ; 可以看到当x非常大或者非常小的时候,函数梯度变化就非常小了。这种函数称为饱和函数。

(2)损失函数
          MSE loss :计算 数值 之间的差异
          BCE loss :计算 分布 之间的差异

三、用PyTorch实现 Logistic回归

    1、数据准备; 2、线性方程; 3、激活函数; 4、损失函数; 5、优化算法; 6、模型可视化

我们这里用一个练习题更好的理解如何用PyTorch实现 Logistic回归:

以下是此练习的代码及注释。

import torch
import torch.nn.functional as F
import numpy as np
import matplotlib.pyplot as plt

# 1.准备数据集
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[0], [0], [1]])

class LogisticModel(torch.nn.Module):
    def __init__(self):
        super(LogisticModel, self).__init__()
        self.linear = torch.nn.Linear(1, 1)  # 定义线性层,输入维度为1,输出维度为1
    def forward(self, x):
        y_pred = F.sigmoid(self.linear(x))  # 使用Sigmoid函数将线性层的输出映射到0-1之间,得到预测值
        return y_pred

model = LogisticModel()  # 实例化逻辑回归模型

criterion = torch.nn.BCELoss(size_average=False)  # 定义二元交叉熵损失函数
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)  # 定义随机梯度下降优化器,学习率为0.01

for epoch in range(1000):  # 进行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)  # 生成0到10之间的200个等间距的点
x_t = torch.Tensor(x).view((200, 1))  # 将numpy数组转换为PyTorch张量,并调整形状为(200, 1)
y_t = model(x_t)  # 使用模型对输入数据进行预测
y = y_t.data.numpy()  # 将预测结果转换为numpy数组
plt.plot(x, y)  # 绘制预测结果曲线
plt.plot([0, 10], [0.5, 0.5], c='r')  # 绘制红色水平线,表示阈值为0.5
plt.xlabel('Hour')  # 设置x轴标签为'Hour'
plt.ylabel('Pass')  # 设置y轴标签为'Pass'
plt.grid()  # 显示网格线
plt.show()  # 显示图像

以下为上面代码运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值