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

相关文章

pytorch+torchvision+python版本对应及环境安装

《pytorch+torchvision+python版本对应及环境安装》本文主要介绍了pytorch+torchvision+python版本对应及环境安装,安装过程中需要注意Numpy版本的降级,... 目录一、版本对应二、安装命令(pip)1. 版本2. 安装全过程3. 命令相关解释参考文章一、版本对

基于Canvas的Html5多时区动态时钟实战代码

《基于Canvas的Html5多时区动态时钟实战代码》:本文主要介绍了如何使用Canvas在HTML5上实现一个多时区动态时钟的web展示,通过Canvas的API,可以绘制出6个不同城市的时钟,并且这些时钟可以动态转动,每个时钟上都会标注出对应的24小时制时间,详细内容请阅读本文,希望能对你有所帮助...

Spring AI与DeepSeek实战一之快速打造智能对话应用

《SpringAI与DeepSeek实战一之快速打造智能对话应用》本文详细介绍了如何通过SpringAI框架集成DeepSeek大模型,实现普通对话和流式对话功能,步骤包括申请API-KEY、项目搭... 目录一、概述二、申请DeepSeek的API-KEY三、项目搭建3.1. 开发环境要求3.2. mav

从零教你安装pytorch并在pycharm中使用

《从零教你安装pytorch并在pycharm中使用》本文详细介绍了如何使用Anaconda包管理工具创建虚拟环境,并安装CUDA加速平台和PyTorch库,同时在PyCharm中配置和使用PyTor... 目录背景介绍安装Anaconda安装CUDA安装pytorch报错解决——fbgemm.dll连接p

pycharm远程连接服务器运行pytorch的过程详解

《pycharm远程连接服务器运行pytorch的过程详解》:本文主要介绍在Linux环境下使用Anaconda管理不同版本的Python环境,并通过PyCharm远程连接服务器来运行PyTorc... 目录linux部署pytorch背景介绍Anaconda安装Linux安装pytorch虚拟环境安装cu

Python与DeepSeek的深度融合实战

《Python与DeepSeek的深度融合实战》Python作为最受欢迎的编程语言之一,以其简洁易读的语法、丰富的库和广泛的应用场景,成为了无数开发者的首选,而DeepSeek,作为人工智能领域的新星... 目录一、python与DeepSeek的结合优势二、模型训练1. 数据准备2. 模型架构与参数设置3

Java实战之利用POI生成Excel图表

《Java实战之利用POI生成Excel图表》ApachePOI是Java生态中处理Office文档的核心工具,这篇文章主要为大家详细介绍了如何在Excel中创建折线图,柱状图,饼图等常见图表,需要的... 目录一、环境配置与依赖管理二、数据源准备与工作表构建三、图表生成核心步骤1. 折线图(Line Ch

Java使用Tesseract-OCR实战教程

《Java使用Tesseract-OCR实战教程》本文介绍了如何在Java中使用Tesseract-OCR进行文本提取,包括Tesseract-OCR的安装、中文训练库的配置、依赖库的引入以及具体的代... 目录Java使用Tesseract-OCRTesseract-OCR安装配置中文训练库引入依赖代码实

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程

《在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程》本文介绍了在Java中使用ModelMapper库简化Shapefile属性转JavaBean的过程,对比... 目录前言一、原始的处理办法1、使用Set方法来转换2、使用构造方法转换二、基于ModelMapper