2013-05-09 74 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