Чтобы определить сходство между пользователями, вы можете использовать сходство косинусов или Пирсона (найдено в Mahout и везде в сети!) По вектору пользователей. Таким образом, ваше представление данных должно выглядеть примерно так:
u1 [1,2,3,4,5,6]
u2 [35,24,3,4,5,6]
u1 [35,3,9,2,1,11]
В момент, когда вы хотите принять во внимание несколько элементов, вы можете использовать вышеизложенное, чтобы определить, насколько похожи чьи-то профили. Чем выше показатель корреляции, тем выше вероятность того, что они имеют очень похожие элементы. Вы можете установить порог, чтобы у кого-то со сходством 0,75 был подобный набор элементов в его профиле.
Там, где вам не хватает значений, вы, конечно, можете составить свои собственные значения. Я бы просто оставил их двоичными и попытался смешать различные алгоритмы. Это называется ансамбль.
В целом, вы ищете что-то, называемое совместной фильтрацией на основе элементов, в качестве рекомендательного аспекта вашей установки, а также для идентификации аналогичных элементов. Это стандартный алгоритм рекомендаций, который выполняет практически все, о чем вы просили.
Пытаясь найти похожих пользователей, вы можете использовать метрику сходства для своих векторов.
Что касается Python, в книге под названием «Программирование в коллективном интеллекте» приведены все их примеры на Python, так что иди, возьми копию и прочитай главу 1.
Представление всего этого в виде графика будет несколько проблематичным, поскольку ваше бессмертное представление - это Бипартильный граф . Есть много рекомендаций, которые используют подход, основанный на графике, но, как правило, это не самый эффективный подход.