PyTorch一小时掌握之神经网络气温预测篇
作者:我是小白呀 发布时间:2022-07-30 23:52:19
概述
具体的案例描述在此就不多赘述. 同一数据集我们在机器学习里的随机森林模型中已经讨论过.
导包
import numpy as np
import pandas as pd
import datetime
import matplotlib.pyplot as plt
from pandas.plotting import register_matplotlib_converters
from sklearn.preprocessing import StandardScaler
import torch
数据读取
# ------------------1. 数据读取------------------
# 读取数据
data = pd.read_csv("temps.csv")
# 看看数据长什么样子
print(data.head())
# 查看数据维度
print("数据维度:", data.shape)
# 产看数据类型
print("数据类型:", type(data))
输出结果:
year month day week temp_2 temp_1 average actual friend
0 2016 1 1 Fri 45 45 45.6 45 29
1 2016 1 2 Sat 44 45 45.7 44 61
2 2016 1 3 Sun 45 44 45.8 41 56
3 2016 1 4 Mon 44 41 45.9 40 53
4 2016 1 5 Tues 41 40 46.0 44 41
数据维度: (348, 9)
数据类型: <class 'pandas.core.frame.DataFrame'>
数据预处理
# ------------------2. 数据预处理------------------
# datetime 格式
dates = pd.PeriodIndex(year=data["year"], month=data["month"], day=data["day"], freq="D").astype(str)
dates = [datetime.datetime.strptime(date, "%Y-%m-%d") for date in dates]
print(dates[:5])
# 编码转换
data = pd.get_dummies(data)
print(data.head())
# 画图
plt.style.use("fivethirtyeight")
register_matplotlib_converters()
# 标签
labels = np.array(data["actual"])
# 取消标签
data = data.drop(["actual"], axis= 1)
print(data.head())
# 保存一下列名
feature_list = list(data.columns)
# 格式转换
data_new = np.array(data)
data_new = StandardScaler().fit_transform(data_new)
print(data_new[:5])
输出结果:
[datetime.datetime(2016, 1, 1, 0, 0), datetime.datetime(2016, 1, 2, 0, 0), datetime.datetime(2016, 1, 3, 0, 0), datetime.datetime(2016, 1, 4, 0, 0), datetime.datetime(2016, 1, 5, 0, 0)]
year month day temp_2 ... week_Sun week_Thurs week_Tues week_Wed
0 2016 1 1 45 ... 0 0 0 0
1 2016 1 2 44 ... 0 0 0 0
2 2016 1 3 45 ... 1 0 0 0
3 2016 1 4 44 ... 0 0 0 0
4 2016 1 5 41 ... 0 0 1 0[5 rows x 15 columns]
year month day temp_2 ... week_Sun week_Thurs week_Tues week_Wed
0 2016 1 1 45 ... 0 0 0 0
1 2016 1 2 44 ... 0 0 0 0
2 2016 1 3 45 ... 1 0 0 0
3 2016 1 4 44 ... 0 0 0 0
4 2016 1 5 41 ... 0 0 1 0[5 rows x 14 columns]
[[ 0. -1.5678393 -1.65682171 -1.48452388 -1.49443549 -1.3470703
-1.98891668 2.44131112 -0.40482045 -0.40961596 -0.40482045 -0.40482045
-0.41913682 -0.40482045]
[ 0. -1.5678393 -1.54267126 -1.56929813 -1.49443549 -1.33755752
0.06187741 -0.40961596 -0.40482045 2.44131112 -0.40482045 -0.40482045
-0.41913682 -0.40482045]
[ 0. -1.5678393 -1.4285208 -1.48452388 -1.57953835 -1.32804474
-0.25855917 -0.40961596 -0.40482045 -0.40961596 2.47023092 -0.40482045
-0.41913682 -0.40482045]
[ 0. -1.5678393 -1.31437034 -1.56929813 -1.83484692 -1.31853195
-0.45082111 -0.40961596 2.47023092 -0.40961596 -0.40482045 -0.40482045
-0.41913682 -0.40482045]
[ 0. -1.5678393 -1.20021989 -1.8236209 -1.91994977 -1.30901917
-1.2198689 -0.40961596 -0.40482045 -0.40961596 -0.40482045 -0.40482045
2.38585576 -0.40482045]]
构建网络模型
# ------------------3. 构建网络模型------------------
x = torch.tensor(data_new)
y = torch.tensor(labels)
# 权重参数初始化
weights1 = torch.randn((14,128), dtype=float, requires_grad= True)
biases1 = 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(weights1) + biases1
# 加入激活函数
hidden = torch.relu(hidden)
# 预测结果
predictions = hidden.mm(weights2) + biases2
# 计算损失
loss = torch.mean((predictions - y) ** 2)
# 打印损失值
if i % 100 == 0:
print("loss:", loss)
# 反向传播计算
loss.backward()
# 更新参数
weights1.data.add_(-learning_rate * weights1.grad.data)
biases1.data.add_(-learning_rate * biases1.grad.data)
weights2.data.add_(-learning_rate * weights2.grad.data)
biases2.data.add_(-learning_rate * biases2.grad.data)
# 每次迭代清空
weights1.grad.data.zero_()
biases1.grad.data.zero_()
weights2.grad.data.zero_()
biases2.grad.data.zero_()
输出结果:
loss: tensor(4746.8598, dtype=torch.float64, grad_fn=<MeanBackward0>)
loss: tensor(156.5691, dtype=torch.float64, grad_fn=<MeanBackward0>)
loss: tensor(148.9419, dtype=torch.float64, grad_fn=<MeanBackward0>)
loss: tensor(146.1035, dtype=torch.float64, grad_fn=<MeanBackward0>)
loss: tensor(144.5652, dtype=torch.float64, grad_fn=<MeanBackward0>)
loss: tensor(143.5376, dtype=torch.float64, grad_fn=<MeanBackward0>)
loss: tensor(142.7823, dtype=torch.float64, grad_fn=<MeanBackward0>)
loss: tensor(142.2151, dtype=torch.float64, grad_fn=<MeanBackward0>)
loss: tensor(141.7770, dtype=torch.float64, grad_fn=<MeanBackward0>)
loss: tensor(141.4294, dtype=torch.float64, grad_fn=<MeanBackward0>)
数据可视化
# ------------------4. 数据可视化------------------
def graph1():
# 创建子图
f, ax = plt.subplots(2, 2, figsize=(10, 10))
# 标签值
ax[0, 0].plot(dates, labels, color="#ADD8E6")
ax[0, 0].set_xticks([""])
ax[0, 0].set_ylabel("Temperature")
ax[0, 0].set_title("Max Temp")
# 昨天
ax[0, 1].plot(dates, data["temp_1"], color="#87CEFA")
ax[0, 1].set_xticks([""])
ax[0, 1].set_ylabel("Temperature")
ax[0, 1].set_title("Previous Max Temp")
# 前天
ax[1, 0].plot(dates, data["temp_2"], color="#00BFFF")
ax[1, 0].set_xticks([""])
ax[1, 0].set_xlabel("Date")
ax[1, 0].set_ylabel("Temperature")
ax[1, 0].set_title("Two Days Prior Max Temp")
# 朋友
ax[1, 1].plot(dates, data["friend"], color="#1E90FF")
ax[1, 1].set_xticks([""])
ax[1, 1].set_xlabel("Date")
ax[1, 1].set_ylabel("Temperature")
ax[1, 1].set_title("Friend Estimate")
plt.show()
输出结果:
完整代码
import numpy as np
import pandas as pd
import datetime
import matplotlib.pyplot as plt
from pandas.plotting import register_matplotlib_converters
from sklearn.preprocessing import StandardScaler
import torch
# ------------------1. 数据读取------------------
# 读取数据
data = pd.read_csv("temps.csv")
# 看看数据长什么样子
print(data.head())
# 查看数据维度
print("数据维度:", data.shape)
# 产看数据类型
print("数据类型:", type(data))
# ------------------2. 数据预处理------------------
# datetime 格式
dates = pd.PeriodIndex(year=data["year"], month=data["month"], day=data["day"], freq="D").astype(str)
dates = [datetime.datetime.strptime(date, "%Y-%m-%d") for date in dates]
print(dates[:5])
# 编码转换
data = pd.get_dummies(data)
print(data.head())
# 画图
plt.style.use("fivethirtyeight")
register_matplotlib_converters()
# 标签
labels = np.array(data["actual"])
# 取消标签
data = data.drop(["actual"], axis= 1)
print(data.head())
# 保存一下列名
feature_list = list(data.columns)
# 格式转换
data_new = np.array(data)
data_new = StandardScaler().fit_transform(data_new)
print(data_new[:5])
# ------------------3. 构建网络模型------------------
x = torch.tensor(data_new)
y = torch.tensor(labels)
# 权重参数初始化
weights1 = torch.randn((14,128), dtype=float, requires_grad= True)
biases1 = 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(weights1) + biases1
# 加入激活函数
hidden = torch.relu(hidden)
# 预测结果
predictions = hidden.mm(weights2) + biases2
# 计算损失
loss = torch.mean((predictions - y) ** 2)
# 打印损失值
if i % 100 == 0:
print("loss:", loss)
# 反向传播计算
loss.backward()
# 更新参数
weights1.data.add_(-learning_rate * weights1.grad.data)
biases1.data.add_(-learning_rate * biases1.grad.data)
weights2.data.add_(-learning_rate * weights2.grad.data)
biases2.data.add_(-learning_rate * biases2.grad.data)
# 每次迭代清空
weights1.grad.data.zero_()
biases1.grad.data.zero_()
weights2.grad.data.zero_()
biases2.grad.data.zero_()
# ------------------4. 数据可视化------------------
def graph1():
# 创建子图
f, ax = plt.subplots(2, 2, figsize=(10, 10))
# 标签值
ax[0, 0].plot(dates, labels, color="#ADD8E6")
ax[0, 0].set_xticks([""])
ax[0, 0].set_ylabel("Temperature")
ax[0, 0].set_title("Max Temp")
# 昨天
ax[0, 1].plot(dates, data["temp_1"], color="#87CEFA")
ax[0, 1].set_xticks([""])
ax[0, 1].set_ylabel("Temperature")
ax[0, 1].set_title("Previous Max Temp")
# 前天
ax[1, 0].plot(dates, data["temp_2"], color="#00BFFF")
ax[1, 0].set_xticks([""])
ax[1, 0].set_xlabel("Date")
ax[1, 0].set_ylabel("Temperature")
ax[1, 0].set_title("Two Days Prior Max Temp")
# 朋友
ax[1, 1].plot(dates, data["friend"], color="#1E90FF")
ax[1, 1].set_xticks([""])
ax[1, 1].set_xlabel("Date")
ax[1, 1].set_ylabel("Temperature")
ax[1, 1].set_title("Friend Estimate")
plt.show()
if __name__ == "__main__":
graph1()
来源:https://blog.csdn.net/weixin_46274168/article/details/114176589


