问题标签 [knn]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 关于 C# 中的 K-Nearest Neighbor 和 OpenCV
我想知道 OpenCV 中是否有执行 KNN 的内置函数?
如果它存在我该如何处理它..我搜索但我没有找到任何有用的东西
感谢
machine-learning - ANN、SVM 和 KNN 分类器有什么区别?
我正在做遥感图像分类。我使用的是面向对象的方法:首先将图像分割到不同的区域,然后从区域中提取特征,例如颜色、形状和纹理。一个区域的所有特征的数量可能是 30,通常总共有 2000 个区域,我将选择 5 个类,每个类 15 个样本。
总之:
- 样本数据 1530
- 测试数据197530
如何选择合适的分类器?如果有 3 个分类器(ANN、SVM 和 KNN),我应该选择哪个分类更好?
machine-learning - 是否有任何使用 Johnson Lindenstrauss Lemma 的 K-NN 实现?
我想知道是否有使用这种方法的 K-NN 实现。Python 或 Ruby 会更好。
machine-learning - 当我们在 K 最近邻中有稀疏数据集时如何计算距离
我正在为非常稀疏的数据实现 K 最近邻算法。我想计算一个测试实例和训练集中每个样本之间的距离,但我很困惑。
因为训练样本中的大部分特征在测试实例中都不存在,反之亦然(缺失特征)。
在这种情况下如何计算距离?
r - R knn 大数据集
我正在尝试在 R 中使用 knn(使用了几个包(knnflex
,class
))来预测基于 8 个变量的默认概率。数据集大约有 8 列的 100k 行,但我的机器似乎很难处理 10k 行的样本。iris
对于在 > 50 行(即)的数据集上做 knn 有什么建议吗?
编辑:
为了澄清有几个问题。
1) class
andknnflex
包中的例子有点不清楚,我很好奇是否有一些类似于 randomForest 包的实现,在其中你给它你想要预测的变量和你想要用来训练模型的数据:
然后转身用模型预测数据使用测试数据集:
2)我不太明白为什么knn
需要训练和测试数据来构建模型。据我所知,该包创建了一个矩阵 ~nrows(trainingData)^2
似乎也是预测数据大小的上限。我使用 5000 行创建了一个模型(在此之上#我遇到了内存分配错误)并且无法预测测试集 > 5000 行。因此,我需要:
a) 找到一种在训练集中使用 > 5000 行的方法
或者
b) 找到一种在全部 100k 行上使用模型的方法。
weka - 如何对 Java/Weka 中的 k 最近邻使用不同的距离度量?
我在 weka (http://weka.sourceforge.net/doc.dev/weka/classifiers/lazy/IBk.html) 上使用 k-最近邻分类器。
我想欧几里得距离是默认的距离函数。我怎样才能改变那个函数,并用我自己的距离函数使用同一个类?
谢谢,
马可
recommendation-engine - 如何使用增量 SVD 推荐系统创建推荐
我正在测试一个根据 Simon Funk 算法构建的推荐系统。(由 Timely Dev 编写。http://www.timelydevelopment.com/demos/NetflixPrize.aspx)
问题是,所有增量 SVD 算法都试图预测 user_id 和 movie_id 的评分。但在实际系统中,这应该为活动用户生成一个新项目列表。我看到有些人在 Incremental SVD 之后使用了 kNN,但是如果我没有遗漏一些东西,如果我在通过 Incremental SVD 创建模型之后使用 kNN,我会失去所有的性能提升。
任何人都对增量 SVD/Simon Funk 方法有任何经验,并告诉我如何生成新的推荐项目列表?
matlab - 如何找到分类器的准确性
我正在使用 KNN 分类器,我发现 knnclassify 在 MATLAB 中为我进行了分类。
代码:
我现在面临的问题,knnclassify 只是对点进行分类并给它们一个值,但我想找到这种分类的准确性。
我试过这样的事情:
它给了我这个错误:
有没有更好的方法来找到分类器的准确性,或者我应该做哪些更正来改进上面的代码?
c++ - 以相反的顺序获取`std::priority_queue`元素?
我已经编写了一些 K-nearest-neighbor 查询方法,这些方法构建了一个最接近给定查询点的点列表。为了维护该邻居列表,我使用std::priority_queue
顶部元素是查询点最远的邻居。这样我就知道是否应该推送当前正在检查的新元素(如果距离小于当前最远的邻居),并且当我的优先级队列有超过 K 个元素时可以 pop() 最远的元素。
到目前为止,一切都很好。但是,当我输出元素时,我想从最近到最远的顺序排列它们。目前,我只是简单地从优先级队列中弹出所有元素并将它们放在输出容器上(通过迭代器),这会产生从最远到最近排序的点序列,因此,我调用std::reverse
输出迭代器范围.
作为一个简单的例子,这里是一个使用优先队列的线性搜索(显然,我使用的实际最近邻查询方法要复杂得多):
除了一件事之外,以上都是花花公子:它要求输出迭代器类型是双向的,并且本质上指向一个预先分配的容器。现在,这种将输出存储在某个输出迭代器规定的范围内的做法也非常棒且非常标准(例如std::copy
,其他 STL 算法就是很好的例子)。但是,在这种情况下,我希望能够只需要一个前向输出迭代器类型,这样就可以使用为 STL 容器和 iostream 提供的反向插入器迭代器。
因此,这归结为在将其内容转储到输出迭代器之前反转优先级队列。所以,这些是我能够想出的更好的选择:
创建一个
std::vector
,转储其中的优先级队列内容,并使用向量上的反向迭代器将元素转储到输出迭代器中。将 替换为
std::priority_queue
已排序的容器(例如std::multimap
),然后使用适当的遍历顺序将内容转储到输出迭代器中。
还有其他合理的选择吗?
在我上面的第二个选项中,我曾经在此算法和其他算法的先前实现中使用 a std::multimap
。但是,当我切换到 时std::priority_queue
,性能提升非常显着。所以,我宁愿不使用第二个选项,因为看起来使用优先级队列来维护邻居列表比依赖排序数组要好得多。顺便说一句,我还尝试了一个std::vector
我维护的 sorted with std::inplace_merge
,它比 multimap 更好,但与优先级队列不匹配。
至于第一个选项,这是我目前最好的选择,对我来说,必须进行这种数据的双重传输(队列 -> 向量 -> 输出)似乎很浪费。我只是倾向于认为必须有一种更简单的方法来做到这一点......我错过了一些东西......
第一个选项在这个应用程序中确实不是那么糟糕(考虑到它之前的算法的复杂性),但是如果有避免这种双重内存传输的技巧,我想知道它。
android - openCV Android:knnMatcher 仅返回 1 个描述符的匹配项
我必须为我的硕士论文实现一个用于 android 的徽标检测算法。我目前正在使用带有 NDK 的 openCV android 库,并且已经设法使用 SURF 检测关键点并为这些关键点设置描述符。
对我来说,下一步是使用knnMatch为每个关键点找到 2 个最近的匹配,然后我将丢弃最佳 knn 匹配与第二个匹配不太明显的匹配(这两个的距离比太低)这里是我的代码的一部分:
我的问题是,例如,当我有 500 个用于查询徽标的描述符和 400 个用于火车徽标的描述符时,knn 返回 500 个匹配项,但每个匹配项都针对同一个关键点。通常,它为每个描述符返回 2 个最佳匹配,因此 500 个不同的描述符,现在它们返回一个相同描述符的最佳匹配的 500 倍。
因此,当我绘制这些 knn 匹配时,在始终相同的关键点之间有 1 条匹配线,绘制了 500 次
当我尝试简单的匹配器时,它只是返回最佳匹配,我得到更多的行。我已经通过将图像与自身进行比较来测试这一点。Knn 返回这一行,其中一个简单的匹配会抽取所有 500 个匹配,在这种情况下它们当然是正确的。
我找不到任何处理过类似问题的帖子,是否有人遇到过这个问题或知道我在这里做错了什么?
提前谢谢。