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