如何对“N个最近邻居”进行多维搜索?

时间:2011-08-09 10:39:18

标签: mysql sql nearest-neighbor proximity

我正在为外汇市场设计一个自动交易软件。 在MYSQL数据库中,我每隔五分钟就会有多年的市场数据。除了价格和时间外,我还有5种不同的数据指标。

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

Time是主键,M1M5是不同的指标(例如标准偏差或移动平均线的斜率)。

根据M1M2M3M4和M5的输入,我如何有效地找到最近的5,000个邻居?请注意,每个度量标准都是浮点数,并且具有不同的分布/范围。

1 个答案:

答案 0 :(得分: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)