Использование косинусного расстояния с помощью scikit learn KNeighborsClassifier

Можно ли использовать что-то вроде сходства с 1 косинусом с KNeighborsClassifier scikit learn?

Этот ответ говорит «нет», но в документации для KNeighborsClassifier говорится, что показатели, упомянутые в « DistanceMetrics» , доступны. Дистанционные метрики не включают явное расстояние косинуса, вероятно, потому, что это не действительно расстояние, но, возможно, можно ввести функцию в метрику. Я попытался ввести scikit, изучая линейное ядро ​​в KNeighborsClassifier, но это дает мне ошибку, что функции нужны два массива в качестве аргументов. Кто-нибудь еще пробовал это?

One Solution collect form web for “Использование косинусного расстояния с помощью scikit learn KNeighborsClassifier”

Сходство косинусов обычно определяется как x T y / (|| x || * || y ||) и выводит 1, если они одинаковы и равны -1, если они совершенно разные. Это определение технически не является метрикой, поэтому вы не можете использовать с ним ускоряющие структуры, такие как шары и деревья kd. Если вы заставляете scikit учиться использовать подход грубой силы, вы должны иметь возможность использовать его как расстояние, если вы передадите ему свой собственный объект метрики расстояния. Существуют методы преобразования подобия косинуса в допустимую метрику расстояния, если вы хотите использовать шары (вы можете найти их в библиотеке JSAT )

Заметим, однако, что x T y / (|| x || * || y ||) = (x / || x ||) T (y / || y ||). Евклидово расстояние можно условно записать как sqrt (x T x + y T y – 2 x T y). Если мы нормализуем каждое datapoint, прежде чем передать его KNeighborsClassifier, тогда x^T x = 1 для всех x . Таким образом, эвклидовое расстояние будет деградировать до sqrt(2 − 2x^T y) . Для всех одинаковых входных данных мы получим sqrt(2-2*1) = 0 и для полных противоположностей sqrt(2-2*-1)= 2 . И это, очевидно, простая форма, поэтому вы можете получить тот же порядок, что и косинус-расстояние, нормализуя свои данные, а затем используя эвклидовое расстояние. Пока вы используете вариант с uniform весами, результаты будут идентичны, если использовать правильное расстояние для косинуса.

  • Обеспечение правильного порядка операций в случайной классификации лесов в scikit learn
  • Самая быстрая реализация SVM, используемая в Python
  • Ошибка сегментирования случайного лесного классификатора
  • Scikit-learn - функция сокращения с использованием RFECV и GridSearch. Где хранятся коэффициенты?
  • Обучение логистической регрессии с использованием scikit для многоклассовой классификации
  • Как получить доступ к отдельным прогнозам в Spark RandomForest?
  • склеарная агломерационная кластерная матрица связывания
  • почему перекрестная проверка для RandomForestRegressor терпит неудачу в scikit-learn
  •  
    Interesting Posts for Van-Lav

    smtplib python не может подключиться к gmail, mail.ru или чему-либо еще

    Экспоненциальность очень маленького числа в python

    Остановка потока через определенное время

    Как извлечь JAR в файловой системе UNIX с помощью одной команды и указать ее целевой каталог с помощью команды JAR?

    Как реализовать полосовой фильтр Butterworth с Scipy.signal.butter

    Python lxml – Как удалить пустые повторяющиеся теги

    IndexError: индекс индекса вне диапазона чтения / записи из / в файл

    Python разделяет строку пробелами, кроме как в кавычках, но сохраняет кавычки

    flask – как получить параметры из запроса JSON GET

    Как я могу обучать алгоритм генетического программирования на переменную последовательность дескрипторов?

    Могу ли я создать поле admin, которое не требуется в Django, без создания формы?

    Что такое идиоматический синтаксис для добавления в короткий список python?

    Любой способ решить систему связанных дифференциальных уравнений в питоне?

    Приложение AppEngine с использованием Django не загружается

    Python: удаление элемента списка при повторении списка

    Python - лучший язык программирования в мире.