В этой статье мы обсудим сходство косинусов с примерами его применения к сопоставлению произведений в Python.

Оглавление:

  • Введение
  • Косинусное подобие (обзор)
  • Сходство продуктов с использованием Python (пример)
  • Вывод

Введение

Многие интересные кейсы и проекты в области рекомендательных систем в значительной степени зависят от правильного определения сходства между парами элементов и/или пользователей.

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

В этой статье мы рассмотрим один из этих методов количественной оценки, который представляет собой косинусное сходство. И мы расширим изученную теорию, применив ее к выборочным данным, пытаясь найти сходство пользователей.

Концепции, изученные в этой статье, затем можно применить к различным проектам: сопоставление документов, механизмы рекомендаций и т. д.

Косинусное подобие (обзор)

Косинусное сходство — это мера сходства между двумя ненулевыми векторами. Он рассчитывается как угол между этими векторами (который также совпадает с их внутренним произведением).

Ну, это звучало как много технической информации, которая может быть новой или сложной для учащегося. Мы разберем его по частям вместе с подробными визуализациями и примерами здесь.

Рассмотрим три вектора:

и построим их в декартовой системе координат:

Из графика видно, что вектор A больше похож на вектор B, чем, например, на вектор C.

Но как мы могли сказать? Ну, просто взглянув на него, мы видим, что они A и B ближе друг к другу, чем A к C. . Математически говоря, угол A0B меньше, чем A0C.

Возвращаясь к математической формулировке (давайте рассмотрим вектор A и вектор B), косинус двух ненулевых векторов можно получить из евклидова скалярного произведения:

который решает для:

Решение для компонентов

Разберем приведенную выше формулу.

Шаг 1:

Начнем с номинатора:

где Ai и Bii-е элементы векторов A и B.

Для нашего случая имеем:

Отлично, мы нашли скалярное произведение векторов A и B.

Шаг 2:

Следующим шагом будет работа со знаменателем:

Мы рассматриваем произведение длин векторов. Простыми словами: длина вектора A умножается на длину вектора B.

Длина вектора может быть вычислена как:

где A_ii-й элемент вектора A.

Для нашего случая имеем:

Шаг 3.

На данный момент у нас есть все компоненты для исходной формулы. Давайте подключим их и посмотрим, что мы получим:

Эти два вектора (вектор A и вектор B) имеют косинусное подобие 0,976. Обратите внимание, что этот алгоритм является симметричным, то есть сходство A и B такое же, как сходство B и A.

Сложение
Выполняя те же шаги, вы можете найти косинусное сходство между векторами A и C, что должно дать 0,740.

Это подтверждает то, что мы предположили, глядя на график: вектор A больше похож на вектор B, чем на вектор C. В примере, который мы создали в этом руководстве, мы работаем с очень простым случаем двумерного пространства, и вы можете легко увидеть различия на графиках. Однако в реальной ситуации все может быть не так просто. В большинстве случаев вы будете работать с наборами данных, которые имеют более двух признаков, создавая n-мерное пространство, визуализировать которое очень сложно без использования некоторых методов уменьшения размерности (PCA, tSNE).

Сходство продуктов с использованием Python (пример)

Примеры векторного пространства необходимы нам, чтобы понять логику и процедуру вычисления сходства косинусов. Теперь, как мы используем это в реальных задачах?

Давайте поместим приведенные выше векторные данные в какой-нибудь пример из реальной жизни. Предположим, мы работаем с некоторыми данными об одежде и хотим найти товары, похожие друг на друга. У нас есть три вида одежды: худи, свитер и кроп-топ. Доступные данные о продукте следующие:

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

Чтобы продолжить следовать этому руководству, нам понадобятся следующие библиотеки Python: pandas и sklearn.

Если он у вас не установлен, откройте «Командную строку» (в Windows) и установите его, используя следующий код:

pip install pandas
pip install sklearn

Первый шаг, который мы сделаем, — создадим указанный выше набор данных в виде фрейма данных в Python (только со столбцами, содержащими числовые значения, которые мы будем использовать):

Мы должны получить:

Затем, используя метод cosine_similarity() из библиотеки sklearn, мы можем вычислить косинусное сходство между каждым элементом в приведенном выше кадре данных:

Выход представляет собой массив со сходствами между каждой из записей фрейма данных:

Для лучшего понимания приведенный выше массив можно отобразить как:

Обратите внимание, что результат вычислений идентичен ручному расчету в теоретическом разделе. Конечно данные здесь простые и только двухмерные, отсюда и высокие результаты. Но ту же методологию можно распространить на гораздо более сложные наборы данных.

Вывод

В этой статье мы обсудили сходство косинусов с примерами его применения для сопоставления произведений в Python.

Многие из вышеперечисленных материалов являются основой сложных рекомендательных движков и алгоритмов прогнозирования.

Я также рекомендую вам ознакомиться с другими моими сообщениями о Машинном обучении.

Не стесняйтесь оставлять комментарии ниже, если у вас есть какие-либо вопросы или предложения по некоторым изменениям.

Первоначально опубликовано на https://pyshark.com 27 октября 2020 г.