@AMar4enko Скорее разница по модолю между двумя оценками предметов (потом ещё и делённая на количество оценок). Т.е. непонятно как это вычислить, если в MapReduce, values я могу считать только от одной записи в базе данных, когда мне нужно брать разницу между парами.
{Вася, Балтика 7, 4}
{Вася, Балтика 3, 3}
{Петя, Балтика 7, 5}
{Петя, Балтика 3, 4}
Тут расстояние между Балтика 7 и Балтика 3 (обратное от похожести) будет ((4-3) + (5-4))/2 = 1.
Про рейтинг - вы правы, возможно это изьян. Тут два момента: 1) есть определённая специфика товара (это алкоголь) 2) я думал считать похожесть только, если товар оценили 10+ человек.
Думал об этом, но почему-то решил считать именно похожесть товаров, а не пользователей. Вообще надо подумать, что лучше (непонятен пока критерий), а ещё проще попробовать оба варианта, как только смогу реализовать.
Для каждой пары предметов (item1, item2), я выбираю пользователей, которые оценивали оба эти предмета. Затем считаю разницу между оценками (это грубо и есть расстояние). Например, если item1 и item2 оценили 100 пользователей и все поставили одинаковую оценку - считаем расстояние между предметами 0 (одно и тоже). Если загнать все данные в память и отсортировать по item, затем по user_name.. то по идее можно всё рассчитать за N*(logN + Const). Вообще конечная цель, это дать рекомендации пользователю на основе его оценок. Я думал это сделать таким образом: отобрать предметы, которые пользователь оценил высоко и затем предложить ему ближайшие (на основе проведённых рассчётов).
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.