第15名方案 - 深入解析 compute_f(无网格生成)+ 简单的100%准确率KNN楼层预测
第15名方案 - 深入解析 compute_f(无网格生成)+ 简单的100%准确率KNN楼层预测
作者: cocoinit23 | 原文发布日期: 2021-05-21
感谢主办方举办如此有趣的比赛。也要感谢我的队友们在整个比赛期间的辛勤付出( @ryotayoshinobu, @tubotubo, @columbia2131 )。
本次比赛的关键因素是基于算法的后处理,而非单纯的建模。此外,我们都喜欢竞技编程,所以除了“Algorithm is All You Need”之外,没有其他队名更合适了 :)
以下是我们的解决方案。
快速摘要
本次比赛需要大量的预处理和后处理工作。我们的最终预测是经过迭代伪标签训练的第三阶段模型的混合结果。重复进行后处理对于我们提升分数也非常重要。
简单100%准确率的楼层模型
- 将 RSSI 视为 BSSID 出现的次数。
- 进行 TF-IDF 向量化。
- 对每个站点使用 KNN。
我们的 KNN 模型在公共数据集和私有数据集上均达到了 100% 的准确率。
航点模型
预处理
- 基于 WiFi 时间戳对航点进行线性插值。
- 修复格式错误的 txt 数据(参考 @higepon 的笔记本)。
- 移除仅存在于训练数据集中的 WiFi 信息。
- 对传感器数据应用卡尔曼滤波,以获得更精确的 compute_f 结果。
交叉验证
- 使用路径的 GroupKFold。
- 5折交叉验证,但 n_splits=15,以获得更多的路径组组合,从而增强随机种子平均的效果。
第一阶段训练
- 基于 @Kouki 的笔记本的 LSTM 模型。超参数通过 Optuna 进行了调优。
- 类 Transformer 的卷积编码器。对 BSSID 和 RSSI 进行嵌入,然后添加位置编码。没有前馈网络。使用批归一化代替层归一化。使用乘法注意力代替加法注意力。多头注意力的 Query 是 BSSID 嵌入,Key 和 Value 是 RSSI 嵌入。编码过程类似于 [Embedding -> Conv1d -> Multiply Attention -> Conv1d -> Multiply Attention -> … -> Dense]。
- 使用 10 个随机种子来学习路径组的多种组合。
第二阶段训练
- 卷积堆叠,用于学习不同模型或不同随机种子之间的相关性,这等同于学习