414. INGV - Volcanic Eruption Prediction | predict-volcanic-eruptions-ingv-oe
首先,感谢 Kaggle 和 INGV(国家地球物理和火山学研究所)组织了这场比赛。
其次,感谢那些发布了优秀 Notebook 的人,这些 Notebook 帮助我和我的队友入门。我相信很多参与者也觉得这些 Notebook 很有用。
最后,感谢我的队友 @laplaceplanet 在本次比赛中付出的宝贵努力。

我们主要使用了公开的特征。感谢 @amanooo INGV Volcanic Basic Solution STFT 和 @carpediemamigo INGV CatBoost Baseline TSFRESH(创建了 7730 个特征)。
除了上述 Notebooks 外,我们还使用了 Librosa Librosa 官网 来创建 mfcc(梅尔频率倒谱系数)特征。
最终使用了约 8000 个特征(公开的 7830 个和 200 个不同的特征)。
我们花了很多时间寻找重要的特征,正如我们在过去看到的,较少的特征在类似的比赛中有所帮助。LANL 地震预测比赛 中的一个重要见解是:
我们最好的最终 LGB 模型只使用了四个特征: 去噪信号上支持度至少为 2 的峰值数量, 大小为 50 的滚动窗口标准差的 20% 分位数, 第 4 和 第 18 个梅尔频率倒谱系数的平均值。
我们利用这一见解保留了较少的特征。为了进行特征选择,我们采用了以下几种方法:
1) 训练了神经网络 (NN) 模型(我们发现它比 CatBoost 和 LightGBM 更好)。使用了 5 折交叉验证策略。NN 架构如下:
def get_model():
tf.keras.backend.clear_session()
inp = Input(shape=(len(features + added_features)))
x = BatchNormalization()(inp)
x = Dropout(0.1)(x)
for n in [512, 1024, 2048, 3072, 2048, 1024, 512, 256]:
x = Dense(n)(x)
x = Activation(tf.keras.activations.swish)(x)
x = Dropout(rate=0.1)(x)
out = Dense(1, activation="linear")(x)
model = Model(inp, out)
model.compile(loss="mean_absolute_error", optimizer=tf.keras.optimizers.Adam(learning_rate=1e-3))
model.summary()
return model
感谢 @laplaceplanet 提供的 NN 架构。Swish 激活函数比其他激活函数提供了更好的结果。
2) 提取 NN