【Deep Learning 4】线性回归与逻辑回归

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,1000CU*H 3个月
简介: 🍊本文详细介绍了线性回归和逻辑回归是什么,并对二者进行了对比,此外详细介绍了sigmoid函数,最后使用Pytorch来实战模拟二者🍊实验一使用Pytorch实现线性回归🍊实验二使用Pytorch实现逻辑回归。

image.gif编辑

🍊本文详细介绍了线性回归和逻辑回归是什么,并对二者进行了对比,此外详细介绍了sigmoid函数,最后使用Pytorch来实战模拟二者

🍊实验一使用Pytorch实现线性回归

🍊实验二使用Pytorch实现逻辑回归

一、Introduction

在初学机器学习的时候,我们总会听到线性回归模型和逻辑回归模型,那么它们究竟是什么?有什么联系与区别呢?

首先他们都是一条线,目的是让我们预测的对象尽可能多的穿过这条线

线性回归模型是真的回归模型,但是逻辑回归模型虽然名字上带着回归,实际上是个分类模型,看看看下图就知道了。因为是完全属于不同类型的模型,因此他们的损失函数也是不一样的

image.gif编辑

二、Principle

2.1 线性回归模型

image.gif编辑

损失函数

image.gif编辑

2.2 逻辑回归模型

这里的σ是sigmoid函数, 分类模型是需要将最后的预测结果仿射到0-1区间中,且所有的类的预测值之和为1,因此sigmoid函数最主要的作用就是将结果尽可能的仿射到0-1区间中

image.gif编辑

损失函数

image.gif编辑

2.3 sigmoid函数

sigmoid型函数是指一类S型曲线函数,两端饱和。其中最出名的是logistic函数,因此很多地方直接将sigmoid函数默认为logistic函数。

Logistic函数公式

Logistic函数的特点是区间范围在0~1之间,而且当x等于0时,其函数值为0.5,主要用作二分类。

image.gif编辑

Tanh函数公式

Tanh函数的特点是区间范围在-1~1之间,而且当x等于0时,其函数值为0

image.gif编辑

image.gif编辑

Hard-Logistic函数和Hard-Tanh函数

image.gif编辑

三、Experiment

伪代码

1 Prepare dataset

2 Design model using Class

3 Construct loss and optimizer(Using Pytorch API)

4 Training cycle(forward,backward,update)

3.1 Linear  Regression

import torch
# 1 Prepare for the dataset
x_data = torch.tensor([[1.0], [2.0], [3.0]])
y_data = torch.tensor([[2.0], [4.0], [6.0]])
# Define the Model
class LinearModel(torch.nn.Module):
    def __init__(self):
        super(LinearModel, self).__init__()  # 默认写法,一定要有
        self.linear = torch.nn.Linear(1, 1, bias=True)
        # 两个参数为输入和输出的维度,N*输入维度和N*输出维度,其模型为y=Ax+b线性模型,因此其输入输出的维度一定是一样的
        # bias为模型是否需要偏置b
    def forward(self, x):
        y_pred = self.linear(x)  #
        return y_pred
    # 这里发现没有BP,这是因为使用Model构造出来的模型会根据你的计算图来自动进行BP
model = LinearModel()
# Define the criterion and optimizer
criterion = torch.nn.MSELoss(size_average=False)  # MSELoss是将所有的平方误差相加
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)  # 参数:第一个为所优化的模型,第二个是学习率
# Training
for epoch in range(1000):
    y_pred = model(x_data)
    loss = criterion(y_pred, y_data)
    print(epoch, loss)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
# Output weight and bias
print('w=', model.linear.weight.item())
print('b=', model.linear.bias.item())
# Test model
x_test = torch.Tensor([[4.0]])
y_test = model(x_test)
print('y_pred=', y_test.data)

image.gif

Result

image.gif编辑

最后预测的结果w接近2,而b接近0,这是与我们的数据集的情况相匹配的

3.2 Logistic Regression

import torch
import torchvision
import torch.nn.functional as F
import numpy as np
import matplotlib.pyplot as plt
# Prepare dataset
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[0], [0], [1]])
# Define the model
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()
# Define the criterion and optimizer
criterion = torch.nn.BCELoss(size_average=False)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
# Training
for epoch in range(1000):
    y_pred = model(x_data)
    loss = criterion(y_pred, y_data)
    print('Epoch[{}/{}],loss:{:.6f}'.format(epoch, 1000, loss.item()))
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
# Drawing
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.show()

image.gif

Result

image.gif编辑

可以看到当x等于2.5的时候,预测值刚好为0.5。这是与我们的数据集是相匹配的

参考资料

《机器学习》周志华

《深度学习与机器学习》吴恩达

《神经网络与与深度学习》邱锡鹏

《Pytorch深度学习实战》刘二大人

目录
相关文章
|
存储 算法 数据处理
【软件设计师备考 专题 】虚拟存储器基本工作原理,多级存储体系的性能价格
【软件设计师备考 专题 】虚拟存储器基本工作原理,多级存储体系的性能价格
581 0
掌握销售之道:深入学习ERP系统的销售与客户关系管理模块
掌握销售之道:深入学习ERP系统的销售与客户关系管理模块
905 8
|
关系型数据库 MySQL Java
【面试题精讲】MySQL-长连接和短连接
【面试题精讲】MySQL-长连接和短连接
|
7月前
|
数据采集 算法 测试技术
【硬件测试】基于FPGA的1024QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的1024QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集和vio在线SNR设置模块,支持不同SNR条件下的性能测试。1024QAM调制将10比特映射到复平面上的1024个星座点之一,实现高效数据传输。硬件测试结果表明,在SNR=32dB和40dB时,系统表现出良好的性能。Verilog核心程序展示了各模块的连接与功能实现。
161 7
|
10月前
|
弹性计算 运维 监控
两招玩转阿里云系统事件监控
两招玩转阿里云系统事件监控,教你如何快速使用云监控监控阿里云重要系统事件。
776 232
|
7月前
|
人工智能 前端开发 程序员
通义灵码2.0 AI 程序员体验
通义灵码AI程序员全面上线,作为国内首个真正落地的AI程序员,支持Qwen2.5-Max等模型并适配VS Code与JetBrains IDEs。它在新功能开发中快速生成代码框架,助力跨语言编程、自动生成单元测试,还能智能分析错误信息提供修复建议。体验活动显示,通义灵码2.0在代码生成、单元测试和跨语言编程上效率显著提升,极大优化开发者工作流程,成为不可或缺的智能助手。
215 3
|
Java
Java“缺少返回语句”解决
在 Java 中,错误信息“缺少返回语句”表示方法应返回某种类型但未在所有路径中提供返回值,导致编译错误。解决方法包括:确保每个控制路径中有返回值;处理所有分支和异常情况;或将方法声明为 `void` 类型以避免返回值需求。
425 3
|
机器学习/深度学习 监控
早停法(Early Stopping)
早停法(Early Stopping)
1039 0
|
存储 自然语言处理 算法
Tokenization 指南:字节对编码,WordPiece等方法Python代码详解
在2022年11月OpenAI的ChatGPT发布之后,大型语言模型(llm)变得非常受欢迎。从那时起,这些语言模型的使用得到了爆炸式的发展,这在一定程度上得益于HuggingFace的Transformer库和PyTorch等库。
332 3