ICE TEAM 第20名解决方案
ICE TEAM 第20名解决方案
团队成员:junseonglee11 (@junseonglee11) 和 Ayaan Jang(@ayaanjang)。我们集成了6个LSTM模型(2个不同版本)。修改了Robin Smith和Robert Hatch的Notebook。
我们的Notebook:
参考项目
数据预处理
我们的代码: https://www.kaggle.com/code/junseonglee11/icecube-data-to-tfrecord-v2-1
-
参考部分:预处理数据生成96个时间序列数据,每个包含6个特征:
- 传感器信号测量时间
- 传感器信号强度
- 传感器信号质量
- 接收传感器的X、Y、Z坐标(3个特征)
-
对6个特征进行特征工程以提升RNN(残差神经网络)预测精度(在90个数据文件而非完整数据集上训练,然后实验特征转换):
- 使用原始特征:LB 1.015
- 添加时间差:LB 1.0128
- 用时间间隔(下一测量时间与当前测量时间之差)替代传感器信号测量时间:
当前与下一时间点间传感器位置差的意义取决于时间间隔(例如1秒内移动10米与10秒内移动1米速度差10倍)。但传感器信号的绝对测量时间无法反映这一点,因此确定时间间隔比测量时间更适合作为输入。
- 添加坐标差:LB 1.0115
添加三个特征:下一与当前传感器位置在X、Y、Z坐标上的差值: 与时间间隔特征类似,确定时间点间坐标值差能更好反映中性粒子的方向信息。但当用坐标差值替代传感器xyz坐标时,精度下降,因为非相邻时间点间传感器坐标差值包含重要信息。
-
将所有上述输入转换为TensorFlow TFRecord格式以最小化CPU内存使用并加速训练。
模型训练与推理
我们的代码(模型): https://www.kaggle.com/code/junseonglee11/20th-tensorflow-tfrecord-tpu-lstm-line-fit-train
- 模型概述: 双向LSTM(长短期记忆)7层 + 批标准化 + 线性拟合特征拼接 + 全连接层
- 激活函数: GELU(高斯误差线性单元)激活层
- 损失函数: 稀疏分类交叉熵损失
- 训练指标: 准确率
- 优化器: RAdam(修正Adam)优化器
- 集成(模型2个版本):
- 在10折数据集的第0折上训练模型
- 训练:594数据集,验证:66数据集:使用仅1个验证集训练模型
- 训练:659数据集,验证:1数据集:从每个版本模型中选出Mean Angular Error最低的4个模型(共8个模型)
- 通过交叉验证确定最优集成权重
数据后处理
我们的代码(数据后处理): https://www.kaggle.com/code/ayaanjang/20th-tensorflow-lstm-model-inference-merged
原始代码: 以下代码中功率值未平方。通过对每个类别的预测概率和该类代表粒子方向的加权平均,计算中子的方位角和天顶角方向。
修改后代码: 在模型预测值中添加功率值的平方。仅基于各类别方向和模型预测概率推导结果并不理想。尝试使用指数、对数函数、激活函数等修改预测概率以提升后处理阶段效果。
改进: 当模型预测类别概率被1.35次方后,Mean Angular Error降低约0.002。这为预测结果中概率较高的类别赋予了适当额外权重。