JMP k = 1 вывод выбросов ближайших соседей является более быстрым и более точным, чем подход Python Matrix? Что они делают? - PullRequest
0 голосов
/ 25 октября 2019

Я хочу создать алгоритм обнаружения ближайшего соседа в python, основываясь на его успехе в JMP. НО, поиск ближайшего соседа для каждой точки не дает таких же результатов? !!

В JMP я использовал встроенную функцию «Многовариантные k-ближайшие соседние выбросы: выброс далеко от k-го ближайшего соседа»

Для простоты я использовал следующий код для вычисления расстояния до ближайшего соседа:

import scipy as sp
import scipy.spatial
from scipy.spatial.distance import cdist

points = sp.array(...)
distances = sp.spatial.distance.cdist(points)

# An element is not its own nearest neighbor
sp.fill_diagonal(distances, sp.inf)

# Find the distance of each element's nearest neighbor
mins = distances.min(0)

, который вычисляет расстояние до ближайшего соседа для каждой точки в моем списке точек. НО, эти результаты отличаются от результатов JPM, а JPM ТОЧНО и БЫСТРЕЕ? !! WTH mate.

Я приложил графики моих результатов из JMP Результаты JMP , а также из моего кода Python Python Nearest Neighbor Results . Обратите внимание, что красные точки на обоих изображениях - это выбросы, определенные из моего кода JMP, которые являются правильными. В моих результатах Python красные точки (выбросы), рассчитанные в JMP, отображаются как точки, которые Python НЕ будет рассматривать как выбросы. То есть красные точки (выбросы JMP) на моем графике Python находятся в плотных областях ... Я также приложил изображения, которые показывают, насколько хорошо JMP идентифицирует выбросы Выбросы, идентифицированные из JMP 1NN . Обратите внимание на различные Y-шкалы между графиками JMP и python. Я предполагаю, что JMP также комбинирует некоторый вид LOF с вычислениями и / или включает в себя плотность площади?

Я могу беспокоиться о скорости позже, поскольку это можно объяснить использованием разных компьютеров.

Мысли

...