Найти K ближайших соседей, начиная с матрицы расстояний

Я ищу хорошо оптимизированную функцию, которая принимает матрицу расстояний n X n и возвращает матрицу n X k с индексами ближайших соседей k i-го элемента данных в i-й строке.

Я нахожу несколько миллиардов R пакетов, которые позволяют вам делать KNN, но все они, кажется, включают вычисления расстояния вместе с алгоритмом сортировки в одной и той же функции. В частности, для большинства процедур основным аргументом является исходная матрица данных, а не матрица расстояний. В моем случае я использую нестандартное расстояние для смешанных типов переменных, поэтому мне нужно отделить задачу сортировки от вычислений расстояния.

Это не совсем сложная проблема - очевидно, я мог бы просто использовать функцию order внутри цикла, чтобы получить то, что я хочу (см. Мое решение ниже), но это далеко не оптимально. Например, функция sort с partial = 1:k, когда k мала (меньше 11), работает намного быстрее, но, к сожалению, возвращает только отсортированные значения, а не нужные индексы.

10
задан zkurtz 3 May 2014 в 21:10
поделиться