1. 项目概述
新冠疫情的预测一直是公共卫生领域的重要课题。作为一名长期从事机器学习应用开发的技术人员,我最近尝试使用PyTorch框架构建了一个简单的回归模型,用于预测新冠病例数。这个项目虽然基础,但完整涵盖了从数据预处理到模型训练、评估的整个流程,特别适合想要入门PyTorch实战的开发者参考。
在本文中,我将详细解析这个项目的实现过程,包括数据集的构建、神经网络模型的设计、训练过程的优化技巧,以及如何评估模型性能。不同于简单的代码展示,我会重点分享在实际开发中遇到的坑和解决方案,这些经验对于初学者来说尤为宝贵。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据准备与预处理
2.1 数据集结构分析
我们使用的数据集包含两个CSV文件:covid.train.csv(训练集)和covid.test.csv(测试集)。从代码中可以看出,每个样本包含93个特征和1个目标值(测试阳性数)。训练集和测试集都来自同一个数据源,我们手动将其划分为训练集(80%)和验证集(20%)。
注意:在实际项目中,确保训练集和测试集来自同一分布非常重要。如果数据收集时间或来源不同,可能需要特殊处理。
2.2 CovidDataset类的实现
CovidDataset类继承自PyTorch的Dataset类,负责数据的加载和预处理。它的核心功能包括:
- 读取CSV文件并转换为NumPy数组
- 按5:1的比例划分训练集和验证集
- 对特征进行标准化处理(减去均值,除以标准差)
python复制class CovidDataset(Dataset):
def __init__(self, file_path, mode):
with open(file_path, "r") as f:
ori_data = list(csv.reader(f))
csv_data = np.array(ori_data)[1:, 1:].astype(float)
if mode == "train":
indices = [i for i in range(len(csv_data)) if i % 5 != 0]
elif mode == "val":
indices = [i for i in range(len(csv_data)) if i % 5 == 0]
elif mode == "test":
indices = [i for i in range(len(csv_data))]
X = torch.tensor(csv_data[indices, :93])
if mode != "test":
self.Y = torch.tensor(csv_data[indices, -1])
self.X = (X - X.mean(dim=0, keepdim=True)) / X.std(dim=0, keepdim=True)
self.mod
