gpt4 book ai didi

c++ - 具有余弦距离的 mlpack 最近邻?

转载 作者:太空宇宙 更新时间:2023-11-04 13:06:27 25 4
gpt4 key购买 nike

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

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

NeighborSearch<NearestNeighborSort, IPMetric<CosineDistance>> nn(X_train);

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

/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 的树类型?

最后,是否可以使用暴力搜索?我似乎找不到完全不使用树的方法...

谢谢!

最佳答案

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

NeighborSearch<NearestNeighborSort, IPMetric<CosineDistance>, arma::mat,
tree::StandardCoverTree> nn(X_train);

如果要进行暴力搜索,在构造函数中指定搜索方式:

NeighborSearch<NearestNeighborSort, IPMetric<CosineDistance>, arma::mat,
tree::StandardCoverTree> nn(X_train, NAIVE_MODE);

希望对您有所帮助;如果我能澄清任何事情,请告诉我。

关于c++ - 具有余弦距离的 mlpack 最近邻?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42097957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com