返回列表

15th place solution - Dive into compute_f without Grid Generation + Simple 100% KNN Floor

435. Indoor Location & Navigation | indoor-location-navigation

开始: 2021-01-28 结束: 2021-05-17 共享出行与停车 数据算法赛
第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 个随机种子来学习路径组的多种组合。

第二阶段训练

  • 卷积堆叠,用于学习不同模型或不同随机种子之间的相关性,这等同于学习
同比赛其他方案