Вычисление меры подобия для двоичного фрейма данных pandas

#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. Отвечает ли это на ваш вопрос, как вычислить меру подобия Хэмминга?