У меня есть набор данных с примерно 10K точек, каждый из которых имеет 200 числовых дескрипторов.
Из 10 тысяч точек я хотел бы найти выбросы, которые я определяю как те, чьи 10 ближайших соседей находятся далеко (насколько далеко? Расстояние до 10-го соседа является выбросом с точки зрения других расстояний до 10-го соседа). , Выброс определяется как обычно).
Я попытался вычислить всю матрицу расстояний (10K x 10K), для каждой строки примените частичную сортировку, чтобы найти 10 ближайших соседей. Слишком дорого.
Я также проверил варианты быстрого kNN, но они также слишком дороги.
Причина, по которой я думаю, что это может быть сделано гораздо эффективнее, заключается в том, что мы на самом деле не заботимся о реальных расстояниях, а только об их относительных разрядах.
Пример матрицы данных может быть сгенерирован следующим образом:
df = matrix(rnorm(2000000), nrow = 10000, ncol = 200)
Какие-нибудь креативные идеи?