Вычисление разреженной матрицы попарных расстояний в R

У меня есть матрица NxM , и я хочу вычислить матрицу NxN евклидовых расстояний между M баллов. В моей задаче N составляет около 100 000. Поскольку я планирую использовать эту матрицу для алгоритма k-ближайшего соседа, мне нужно сохранить только k наименьших расстояний, так что результирующая матрица NxN очень разреженная. Это контрастирует с тем, что получается, например, из dist () , что приведет к плотной матрице (и, вероятно, к проблемам с памятью для моего размера N ).

пакеты для kNN, которые я нашел до сих пор ( knnflex , kknn и т.д.), похоже, все используют плотные матрицы. Кроме того, пакет Matrix не предлагает функции попарного расстояния.

Ближе к моей цели я вижу, что пакет spam имеет ближайший.dist () , которая позволяет учитывать только расстояния меньше некоторого порога, дельта . Однако в моем случае конкретное значение дельта может привести к слишком большому количеству расстояний (так что мне придется хранить матрицу NxN плотно) или слишком малым расстояниям (так что я не могу использовать kNN).

Я видел предыдущее обсуждение попытки выполнить кластеризацию k-средних с использованием пакетов bigmemory / biganalytics , но не похоже, что я могу использовать эти методы в этом случае.

Кто-нибудь знает функцию / реализацию, которая будет вычислять матрицу расстояний в R разреженным образом? Мой (ужасный) план резервного копирования - иметь два цикла для и сохранять результаты в объекте Matrix .

21
задан Community 23 May 2017 в 10:29
поделиться