Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【深度学习实验】线性模型(五):使用Pytorch实现线性模型:基于鸢尾花数据集,对模型进行评估(使用随机梯度下降优化器)

【深度学习实验】线性模型(五):使用Pytorch实现线性模型:基于鸢尾花数据集,对模型进行评估(使用随机梯度下降优化器)

作者头像
Qomolangma
发布于 2024-07-29 13:57:21
发布于 2024-07-29 13:57:21
16600
代码可运行
举报
文章被收录于专栏:深度学习深度学习
运行总次数:0
代码可运行

一、实验介绍

线性模型是机器学习中最基本的模型之一,通过对输入特征进行线性组合来预测输出。本实验旨在展示使用随机梯度下降优化器训练线性模型的过程,并评估模型在鸢尾花数据集上的性能。

二、实验环境

本系列实验使用了PyTorch深度学习框架,相关操作如下:

1. 配置虚拟环境

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda create -n DL python=3.7 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda activate DL
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install torch==1.8.1+cu102 torchvision==0.9.1+cu102 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda install matplotlib
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 conda install scikit-learn

2. 库版本介绍

软件包

本实验版本

目前最新版

matplotlib

3.5.3

3.8.0

numpy

1.21.6

1.26.0

python

3.7.16

scikit-learn

0.22.1

1.3.0

torch

1.8.1+cu102

2.0.1

torchaudio

0.8.1

2.0.2

torchvision

0.9.1+cu102

0.15.2

三、实验内容

0. 导入库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import torch
import torch.optim as optim
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn import metrics
  • PyTorch
    • 优化器模块(optim
  • scikit-learn
    • 数据模块(load_iris)
    • 数据划分(train_test_split)
    • 评估指标模块(metrics

1. 线性模型linear_model

该函数接受输入数据x,使用随机生成的权重w和偏置b,计算输出值output。这里的线性模型的形式为 output = x * w + b

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def linear_model(x):
    return torch.matmul(x, w) + b

2. 损失函数loss_function

这里使用的是均方误差(MSE)作为损失函数,计算预测值与真实值之间的差的平方。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def loss_function(y_true, y_pred):
    loss = (y_pred - y_true) ** 2
    return loss

3. 鸢尾花数据预处理

  • 加载鸢尾花数据集并进行预处理
    • 将数据集分为训练集和测试集
    • 数据转换为PyTorch张量
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
iris = load_iris()
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)
x_train = torch.tensor(x_train, dtype=torch.float32)
y_train = torch.tensor(y_train, dtype=torch.float32).view(-1, 1)
x_test = torch.tensor(x_test, dtype=torch.float32)
y_test = torch.tensor(y_test, dtype=torch.float32).view(-1, 1)

4. 初始化权重和偏置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
w = torch.rand(1, 1, requires_grad=True)
b = torch.randn(1, requires_grad=True)

5. 优化器

使用随机梯度下降(SGD)优化器进行模型训练,指定学习率和待优化的参数w, b。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
optimizer = optim.SGD([w, b], lr=0.01) # 使用SGD优化器

6. 迭代

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
num_epochs = 100
for epoch in range(num_epochs):
    optimizer.zero_grad()       # 梯度清零
    prediction = linear_model(x_train, w, b)
    loss = loss_function(y_train, prediction)
    loss.mean().backward()      # 计算梯度
    optimizer.step()            # 更新参数

    if (epoch + 1) % 10 == 0:
        print(f"Epoch {epoch+1}/{num_epochs}, Loss: {loss.mean().item()}")
  • 在每个迭代中:
    • 将优化器的梯度缓存清零,然后使用当前的权重和偏置对输入 x 进行预测,得到预测结果 prediction
    • 使用 loss_function 计算预测结果与真实标签之间的损失,得到损失张量 loss
    • 调用 loss.mean().backward() 计算损失的平均值,并根据计算得到的梯度进行反向传播。
    • 调用 optimizer.step() 更新权重和偏置,使用优化器进行梯度下降更新。
    • 每隔 10 个迭代输出当前迭代的序号、总迭代次数和损失的平均值。

7. 测试集预测

在测试集上进行预测,使用训练好的模型对测试集进行预测

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
with torch.no_grad():
    test_prediction = linear_model(x_test, w, b)
    test_prediction = torch.round(test_prediction) # 四舍五入为整数
    test_prediction = test_prediction.detach().numpy()

8. 实验结果评估

  • 使用 metrics 模块计算分类准确度(accuracy)、精确度(precision)、召回率(recall)和F1得分(F1 score)。
  • 输出经过优化后的参数 wb,以及在测试集上的评估指标。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
accuracy = metrics.accuracy_score(y_test, test_prediction)
precision = metrics.precision_score(y_test, test_prediction, average='macro')
recall = metrics.recall_score(y_test, test_prediction, average='macro')
f1 = metrics.f1_score(y_test, test_prediction, average='macro')
print("The optimized parameters are:")
print("w:", w.flatten().tolist())
print("b:", b.item())

print("Accuracy:", accuracy)
print("Precision:", precision)
print("Recall:", recall)
print("F1 Score:", f1)

本实验使用随机梯度下降优化器训练线性模型,并在鸢尾花数据集上取得了较好的分类性能。实验结果表明,经过优化后的模型能够对鸢尾花进行准确的分类,并具有较高的精确度、召回率和F1得分。

9. 完整代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import torch
import torch.optim as optim
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn import metrics

def linear_model(x, w, b):
    return torch.matmul(x, w) + b

def loss_function(y_true, y_pred):
    loss = (y_pred - y_true) ** 2
    return loss

# 加载鸢尾花数据集并进行预处理
iris = load_iris()
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)
x_train = torch.tensor(x_train, dtype=torch.float32)
y_train = torch.tensor(y_train, dtype=torch.float32).view(-1, 1)
x_test = torch.tensor(x_test, dtype=torch.float32)
y_test = torch.tensor(y_test, dtype=torch.float32).view(-1, 1)

