Cosine vs Euclidean similarity на собеседовании Data Scientist

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.

Зачем разбирать на собесе

Метрики расстояния — kNN, kmeans, embeddings similarity, recsys. На собесе DS: «отличие cosine и euclidean», «зачем normalize перед kmeans», «когда Manhattan».

Euclidean distance

Прямое геометрическое расстояние.

d(a, b) = √Σ(aᵢ - bᵢ)²

L2-норма разности векторов.

Свойства:

  • Чувствителен к scale — большая координата доминирует.
  • Чувствителен к dimensionality (curse of dimensionality в высоких измерениях).
  • Естественен для физических координат.
np.linalg.norm(a - b)

Cosine similarity

Угол между векторами.

cos(a, b) = (a · b) / (||a|| · ||b||)

∈ [-1, 1] (или [0, 1] для неотрицательных векторов).

Свойства:

  • Не зависит от length (норма) векторов.
  • Хорош для разреженных high-dim векторов (text embeddings, TF-IDF).
  • 1 — same direction, 0 — orthogonal, -1 — opposite.

Cosine distance: 1 - cos(a, b). Не настоящая metric (не triangle inequality), но используется как distance.

from scipy.spatial.distance import cosine
1 - cosine(a, b)  # similarity

Связь cosine и euclidean

Если оба вектора имеют единичную длину (||a|| = ||b|| = 1):

||a - b||² = 2 - 2·cos(a, b)

Euclidean на нормированных векторах эквивалентен cosine — топ-K совпадает.

Практика. Перед k-means / kNN на embeddings — l2-normalize и используй euclidean. Или сразу cosine.

Manhattan distance

L1-норма.

d(a, b) = Σ|aᵢ - bᵢ|

«Расстояние такси» — двигаешься по сетке.

Свойства:

  • Менее чувствителен к outliers, чем euclidean.
  • Естественен для grid-like (geo координаты на манхэттене, board game).
  • Используется в Lasso (L1 регуляризация).
Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Hamming, Jaccard, специальные

Hamming. Число различающихся позиций между бинарными векторами.

d_H("10110", "10011") = 3  (различается позиции 3, 4, 5)

Применение: error-correcting codes, MinHash для приближённого Jaccard.

Jaccard. Для множеств.

J(A, B) = |A ∩ B| / |A ∪ B|

Применение: similarity текстов через шинглы, рекомендации (overlapping users).

Mahalanobis. Учитывает covariance:

d² = (a - b)ᵀ Σ⁻¹ (a - b)

Полезен на correlated features.

Edit (Levenshtein). Минимум вставок / удалений / замен между строками.

Когда что выбирать

Cosine:

  • Text similarity (TF-IDF, sentence embeddings).
  • Recsys с user/item embeddings.
  • High-dimensional sparse.
  • Когда величина не важна, важно направление.

Euclidean:

  • Низкая размерность (geo, физика).
  • Image embeddings (после нормализации часто).
  • k-means по умолчанию.

Manhattan:

  • Outliers important.
  • L1 регуляризация.
  • Grid-like data.

Jaccard:

  • Множества (теги, юзеры с интересами).
  • Document similarity (shingles).

Hamming:

  • Бинарные хеши.
  • LSH (locality sensitive hashing).

Частые ошибки

k-means с euclidean без нормализации. Колонка с большим scale доминирует. StandardScaler обязательно.

Cosine для image embeddings без normalization. Многие image embeddings уже нормированы. Проверять.

Использовать cosine в KDTree. scikit-learn KDTree работает с euclidean. Для cosine — BallTree или nmslib.

Mahalanobis на singular covariance. Matrix inversion фейлится. Регуляризация ковариации.

Euclidean в высоких измерениях. Curse of dimensionality — все расстояния примерно одинаковы. Cosine лучше.

Связанные темы

FAQ

Cosine — это metric?

Cosine distance = 1 - cos. Не настоящая metric (не triangle inequality), но в индустрии используется как.

Какая метрика для word embeddings?

Cosine — стандарт. word2vec / GloVe / BERT embeddings обычно сравниваются через cosine.

Это официальная информация?

Нет. Статья основана на стандартных подходах в ML и геометрии.


Тренируйте Data Science — откройте тренажёр с 1500+ вопросами для собесов.