665. CMI - Detect Behavior with Sensor Data | cmi-detect-behavior-with-sensor-data
感谢大家,恭喜获奖者!让我简要总结一下我的解决方案并分享代码。
我所有模型的目标是以下 3 者的组合:gesture(手势)、orientation(方向)以及来自 "behavior" 列初始状态中隐藏的 Relax&Move / Move。这个新目标有 18 * 4 * 2 个潜在值,并且没有受试者(subject)记录超过 1 个序列的每个值。这是我后处理的基础。
在推理期间,我累积每个受试者的预测概率历史。当新受试者进来时,我在每个目标类别出现不超过一次的约束下运行最大似然估计(maximum LLH)优化。你可以使用新记录的优化输出作为预测,但为了在早期记录(历史太短时)获得微小改进,我只是强制将过去序列中的类别概率设置为零,用于当前处理的序列。然后按 gesture 求和概率并取 argmax。
由于数据是随机顺序来的,这造成了分数的显著方差,最终选择有点像彩票。最终解决方案的重新提交得分从 0.868 到 0.880,我最终选择了 0.876。
我使用了 2 种模型架构的混合,每种都进行了大量的 Bagging 集成。我分别训练了仅 IMU (imu-only) 和全数据 (full-data) 模型,对于仅 IMU 变体,使用相同的架构但切断了 thm 和 tof 分支。当与全数据模型混合时,仅 IMU 模型提供了非常好的提升。
考虑到 LB 分数的高方差,我不确定增强带来的好处有多大,但我使用了:
这里相当直接,我在 CV 上没有发现复杂衍生特征的价值,所以我使用了非常有限的特征集,如 scaled thm 和 tof,去除重力分量的加速度以及从 rot 向量衍生的角度。有几条记录缺少 rot 向量,对于它们我使用了一些从 acc 粗略估计的值,并从 acc 向量中移除移动平均值以使值更接近所需分布。
当然,对于 handedness == 0 的受试者,翻转某些变量的值。
这是我最高私有分数的推理 notebook(我挑选的重新提交)。附加数据集包含模型权重以及特征工程、训练和推理的代码。你也可以在那里找到很多我失败想法的重复和冗余代码 :)