млпак ближайший сосед с косинусным расстоянием?

Я хотел бы использовать класс NeighborSearch в mlpack, чтобы выполнить классификацию KNN для некоторых векторов, представляющих документы.

Я бы хотел использовать Cosine Distance, но у меня проблемы. Я думаю, что способ сделать это — использовать метрику внутреннего продукта «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?

Наконец, возможно ли использовать перебор? Я не могу найти способ использовать дерево вообще …

Спасибо!

1

Решение

К сожалению, как вы и предполагали, произвольные типы метрик не работают с 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);

Я надеюсь, что это полезно; дайте мне знать, если я могу уточнить что-нибудь.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]