0

实现简单的形状匹配算法以匹配从仅 8 个点 (x, y) 插值的图与类似图(> 12 000 个条目)的数据库的最佳方法是什么,每个图具有 > 100 个节点。该数据库有 6 类图(在 6 种不同条件下测量的信号),主要目的是找到正确的类别(因此对于每个类别,大约有 2000 个图进行比较)。

8 节点图将代表测量的实际数据,但现在我通过从数据库中选择一个随机图来模拟这一点,然后从中选择 8 个点,然后使用高斯随机数生成器对其进行涂抹。

实现非线性最小二乘法以将 8 节点图的形状与数据库中的每个图进行比较的最佳方法是什么?您知道有没有可以对此有所帮助的 c++ 库?

是否有必要找到 8 节点图的实际公式 (f(x)) 以将其与最小二乘一起使用,或者在请求的点中使用插值就足够了,例如 gsl 库中的插值?

4

1 回答 1

1

您当然可以在不知道实际公式的情况下使用最小二乘。如果您的所有地块都以相同的 x 值测量,那么这很容易——您只需以正常方式计算总和:

在此处输入图像描述

其中 y_i 是 8 节点图中的一个点,sigma_i 是该点的误差,Y(x_i) 是数据库中与 y_i 相同 x 位置的图的值。如果您的所有地块都以相同的 x 值测量,您就会明白为什么这是微不足道的。

如果不是,您可以通过使用某些函数(如果您知道)或通过在点之间插值(如果您不知道)来拟合数据库中的图来获得 Y(x_i)。最简单的插值就是将点用直线连接起来,然后在 x_i 处找到你想要的直线值。其他插值可能会做得更好。

在我的领域,我们使用ROOT来处理这些事情。但是,scipy有很多函数,如果你不介意使用 Python,它可能更容易上手。

您可能遇到的一个主要问题是这两个图不是独立的。维基百科在这种情况下建议 McNemar 的测试。

您可能遇到的另一个问题是您的测试图中没有太多信息,因此您的结果将受到统计波动的很大影响。换句话说,如果你只有 8 个测试点和两个匹配的图,你怎么知道底层函数是否真的相同,或者 8 个点是否只是以看起来的方式跳跃(在它们的误差线内)就像数据库中的情节一样——纯属偶然!……恐怕你不会真的知道。因此,测试良好的地块将包括误报(纯度低),而一些测试不佳的地块实际上可能匹配良好(效率低)。

为了解决这个问题,您需要使用具有更多点的测试图,或者引入其他信息。如果您可以从数据库中丢弃您知道由于其他原因无法匹配的图,那将有很大帮助。

于 2013-05-09T09:11:19.550 回答