返回列表

Private 2nd Public 1st rank Solution

414. INGV - Volcanic Eruption Prediction | predict-volcanic-eruptions-ingv-oe

开始: 2020-10-12 结束: 2021-01-06 地球科学 数据算法赛
Private 2nd Public 1st rank Solution

Private 第2名 Public 第1名 解决方案

作者:ByungSunBae | 比赛排名:第2名

感谢 INGV 竞赛,我获得了一段非常好的体验。感谢主办这次活动的组织机构。

在本次比赛中制作解决方案(即模型)时,我经历了以下流程。

1. 数据预处理

  • 缺失值 (NA) 处理:填充为 0。
  • 按 segment_id 归一化数据:
    • 对每一列进行归一化。具体执行方法如下:
      1. 减去平均值以求出偏差。
      2. 将偏差除以绝对偏差值的最大值。加上 0.00001 以防止分母为零。
  • 特征提取:我使用 Python 的 librosa 模块从原始数据中提取特征。
    • rms (均方根)
    • spectral_centroid (频谱质心)
    • spectral_bandwidth (频谱带宽)
    • zero_crossing_rate (过零率)
    • mel frequency cepstral coefficient (梅尔频率倒谱系数)
    • poly_features (多阶特征)
    • spectral_contrast (频谱对比度)
    • 应用 stft 后的 chroma_stft (色度特征)(或未应用)
  • 数据集划分:根据是否应用 chroma_stft,我的数据集划分如下:
    • 第一组:未应用 chroma_stft,每个 segment_id 的数据形状:(Channel, Time) => (340, 118)
    • 第二组:应用了 chroma_stft,每个 segment_id 的数据形状:(Channel, Time) => (460, 118)
  • 保存数据:将每个 segment_id 的数据保存为 numpy 数组(例如 212423.csv -> 212423.npy)。
    • 构建一组数据需要 3 小时(包含训练集和测试集共需 6 小时)。
  • 事实上,我并没有真正理解波形(Waveform)数据集。如果我能更好地理解它,我就能构建出比现在性能更好的模型。

2. 模型训练

  • 模型架构
    Model Architecture
  • 交叉验证:基于训练目标 time-to-eruption 进行 K-Means 聚类,使用分层 5 折交叉验证。
    • 在进行 K=5 的 K-Means 聚类后,使用 sklearn 的 StratifiedKFold 进行分层抽样。
    • 我的思路是确保每个留出集中的目标值分布均匀。
  • 损失函数:LogCoshLoss
  • 优化器:
    • AdamW,weight_decay 为 0.001。
    • 学习率调度器:CosineAnnealingWarmRestarts(周期:10 个 epoch)。
  • 模型变体:我制作了两个具有以下差异的模型:
    • (1) 第一组