当前位置: 首页 > article >正文

使用线性回归模型逼近目标模型 | PyTorch 深度学习实战

前一篇文章,计算图 Compute Graph 和自动求导 Autograd | PyTorch 深度学习实战

本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started

使用线性回归模型逼近目标模型

  • 什么是回归
  • 什么是线性回归
  • 使用 PyTorch 实现线性回归模型
    • 代码
    • 执行结果

什么是回归

在统计学中,回归分析(regression analysis)指的是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。

简单说,就是使用统计学手段,分析变量之间的规律。发现规律后,可以根据给定的数据猜测特征空间的因变量1的数据。

在这里插入图片描述
参考文章:https://zhuanlan.zhihu.com/p/669597409

什么是线性回归

用一条直线去逼近数据的分布,参考定义:

A linear regression is a straight line that describes how the values of a response variable y y y change as the predictor variable x x x changes.

线性回归在实际中,可以包含多元的情况,比如:

z = w 1 x + w 2 y z = w_1 x + w_2 y z=w1x+w2y

更多线性回归介绍,参考文章。

使用 PyTorch 实现线性回归模型

实现量化投资:现在假如我们观测到了某支股票的数据 v v v,并且这支股票和石油的价格 x x x、黄金的价格 y y y和原煤的价格 z z z 有关联。因此,我们取得了不同时刻的 x x x y y y z z z 和对应的股票价格 v v v,现在,依据这些数据,建立一个方程式:

v = a x + b y + c z + d v = ax + by + cz + d v=ax+by+cz+d

此时,依赖历史采集的数据,我们来求 a,b,c,d 的值。
使用 PyTorch,这个程序实现如下。

代码

import torch
import matplotlib.pyplot as plt
import numpy as np

# X and Y data,观测数据,包含多条
# 每条包含 3 个数据,分别代表石油、黄金、原煤的价格
x_data = [[65., 80., 75.],
          [89., 88., 93.],
          [80., 91., 90.],
          [30., 98., 100.],
          [50., 66., 70.]]
# 对应的这支股票的价格
y_data = [[152.],
          [185.],
          [189.],
          [196.],
          [142.]]

# 定义输入 tensor 和输出 tensor 的变量
x=torch.autograd.Variable(torch.Tensor(x_data)) 
y=torch.autograd.Variable(torch.Tensor(y_data))

# Our hypothesis XW+b,定义模型及参数
model=torch.nn.Linear(3,1,bias=True)

# cost criterion,定义损失函数
criterion=torch.nn.MSELoss()

# Minimize,优化器
optimizer=torch.optim.SGD(model.parameters(),lr=1e-7)

# 训练轮数
epochs=200
cost_h=np.zeros(epochs)

# Train the model,对于这个简单的问题,没有使用 SGD,每次都是将数据录入
for step in range(epochs):
    optimizer.zero_grad()
    hypothesis=model(x) # Our hypothesis
    cost=criterion(hypothesis,y)
    cost.backward()
    optimizer.step()
    cost_h[step]=cost.data.numpy()
    print(step,'Loss:',cost.data.numpy(),'\nPredict:\n',hypothesis.data.numpy())

for name, param in model.named_parameters():
    if param.requires_grad:
        print(name, param.data)

plt.plot(cost_h)
plt.show()

执行结果

使用 Python 运行上述程序,结果如下:

weight tensor([[-0.0980,  0.5064,  0.4115]])
bias tensor([-0.1257])

在这里插入图片描述

因为模型的定义是:

model=torch.nn.Linear(3,1,bias=True)

也就是包含了三个参数和一个偏置,最终机器学习得到的公式就是:
v = − 0.0980 x + 0.5064 y + 0.4115 z − 0.1257 v = -0.0980x + 0.5064y + 0.4115z -0.1257 v=0.0980x+0.5064y+0.4115z0.1257

我们就可以由某一天的黄金、石油、原煤的价格,来预测这支股票的价格。


  1. 因变量(dependent variable)函数中的专业名词,也叫函数值。函数关系式中,某些特定的数会随另一个(或另几个)会变动的数的变动而变动,就称为因变量。如:Y=f(X)。此式表示为:Y随X的变化而变化。Y是因变量,X是自变量。 ↩︎


http://www.kler.cn/a/532406.html

相关文章:

  • 如何不更新application.yml而更新spring的配置
  • Python 科学计算
  • Starrocks 对比 Clickhouse
  • 【1】快手面试题整理
  • 将markdown文件和LaTex公式转为word
  • C++ Primer 迭代器
  • Go方法接收者中值类型接收者和指针类型接收者的对比
  • STM32F103ZET6完整技术点(持续更新~)
  • 信息安全专业2025最新毕业设计选题汇总:课题精选
  • gltf工具
  • 游戏引擎学习第86天
  • 体系自适应的物联网漏洞挖掘系统研究背景及意义:物联网漏洞挖掘概述之物联网漏洞挖掘技术前景
  • 前端开发中的“原生模块化”——深入解析ES模块(ESM)的使用与优化
  • DeepSeek 阐述 2025年前端发展趋势
  • [FPGA] MIPS 12条整数指令【2】
  • 解决 Pandas DataFrame 索引错误:KeyError:0
  • gesp(C++六级)(11)洛谷:P11246:[GESP202409 六级] 小杨和整数拆分
  • Android ExpandableListView 详细用法全解析
  • 调用高德地图 api 开发地图组件
  • FPGA 时钟多路复用
  • SQL序列分析法:核心技巧与实战方法论 | 从用户行为分析到工业设备监控的通用解决方案
  • ES6Module
  • 蓝桥杯试题:排序
  • MyBatisPlus(SpringBoot版)功能说明
  • DeepSeek辅助学术写作进行大纲设计效果如何
  • PVE纵览-掌握 PVE USB 直通:让虚拟机与物理设备无缝连接