Как структурировать данные, чтобы использовать рекомендации по предпочтениям элементов в mahout - PullRequest
2 голосов
/ 21 сентября 2011

в первую очередь новички в mahout, apache, maven и т. Д., Поэтому извиняюсь, если некоторые из них очевидны.

У меня есть типичный набор данных о корзине, т. Е.

user1, item1

user1, item2

user2, item1

user2, item3

user3, item2

мой запрос - каковы рекомендации для user3? (Да, я знаю, что ответ - это пункт1!).

Как мне структурировать это для использования в Mahout? Я посмотрел на страницу - https://cwiki.apache.org/MAHOUT/recommender-documentation.html - что очень полезно - но только когда мне нужен интересный бит - то есть, как построить данные корреляции - там написано:

// Construct the list of pre-computed correlations
Collection<GenericItemSimilarity.ItemItemSimilarity> correlations =
          ...;
ItemSimilarity itemSimilarity =
          new GenericItemSimilarity(correlations);

и бит, который я хочу вычислить, пропущен ... !!!

Хотя это совершенно неверный способ сделать это, я массировал свой набор данных, чтобы он выглядел идентично структуре movielens (давая 5 в качестве оценки, но на самом деле это должно быть бинарное значение), но все рекомендации для всех пользователей всегда один и тот же список продуктов.

Любой совет, пожалуйста?

1 Ответ

2 голосов
/ 21 сентября 2011

(Эти данные настолько скудны, что я не знаю, кстати, рекомендатель действительно рекомендовал бы пункт 1).

Фрагмент кода, на который вы ссылаетесь, будет тем, что вы используете, если у вас уже были предварительно вычисленные сходства элементов. У вас нет этого здесь; у вас есть ассоциации предметов пользователя. Конечно, вы хотите рассчитать эти сходства из этих данных и использовать это для рекомендаций?

Хотя вы можете сделать это программно, я предлагаю быстрее создать простой текстовый файл с вашими данными ...

1,1
1,2
2,1
2,3
3,2

Затем, чтобы создать рекомендательный элемент на основе логарифмического сходства:

DataModel model = new FileDataModel(new File("yourdata.txt"));
ItemSimilarity similarity = new LogLikelihoodSimilarity(model);
Recommender recommender = 
    new GenericBooleanPrefItemBasedRecommender(similarity, model);

и рекомендовать 1 элемент для пользователя 3:

recommender.recommend(3, 1);

(Это подробно описано в Mahout в действии .)

...