2011-08-09 28 views
1

我正在爲外匯市場設計一個自動交易軟件。 在MYSQL數據庫中,我每隔五分鐘就有多年的市場數據。對於這些數據,我有5個不同的度量標準以及價格和時間。如何執行「N-nearest neighbors?」的多維搜索?

[Time|Price|M1|M2|M3|M4|M5] 
x ~400,0000 

Time是主密鑰,並通過M1M5不同的指標(如標準偏差或移動平均的斜率)。

給定輸入M1,M2,M3,M4和M5我怎樣纔能有效地定位最近的5000個鄰居?請注意,每個度量標準都是浮點數,並具有不同的分佈/範圍。

+0

我增加了一個答案,但我不得不猜測什麼會決定「最近的鄰居」。你可以定義什麼樣子? – Narnian

回答

1

我不知道你如何確定最近的鄰居。看來你可以在每個度量標準之間做一個絕對值差異並總結它們。 (如果沒有絕對值,你可以有兩個指標是遙遠,但相互抵消。)

所以,最近的鄰居將被定義爲從這個任務具有最低值:

ABS(M1 - @M1) + ABS(M2 - @M2) + ABS(M3 - @M3) + ABS(M4 - @M4) + ABS(M5 - @M5) 

如果一切正常,那麼查詢將是:

SELECT TOP 5000 * 
FROM YourTable 
ORDER BY ABS(M1 - @M1) + ABS(M2 - @M2) + ABS(M3 - @M3) + ABS(M4 - @M4) + ABS(M5 - @M5) 

如果你願意,你可以體重每個指標的不同,以及:

SELECT TOP 5000 * 
FROM YourTable 
ORDER BY 2 * ABS(M1 - @M1) + 5 * ABS(M2 - @M2) + ABS(M3 - @M3) + 3 * ABS(M4 - @M4) + ABS(M5 - @M5) 
+0

從我的理解,這將是不準確的。我想要得到一個真正的結果,你需要使用像畢達哥拉斯定理。 –