#python #pandas #data-mining #hamming-distance #recommender-systems
#python #pandas #интеллектуальный анализ данных #расстояние Хэмминга #механизм рекомендаций
Вопрос:
Мне нужно закодировать показатель сходства на python, чтобы найти совпадения по жанру фильма.
Сравнение предназначено для 1 пользователя, чтобы найти сходство между их жанровыми оценками в двоичном формате и фреймом данных жанровых оценок в двоичном формате для 40 000 названий фильмов. Мне нужно выполнить итерацию по фрейму данных и сравнить каждый элемент с оценкой пользователей, чтобы найти сходство.
Например, возьмем пользователя 1: оценка [0,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1]
Сравните сходство с фреймом данных Movies: Movies Dataframe
Я хотел бы получить оценку для меры сходства между пользователем и каждым заголовком, чтобы ранжировать заголовки, которые наиболее похожи на предпочтения пользователей.
Я обнаружил, что расстояние Хэмминга, вероятно, является лучшим методом для двоичных значений. Как я могу это реализовать? Спасибо
Комментарии:
1. Пожалуйста, смотрите Ниже ответ для наиболее похожего элемента, оцениваемого по шкале Хэмминга. Но я думаю, вы неправильно поняли, как вы хотите достичь желаемого результата. Подумайте / google для
collaborative filtering
Ответ №1:
Попробуйте:
from scipy.spatial.distance import cdist
# data sample example
x = np.random.randint(0,2,100).reshape(10,10)
# pairwise hamming distance
cdist(x,x, metric="hamming")
array([[0. , 0.6, 0.8, 0.6, 0.3, 0.4, 0.7, 0.4, 0.5, 0.6],
[0.6, 0. , 0.4, 0.6, 0.7, 0.4, 0.3, 0.6, 0.5, 0.6],
[0.8, 0.4, 0. , 0.4, 0.7, 0.4, 0.3, 0.8, 0.5, 0.4],
[0.6, 0.6, 0.4, 0. , 0.3, 0.6, 0.5, 0.6, 0.3, 0.4],
[0.3, 0.7, 0.7, 0.3, 0. , 0.5, 0.6, 0.5, 0.4, 0.5],
[0.4, 0.4, 0.4, 0.6, 0.5, 0. , 0.5, 0.6, 0.7, 0.4],
[0.7, 0.3, 0.3, 0.5, 0.6, 0.5, 0. , 0.5, 0.4, 0.3],
[0.4, 0.6, 0.8, 0.6, 0.5, 0.6, 0.5, 0. , 0.5, 0.6],
[0.5, 0.5, 0.5, 0.3, 0.4, 0.7, 0.4, 0.5, 0. , 0.3],
[0.6, 0.6, 0.4, 0.4, 0.5, 0.4, 0.3, 0.6, 0.3, 0. ]])
Возможно, вы захотите сделать еще один шаг и определить функцию, которая сообщит вам индекс наиболее похожих выходных данных для интересующего индекса ввода:
hamming_distance = cdist(x,x, metric="hamming")
most_similar = lambda i: np.argmax(hamming_distance[i])
most_similar(2)
0
Комментарии:
1. Отвечает ли это на ваш вопрос, как вычислить меру подобия Хэмминга?