C++ 多线程程序中的k近邻

C++ 多线程程序中的k近邻,c++,multithreading,knn,C++,Multithreading,Knn,给定训练集和测试点T,需要对其进行分类。 如果我将训练集划分为n个部分,那么在每个部分上运行knn算法(k=1)。然后我比较每个部分的结果。它会给我和在整个训练集中运行1-nn一样的结果吗? 例如: n=4。将培训集分为4部分 在训练集的4个部分上运行1-nn算法后,我得到了第1部分的A点、第2部分的B点、第3部分的C点和第4部分的D点。在那之后,我可以比较T到A、B、C和D的距离来确定T属于哪一类吗?我希望我理解了这个问题 如果只考虑最近点(1-nn)进行分类,则可以 然而,为了进行k-nn分

给定训练集和测试点T,需要对其进行分类。 如果我将训练集划分为n个部分,那么在每个部分上运行knn算法(k=1)。然后我比较每个部分的结果。它会给我和在整个训练集中运行1-nn一样的结果吗? 例如: n=4。将培训集分为4部分
在训练集的4个部分上运行1-nn算法后,我得到了第1部分的A点、第2部分的B点、第3部分的C点和第4部分的D点。在那之后,我可以比较T到A、B、C和D的距离来确定T属于哪一类吗?

我希望我理解了这个问题

如果只考虑最近点(1-nn)进行分类,则可以


然而,为了进行k-nn分类,考虑每个k组的最近点与考虑k个最近点不同,除非它们恰好在不同的组中。您应该至少为n个组中的每个组保留k点,然后从所选的n*k中选择最近的k点。

很抱歉,问题可能不够清楚。它总是1-nn。这是关于在(例如)训练集中的4个非重叠部分上运行1-nn,然后比较4个局部最近邻,选出1个全局最近邻是否正确。好的,这很好,因为最后你得到了训练集的“最佳”点,就像你在单个批中迭代一样。我也这么认为。然而,我的多线程机器学习程序在以1个线程作为一个整体运行训练集时显示出最大的准确性。随着我增加运行线程的数量(每个线程在训练集的不同部分上运行),准确性会降低。这就是我开始怀疑自己的原因。听起来很奇怪。。。也许这取决于实现的某些特定方面(我在考虑使用索引结构,但这应该不是问题)。我将训练集分成几个部分,并通过mlpack 1-nn算法运行每个部分,以获得局部最近邻。