Pytorch实战——气温预测(基础)附完整代码

2023-11-09

一. 数据集

http://链接:https://pan.baidu.com/s/1mVAIWZquUyaCpgj1K51o5A 提取码:abcd

该数据集记录了一年内的气温信息,我们将针对于此进行分析

以上是部分数据情况,请查看 

二.气温预测实战

2.1 读取数据,查看数据

data = pd.read_csv("temps.csv")
print(data.head()) #查看数据是什么样子的

  • year,moth,day,week分别表示的具体的时间
  • temp_2:前天的最高温度值
  • temp_1:昨天的最高温度值
  • average:在历史中,每年这一天的平均最高温度值
  • actual:这就是我们的标签值了,当天的真实最高温度
  • friend:这是朋友的猜测值,不怎么重要,可看可不看

2.2  查看维度

print('查看数据维度:',data.shape)

 说明了一共有348条数据,9个特征

2.3 处理时间数据

import datetime
years = data['year']
months = data['month']
days = data['day']
#转化为datetime格式
date = [str(int(year)) + '-' + str(int(month)) + '-' + str(int(day)) for year,month,day in zip(years,months,days)]
date = [datetime.datetime.strptime(date_1,'%Y-%m-%d') for date_1 in date ]
print(date[:5])

 此时可看到,时间数据都存在于一起

2.4 绘制特征图像


#解下来进行绘图操作
plt.style.use('fivethirtyeight')
fig,((ax1,ax2),(ax3,ax4)) = plt.subplots(nrows=2, ncols=2, figsize= (10,10))
fig.autofmt_xdate(rotation = 45)

ax1.plot(date,data['actual'])
ax1.set_xlabel(' ')
ax1.set_ylabel('Temperature')
ax1.set_title('Max Temp')

ax2.plot(date, data['temp_1'])
ax2.set_xlabel('')
ax2.set_ylabel('Temperature')
ax2.set_title('Previous Max Temp')

ax3.plot(date, data['temp_2'])
ax3.set_xlabel('Date')
ax3.set_ylabel('Temperature')
ax3.set_title('Two Days Prior Max Temp')

ax4.plot(date, data['friend'])
ax4.set_xlabel('Date')
ax4.set_ylabel('Temperature')
ax4.set_title('Friend Estimate')

plt.tight_layout(pad=2)
plt.show()

结果:

       注意: 设置坐标倾斜角度,防止累计在一起,造成重叠。

2.5 对于字符串进行编码

在原数据集当中,因为在week列中存在字符串,并不是整数类型,所以这个时候进行编码处理,这里使用pandas中的get_dummies进行编码

data = pd.get_dummies(data)
print(data.head(5))

 

可见对于字符串进行了编码,对于存在的写为“1”,不存在的写为“0”

 2.6 标签操作

对于标签,在该数据集当中也就是actual,我们先将其存入labels中,后将这一列在数据集当中删除,因为之后训练不会用该列。

labels = np.array(data['actual'])
data = data.drop('actual',axis=1)
data_list = list(data.columns) #保存删除actual列后的名字
#print(data_list)

2.7 归一化处理

在数据集当中,很明显数据集是大大小小的,有一些数值非常大,一些数值非常小,这个时候需要对其进行归一化,将所有数值按照权重、影响占比等缩放在(0,1)的范围当中

from sklearn import preprocessing
input_data = preprocessing.StandardScaler().fit_transform(data)

2.8 转化格式

将上述inpu_data,labels转化为tensor格式,pytorch可以运用这个格式。

#转化为torch中的可用格式tensor
x = torch.tensor(input_data , dtype= float)
y = torch.tensor(labels , dtype=float)

2.8 构建网络模型


#权重参数初始化
weights = torch.randn((14,128),dtype=float,requires_grad=True)
biases = torch.randn(128,dtype=float,requires_grad=True)
weights2 = torch.randn((128,1),dtype=float,requires_grad=True)
biases2 = torch.randn(1,dtype=float,requires_grad=True)

learning_rate = 0.001
losses = []

