586. Child Mind Institute - Detect Sleep States | child-mind-institute-detect-sleep-states
首先,我要感谢@tubotubo分享的高质量代码。接下来我将分享我的解决方案。这是我第一次发布解决方案,如果有什么失礼的地方,我深表歉意。虽然内容较为简陋,但我希望能对大家有所帮助。
使用FFT清洗特征:参考cmi-sleep-detection-fast-fourier-transformation,对enmo和anglez使用不同的阈值(98.75, 99.0, 99.5, 99.75, 99.9)进行数据清洗。这生成了基于FFT的特征(例如fft_9875)。
交叉验证采用5折GroupKFold。我基于@tubotubo的代码构建了七个不同的模型,每个模型使用不同的特征集和网络架构(LSTM, GRU, UNet, Transformer等)。
| 模型 | CV | 公开榜(5折) | 私有榜(5折) |
|---|---|---|---|
| FeatureExtractor(LSTM(dim=64)+GRU(dim=64)) + UNet + UNet1DDecoder (无fft特征) | 0.74373 | 0.746 | 0.791 |
| FeatureExtractor(LSTM(dim=64)+GRU(dim=64)) + UNet + UNet1DDecoder (fft_9900, fft_9950, fft_9975, fft_9990) | 0.75250 | 0.727 | 0.791 |
| FeatureExtractor(LSTM(dim=64)+GRU(dim=64)) + UNet + UNet1DDecoder (fft_9875) | 0.76012 | 0.747 | 0.795 |
| FeatureExtractor(TransformerFeatureExtractor(dim=64)) + UNet + UNet1DDecoder (fft_9875) | 0.74572 | ||
| FeatureExtractor(LSTM(dim=128)+GRU(dim=128)) + UNet + UNet1DDecoder (fft_9875) | 0.76400 | 0.739 | 0.801 |
| FeatureExtractor(LSTM(dim=128)+GRU(dim=128)) + UNet + UNet1DDecoder (fft_9900) | 0.76208 | 0.735 | 0.795 |
| FeatureExtractor(CNNSpectrogram(dim=128)) + UNet + UNet1DDecoder (fft_9875) | 0.74933 |
使用FFT清洗特征对CV分数有很大提升,但在私有榜上效果似乎并不明显。通过将特征提取的维度从64增加到128,CV和私有榜分数都得到了显著提升。
两步集成方法:第一步,使用三种不同方法(Optuna、Nelder-Mead和Hill Climbing)集成七个模型的预测结果。第二步,使用Optuna对这三种集成结果进行再次集成以获得最终结果。这种方法在交叉验证和私有榜上都取得了良好效果。第一阶段的私有榜分数为0.802,第二阶段也是0.802,第二阶段略好一些,但可能没有必要做到这一步。
| 集成方法 | CV | 公开榜(5折) | 私有榜(5折) |
|---|---|---|---|
| optuna | 0.79038 | 0.746 | 0.802 |
| nelder-mead | 0.78951 | ||
| optuna | 0.78801 |
| 集成方法 | CV | 公开榜(5折) | 私有榜(5折) |
|---|---|---|---|
| optuna | 0.79049 | 0.746 | 0.802 |
最后,感谢主办方组织这次比赛。这是一场非常有挑战性的比赛,我学到了很多。
此外,这是我第二次获得银牌。我会继续努力,争取成为Kaggle大师。感谢大家让我学到这么多知识,我会继续全力以赴。