Я работаю над алгоритмом совместной фильтрации, основанным на интересе пользователя и разнице рейтингов Ссылка IEEE
, чтобы найти скорректированное косинусное сходство. Я сослался на эту ссылку
но ссылка предоставила реализацию для косинусного подобия, скорректированного на предмет-элемент
Хотя мне удалось изменить его для косинусного подобия, настроенного пользователем, но я не уверен насчет моей реализации
пожалуйста, проверьте мой реализации и предложить изменения, если таковые имеются
формула для пользователя. Настроенное косинусное сходство
Ra, i - рейтинг пользователя ua для элемента i. Здесь Ra - среднее значение рейтинга пользователя. Ia - это набор предметов, который пользователь оценил. Ib - это набор элементов, который пользователь ub оценил.
Реализация ссылки:
import numpy as np
from scipy.spatial.distance import pdist, squareform
M = np.asarray([[2, 3, 4, 1, 0],
[0, 0, 0, 0, 5],
[5, 4, 3, 0, 0],
[1, 1, 1, 1, 1]])
M_u = M.mean(axis=1)
item_mean_subtracted = M - M_u[:, None]
similarity_matrix = 1 - squareform(pdist(item_mean_subtracted.T, 'cosine'))
Моя реализация:
M = np.asarray(user_item_matrix)
# print(M[0].mean())
# print(M)
#User_mean = M[user_id].mean()
#print(User_mean)
M_u = M.mean(axis=1)
# print(pd.DataFrame(M_u))
item_mean_subtracted = M - M_u[:,None]
# print(pd.DataFrame(item_mean_subtracted))
# print(item_mean_subtracted.head())
similarity_matrix = 1 - squareform(pdist(item_mean_subtracted, 'cosine'))
similarity_matrix
return pd.DataFrame(similarity_matrix)
Снимок экрана скорректированной матрицы сходства косинусов
user_item_matrix is:
user_item_matrix = rating_data.pivot(
index='user id',
columns='movie id',
values='rating'
).fillna(0)
# convert dataframe of movie features to scipy sparse matrix
Снимок экрана user_item_matrix