【问题标题】:k nearest neighbours in multithread program多线程程序中的k个最近邻居
【发布时间】:2017-03-15 23:49:09
【问题描述】:

给定一个训练集和一个测试点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 属于哪个类?

【问题讨论】:

    标签: c++ multithreading knn


    【解决方案1】:

    我希望我理解了这个问题......

    如果您想仅考虑最近的点 (1-nn) 进行分类,则可以。

    然而,为了执行 k-nn 分类,考虑每个 k 组的最近点与考虑 k 组的最近点相同em>k 个最近的点,除非它们碰巧在不同的组中。您至少应该为每个 n 组保留 k 个点,然后在 n*kk 个点/em> 已选中。

    【讨论】:

    • 抱歉问题可能不够清楚。它总是 1-nn。这是关于在(例如)训练集的 4 个非重叠部分上运行 1-nn 是否正确,然后比较 4 个本地最近的邻居以挑选出 1 个全局最近的邻居。
    • 好的,这很好,因为最终你得到了训练集的“最佳”点,就像你在一个批次中迭代它们一样
    • 我也这么认为。但是,我的多线程机器学习程序在以 1 个线程作为一个整体运行训练集时显示出最大的准确性。随着我增加运行线程的数量(每个线程在训练集的不同部分运行),准确性会降低。这就是为什么我开始怀疑自己。
    • 这听起来很奇怪......也许这取决于实现的某些特定方面(我正在考虑使用索引结构,但应该不是问题)。
    • 还有一件事,我使用 mlpack 库来实现。我将训练集分成几个部分,并通过 mlpack 1-nn 算法运行每个部分以获得本地最近的邻居。
    猜你喜欢
    • 1970-01-01
    • 2019-06-05
    • 2011-05-09
    • 2016-09-10
    • 2018-01-06
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    相关资源
    最近更新 更多