返回列表

19th Place Solution - Curve Fitting

626. NeurIPS - Ariel Data Challenge 2024 | ariel-data-challenge-2024

开始: 2024-08-01 结束: 2024-10-31 物理与天文 数据算法赛
第 19 名解决方案 - 曲线拟合

第 19 名解决方案 - 曲线拟合

作者: kangourous
发布日期: 2024-11-01
竞赛排名: 19

非常感谢 Ariel 团队组织这次竞赛!这是我的第一次 Kaggle 竞赛,我非常享受在这个主题上的工作。
我的解决方案主要基于使用非线性函数建模信号,并使用基于梯度的算法(如 Levenberg-Marquardt 算法)求解最小二乘问题。
我刚刚在这里制作了一个干净的解决方案 Notebook:https://www.kaggle.com/code/kangourous/ariel-19th-place-solution-curve-fitting

预处理

我使用了组织者的 Notebook 进行校准,但通过利用 GPU 加速了这一过程。对于 FGS,我计算了 100 个最亮像素的平均值,对于 AIRS-CH0,我取了每个波长下 15 个最亮的像素。

凌日区域

我发现准确估计观测的凌日边界对于获得良好的凌日深度估计至关重要。由于凌日区域对于所有波长都是相同的,我沿频率轴取了 AIRS 的平均值。最初,我使用二阶导数来识别凌日区域(感谢 https://www.kaggle.com/code/rezanl/code-find-transition-zone-using-derivatives)),但为此我需要平滑信号,这导致了精度损失。所以我尝试了一种新方法:我创建了一个函数 \(f(x)\) 将信号建模为多项式函数 \(p(x)\) 和阶跃函数 \(s(x)\) 的乘积:

drawing

\(a_i\) 是多项式函数的参数,\(z_1, z_2, z_3, z_4\) 代表凌日事件的关键点,\(d\) 代表凌日深度。
我们的最小二乘问题包括找到 \(a_i\)、\(z_i\) 和 \(d\) 的最佳值,以便 \(f(x)\) 最好地拟合数据。为了实现这一点,我使用了 dogbox 算法,scipy.optimize 提供了该算法的实现。这个优化过程提供了 2 个有用的信息:

  1. 凌日边界 \(z_i\)
  2. 平均背景噪声,建模为系数 \(a_i\) 的多项式函数。我将信号除以这条曲线以全局去噪 AIRS 数据。
    然后我们将对每个波长应用相同的优化过程,这次是为了估计深度。

深度估计

既然我们已经有了每个行星的凌日区域,我再次使用 \(f(x)\),固定参数 \(p_i\),为每个波长建模信号。我通过找到每个波长的最佳 \(a_i\) 和 \(d\) 来解决最小二乘问题。然后我使用大小为 73 的移动平均窗口沿波长轴平滑结果,权重为 Taylor 窗。这种方法在 LB 上给了我 0.611 的成绩。通过分析误差来源,我发现我的方法对于具有高标准差光谱的行星表现不佳。对于这些行星,移动平均窗口过于激进并平坦化了光谱。因此,如果预测光谱的标准差高于阈值,我使用了较小的窗口大小。通过此调整,我在 LB 上获得了 0.03 的提升。

Sigma 估计

我只使用了整个数据集的全局均方根误差。

改进

在整个竞赛期间,我尝试单独分析每个像素,看看是否可以去噪,或在像素级分辨率下找到凌日深度。问题是,当你可视化单个像素的信号时,很难理解发生了什么 😅。有很多噪声,还有这种到处发生的神秘尖峰。我注意到对于给定的行星,尖峰的位置 across 每个像素是一致的,并且有正负尖峰,所以当我们取平均值时它们会相互补偿。我能够使用洛伦兹函数建模尖峰,但我没有对此做任何处理,因为单独去噪每个像素太重了,而且似乎并没有改善我的结果。

同比赛其他方案