Почему у класса Метрики расстояний SKLearn нет косинусного расстояния?
Я пытаюсь получить KNN с косинусным расстоянием, но похоже, что метрический параметр не принимает косинусное расстояние. В http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.DistanceMetric.html доступны только следующие показатели. Это почему?
Метрики, предназначенные для вещественных векторных пространств: идентификатор класса имя args функция расстояния "евклидов" EuclideanDistance
sqrt (sum ((x - y) ^ 2)) "Манхэттен" ManhattanDistance
сумма (|x - y|) "чебышев"
сумма (max(|x - y|)) "Минковский" MinkowskiDistance p sum(|x - y|^p)^(1/p) "wminkowski" WMinkowskiDistance p, w sum(w * |x - y | ^ p) ^ (1 / p) "seuclidean" SEuclideanDistance V sqrt(sum((x - y)^2 / V)) "mahalanobis" MahalanobisDistance V или VI sqrt((x - y)' V^-1 (x - y)) Метрики, предназначенные для двумерных векторных пространств: идентификатор класса имени, функция расстояния "haversine" HaversineDistance
2 arcsin (sqrt (sin ^ 2 (0.5 * dx) cos (x1) cos (x2) sin ^ 2 (0.5 * dy)))
0 ответов
Косинусное расстояние не является правильным расстоянием в том смысле, что оно не удовлетворяет неравенству треугольника. Это угол, который сам по себе не является кратчайшим расстоянием. Это хорошо описано здесь - https://en.wikipedia.org/wiki/Cosine_similarity. Для K-средних или любого алгоритма подобия типа расстояния выполнение требований метрики расстояния (https://en.wikipedia.org/wiki/Metric_(mathematics)) является необходимым требованием.