首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mlpack最近邻居与余弦距离?

mlpack最近邻居与余弦距离?
EN

Stack Overflow用户
提问于 2017-02-08 03:07:52
回答 1查看 298关注 0票数 1

我想使用mlpack中的NeighborSearch类对一些表示文档的向量执行KNN分类。

我想使用余弦距离,但我遇到了麻烦。我认为这样做的方法是使用内积度量"IPMetric“并指定CosineDistance内核……这就是我所拥有的:

代码语言:javascript
复制
NeighborSearch<NearestNeighborSort, IPMetric<CosineDistance>> nn(X_train);

但是我得到了以下编译错误:

代码语言:javascript
复制
/usr/include/mlpack/core/tree/hrectbound_impl.hpp:211:15: error: ‘Power’ is not a member of ‘mlpack::metric::IPMetric<mlpack::kernel::CosineDistance>’
 sum += pow((lower + fabs(lower)) + (higher + fabs(higher)),
           ^
/usr/include/mlpack/core/tree/hrectbound_impl.hpp:220:3: error: ‘TakeRoot’ is not a member of ‘mlpack::metric::IPMetric<mlpack::kernel::CosineDistance>’
if (MetricType::TakeRoot)
^

我怀疑问题可能是缺省树类型KDTree不支持此距离度量?如果这就是问题所在,有没有适用于CosineDistance的树类型?

最后,是否可以使用暴力搜索?我似乎找不到一种方法来使用没有树...

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-02-08 06:01:01

不幸的是,正如您所怀疑的那样,任意度量类型不适用于KDTree-这是因为kd-tree需要一个可以分解为不同维度的距离。但对于IPMetric来说,这是不可能的。相反,为什么不尝试使用封面树呢?树的构建时间可能会稍长一些,但它应该提供类似的性能:

代码语言:javascript
复制
NeighborSearch<NearestNeighborSort, IPMetric<CosineDistance>, arma::mat,
    tree::StandardCoverTree> nn(X_train);

如果要执行暴力搜索,请在构造函数中指定搜索模式:

代码语言:javascript
复制
NeighborSearch<NearestNeighborSort, IPMetric<CosineDistance>, arma::mat,
    tree::StandardCoverTree> nn(X_train, NAIVE_MODE);

我希望这是有帮助的;如果我能澄清什么,请告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42097957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档