我有一个充满二维数据的数据库-地图上的点。每个记录都有一个几何类型的字段。我需要做的就是将一个点传递给存储过程,该存储过程返回 k个
最近的点(k也将传递给sproc,但这很容易)。我在http://blogs.msdn.com/isaac/archive/2008/10/23/nearest-
neighbors.aspx上
找到了一个查询,该查询可以获取最近的单个邻居,但是我不知道如何将其扩展到找到 k个 最近的邻居。
这是当前查询-T
是表,g
是geometry字段,@x
是要搜索的点,Numbers
是整数1到 n 的表:
DECLARE @start FLOAT = 1000;
WITH NearestPoints AS
(
SELECT TOP(1) WITH TIES *, T.g.STDistance(@x) AS dist
FROM Numbers JOIN T WITH(INDEX(spatial_index))
ON T.g.STDistance(@x) < @start*POWER(2,Numbers.n)
ORDER BY n
)
SELECT TOP(1) * FROM NearestPoints
ORDER BY n, dist
内部查询选择最近的非空区域,然后外部查询从该区域中选择最靠前的结果。外部查询可以很容易地更改为(eg)SELECT TOP(20)
,但是如果最近的区域仅包含一个结果,那么您将受此困扰。
我认为我可能需要递归搜索包含 k 条记录的第一个区域,但不使用表变量(这将导致维护问题,因为您必须创建表结构并且易于更改-字段很多),我看不出来
如果TOP (1) WITH TIES
从内部查询中删除并设置外部查询以返回前 k 行,会发生什么情况?
我也想知道这项修正案是否有帮助。它应该比使用TOP
以下命令更有效:
DECLARE @start FLOAT = 1000
,@k INT = 20
,@p FLOAT = 2;
WITH NearestPoints AS
(
SELECT *
,T.g.STDistance(@x) AS dist
,ROW_NUMBER() OVER (ORDER BY T.g.STDistance(@x)) AS rn
FROM Numbers
JOIN T WITH(INDEX(spatial_index))
ON T.g.STDistance(@x) < @start*POWER(@p,Numbers.n)
AND (Numbers.n - 1 = 0
OR T.g.STDistance(@x) >= @start*POWER(@p,Numbers.n - 1)
)
)
SELECT *
FROM NearestPoints
WHERE rn <= @k;
注意:未经测试-我无法在此处访问SQL 2008。
介绍 KNN算法全名为k-Nearest Neighbor,就是K最近邻的意思。KNN 也是一种分类算法。但是与之前说的决策树分类算法相比,这个算法算是最简单的一个了。算法的主要过程为: 1、给定一个训练集数据,每个训练集数据都是已经分好类的。 2、设定一个初始的测试数据a,计算a到训练集所有数据的欧几里得距离,并排序。 3、选出训练集中离a距离最近的
k近邻(k-Nearest Neighbors)采用向量空间模型来分类,是一种常用的监督学习方法。它的工作原理为:给定测试样本,基于某种距离度量找出训练集中与其最靠近的k个训练样本,然后基于这k个“邻居”的信息来进行预测。通常,在分类任务中可使用“投票法”,即选择这k个样本中出现最多的类别标记作为预测结果;在回归任务中可使用“平均法”,即将这k个样本的实值输出标记的平均值作为预测结果;还可基于距离
我正在尝试使用jgraph T解决一个链接预测问题。我正在根据两个节点的邻居计算两个节点之间的相似性。每个节点都有一些属性。计算变得太多了,因为一些节点有大约700个邻居,而我有4500个这样的节点。我有谁对的700K边,我计算相似性。 现在,我不想使用节点的所有邻居,我只想使用每个节点的k个最近邻居来计算一对节点之间的相似度。我可以根据边共享的两个节点的属性数,或节点之间长度为n的最短路径数等,
@subpage tutorial_py_knn_understanding_cn 了解kNN的基本知识。 @subpage tutorial_py_knn_opencv_cn 现在让我们在OpenCV中使用kNN进行数字识别(OCR)
我在计算最近的邻居。为此,我需要传递一个参数来限制与邻居的最大距离。比如半径1000米内最近的邻居是哪些? 我做了以下工作: 我用以下数据创建了我的表: 之后,我执行了以下查询: 第一个问题,巴西的SRID是4326吗?4269是什么? 第二个问题,通过执行以下SQL 这不会返回任何结果。据我所知,这个SQL将进一步指出最大距离的半径,对吗? 如果你把1000个结果放在100000000,我的所有
k近邻模型 $$k$$近邻(k-Nearest Neighbor,简称kNN)学习是一种常用的监督式学习方法,其工作机制非常简单: 给定测试样本,基于某种距离度量找出训练集中与其最靠近的$$k$$个训练样本,然后基于这$$k$$个“邻居”的信息来进行预测。通常,在分类任务中可使用“投票法”,即选择这$$k$$个样本中出现最多的类别标记作为预测结果;在回归任务中可以使用“平均法”,即将这$$k$$个