У меня есть ситуация, когда я пытаюсь найти 3 ближайших соседей для данного идентификатора в моем фрейме данных. Я использую NN Alogrithm (не KNN) для достижения этой цели. Приведенный ниже код дает мне трех ближайших соседей, для верхнего узла результаты хороши, но для средних и нижних точность только 1/3 соседей верна, в то время как я рассчитываю на правильность как минимум 2/3 соседей на каждом ID. Мой набор данных имеет 47 функций и 5000 точек.
from sklearn.neighbors import KDTree
def findsuccess(sso_id):
neighbors_f_sso_id = np.where(nbrs.kneighbors_graph([X[i]]))[0]
print('Neighbors of id', neighbors_f_sso_id)
kdt = KDTree(X, leaf_size=40, metric='euclidean')
kdt.query(X, k=4, return_distance=False)
Приведенный выше код вернет сам идентификатор и 3 ближайших соседа, следовательно, k = 4
Я прочитал это из-за проклятия Из-за размерности этот алгоритм NN может не работать должным образом, поскольку в моем наборе данных содержится около 47 объектов, но я думаю, что это единственный вариант, когда дело доходит до фрейма данных без целевой переменной. Есть одна статья, доступная здесь , в которой говорится, что KD Tree - не лучший из алгоритмов, которые можно использовать.
Каков наилучший способ достижения максимальной точности, то есть достижение минимального расстояния? Нужно ли выполнять масштабирование перед переходом в алгоритм KD Tree? Любые другие вещи, которые мне нужно позаботиться?