Косинусное расстояние¶
Косинусное расстояние — это метрика, используемая для измерения различия между двумя ненулевыми векторами в многомерном пространстве. Она определяется как единица минус косинус угла между векторами, то есть косинусное расстояние = 1 − cos(θ). В отличие от евклидова расстояния, косинусное расстояние не зависит от длины (нормы) векторов, а учитывает только их направление. Значение косинусного расстояния лежит в диапазоне от 0 (векторы сонаправлены, угол 0°) до 2 (векторы противоположно направлены, угол 180°). При ортогональных векторах (угол 90°) значение равно 1. Косинусное расстояние широко применяется в анализе текстов, машинном обучении, информационном поиске и рекомендательных системах, где важна не абсолютная величина признаков, а их относительное распределение.
¶Определение и математическая основа
Косинусное расстояние базируется на понятии косинусного сходства (cosine similarity). Косинусное сходство между двумя векторами A и B вычисляется как скалярное произведение векторов, делённое на произведение их длин:
\[ \cos(\theta) = \frac{\mathbf{A} \cdot \mathbf{B}}{\|\mathbf{A}\| \|\mathbf{B}\|} = \frac{\sum_{i=1}^{n} A_i B_i}{\sqrt{\sum_{i=1}^{n} A_i^2} \sqrt{\sum_{i=1}^{n} B_i^2}} \]
Косинусное расстояние \(d_c\) тогда определяется как:
\[ d_c(\mathbf{A}, \mathbf{B}) = 1 - \cos(\theta) \]
Если векторы нормированы (имеют единичную длину), косинусное сходство равно скалярному произведению, а косинусное расстояние — разности единицы и этого произведения.
¶Свойства
- Неотрицательность: \(d_c(\mathbf{A}, \mathbf{B}) \ge 0\).
- Симметричность: \(d_c(\mathbf{A}, \mathbf{B}) = d_c(\mathbf{B}, \mathbf{A})\).
- Нулевое расстояние для одинаковых направлений: \(d_c(\mathbf{A}, \mathbf{A}) = 0\).
- Не является метрикой в строгом смысле, так как не удовлетворяет неравенству треугольника для всех случаев, особенно при работе с ненормированными векторами. Однако на практике часто используется как метрика.
- Инвариантность к масштабу: если умножить все компоненты вектора на положительную константу, косинусное расстояние не изменится.
¶Применение
¶Анализ текстов и информационный поиск
В задачах обработки естественного языка (NLP) документы часто представляют в виде векторов в модели «мешок слов» (Bag of Words) или с помощью TF-IDF. Косинусное расстояние позволяет сравнивать документы по тематике, игнорируя различия в длине текстов. Например, два документа, один из которых в два раза длиннее другого, но содержит те же пропорции ключевых слов, будут иметь близкое к нулю косинусное расстояние. Это свойство делает косинусное расстояние стандартной мерой в поисковых системах (например, Elasticsearch) и системах кластеризации текстов.
¶Рекомендательные системы
В коллаборативной фильтрации пользователи и товары представляются векторами предпочтений. Косинусное расстояние между векторами пользователей позволяет находить похожих по вкусам людей (nearest neighbors), а между векторами товаров — рекомендовать аналогичные позиции. Например, в системах потокового видео или интернет-магазинах косинусное сходство используется для построения рекомендаций «похожие товары» или «люди также смотрели».
¶Машинное обучение
- Кластеризация: алгоритмы, такие как K-means, могут использовать косинусное расстояние для группировки данных, особенно в пространствах высокой размерности (например, эмбеддинги слов или изображений).
- Метрическое обучение: в задачах поиска аналогов или распознавания лиц косинусное расстояние применяется как функция потерь (например, в архитектуре Siamese Network).
- Снижение размерности: методы вроде t-SNE или UMAP часто используют косинусное расстояние как меру близости для визуализации многомерных данных.
¶Анализ изображений и аудио
Векторные представления изображений (например, из свёрточных нейронных сетей) или аудиосигналов (спектрограммы) сравниваются по косинусному расстоянию для задач поиска по содержанию, идентификации объектов или распознавания речи.
¶Сравнение с другими метриками
| Метрика | Формула | Чувствительность к длине | Диапазон | Применение | ||
|---|---|---|---|---|---|---|
| Косинусное расстояние | \(1 - \cos(\theta)\) | Нет | [0, 2] | Тексты, эмбеддинги | ||
| Евклидово расстояние | \(\sqrt{\sum (A_i - B_i)^2}\) | Да | [0, ∞) | Кластеризация, регрессия | ||
| Манхэттенское расстояние | \(\sum | A_i - B_i | \) | Да | [0, ∞) | Данные с шумом |
| Корреляция Пирсона | \(1 - r\) | Нет (нормализация) | [0, 2] | Статистика, временные ряды |
Косинусное расстояние предпочтительнее евклидова, когда важны относительные пропорции признаков, а не их абсолютные значения. Например, в анализе текстов два документа, один из которых содержит в два раза больше повторений одного слова, будут иметь одинаковое косинусное расстояние, но разное евклидово.
¶Ограничения и критика
- Нечувствительность к масштабу: в некоторых задачах (например, анализ интенсивности сигнала) игнорирование длины вектора может быть недостатком.
- Высокая размерность: в пространствах с очень большим числом измерений (например, разреженные векторы TF-IDF) косинусное расстояние может терять различительную способность из-за «проклятия размерности».
- Неравенство треугольника: невыполнение этого свойства в общем случае может приводить к некорректной работе некоторых алгоритмов кластеризации, которые требуют метрики.
- Интерпретируемость: значение косинусного расстояния не всегда интуитивно понятно, особенно для ненормированных векторов.
¶Реализация в программном обеспечении
Косинусное расстояние реализовано во многих библиотеках машинного обучения и анализа данных:
- Python:
scipy.spatial.distance.cosine,sklearn.metrics.pairwise.cosine_distances,numpy(ручное вычисление). - R:
cosine()из пакетаlsa,dist()с параметромmethod = "cosine"(в некоторых пакетах). - Apache Spark: функция
cosine_distanceв модулеmllib. - Elasticsearch: встроенная поддержка косинусного сходства для поиска по векторным индексам (dense vectors).
¶Пример вычисления
Пусть даны два вектора в трёхмерном пространстве:
- A = (1, 2, 3)
- B = (4, 5, 6)
Скалярное произведение: \(1 \cdot 4 + 2 \cdot 5 + 3 \cdot 6 = 4 + 10 + 18 = 32\) Длина A: \(\sqrt{1^2 + 2^2 + 3^2} = \sqrt{14} \approx 3.742\) Длина B: \(\sqrt{4^2 + 5^2 + 6^2} = \sqrt{77} \approx 8.775\) Косинусное сходство: \(\frac{32}{3.742 \cdot 8.775} \approx \frac{32}{32.84} \approx 0.974\) Косинусное расстояние: \(1 - 0.974 = 0.026\)
Таким образом, векторы почти сонаправлены, расстояние мало.
¶Источники
- Manning, C. D., Raghavan, P., & Schütze, H. (2008). Introduction to Information Retrieval. Cambridge University Press.
- Tan, P. N., Steinbach, M., & Kumar, V. (2005). Introduction to Data Mining. Addison-Wesley.
- Deza, M. M., & Deza, E. (2009). Encyclopedia of Distances. Springer.
- Документация библиотеки Scikit-learn:
sklearn.metrics.pairwise.cosine_distances. - Документация Apache Spark MLlib:
CosineDistance.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


