回归任务学习笔记

ops/2024/12/22 16:06:47/

天气预测回归任务学习笔记

1. 导入必要的库
import numpy as np                 # 导入NumPy库,主要用于数值计算和数组处理
import pandas as pd                # 导入Pandas库,用于数据处理和分析
import matplotlib.pyplot as plt    # 导入Matplotlib库,主要用于数据可视化
import torch                       # 导入PyTorch库,用于构建和训练深度学习模型
import torch.optim as optim        # 从PyTorch中导入优化器模块,用于设置模型的优化算法
import warnings                    # 导入warnings库,用于处理警告信息
warnings.filterwarnings("ignore")  # 忽略所有警告信息
%matplotlib inline                 # 在Jupyter Notebook中显示Matplotlib绘制的图像
2. 读取数据
features = pd.read_csv('temps.csv')  # 从 'temps.csv' 文件中读取数据
print('数据维度:', features.shape)     # 显示数据维度
  • pd.read_csv() 函数用于从CSV文件中读取数据并存储为DataFrame,方便数据分析和处理。
3. 处理日期数据
import datetime  # 导入 datetime 模块,用于处理日期和时间# 提取年、月、日并组合成日期
years = features['year']  
months = features['month']  
days = features['day']  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]
4. 可视化数据
plt.style.use('fivethirtyeight')   # 设置Matplotlib的绘图风格
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2, figsize=(10, 10))  # 创建子图布局
fig.autofmt_xdate(rotation=45)  # 自动调整x轴日期标签的格式# 绘制不同的温度曲线
ax1.plot(dates, features['actual'])
ax2.plot(dates, features['temp_1'])
ax3.plot(dates, features['temp_2'])
ax4.plot(dates, features['friend'])plt.tight_layout(pad=2)  # 自动调整子图之间的间距
5. 独热编码处理分类变量
features = pd.get_dummies(features)  # 将分类变量进行独热编码
features.head(5)  # 显示独热编码后的数据集的前5行
  • pd.get_dummies() 是处理分类变量的常用方法,将其转换为适合机器学习模型的数值数据。
6. 准备标签和特征
labels = np.array(features['actual'])  # 提取标签
features = features.drop('actual', axis=1)  # 去掉标签列
feature_list = list(features.columns)  # 保存特征列名
features = np.array(features)  # 转换特征为NumPy数组
  • drop() 函数用于删除DataFrame中的指定行或列。

总结

  • 本次学习内容涵盖数据的读取、预处理、可视化以及特征和标签的准备。
  • 使用Pandas和Matplotlib库进行数据操作和可视化,使用PyTorch进行模型构建与训练。
  • 通过独热编码将分类变量转换为数值数据,以便用于机器学习模型。
7. 数据标准化

在训练神经网络之前,首先对输入特征进行标准化,以确保它们具有均值为0和方差为1的分布。这有助于提高模型的训练效率和收敛速度。

from sklearn import preprocessing  # 导入预处理模块
input_features = preprocessing.StandardScaler().fit_transform(features)  # 标准化数据
  • StandardScaler: 计算每列的均值和标准差,并将数据转换为标准正态分布。
8. 构建神经网络模型

方法1: 手动构建模型

import torch# 将输入特征和标签转换为 PyTorch 张量
x = torch.tensor(input_features, 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)  # ReLU 激活函数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_()

方法2: 使用 torch.nn.Sequential 构建模型

input_size = input_features.shape[1]
hidden_size1 = 128
hidden_size2 = 64
hidden_size3 = 32
output_size = 1
batch_size = 16  # 小批量大小# 定义神经网络模型
my_nn = torch.nn.Sequential(torch.nn.Linear(input_size, hidden_size1),torch.nn.Sigmoid(),torch.nn.Linear(hidden_size1, hidden_size2),torch.nn.Sigmoid(),torch.nn.Linear(hidden_size2, hidden_size3),torch.nn.Sigmoid(),torch.nn.Linear(hidden_size3, output_size)
)# 定义损失函数和优化器
cost = torch.nn.MSELoss(reduction='mean')
optimizer = torch.optim.Adam(my_nn.parameters(), lr=0.001)
9. 训练网络

