1. 项目概述:基于PyTorch的新冠病例预测模型实战
最近在复盘机器学习项目时,我重新实现了一个基于PyTorch的新冠病例预测模型。这个项目最初是台大李宏毅老师机器学习课程的作业,核心目标是通过93个地区特征预测第三天的新冠阳性人数。作为典型的回归问题,这个案例涵盖了数据预处理、特征选择、模型构建、训练优化等完整流程,非常适合用来巩固机器学习基础知识。
在本文中,我将详细拆解整个项目的实现过程,特别会重点说明几个关键设计决策背后的思考逻辑。不同于简单的代码罗列,我会结合自己实际训练过程中踩过的坑,分享一些在官方文档和教程中很少提及的实战经验。无论你是刚开始接触PyTorch的新手,还是想了解工业级模型开发流程的进阶学习者,相信都能从中获得启发。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据预处理与特征工程
2.1 数据集结构与读取
原始数据包含两个CSV文件:
covid.train.csv:训练集,包含2700条样本,每行有93个特征列和1个标签列(第三天阳性人数)covid.test.csv:测试集,893条样本,仅包含特征列
使用Python标准库的csv模块读取数据时,需要特别注意两点:
- 第一行是特征名称,第一列是样本ID,这些在训练时都需要跳过
- 数据需要转换为numpy数组后再处理,可以大幅提升运算效率
python复制with open(path,'r') as f:
csv_data = list(csv.reader(f))
# 跳过首行(特征名)和首列(ID)
x = np.array(csv_data)[1:,1:-1] # 特征
y = np.array(csv_data)[1:,-1] # 标签
2.2 训练集与验证集划分
我采用了简单的5折分割策略:
- 训练集:每5条取4条(约80%)
- 验证集:每5条取1条(约20%)
这种确定性的分割方式相比随机分割有两个优势:
- 可复现性:每次运行都能得到相同的划分结果
- 时序保持:对于可能有时序特性的数据,避免了未来信息泄漏
python复制if mode == 'train':
indices = [i for i in range(len(csv_data)) if i
