pandas 数据帧的样条插值顺序

Oam*_*Oam 2 python interpolation spline dataframe pandas

我有以下数据帧,显示来自运动捕捉的数据,其中每列是一个标记(即位置数据),行是时间:

        LTHMB X RTHMB X
0       932.109 872.921
1       934.605 873.798
2       932.383 873.998
3       940.946 875.609
4       941.549 875.875
...     ...     ...
14765   NaN 602.700
14766   562.350 NaN
14767   562.394 NaN
14768   562.421 NaN
14769   562.490 602.705
Run Code Online (Sandbox Code Playgroud)

在数据中,有一些我需要填充的 NaN 值。我并不是这方面的专家,所以我不确定填充这些内容的最佳方法是什么。

我知道我可以进行向前/向后填充,而且我还阅读了有关样条插值的内容,这似乎更复杂。在pandas.DataFrame.interpolate的文档中,它指出对于样条曲线,您必须指定顺序。

在这种情况下,我将使用什么订单?每个标记都有一个 X、Y 和 Z。这是否意味着我会使用三次样条线,还是不是那么简单?

Aks*_*gal 6

样条的顺序与数据集中的特征数量无关。每个特征将彼此独立地进行插值。因此,在应用算法之前,了解其工作原理及其每个参数(例如“顺序”)的作用非常重要。

直观上来说,三次(阶数 = 3)样条曲线是构造由三阶“分段”多项式组成的样条曲线的过程。

在此输入图像描述

请注意,所有多项式仅在一个区间内有效;它们组成了插值函数。外推法预测数据范围之外的发展,而插值法仅在数据边界内起作用。

样条的“阶”是这些“分段”多项式的阶。

在此输入图像描述 来源:谷歌

正如您所看到的,线性样条曲线(阶数=1)适合范围之间的一阶多项式(直线),而七阶样条曲线适合七阶多项式。


你应该使用哪个?

没有人可以简单地告诉您哪一个更适合。您必须将其可视化,看看特定的插值技术是否能够为您提供相关的插补。

保证使用正确插值技术的唯一方法是将它们与 R2_score 进行比较。您可以执行以下操作 -

  1. 从数据中获取完整序列(无缺失值)
  2. 随机将此数据的百分比设置为缺失(单独保留这些隐藏值)
  3. 尝试多种插图方法来完成序列(使用 3、5、7 阶样条等)
  4. 获取预测序列并使用 R2_score 将其与实际序列进行比较。
  5. r2_score 最高的那个应该最适合您的数据
  6. 对注入的缺失数据的多个百分比重复此操作,以形成一项有效的研究,确定哪一个总体上优于另一个。

您可以在这里找到此方法的大致实现方式

在此输入图像描述