Проблемы с производительностью с Рекомендатором на основе предметов в Mahout
Я пытаюсь использовать рекомендации по пунктам в mahout. Он содержит 2,5 М пользователя, взаимодействие с элементом без значений предпочтений. Есть около 100 наименований и 100 тыс. Пользователей. Потребуется около 10 секунд, чтобы порекомендовать. Принимая во внимание, что для тех же данных, я использую рекомендации, основанные на пользователях, занимает меньше секунды.
ItemSimilarity sim = new TanimotoCoefficientSimilarity(dm);
CandidateItemsStrategy cis = new SamplingCandidateItemsStrategy(10,10,10,dm.getNumUsers(),dm.getNumItems());
MostSimilarItemsCandidateItemsStrategy mis = new SamplingCandidateItemsStrategy(10,10,10,dm.getNumUsers(),dm.getNumItems());
Recommender ur = new GenericBooleanPrefItemBasedRecommender(dm,sim,cis,mis);
Я прочитал один из ответов @Sean, где он предлагает использовать вышеупомянутые параметры для SamplingCandidateItemsStrategy. Но я не уверен, что он действительно делает.
Изменить: 2,5 M - это общее количество ассоциаций элементов пользователя, 100 000 пользователей и общее количество элементов 100.
1 ответ
Среди многих причин, основной причиной выбора рекомендателя на основе элементов является: if the number of items is relatively low compared to the number of users, the performance advantage could be significant
, Это идет и наоборот. If the number of users is relatively low compared to the number of items, choosing user-based recommendation will result in performance advantage
,
От вашего вопроса я действительно не понял, каково количество элементов в вашем наборе данных, а также количество пользователей. Раз ты упоминаешь 2.5M, а потом 100K? В любом случае, если пользовательская рекомендация быстрее для вас, вы должны выбрать этот подход.
За исключением того, что если сходства между вашими предметами более фиксированы (не ожидается, что они будут радикально или часто меняться), то они являются лучшими кандидатами на предварительные вычисления. Вы можете делать предварительные вычисления и использовать предварительно вычисленные сходства между элементами.
Кроме того, поскольку у вас нет значений предпочтений, и если вы хотите использовать основанное на элементах сходство, вы можете подумать об обогащении функции сходства каким-то чистым сходством между элементами, основанным на некоторых характеристиках элементов. (Это просто идея).