使用小批量(Mini-Batch)方法进行训练,并记录每次迭代的平均损失。

losses = []
for i in range(1000):batch_loss = []  # 初始化每次迭代的损失记录for start in range(0, len(input_features), batch_size):end = start + batch_size if start + batch_size < len(input_features) else len(input_features)xx = torch.tensor(input_features[start:end], dtype=torch.float, requires_grad=True)yy = torch.tensor(labels[start:end], dtype=torch.float, requires_grad=True)prediction = my_nn(xx)loss = cost(prediction, yy)optimizer.zero_grad()loss.backward(retain_graph=True)optimizer.step()batch_loss.append(loss.data.numpy())if i % 100 == 0:losses.append(np.mean(batch_loss))print(i, np.mean(batch_loss))
10. 进行预测

将输入特征传入训练好的模型,获取预测结果。

predict = my_nn(x).data.numpy()  # 获取模型预测值
11. 可视化结果

将真实值和预测值进行对比,以可视化模型性能。

# 转换日期格式
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]# 创建 DataFrame 存储真实值和预测值
true_data = pd.DataFrame(data={'date': dates, 'actual': labels})
predictions_data = pd.DataFrame(data={'date': test_dates, 'prediction': predict.reshape(-1)})# 绘图
plt.plot(true_data['date'], true_data['actual'], 'b-', label='actual')  # 真实值
plt.plot(predictions_data['date'], predictions_data['prediction'], 'ro', label='prediction')  # 预测值
plt.xticks(rotation=60)  # x轴标签旋转
plt.legend()  # 显示图例
plt.xlabel('Date')  # x轴标签
plt.ylabel('Maximum Temperature (F)')  # y轴标签
plt.title('Actual and Predicted Values')  # 图表标题

总结

  • 通过数据标准化、神经网络模型构建、训练及结果可视化,完成了天气预测的回归任务。
  • 使用了多层感知器(MLP)模型,并对比了手动构建模型和使用 torch.nn.Sequential 的方法。
  • 训练过程中采用了小批量梯度下降法,记录并分析了模型的损失值变化。

涉及函数
好的,以下是你学习笔记中每部分涉及到的主要函数总结:

1. 导入必要的库

  • import: 用于导入所需的库和模块。

2. 读取数据

  • pd.read_csv('temps.csv'): 从 CSV 文件中读取数据并存储为 DataFrame。
  • features.shape: 获取 DataFrame 的维度。

3. 处理日期数据

  • zip(): 将多个可迭代对象聚合成元组。
  • datetime.datetime.strptime(date, '%Y-%m-%d'): 将字符串转换为日期对象。

4. 可视化数据

  • plt.style.use('fivethirtyeight'): 设置绘图风格。
  • plt.subplots(nrows=2, ncols=2, figsize=(10, 10)): 创建子图布局。
  • ax.plot(x, y): 绘制数据曲线。
  • plt.tight_layout(pad=2): 自动调整子图间距。

5. 独热编码处理分类变量

  • pd.get_dummies(features): 将分类变量进行独热编码。

6. 准备标签和特征

  • np.array(): 将数据转换为 NumPy 数组。
  • features.drop('actual', axis=1): 去掉标签列。

7. 数据标准化

  • preprocessing.StandardScaler(): 创建标准化对象。
  • fit_transform(features): 计算均值和标准差并标准化数据。

8. 构建神经网络模型

  • torch.tensor(data, dtype=float): 将数据转换为 PyTorch 张量。
  • torch.randn(size, dtype=float, requires_grad=True): 随机初始化权重和偏置。
  • torch.relu(): 应用 ReLU 激活函数。