w = torch.rand(x_train.shape[1], 1, requires_grad=True)
b = torch.randn(1, requires_grad=True)
optimizer = optim.SGD([w, b], lr=0.01) # 使用SGD优化器

num_epochs = 100
for epoch in range(num_epochs):
    optimizer.zero_grad()       # 梯度清零
    prediction = linear_model(x_train, w, b)
    loss = loss_function(y_train, prediction)
    loss.mean().backward()      # 计算梯度
    optimizer.step()            # 更新参数

    if (epoch + 1) % 10 == 0:
        print(f"Epoch {epoch+1}/{num_epochs}, Loss: {loss.mean().item()}")

# 在测试集上进行预测
with torch.no_grad():
    test_prediction = linear_model(x_test, w, b)
    test_prediction = torch.round(test_prediction) # 四舍五入为整数
    test_prediction = test_prediction.detach().numpy()

accuracy = metrics.accuracy_score(y_test, test_prediction)
precision = metrics.precision_score(y_test, test_prediction, average='macro')
recall = metrics.recall_score(y_test, test_prediction, average='macro')
f1 = metrics.f1_score(y_test, test_prediction, average='macro')
print("The optimized parameters are:")
print("w:", w.flatten().tolist())
print("b:", b.item())

print("Accuracy:", accuracy)
print("Precision:", precision)
print("Recall:", recall)
print("F1 Score:", f1)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【深度学习实验】线性模型(四):使用Pytorch实现线性模型:使用随机梯度下降优化器训练模型
随机梯度下降的主要优点是计算效率高,尤其适用于大规模数据集。它也可以在每个训练周期中进行参数更新,因此可以更快地收敛。然而,由于每次迭代仅使用一个样本(或小批量样本),因此随机梯度下降的更新方向可能会更加不稳定,导致训练过程中的损失函数波动较大。为了缓解这个问题,可以使用学习率衰减、动量等技巧来改进算法。
Qomolangma
2024/07/29
1390
【深度学习实验】线性模型(四):使用Pytorch实现线性模型:使用随机梯度下降优化器训练模型
【深度学习】使用 PyTorch 实现回归问题
在这篇博文中,我们将探讨线性回归的概念以及如何使用 PyTorch 实现它。回归是一种基本的统计建模技术,用于建立因变量与一个或多个自变量之间的关系。我们将使用 PyTorch(一种流行的深度学习框架)来开发和训练线性回归模型。
Ai学习的老章
2024/01/29
9700
【深度学习】使用 PyTorch 实现回归问题
【python】在【机器学习】与【数据挖掘】中的应用:从基础到【AI大模型】
在大数据时代,数据挖掘与机器学习成为了各行各业的核心技术。Python作为一种高效、简洁且功能强大的编程语言,得到了广泛的应用。
小李很执着
2024/06/15
3080
一文带你了解机器学习的四大框架PyTorch、TensorFlow、Keras、Scikit-learn
点评:文章概要性地介绍了机器学习,指出其重要性日益凸显,如Geoffrey Hinton等机器学习领域的大牛被Google、Facebook等科技巨头争相聘请。文章阐述了机器学习的定义,即一种让计算机从数据中自动学习和改进的技术。同时,文章还探讨了机器学习的范围、方法,如支持向量机、聚类算法等,并强调了机器学习在大数据、深度学习及人工智能领域的广泛应用与重要影响,展现了机器学习技术推动科技进步的巨大潜力。
小白的大数据之旅
2024/11/25
1.4K1
一文带你了解机器学习的四大框架PyTorch、TensorFlow、Keras、Scikit-learn
Python深度学习框架:PyTorch、Keras、Scikit-learn、TensorFlow如何使用?学会轻松玩转AI!
总的来说,这四个工具箱各有各的优点,适合不同的任务和学习阶段。 你想盖什么样子的“房子”(解决什么问题),就选择合适的工具箱。 接下来让我们去了解一下他们吧
小白的大数据之旅
2024/11/26
2.1K0
Python深度学习框架:PyTorch、Keras、Scikit-learn、TensorFlow如何使用?学会轻松玩转AI!
深度揭秘,教你驾驭 AI 大模型的无限可能
随着人工智能技术的飞速发展,AI 大模型在诸多领域展现出了强大的能力。然而,要充分发挥其潜力,正确的使用方法至关重要。
羑悻的小杀马特.
2025/03/30
1870
深度学习中的文本分类方法汇总相关代码及调优trick
Fasttext是Facebook推出的一个便捷的工具,包含文本分类和词向量训练两个功能。
大鹅
2021/11/06
1.9K0
分别用逻辑回归和决策树实现鸢尾花数据集分类
学习了决策树和逻辑回归的理论知识,决定亲自上手尝试一下。最终导出决策树的决策过程的图片和pdf。逻辑回归部分参考的是用逻辑回归实现鸢尾花数据集分类,感谢原作者xiaoyangerr 注意:要导出为pdf先必须安装graphviz(这是一个软件)并且安装pydotplus这个包,把它的graphviz加入系统的环境变量path,否则会报错 决策树 from sklearn.datasets import load_iris from sklearn import tree from sklearn.mo
Aidol
2020/07/23
1.6K0
分别用逻辑回归和决策树实现鸢尾花数据集分类
如何使用神经网络模型解决分类、聚类、回归和标注任务:基于 PyTorch 的实现与分析
文章链接:https://cloud.tencent.com/developer/article/2469162
小馒头学Python
2024/11/22
6360
如何使用神经网络模型解决分类、聚类、回归和标注任务:基于 PyTorch 的实现与分析
基于sklearn的LogisticRegression鸢尾花多类分类实践
本文使用sklearn的逻辑斯谛回归模型,进行鸢尾花多分类预测,对OvR与OvO多分类方法下的预测结果进行对比。
Michael阿明
2020/07/13
1.6K0
03-使用PyTorch处理最简单的神经网络分类任务(笔记+代码)
分类和回归是最常见的机器学习问题类型之一。在本笔记中,我们将使用 PyTorch 解决几个不同的分类问题(二元分类,多类分类,多标签分类)。换句话说,我们通过获取一组输入并预测这些输入集属于哪个类别。
renhai
2023/11/24
5K0
03-使用PyTorch处理最简单的神经网络分类任务(笔记+代码)
【深度学习实验】线性模型(三):使用Pytorch实现简单线性模型:搭建、构造损失函数、计算损失值
线性模型的优点包括简单、易于解释和计算效率高。它们在许多实际问题中都有广泛的应用。然而,线性模型也有一些限制,例如对非线性关系的建模能力较弱。在处理复杂的问题时,可以通过引入非线性特征转换或使用核函数进行扩展,以提高线性模型的性能。
Qomolangma
2024/07/29
2280
【深度学习实验】线性模型(三):使用Pytorch实现简单线性模型:搭建、构造损失函数、计算损失值
应用深度学习EEGNet来处理脑电信号
脑机接口(BCI)使用神经活动作为控制信号,实现与计算机的直接通信。这种神经信号通常是从各种研究透彻的脑电图(EEG)信号中挑选出来的。卷积神经网络(CNN)主要用来自动特征提取和分类,其在计算机视觉和语音识别领域中的使用已经很广泛。CNN已成功应用于基于EEG的BCI;但是,CNN主要应用于单个BCI范式,在其他范式中的使用比较少,论文作者提出是否可以设计一个CNN架构来准确分类来自不同BCI范式的EEG信号,同时尽可能地紧凑(定义为模型中的参数数量)。该论文介绍了EEGNet,这是一种用于基于EEG的BCI的紧凑型卷积神经网络。论文介绍了使用深度和可分离卷积来构建特定于EEG的模型,该模型封装了脑机接口中常见的EEG特征提取概念。论文通过四种BCI范式(P300视觉诱发电位、错误相关负性反应(ERN)、运动相关皮层电位(MRCP)和感觉运动节律(SMR)),将EEGNet在主体内和跨主体分类方面与目前最先进的方法进行了比较。结果显示,在训练数据有限的情况下,EEGNet比参考算法具有更强的泛化能力和更高的性能。同时论文也证明了EEGNet可以有效地推广到ERP和基于振荡的BCI。
脑机接口社区
2020/06/30
1.3K0
基于鸢尾花数据集的逻辑回归分类实践
Logistic回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题(即输出只有两种,分别代表两个类别),所以利用了Logistic函数(或称为Sigmoid函数),函数形式为:
小小程序员
2023/12/25
5760
基于鸢尾花数据集的逻辑回归分类实践
【机器学习】机器学习与医疗健康在疾病预测中的融合应用与性能优化新探索
机器学习是一种通过数据训练模型,并利用模型对新数据进行预测和决策的技术。其基本思想是让计算机通过样本数据自动学习规律,而不是通过明确的编程指令。根据学习的类型,机器学习可以分为监督学习、无监督学习和强化学习。随着医疗健康领域数据的快速积累,机器学习在疾病预测、诊断和治疗中的应用越来越广泛,为提升医疗服务质量和效率提供了强有力的技术支持。
哈__
2024/07/03
8042
【机器学习】机器学习与医疗健康在疾病预测中的融合应用与性能优化新探索
【机器学习】机器学习与自然语言处理的融合应用与性能优化新探索
自然语言处理(NLP)是计算机科学中的一个重要领域,旨在通过计算机对人类语言进行理解、生成和分析。随着深度学习和大数据技术的发展,机器学习在自然语言处理中的应用越来越广泛,从文本分类、情感分析到机器翻译和对话系统,都展示了强大的能力。本文将详细介绍机器学习在自然语言处理中的应用,包括数据预处理、模型选择、模型训练和性能优化。通过具体的案例分析,展示机器学习技术在自然语言处理中的实际应用,并提供相应的代码示例。
E绵绵
2024/07/08
3110
PyTorch-24h 01_PyTorch深度学习流程
以学习一条直线y=ax+b为例演示PyTorch深度学习流程。末尾(第6节)有完整代码。笔记写的比较简单,详细的Notebook见24小时入门PyTorch深度学习。
一只大鸽子
2023/02/24
3950
PyTorch-24h  01_PyTorch深度学习流程
PyTorch-24h 02_分类问题
loss:loss函数用于衡量模型预测和实际值的差距。不同的问题需要不同的loss函数。例如,回归问题可能用MAE,二分类问题可能用binary cross entropy。 优化器:优化器用来更新模型参数,一般使用SGD(torch.optim.SGD())或Adam(torch.optim.Adam())。
一只大鸽子
2023/02/24
3640
PyTorch-24h  02_分类问题
岩石or金属,Pytorch经典二分类问题
今天我们使用的是声呐的数据集,本数据集使用声呐探测了金属和岩石,记录了它返回的波长。
Tom2Code
2023/12/11
2100
岩石or金属,Pytorch经典二分类问题
【深度学习实验】线性模型(二):使用NumPy实现线性模型:梯度下降法
本实验中,gradient_descent函数实现了梯度下降法的具体过程。它通过调用initialize_parameters函数初始化模型参数,然后在每次迭代中计算模型预测值、梯度以及更新参数值。
Qomolangma
2024/07/29
1810
【深度学习实验】线性模型(二):使用NumPy实现线性模型:梯度下降法
推荐阅读
【深度学习实验】线性模型(四):使用Pytorch实现线性模型:使用随机梯度下降优化器训练模型
1390
【深度学习】使用 PyTorch 实现回归问题
9700
【python】在【机器学习】与【数据挖掘】中的应用:从基础到【AI大模型】
3080
一文带你了解机器学习的四大框架PyTorch、TensorFlow、Keras、Scikit-learn
1.4K1
Python深度学习框架:PyTorch、Keras、Scikit-learn、TensorFlow如何使用?学会轻松玩转AI!
2.1K0
深度揭秘,教你驾驭 AI 大模型的无限可能
1870
深度学习中的文本分类方法汇总相关代码及调优trick
1.9K0
分别用逻辑回归和决策树实现鸢尾花数据集分类
1.6K0
如何使用神经网络模型解决分类、聚类、回归和标注任务:基于 PyTorch 的实现与分析
6360
基于sklearn的LogisticRegression鸢尾花多类分类实践
1.6K0
03-使用PyTorch处理最简单的神经网络分类任务(笔记+代码)
5K0
【深度学习实验】线性模型(三):使用Pytorch实现简单线性模型:搭建、构造损失函数、计算损失值
2280
应用深度学习EEGNet来处理脑电信号
1.3K0
基于鸢尾花数据集的逻辑回归分类实践
5760
【机器学习】机器学习与医疗健康在疾病预测中的融合应用与性能优化新探索
8042
【机器学习】机器学习与自然语言处理的融合应用与性能优化新探索
3110
PyTorch-24h 01_PyTorch深度学习流程
3950
PyTorch-24h 02_分类问题
3640
岩石or金属,Pytorch经典二分类问题
2100
【深度学习实验】线性模型(二):使用NumPy实现线性模型:梯度下降法
1810
相关推荐
【深度学习实验】线性模型(四):使用Pytorch实现线性模型:使用随机梯度下降优化器训练模型
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验