我有一个地板,各种传感器放在地板上的不同位置。对于每个发送设备,传感器可以检测其读数。在地板上可能有6-7个传感器,某些传感器可能无法检测到特定读数,但某些其他传感器可能会检测到这些传感器。
对于我得到的每一个阅读,我想确定阅读在地板上的位置。我们将楼层逻辑划分为TILE(5x5英尺区域),并找到理想情况下每个传感器设备检测到的每个TILE的读数(基于某些传输路径损耗等式)。
我使用的是N' N' N'每个TILE上的传感器设备作为N维空间中的一个点。当我获得真实的阅读时,我找到了这个阅读的最近邻居,并将此读数分配给该位置。
我想知道是否存在K个最近邻居的变体,其中维度可以从考虑中移除。当特定传感器未报告任何读数时,这将特别有用。我知道使用像kd-tree或R树这样的算法将重量放在维度上是不可能的。但是,我想知道在计算最近邻居时是否可以丢弃维度。有没有这样的算法?
编辑:
我想知道的是,相同的R / kd树是否可以用于具有不同查询的k最近搜索,其中每个查询具有不同的维度权重?我不想为尺寸上的每个不同重量构建另一个kd树。
编辑2:
python中是否有任何库,允许您指定自定义距离函数,并搜索k个最近邻居?基本上,我想为不同的查询使用不同的自定义距离函数。
答案 0 :(得分:0)
对于R树和kd树,使用加权Minkowski规范是直截了当的。只需将权重放入距离方程式中即可!
将重量放入Eulidean点到矩形的最小距离是微不足道的,只需看看常规公式并根据需要插入重量。
在树木施工时间使用距离 ,因此您可以在查询时根据需要改变权重。
答案 1 :(得分:0)
在经历了很多关于stackoverflow的问题后,最后进入了scipy kd树源代码的细节,我意识到以下链接中“celion”的答案是正确的:
KD-Trees and missing values (vector comparison)
摘录:
“我认为最好的解决方案是让你在你正在使用的代码中沾沾自喜。假设最近邻搜索计算树叶中的点与查询向量之间的距离;你应该能够将其修改为处理点和查询向量大小不同的情况。例如,如果树中的点是以3D形式给出的,但查询向量只是长度为2,那么点之间的“距离”(p0,p1,p2)查询向量(x0,x1)将是
sqrt((p0-x0)^ 2 +(p1-x1)^ 2)
我没有深入研究您链接到的java代码,但如果您需要帮助,我可以尝试找到更改所需的确切位置。
-Chris
PS - 您可能不需要上面等式中的sqrt,因为距离平方通常是等效的。“