Почему metric = 'precomputed' не работает в k-ближайших соседях sk-learn?

scikit-learn knn

577 просмотра

1 ответ

153 Репутация автора

Я пытаюсь подогнать предварительно вычисленную матрицу ядра при использовании http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html , это, очевидно, возможно, поскольку существует метрика «предварительно вычисленные». Я позволяю вам передать матрицу ядра n_samples * n_samples для соответствия методу.

При использовании вот что я получаю:

ValueError: Метрика «предварительно вычислено» недопустима для алгоритма «auto»

Я не понимаю, как использование алгоритма 'auto' для поиска ближайших соседей несовместимо с тем, что я использую предварительно вычисленную матрицу ядра.

РЕДАКТИРОВАТЬ :

К сожалению, мой вопрос не привлек внимание. Я более подробно изучил исходный код, и кажется, что с тех пор, как вы его пропустили metric=precomputed, возникает ошибка , поскольку код должен позволять вам выбирать algorithm=auto. Вместо этого при запуске код сталкивается с ошибкой valueError, которую я упомянул, и я не думаю, что автор хотел, чтобы его код вел себя так. Я понятия не имею, как изменить исходный код для правильного поведения.

Также я хочу добавить к вопросу, что с более теоретической точки зрения вполне оправданно иметь возможность использовать матрицу ядра (также называемую матрицей грамм), чтобы использовать метод подгонки kNN. Вы можете вывести матрицу расстояний из матрицы грамм, а затем, когда вы хотите предсказать новые данные, вам просто нужно найти k ближайших соседей и пометить новые данные самой присутствующей меткой в ​​k ближайших соседях.

Я действительно думаю, что этот вопрос должен получить ответ. Это правильно задано, я хочу что-то действительно точное, и я знаю, что кто-то с более глубоким пониманием Python и библиотеки Scikit Learn сможет ответить на него. Может быть, я упускаю что-то очевидное, но я также думаю, что это должно помочь любому, кто пытается использовать kNN с предварительно вычисленной матрицей ядра (что не является единичным случаем).

Автор: Syzygy Источник Размещён: 18.07.2016 06:35

Ответы (1)


0 плюса

36 Репутация автора

Решение

Я думаю, что уже слишком поздно, чтобы ответить, но если вы все еще задавались вопросом. «Авто» не будет работать, потому что KDTree не принимает пользовательские или предварительно вычисленные метрики. Только Ball Tree будет работать. Если вы специально установите алгоритм на «Ball Tree», он должен работать просто отлично. Надеюсь это поможет!

Автор: user8226519 Размещён: 30.06.2017 01:38
Вопросы из категории :
32x32