pytorch实战——气温预测

2023-10-23 17:10
文章标签 实战 pytorch 预测 气温

本文主要是介绍pytorch实战——气温预测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • year,month,day,week 分别表示具体的时间
  • temp_2:前天的最高温度值
  • temp_1:昨天的最高温度值
  • average:在历史中,每年这一天的平均最高温度值
  • actual:这就是我们的标签值,当天的真实最高温度
  • friend:你的朋友猜测的可能值
#coding=utf-8
from ast import increment_lineno
from cProfile import label
from pickletools import optimize
from pyexpat import features
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import torch
import torch.optim as optim
import warnings
import datetime
from sklearn import preprocessing
# ***************************************读入数据********************************************#
#读入数据
data=pd.read_csv('temps.csv')
#展示前几行数据
print(data.head())
#数据维度,列表示特征值
# print("data_dim:",data.shape)
# ******************************************************************************************## *******************************************处理时间数据************************************#
#处理时间数据
years =data['year']
months = data['month']
days = data['day']#datetime格式
#必须把str转换为datetime。转换方法是通过datetime.strptime()实现
#datetime.datetime.strptime:万能的日期格式转
dates = [str(int(year)) + '-' + str(int(month)) + '-' + str(int(day))
for year, month, day in zip(years, months, days)]dates = [datetime.datetime.strptime(date,'%Y-%m-%d') for date in dates]
#输出时间
# print(dates[:5])
# 将week转为独热编码
data = pd.get_dummies(data)
print(data.head(5))
# **************************************************************************************## ****************************************************画图******************************#
#准备画图 指定默认风格
# plt.style.use('fivethirtyeight')# #设置布局
# fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2,ncols=2,figsize=(15, 15))
# #X轴上旋转45度并且右对齐
# fig.autofmt_xdate(rotation=45)# #第一幅图
# ax1.plot(dates,data['actual'])#画图 x轴为时间  y轴为真实温度
# ax1.set_xlabel('')
# ax1.set_ylabel('Temperature')
# ax1.set_title('Max Temp')# #第二幅图
# ax2.plot(dates, data['temp_1'])  # 昨天
# ax2.set_xlabel('')
# ax2.set_ylabel('Temperature')
# ax2.set_title('Previous Max Temp')# #第三幅图
# ax3.plot(dates, data['temp_2'])  # 前天
# ax3.set_xlabel('Date')
# ax3.set_ylabel('Temperature')
# ax3.set_title('Two Days Prior Max Temp')# #第四幅图
# ax4.plot(dates, data['friend'])  # friend
# ax4.set_xlabel('Date')
# ax4.set_ylabel('Temperature')
# ax4.set_title('Friend Estimate')  #tight_layout会自动调整子图参数,使之填充整个图像区域#会自动调整子图参数,使之填充整个图像区域。这是个实验特性,可能在一些情况下不工作。它仅仅检查坐标轴标签、刻度标签以及标题的部分。
# plt.tight_layout(pad=2)
#显示图片
# plt.show()
# **************************************************************************************## **********************************数据预处理******************************************##标签
labels=np.array(data['actual'])#将标签去除掉
data=data.drop('actual',axis=1)#名字单独保存一下
datas=list(data.columns)#转换格式
data=np.array(data)#将数据标准化
#fit_transform是fit和transform的组合,既包括了训练又包含了转换。
inputs = preprocessing.StandardScaler().fit_transform(data)
# **************************************************************************************## **************************************构建网络模型*************************************#
# x=torch.tensor(inputs,dtype=float)
# y=torch.tensor(labels,dtype=float)# #初始化权重参数
# #(14,128)表示将14个特征  转为  隐层的128个特征 weights权重参数
# weights = torch.randn((14, 128), dtype=float, requires_grad=True)
# #biases 偏置参数 对128个特征做微调
# biases = torch.randn(128, dtype=float, requires_grad=True)# #将128个特征转为一个特征作为输出
# weights2 = torch.randn((128, 1), dtype=float, requires_grad=True)
# biases2 = torch.randn(1, dtype=float, requires_grad=True)# #设置学习率
# learning_rate=0.005#若偏差较大则改变学习率
# #损失值
# losses=[]# for i in range(1000):
#     #计算隐层
#     hidden=x.mm(weights) + biases#     #加入激活函数:除了最后一层,都会连权重层(后连接激活函数)
#     hidden=torch.relu(hidden)#     #预测结果
#     pre=hidden.mm(weights2)+biases2#     #计算损失
#     loss = torch.mean((pre - y) **2)
#     losses.append(loss.data.numpy())#     #打印损失值
#     if i % 100==0:
#         print('loss',loss)#     #反向传播
#     loss.backward()#     #更新参数
#     #更新参数,-号表示反方向,梯度下降任务
#     weights.data.add_(-learning_rate * weights.grad.data)
#     biases.data.add_ (-learning_rate * biases.grad.data)
#     weights2.data.add_(-learning_rate * weights2.grad.data)
#     biases2.data.add_(-learning_rate * biases2.grad.data)#     # 每次迭代都得记得清空
#     weights.grad.data.zero_()
#     biases.grad.data.zero_()
#     weights2.grad.data.zero_()
#     biases2.grad.data.zero_()# **************************************************************************************## **************************************构建简单网络模型**********************************#
input_size=inputs.shape[1]
hidden_size=128
output_size=1
batch_size=16
Mynn=torch.nn.Sequential(torch.nn.Linear(input_size,hidden_size),torch.nn.Sigmoid(),torch.nn.Linear(hidden_size,output_size),)Loss = torch.nn.MSELoss(reduction='mean')
# reduction='mean'
optimizer=torch.optim.Adam(Mynn.parameters(),lr=0.01)#训练网络
Losses=[]
for i in range(1000):batch_loss=[]#使用Mini-Batch 方法来进行训练for start in range(0, len(inputs), batch_size):end = start + batch_size if start + batch_size < len(inputs) else len(inputs)xx = torch.tensor(inputs[start:end],dtype = torch.float,requires_grad = True)yy = torch.tensor(labels[start:end],dtype = torch.float,requires_grad = True)yy = yy.reshape(-1, 1)#计算预测值prediction=Mynn(xx)# print(yy.shape)#计算预测值和真实值的差值l=Loss(prediction,yy)#清空迭代optimizer.zero_grad()#反向传播l.backward(retain_graph=True)#更新参数optimizer.step()#将损失值存储batch_loss.append(l.data.numpy())#打印一下if i%100==0:Losses.append(np.mean(batch_loss))print(i,np.mean(batch_loss))# # **************************************************************************************## # ************************************预测模型和真实值 画图*******************************#
dx=torch.tensor(inputs,dtype=torch.float)
predict=Mynn(dx).data.numpy()#创建一个表格来存日期和其对应的标签数据
true_data=pd.DataFrame(data={'data':dates,'actual':labels})#创建时间用于对预测模型的使用
months=data[:,datas.index('month')]
days = data[:, datas.index('day')]
years =data[:,datas.index('year')]test_dates = [str(int(year)) + '-' + str(int(month)) + '-' + str(int(day))for year, month, day in zip(years, months, days)
]test_dates = [datetime.datetime.strptime(date, '%Y-%m-%d') for date in test_dates
]
#predict.reshape(-1) 要一列的值,不能为矩阵
predit_data=pd.DataFrame(data={'data':test_dates,'predction':predict.reshape(-1)})#画图
plt.plot(true_data['data'],true_data['actual'],'b-',label='actiual')
plt.plot(predit_data['data'],predit_data['predction'],'ro',label='predction')plt.xticks(rotation=60)
plt.legend()
plt.xlabel('Data')
plt.ylabel('Maximum Temperature')
plt.title('Actual and Predicted')plt.show()# # **************************************************************************************#

