498. Foursquare - Location Matching | foursquare-location-matching
恭喜所有奖牌获得者,感谢 Kaggle 和 Foursquare 举办了如此有趣的比赛。
我的方案基于 ArcMargin 模型来提取候选对,并使用 LightGBM 进行匹配。
使用 ArcMargin 模型生成候选对。该模型使用 ArcMargin Loss 进行训练 (论文链接)。
特征:
模型:
所有输入被拼接,随后经过两个 Dense-PReLU-BN-Dropout 块。最后一个块的输出作为 ArcMargin 层的输入。
结果:
这些模型生成的候选对集合的最大 IOU > 0.98。
公共榜单分数:0.89。
特征:
结果:
公共榜单分数:0.908。
由于经纬度特征的精度很高,必须以某种方式对其进行编码,才能使其对 ArcMargin 模型有用。我使用了一种类似于 Transformer 位置编码的技术,将这些高精度特征嵌入到向量中。使用的代码如下:
emb_size = 20
precision = 1e6
latlon = np.expand_dims(df[["latitude", "longitude"]].values, axis=-1)
m = np.exp(np.log(precision) / emb_size)
angle_freq = m ** np.arange(emb_size)
angle_freq = angle_freq.reshape(1, 1, emb_size)
latlon = latlon * angle_freq
latlon[..., 0::2] = np.cos(latlon[..., 0::2])
latlon[..., 1::2] = np.sin(latlon[..., 1::2])
latlon = latlon.reshape(-1, 2 * emb_size)