Метрики сходства и расстояния для науки о данных и машинного обучения

Применяется в системах рекомендаций

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

Примечание: помните, что вся моя работа, включая конкретный репозиторий с применением всего этого контента и многое другое о рекомендательных системах, доступна в моем профиле GitHub.

В любом алгоритме наиболее распространенной мерой подобия является нахождение косинуса угла между векторами, то есть косинусного сходства. Предположим, что A - это список фильмов с рейтингом пользователя A, а B - список фильмов с рейтингом пользователя B, тогда сходство между ними можно рассчитать следующим образом:

Математически косинусное подобие измеряет косинус угла между двумя векторами, проецируемыми в многомерное пространство. При нанесении на многомерное пространство косинусное подобие фиксирует ориентацию (угол) каждого вектора, а не величину. Если вам нужна величина, вместо этого вычислите евклидово расстояние.

Косинусное сходство является преимуществом, потому что даже если два похожих документа находятся далеко друг от друга на евклидово расстояние из-за размера (например, одно слово много раз встречается в документе или пользователь много раз просматривает один фильм), они все равно могут иметь меньший угол между ними. Чем меньше угол, тем больше сходство.

Возьмем следующий пример с сайта www.machinelearningplus.com:

На изображении выше подсчитывается количество появлений слов «сачин», «дони» и «сверчок» в трех показанных документах. В соответствии с этим мы могли бы построить эти три вектора, чтобы легко увидеть разницу между измерением косинуса и евклидова расстояния для этих документов:

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

Давайте возьмем следующий пример из Stackoverflow, чтобы лучше объяснить разницу между косинусом и скорректированным косинусным сходством:

Предположим, пользователь ставит баллы от 0 до 5 двум фильмам.

from scipy import spatial
import numpy as np
# — — — — — — — — — — — — — — 
a=np.array([2.0,1.0])
b=np.array([5.0,3.0])
c=np.array([5.0,4.0])
# — — — — — — — — — — — — — — 
print(1-spatial.distance.cosine(a,b))
print(1-spatial.distance.cosine(c,b))
0.9970544855015815
0.9909924304103233

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

mean_ab = np.sum(a+b)/4
mean_cb = np.sum(c+b)/4
# — — — — — — — — — — — — — — 
print(1-spatial.distance.cosine(a-mean_ab,b-mean_ab))
print(1-spatial.distance.cosine(c-mean_cb,b-mean_cb))
-0.4930125719808802
0.7592566023652966

Кстати, в нашей предыдущей статье о рекомендательных системах мы представили следующую функцию для нахождения подобия скорректированного косинуса:

from scipy import spatialdef adjusted_cos_distance_matrix(size, matrix, row_column):
    distances = np.zeros((size,size))
    if row_column == 0:
        M_u = matrix.mean(axis=1)
        m_sub = matrix - M_u[:,None]
    if row_column == 1:
        M_u = matrix.T.mean(axis=1)
        m_sub = matrix.T - M_u[:,None]
    for first in range(0,size):
        for sec in range(0,size):
            distance = spatial.distance.cosine(m_sub[first],m_sub[sec])
            distances[first,sec] = distance
    return distances

И вы можете очень легко использовать эту функцию, просто скармливая:

  1. «Матрица»: это просто исходная матрица оценок, просмотров или того, что вы измеряете между пользователями и элементами вашего бизнеса.
  2. ‘Row_columns’: указывается 1, если вы будете измерять расстояния между столбцами, и 0, если расстояние между строками.
  3. «Размер»: для желаемого размера результирующей матрицы. То есть, при нахождении сходства пользователей или элементов это будет просто количество пользователей или элементов. Итак, если у вас 500 уникальных пользователей, вы получите матрицу расстояний 500x500.

Для справки возьмем следующий пример:

user_similarity = adjusted_cos_distance_matrix(n_users,data_matrix,0)
item_similarity = adjusted_cos_distance_matrix(n_items,data_matrix,1)

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

  • Евклидово расстояние: похожие объекты будут располагаться в непосредственной близости друг от друга, если они построены в n-мерном пространстве.

  • Корреляция или сходство корреляции Пирсона: он сообщает нам, насколько два элемента коррелируют. Чем выше корреляция, тем выше сходство.

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

А потом:

Где | 𝐼𝑢𝑣 | - это просто количество элементов, оцененных пользователями 𝑢 и 𝑣.

Примеры сходства пользователь-пользователь и элемент-элемент

Давайте вкратце вспомним, как работает совместная фильтрация, на примере из нашей предыдущей вводной статьи о рекомендательных системах: предположим, мне нравятся следующие книги: Слепой убийца и Джентльмен в Москве. А моему другу Матиасу нравятся Слепой убийца и Джентльмен в Москве, но еще и Где поют радады. Похоже, что у нас с Матиасом одинаковые интересы. Так что вы, вероятно, могли бы подтвердить, что я тоже хотел бы "Где поют радады", хотя я этого не читал. И это в точности логика совместной фильтрации, за исключением того, что вы можете сравнивать пользователей между ними, а также сравнивать элементы.

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

Сходство пользователя и пользователя

Сходство предмета-предмета

Теперь, понимая это, давайте проиллюстрируем некоторые из представленных нами мер на следующих примерах нашего друга из Analytics Vidhya, которые я нашел особенно очевидными для сходства как пользователя-пользователя, так и элемента-элемента:

  • Сходство пользователя и пользователя

Изображение и пример взяты из Analytics Vidhya.

Здесь у нас есть матрица пользовательских рейтингов фильмов. Чтобы понять это на практике, давайте найдем сходство между пользователями (A, C) и (B, C) в приведенной выше таблице. Обычные фильмы с рейтингом A и C - это фильмы x2 и x4, а по B и C - фильмы x2, x4 и x5. Зная это, давайте найдем корреляцию или корреляционное сходство Пирсона:

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

  • Сходство предмета-предмета

Здесь средний рейтинг элемента - это среднее значение всех оценок, присвоенных конкретному элементу (сравните его с таблицей, которую мы видели при фильтрации пользователей). Вместо того, чтобы находить сходство пользователя и пользователя, мы находим сходство предмет-предмет. Для этого сначала нам нужно найти таких пользователей, которые оценили эти элементы, и на основе оценок рассчитывается схожесть между элементами. Найдем сходство между фильмами (x1, x4) и (x1, x5). Обычные пользователи, которые оценили фильмы x1 и x4, являются A и B, а пользователи, которые оценили фильмы x1 и x5, также являются A и B.

Сходство между фильмами x1 и x4 больше, чем сходство между фильмами x1 и x5. Таким образом, на основе этих значений подобия, если какой-либо пользователь ищет фильм x1, ему будет рекомендован фильм x4, и наоборот.

Что ж, это пока все о рекомендательных системах. Однако помните, что меры сходства и метрики расстояния используются в машинном обучении как очень фундаментальная концепция. Так что я надеюсь, что вы нашли этот контент полезным не только для повышения производительности рекомендателя;)

Если вам понравился этот пост, не забудьте ознакомиться с некоторыми из моих последних статей, например 10 советов по улучшению ваших навыков построения графиков, 6 любительских ошибок, которые я совершил при работе с тестовыми разбиениями или Веб-парсинг в 5 минут". Все они и многое другое доступны в «Моем среднем профиле.

Также свяжитесь с…

Увидимся в следующем посте!

Ваше здоровье.