447. Google Smartphone Decimeter Challenge | google-smartphone-decimeter-challenge
感谢主办方举办如此精彩的比赛!
我的最终解决方案可以描述如下:
我的灵感来源于 这里 提出的 Smart PPP 算法。
我在这一步花了大约 3 周时间,最初的设想是利用其他设备数据校正基线 PrMs(伪距测量值)。过程虽然曲折,但最终奏效了。每个堆叠集成模型在 GPU 上训练大约需要 5 小时,且很难验证。在我看来,这将基线精度提高了约 10-40 厘米。没有应用进一步的伪距平滑。技术技巧:PrM 的校正量被用作 WLS(加权最小二乘法)算法中的权重。
我花了大约一周时间,利用 PseudorangeRateMetersPerSecond(伪距变化率),将 Google GPS 测量工具中的 WlsPvt.m 从 Matlab 算法翻译成 Python,其平均精度为 0.08Mps。技术技巧:当算法失效时,我使用了我的 notebook 中描述的基线 speedMps(位置偏移)。这大大改善了卡尔曼滤波和“停止均值”技术的结果。
我花了大约一周时间尝试使用 ADR 计算相对位置,但没有成功,因此我使用了 Android GPS 工具公开版本的派生文件。在该软件中处理原始 GNSS 文件花费了大量时间,并且对测试集中的两部手机失败了。技术技巧:一些自动下载的星历文件已损坏,因此手动下载它们并在处理期间关闭互联网是有效的。
我采用了 @dehokanta 的想法,但进行了升级。技术技巧:如果有两个或更多连续的异常值,则将其移除并进行插值。
我最开始的提交就是从这里起步的。结果发现中值平均比均值更好,但我最终采用了 这里 找到的想法:描述如下:

技术技巧:所有历元之间的方差非常相似,因此我对信号进行了加窗处理(根据速度类别和区域调整 10-30 个历元)。
仅使用阈值调整约为 0.5-1 的速度 Mps。此时(Xgboost + 后处理:remove_outliers + mixing + kalman + stop),我达到了 Public 3.945 和 Private 2.379 的成绩。
我使用了平均 ADR 位置减去有效周期内的平均位置作为偏移量,并移动了相对位置。技术技巧:该偏移量通过 ADR 不确定性米数进行加权(Public 3.345 Private 1.903)。
此时,我开始将解决方案对齐到真值(高速阈值 2m,SJC 阈值远大于 2m)。技术技巧:我通过总平均速度 < 6 Mps 来选择 SJC 区域。(最佳 Public 3.159 Private 1.801)。
joblib + optuna 在几乎所有步骤中都对我非常有用。
总而言之,对我来说,使用 GNSS 将不再一样,因为我开始时完全是个新手 —— 谢谢大家!