2013-05-09 30 views
0

实施简单形状匹配算法以匹配从仅8点(x,y)内插的图对于类似图的数据库(> 12 000个条目),每个节点具有> 100个节点。该数据库有6类图表(6种不同条件下测得的信号),主要目标是找到正确的类别(因此对于每个类别,大约有2000个图表进行比较)。使用非线性最小二乘法对图进行形状匹配

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

实现非线性最小二乘法以比较8节点图形与数据库中每个图形的最佳方式是什么?你知道有哪些C++库可以帮助吗?

是否有必要找到8节点图的实际公式(f(x))以用于最小二乘法,或者是否足以在请求的点中使用插值,例如从gsl库进行插值?

回答

1

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

enter image description here

其中Y_I是在8节点的情节点, sigma_i是该点上的误差,Y(x_i)是数据库中与y_i相同的x位置处的图的值。你可以看到为什么这是微不足道的,如果你所有的图都是在相同的x值下测量的。 (如果你知道的话)或者在点之间插入(如果你不知道的话),你可以得到Y(x_i)。最简单的插值只是用直线连接点,并找到你想要的x_i的直线值。 Other interpolations可能会做得更好。

在我的领域,我们使用ROOT这些东西。但是,scipy有很多功能,如果你不介意使用Python,可能会更容易开始。

你可能会遇到的一个主要问题是这两个地块不是独立的。 Wikipedia suggests McNemar's test in this case.

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

要解决这个问题,您需要使用多点测试图或其他信息。如果您可以从数据库中丢弃出于其他原因而无法匹配的情节,那将会有很大帮助。

+0

谢谢你的回答。我也使用ROOT,但仅用于绘图(图形)。对于插值,我使用了Gnu Scientific Library。 不幸的是,没有超过8个节点用于比较的可能性,我的测试表明,基于最小二乘法的方法给出了非常不令人满意的结果(仅在9%的测试中正确匹配)。所以我现在正在寻找一个更好的方法来做到这一点。感谢您的时间和帮助。 – 2013-05-18 09:09:00

相关问题