1. 项目背景与目标
这个项目来源于Kaggle上的一个经典机器学习竞赛任务,目标是建立一个能够预测新冠感染人数的回归模型。作为一名长期从事机器学习实战的工程师,我认为这类时间序列预测问题在实际工作中非常具有代表性。医疗资源调配、公共卫生政策制定等领域都需要这类预测模型的支持。
在本次实战中,我们将使用PyTorch框架构建一个完整的回归模型流水线。与分类问题不同,回归任务需要预测连续数值,这对数据预处理、模型设计和评估指标都提出了特殊要求。通过这个项目,你不仅能掌握基础的深度学习建模流程,还能学到处理真实世界数据的关键技巧。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据准备与预处理
2.1 数据集划分策略
在机器学习项目中,合理划分数据集是确保模型泛化能力的基础。我们通常将数据分为三个互斥的子集:
-
训练集:用于模型参数学习的主要数据集。在这个项目中,我们采用了约80%的数据作为训练集。关键点在于要确保数据分布的多样性,覆盖各种可能的输入情况。
-
验证集:用于在训练过程中监控模型表现。我们采用了"逢五取一"的简单划分方法(即每5个样本取1个作为验证集)。虽然这种方法不如随机抽样严谨,但在数据量较大且分布均匀时仍可接受。
-
测试集:完全独立于训练过程,用于最终评估模型性能。在真实项目中,测试集应该来自与训练数据不同时间段的样本,以检验模型的时序泛化能力。
注意事项:在实际应用中,我强烈建议使用sklearn的train_test_split函数进行随机划分,并设置固定random_state以保证可复现性。对于时间序列数据,更应该按时间顺序划分,避免未来信息泄露。
2.2 数据标准化处理
原始数据通常包含多个特征,这些特征可能具有不同的量纲和取值范围。如果不进行处理,数值范围大的特征可能会主导模型训练。我们采用了Z-score标准化方法:
python复制self.X = (X - X.mean(dim=0, keepdim=True)) / X.std(dim=0, keepdim=True)
这种方法的优势在于:
- 将数据转换为均值为0、标准差1的标准正态分布
- 保留了原始数据的分布形状
- 对异常值有一定的鲁棒性
在实际操作中,需要注意:
- 只能使用训练集的均值和标准差来标准化验证集和测试集
- 对于稀疏数据或含有异常值的数据,可以考虑使用RobustScaler
- 分类特征需要进行独热编码等其他处理
2.3 Dataset类实现细节
PyTorch的Dataset类是我们处理数据的核心工具。下面详细解析代码中的关键点:
python复制class CovidDataset(Dataset):
def __init__(self, file_path, mode):
# 读取CSV文件并转换为num