9. 训练网络

  • loss.backward(): 反向传播计算梯度。
  • optimizer.zero_grad(): 清空梯度。
  • optimizer.step(): 更新模型参数。

10. 进行预测

  • my_nn(x): 将输入特征传入模型以获取预测值。

11. 可视化结果

  • pd.DataFrame(data={...}): 创建 DataFrame 存储数据。
  • plt.plot(x, y): 绘制真实值和预测值的对比图。
  • plt.legend(): 显示图例。
  • plt.xlabel()plt.ylabel(): 设置 x 轴和 y 轴的标签。

总结

  • 本部分涵盖了数据的读取、处理、可视化以及模型构建和训练所用到的函数,提供了一个完整的天气预测回归任务的流程。

如果需要更深入的讨论或者对某个函数的具体用法有疑问,欢迎随时提问!


http://www.ppmy.cn/ops/124042.html

相关文章

深度学习中的迁移学习:预训练模型微调与实践

深度学习中的迁移学习&#xff1a;预训练模型微调与实践 目录 &#x1f4a1; 迁移学习的核心概念&#x1f9e0; 预训练模型的使用&#xff1a;ResNet与VGG的微调&#x1f3e5; 迁移学习在医学图像分析中的应用&#x1f504; 实践中的迁移学习微调过程 1. &#x1f4a1; 迁移学…

malloc源码分析之 ----- 你想要啥chunk

文章目录 malloc源码分析之 ----- 你想要啥chunktcachefastbinsmall binunsorted binbin处理top malloc源码分析之 ----- 你想要啥chunk tcache malloc源码&#xff0c;这里以glibc-2.29为例&#xff1a; void * __libc_malloc (size_t bytes) {mstate ar_ptr;void *victim;vo…

基于Qt的速度仪表盘控件实现

本文将详细讲解一个基于Qt的速度仪表盘控件的实现过程&#xff0c;并对代码进行详细的注释说明。该控件可以模拟汽车仪表盘的外观&#xff0c;并通过滑动条动态改变速度显示。本文将从代码结构、绘制组件到实现细节进行讲解&#xff0c;帮助您理解如何使用Qt框架自定义绘制控件…

如何减少网络安全事件的损失

为了减轻网络安全事件的损失&#xff0c;可以采取以下多项措施&#xff1a; 一、数据备份与恢复 定期备份数据&#xff1a;包括文件、数据库和系统映像等&#xff0c;确保在发生安全事件时&#xff0c;能够快速恢复数据和系统&#xff0c;从而减少损失。制定恢复计划&#xf…

【开源免费】基于SpringBoot+Vue.JS水果购物网站(JAVA毕业设计)

本文项目编号 T 065 &#xff0c;文末自助获取源码 \color{red}{T065&#xff0c;文末自助获取源码} T065&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

Go 操作 redis

前提 安装 redis 第三方库&#xff0c;参考go安装三方库 编程示例 写入读取操作字符串 代码 package mainimport ("fmt""github.com/gomodule/redigo/redis" )func main() {conn, err : redis.Dial("tcp", "127.0.0.1:6379")if e…

C++ 数据结构

C 提供了多种数据结构&#xff0c;既有基础的如数组、结构体、类等&#xff0c;也有高级的 STL 容器如 vector、map 和 unordered_map 等。 下面详细介绍 C 中常用的数据结构及其特点和用法。 1. 数组&#xff08;Array&#xff09; 数组是最基础的数据结构&#xff0c;用于…

python 实现bellman ford贝尔曼福特算法

bellman ford贝尔曼福特算法介绍 贝尔曼-福特算法&#xff08;Bellman-Ford&#xff09;是由理查德贝尔曼&#xff08;Richard Bellman&#xff09;和莱斯特福特&#xff08;Lester Ford&#xff09;创立的&#xff0c;用于求解单源最短路径问题的一种算法。这种算法也被称为M…