猜你喜欢
- 博主做过比较多项目的archive脚本编写,对于这种删除数据的脚本开发,肯定是一开始的话用最简单的一个delete语句,然后由于部分表数据量
- 首先我们从一个小程序导入,各定一个list,找出其中的素数,我们会这样写import mathdef is_Prims(number): &
- 导语当下的孩子们多少会被电子产品“侵袭”,那么既然都要玩游戏,为什么不选既能玩又能收获知识的呢?兴趣
- 将mat文件转为png花费了很大力气做这件事,总是出现各种错误,现在终于解决了from PIL import Imageimport mat
- 本文实例讲述了基于进程内通讯的python聊天室实现方法。分享给大家供大家参考。具体如下:#!/usr/bin/env python# Ad
- 第一节:WAP的潜能 这些日子,我们常听到WAP技术,一种手机上网的技术。从技术上讲,移动电话不可能和PC来竞争,移动电话的屏幕只能容下很少
- Python 操作文件时,我们一般要先判断指定的文件或目录是否存在,不然容易产生异常。1.文件# 是否存在import osos.path.
- FROM publish WHERE (id NOT IN (SELECT&
- MySQL 处理重复数据有些 MySQL 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据。
- 1、 二叉树的构建我们都知道二叉搜索树的特点是:当前节点的值大于它的左子树的值,小于等于右子树的值。所以我们这里可以通过迭代的方式构建二叉搜
- DJANGO_SETTINGS_MODULE使用Django时要通知Django当前使用的是哪个配置文件。可以改变环境变量 DJANGO_S
- 后台线程•Master Thread核心后台线程,主要负责将缓冲池的数据异步刷新到磁盘。例如脏页的刷新,插入缓冲的合并,undo 页的回收等
- 在回程的高铁上学习了这一节,由于对cmd命令行的相关知
- Declaring class members or methods as st
- ubuntu上安装mysql非常简单只需要几条命令就可以完成。1. sudo apt-get install mysql-server2.
- 一 概念介绍Index Condition Pushdown (ICP)是MySQL 5.6 版本中的新特性,是一种在存储引擎层使用索引过滤
- 本文实例讲述了python提取字典key列表的方法。分享给大家供大家参考。具体如下:这段代码可以把字典的所有key输出为一个数组d2 = {
- 一、责任链模式责任链模式,将多个处理方法连接成一条链条,请求将在这条链条上流动直到该链条中有一个节点可以处理该请求。通常这条链条是一个对象包
- MySQL密码正确却无法本地登录-1045 Access denied for user 'root'@'local
- 本文实例讲述了python实现的接收邮件功能。分享给大家供大家参考,具体如下:一 简介本代码实现从网易POP3服务器接收邮件二 代码impo