海上风场SCADA数据缺失智能修复-比赛经验总结
一次Kaggle竞赛经历。
模型,环境,背景
- 模型框架:Pytorch,数据框架:pandas,预处理框架:sklearn
- 模型:Seq2Seq(GRU) -> Seq2Seq(GRU-D)
- 背景:修复多个机器(文件)中部分缺失和完全缺失的字段
经验
数据处理部分
- 海量数据(内存不足以全部载入)的处理,利用
torch.utils.data.Dataset
的实现以及torch.utils.data.DataLoader
来实现torch.utils.data.Dataset
的实现中,记录每个文件的记录条数,利用counter追踪当前要get的记录位于的文件位置,注意counter在epoch之间的复位- 利用transforms对数据进行预处理
__getitem__
的返回为单条数据,batch化的操作是通过torch.utils.data.DataLoader
实现的
- 数据预处理的部分,分离散值,连续值,缺失值
- 离散值用onehot处理,大量数据通过记录不同categories的字典,缺失的离散值用全零值代替,即使用
ignore
参数 - 连续值用standardization处理,大量数据通过记录 和,平方的和,数据的个数,手动计算mean和std,然后用
[mean-sqrt(1.5*std),mean+sqrt(1.5*std)]
来拟合,缺失的连续值用零(即均值)代替 - 注意对预处理参数(离散值的字典,连续值的均值方差)作为metadata的保存
- 离散值用onehot处理,大量数据通过记录不同categories的字典,缺失的离散值用全零值代替,即使用
- 未分离训练验证部分的海量数据,生成由随机数向量决定的训练集记录mask,并用counter追踪当前数据是否加入到验证集,并对验证集数据进行transforms,注意counter在epoch之间的复位
训练框架模型部分
- 严格注意
torch.view()
和torch.reshape()
的使用情况,与torch.transpose()
或torch.t()
的情况做出区分 - 注意Seq2Seq模型中initHidden的设置
- encoder的为全零向量
- decoder的为encoder最后的hidden
- 注意矩阵相乘matmul,对位相乘mul的区别
- earlystopping的实现
其他部分
- 注意进度报告的及时性
- 注意合作者之间知识体系的差异性
- 注意总结经验
- 注意放弃项目的及时性
Written on March 13, 2019