在这里插入图片描述

这篇关于pytorch实战——气温预测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/269241

相关文章

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

springboot实战学习(1)(开发模式与环境)

目录 一、实战学习的引言 (1)前后端的大致学习模块 (2)后端 (3)前端 二、开发模式 一、实战学习的引言 (1)前后端的大致学习模块 (2)后端 Validation:做参数校验Mybatis:做数据库的操作Redis:做缓存Junit:单元测试项目部署:springboot项目部署相关的知识 (3)前端 Vite:Vue项目的脚手架Router:路由Pina:状态管理Eleme

深度学习实战:如何利用CNN实现人脸识别考勤系统

1. 何为CNN及其在人脸识别中的应用 卷积神经网络(CNN)是深度学习中的核心技术之一,擅长处理图像数据。CNN通过卷积层提取图像的局部特征,在人脸识别领域尤其适用。CNN的多个层次可以逐步提取面部的特征,最终实现精确的身份识别。对于考勤系统而言,CNN可以自动从摄像头捕捉的视频流中检测并识别出员工的面部。 我们在该项目中采用了 RetinaFace 模型,它基于CNN的结构实现高效、精准的

项目实战系列三: 家居购项目 第四部分

购物车 🌳购物车🍆显示购物车🍆更改商品数量🍆清空购物车&&删除商品 🌳生成订单 🌳购物车 需求分析 1.会员登陆后, 可以添加家居到购物车 2.完成购物车的设计和实现 3.每添加一个家居,购物车的数量+1, 并显示 程序框架图 1.新建src/com/zzw/furns/entity/CartItem.java, CartItem-家居项模型 /***

Birt报表开发实战

我就截图描述得了,没什么含金量,看图基本明白的。 1.开始 a.创建报表文件 b.数据源配置 c.配置数据集 2.网格报表 拖拉式操作,很方便 3.预览效果 其他报表的操作也基本不难,就不扯了! 2.级联参数 官方视频教程:http://demo.actuate.com/demos/cascade/cascade.html