import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use('ggplot')
plt.rcParams['figure.figsize'] = (12,5)
# Для кириллицы на графиках
font = {'family': 'Verdana',
'weight': 'normal'}
plt.rc('font', **font)
Метод коллаборативной фильтрации работает по принципу похожести пользователей (User-based collaborative filtering) или похожести товаров (Item-based collaborative filtering).
Введем обозначения:
Прогноз user-based collaborative filtering вычисляется по следующей формуле $$ \hat{R}_{ui} = \frac{\sum_{v \in N(u)} s_{uv} R_{vi}}{\sum_{v \in N(u)} s_{uv}} $$
Походесть между пользователями можно вычислить разными способами, например с помощью корреляции или косинусной меры $$ s_{uv} = \frac{R_u^T R_v}{\lVert R_u \rVert_2 \lVert R_v \rVert_2}$$ Стоит отметить, что при подсчете похожести должны учитываться только те товары, для которых и у $u$ и у $v$ есть какая-то оценка
Похожим образом делается оценка с помощью item-based collaborative filtering:
$$\hat{R}_{u i} = \frac{\sum_{j \in N(i)} s_{ij} R_{u j}}{\sum_{j \in N(i)} s_{ij}}$$filepath = './data/user_ratedmovies.dat'
df_rates = pd.read_csv(filepath, sep='\t')
filepath = './data/movies.dat'
df_movies = pd.read_csv(filepath, sep='\t')
## Your Code Here