for i in range(1000):
    #计算隐藏层
    hidden = x.mm(weights)+biases
    #给激活函数
    hidden = torch.relu(hidden)
    #预测
    predictions = hidden.mm(weights2)+biases2
    #计算损失
    loss = torch.mean((predictions - 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_()

首先要进行权重的初始化,来为后面的学习打下基础,切记需要将每一次迭代后的梯度进行清零,否则将会一直累加,影响结果。

各个参数的设置是根据前面的特征数量来进行确定,我们要进行128个神经元的设计,需要凑一个14*128的矩阵给weights,同理,最后预测结果为一个结果,所以我们要将weights2设置为128*1.

最终预测结果为:

 可见,使用该方法来进行预测时,其结果准确率不怎么高,下次我将更新神经网络,将准确率提高!谢谢观看!

完整代码如下:

import numpy as np
import pandas as pd
import matplotlib
import torch
from matplotlib import pyplot as plt

data = pd.read_csv("temps.csv")
print(data.head()) #查看数据是什么样子的
print('查看数据维度:',data.shape)
# 接下来进行处理时间数据,因为此时数据中的数据不支持计算机进行特征提取
import datetime
years = data['year']
months = data['month']
days = data['day']
#转化为datetime格式
date = [str(int(year)) + '-' + str(int(month)) + '-' + str(int(day)) for year,month,day in zip(years,months,days)]
date = [datetime.datetime.strptime(date_1,'%Y-%m-%d') for date_1 in date ]
print(date[:5])

#解下来进行绘图操作
plt.style.use('fivethirtyeight')
fig,((ax1,ax2),(ax3,ax4)) = plt.subplots(nrows=2, ncols=2, figsize= (10,10))
fig.autofmt_xdate(rotation = 45)

ax1.plot(date,data['actual'])
ax1.set_xlabel(' ')
ax1.set_ylabel('Temperature')
ax1.set_title('Max Temp')

ax2.plot(date, data['temp_1'])
ax2.set_xlabel('')
ax2.set_ylabel('Temperature')
ax2.set_title('Previous Max Temp')

ax3.plot(date, data['temp_2'])
ax3.set_xlabel('Date')
ax3.set_ylabel('Temperature')
ax3.set_title('Two Days Prior Max Temp')

ax4.plot(date, data['friend'])
ax4.set_xlabel('Date')
ax4.set_ylabel('Temperature')
ax4.set_title('Friend Estimate')

plt.tight_layout(pad=2)
plt.show()

#处理字符串数据
data = pd.get_dummies(data)
print(data.head(5))

labels = np.array(data['actual'])
data = data.drop('actual',axis=1)
data_list = list(data.columns) #保存删除actual列后的名字
#print(data_list)
data = np.array(data)
#非常明显,data数据大大小小,现在进行归一化
from sklearn import preprocessing
input_data = preprocessing.StandardScaler().fit_transform(data)
# print(input_data[0]),这里采用sklearn中的归一化函数
print(labels)
#转化为torch中的可用格式tensor
x = torch.tensor(input_data , dtype= float)
y = torch.tensor(labels , dtype=float)

#权重参数初始化
weights = torch.randn((14,128),dtype=float,requires_grad=True)
biases = torch.randn(128,dtype=float,requires_grad=True)
weights2 = torch.randn((128,1),dtype=float,requires_grad=True)
biases2 = torch.randn(1,dtype=float,requires_grad=True)

learning_rate = 0.001
losses = []

for i in range(1000):
    #计算隐藏层
    hidden = x.mm(weights)+biases
    #给激活函数
    hidden = torch.relu(hidden)
    #预测
    predictions = hidden.mm(weights2)+biases2
    #计算损失
    loss = torch.mean((predictions - 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_()

predicted = predictions.detach().numpy()
print(predicted)
print('*******')
print(predictions)
plt.plot(date, labels, label='Actual')
plt.plot(date, predicted, label='Predicted')
plt.xlabel('Date')
plt.ylabel('Temperature')
plt.title('Actual vs Predicted')
plt.legend()
plt.show()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pytorch实战——气温预测(基础)附完整代码 的相关文章

随机推荐

  • RTT-信号量

    RTT 信号量 概念 信号量就是一个标记位 释放信号量就是标记位加一 获取信号量后自动减一 减到0后不能再获取了 信号量 Semaphore 是一种实现线程间通信的机制 实现线程之间同步或临界资源的互斥访问 常用于协助一组相互竞争的线程来访
  • Vue使用echarts地图进阶2(实现多级下钻功能)

    echarts地图实现多级下钻功能 点击下钻效果图 先来小看一下 多级下钻和单次下钻跳转json文件的区别 1 如果要实现多级下钻并且展示子区域的话 下钻点击事件请求的JSON必须是该点击区域的全面父级JSON 即没有自己 只有孩子们组成
  • [深入研究4G/5G/6G专题-30]: 5G NR开机流程5.1 - 基站与核心网的连接(NG Setup Request、NG Setup Response)与消息详解。

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 目录 前言 前置条件 第1章 5G RAN 核心网架构 1 1 LTE网络架构
  • 【(项目)Web服务器的实现】——自主实现一个Web服务器项目,通过该服务器搭建个人网站(保姆级教程),可写在简历上

    个人主页 努力学习的少年 版权 本文由 努力学习的少年 原创 在CSDN首发 需要转载请联系博主 如果文章对你有帮助 欢迎关注 点赞 收藏 一键三连 和订阅专栏哦 目录 前言 一 项目介绍 1 什么是Web服务器 2 项目展示 二 认识ht
  • 布尔(BOOL)代数及其运算

    布尔 BOOL 代数以及运算 简介 二进制值是计算机编码 存储和操作信息的核心 所以围绕数值0和1的研究已经演化出了丰富的数学知识体系 这起源于1850年前后乔治 布尔 George Boole 1815 1864 的工作 因此也称为布尔代
  • typescript ---- 基础篇

    全局安装typescript npm i g typescript ts的文件后缀是以 ts来结尾的 浏览器无法解析ts文件的代码 需要编译成js文件的代码 执行命令 tsc index01 ts 转换成 gt index01 js 手动编
  • QT获取当天是本年的第几周

    一开始觉得上网找一段代码抄了算了 然后看了这一篇 QT获取某个日期是第几周 zjl yujizhong的博客 CSDN博客 qt获取星期几d记录Qt获取当年第几周的函数 以免忘记 1671465600https blog csdn net
  • 用 Google Cloud Functions 与 Go 1.11 实现“无服务器”

    如今 Google Cloud 在云函数 Cloud Functions 支持 Go 1 11 为 Go 项目寻找无服务器平台 可以使用 Go 1 11 来为最新项目提供帮助 这两者都由谷歌开发 但持续了一段时间不相互支持 这令不少人困惑
  • 松下 OPF CMOS影像传感器

    一 概述 不久前 松下在其国际网站公布了关于有机光电导膜 OPF CMOS影像传感器技术的最新研发进展 并表示该技术已趋于成熟 有望在未来一段时间内正式投入商用 此外 松下还在3月15日至16日 于英国伦敦举行的 Image Sensors
  • windows下安装clang+llvm(使用visual studio2017)或 为阅读llvm源码

    18 6 16更新 发现最开始的图片没有显示 现在更正了 LLVM对新手的链接 https clang llvm org get started html 为了更好地明白 下面是中文博客 再次表达感谢 https www cnblogs c
  • 数字信号处理知识点总结(四):快速傅里叶变换(FFT)

    本篇文章主要介绍快速傅里叶变换 FFT 的优化原理 基 2FFT算法的推导 实现及用FFT实现的线性卷积 主要参考知乎 精品讲义 快速傅里叶变换 Fast Fourier Transformation 以及一些数字信号处理的书籍整理而成 参
  • centos7安装elasticsearch-6.6.0

    1 下载elasticsearch 6 6 0 liucf node1 softfile wget https artifacts elastic co downloads elasticsearch elasticsearch 6 6 0
  • 《Java编程思想》(第4版)学习总结

    一次偶然的机会让我接触到了 Java编程思想 这本书 之前他们说是Thinking in Java 我当时并不知道 后来查资料的时候才知道是这本经典的书籍 于是就忍不住开始阅读了 开始感觉这本书讲解的东西不太理解 然后经过反复的思考才感觉有
  • WIN32API获取进程句柄的2种方式

    0x00 相关说明 Windows系统中 进程句柄是进程最重要的属性之一 在应用层可以通过进程句柄直接对指定进程的内存空间进行读写 0x01 通过进程名获取进程句柄 首先通过进程名得到进程ID 1 通过 CreateToolhelp32Sn
  • TNSName配置小结

    本文来自CSDN博客 http blog csdn net selfsupport archive 2010 07 11 5726303 aspx oracle网络配置 三个配置文件 listener ora sqlnet ora tnsn
  • SummerTTS - 开源本地编译运行,没有任何依赖,不需要联网,开箱即用的语音合成(TTS)项目

    推荐我的如下语音合成项目 TTS GitHub huakunyang SummerTTS SummerTTS 是一个基于C 的独立编译的中文语音合成项目 可以本地运行不需要网络 而且没有额外的依赖 一键编译完成即可用于中文语音合成 Summ
  • 指纹识别 matlab

    指纹识别主要包括这几个部分 指纹采集 指纹图像预处理 特征点提取 特征点匹配 输出显示 我们的大作业是指纹识别 matlab 找了很多资料 上面的程序要么不全 要么是有错误 下面是我找了很久并且能够运行的程序 下面是运行的图片
  • 如何把Application项目转为Library项目

    如何把Application项目转为Library项目 本篇文章针对项目里含有ButterKnife框架的情况 Module里的Build gradle apply plugin com android application 改成appl
  • 台达b3伺服参数设置方法_技术分享

    西门子博途的全套视频教程下载 西门子S7 1500内部培训资料下载 台达 ASDA 伺服定位演示系统 控制要求 1 由台达 PLC 和台达伺服组成一个简单的定位控制演示系统 通过 PLC 发送脉冲控制伺服 实现原点回归 相对定位和绝对定位功
  • Pytorch实战——气温预测(基础)附完整代码

    一 数据集 http 链接 https pan baidu com s 1mVAIWZquUyaCpgj1K51o5A 提取码 abcd 该数据集记录了一年内的气温信息 我们将针对于此进行分析 以上是部分数据情况 请查看 二 气温预测实战