Метрики сходства и расстояния для науки о данных и машинного обучения
Применяется в системах рекомендаций
В предыдущей статье, посвященной системам рекомендаций, мы несколько раз упоминали понятие меры сходства. Почему? Потому что в системах рекомендаций и контент-фильтрация, и алгоритмы совместной фильтрации используют некоторую конкретную меру сходства, чтобы определить, насколько равны два вектора пользователей или элементов между ними. В конце концов, мера сходства - это не более чем расстояние между векторами.
Примечание: помните, что вся моя работа, включая конкретный репозиторий с применением всего этого контента и многое другое о рекомендательных системах, доступна в моем профиле 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
И вы можете очень легко использовать эту функцию, просто скармливая:
- «Матрица»: это просто исходная матрица оценок, просмотров или того, что вы измеряете между пользователями и элементами вашего бизнеса.
- ‘Row_columns’: указывается 1, если вы будете измерять расстояния между столбцами, и 0, если расстояние между строками.
- «Размер»: для желаемого размера результирующей матрицы. То есть, при нахождении сходства пользователей или элементов это будет просто количество пользователей или элементов. Итак, если у вас 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 минут". Все они и многое другое доступны в «Моем среднем профиле.
Также свяжитесь с…
- LinkedIn: https://www.linkedin.com/in/gferreirovolpi/
- GitHub: https://github.com/gonzaferreiro (где доступен весь мой код)
Увидимся в следующем посте!
Ваше здоровье.