как я могу использовать результаты mahout?

Я хочу создать базовую систему рекомендаций фильмов. Я искал и нашел apache mahout. Я использовал какой-то метод, но я не знаю, как я могу использовать эти результаты.

import java.io.File;
import java.io.IOException;
import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.eval.RecommenderBuilder;
import org.apache.mahout.cf.taste.eval.RecommenderEvaluator;
import org.apache.mahout.cf.taste.impl.eval.RMSRecommenderEvaluator;
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood;
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;
import org.apache.mahout.cf.taste.impl.similarity.TanimotoCoefficientSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;

public class error {

  public  static double evaluate(DataModel model){
    RecommenderEvaluator evaluator = new RMSRecommenderEvaluator();
    RecommenderBuilder builder = new RecommenderBuilder() {

        @Override
        public Recommender buildRecommender(DataModel model) throws TasteException {
            UserSimilarity similarity = new TanimotoCoefficientSimilarity(model);
            UserNeighborhood neighborhood = new NearestNUserNeighborhood(50, similarity,        model);
            return new GenericUserBasedRecommender(model, neighborhood, similarity);
        }
    };

    double score = 0;
    try {

        score = evaluator.evaluate(builder, null, model, 0.7, 1.0);
    } catch (TasteException e) {
    }
    System.out.println(score);
    return score;
}
public static void main(String[] args) throws IOException, TasteException {
     DataModel model = new FileDataModel(new File("u1.base"));
    evaluate(model);
}

}

и такие результаты

03 июня 2014 г. 14:06:44 org.slf4j.impl.JCLLoggerAdapter info INFO: создание FileDataModel для файла u1.base ... 03 июня 2014 г. 14:06:44 org.slf4j.impl.JCLLoggerAdapter info INFO: Прочитано строк: 80000 03 июня 2014 г. 14:06:44 org.slf4j.impl.JCLLoggerAdapter info INFO: Обработано 943 пользователя 3 марта 2014 г. 14:06:44 org.slf4j.impl.JCLLoggerAdapter info ИНФОРМАЦИЯ: Начало оценки с использованием версии 0.7 FileDataModel[dataFile:C:\Users\HydrojaN\Documents\NetBeansProjects\JavaApplication1\u1.base] 03 декабря 2014 г. 14:06:44 org.slf4j.impl.JCLLoggerAdapter info INFO: Обработано 943 пользователя 03.03.2014 14:06:44 org.slf4j.impl.JCLLoggerAdapter info INFO: Начало оценки 941 пользователя 03.03.2014 2: 18:44 org.slf4j.impl.JCLLoggerAdapter info INFO: время запуска 941 задачи в 4 потоках 03 марта 2014 г. 14:06:45 org.slf4j.impl.JCLLoggerAdapter info INFO: среднее время на рекомендацию: 193ms Şub 03 , 2014 14:06:45 org.slf4j.impl.JCLLoggerAdapter info ИНФОРМАЦИЯ: Приблизительный объем используемой памяти: 86 МБ / 276 МБ

1.0364950141746245

03.06.2014 14:07:49 org.slf4j.impl.JCLLoggerAdapter info INFO: Результат оценки: 1.0364950141746245 УСПЕШНАЯ СБОРКА (общее время: 1 минута 5 секунд)


person hydrojan    schedule 03.02.2014    source источник


Ответы (2)


Вы хотите сделать оценку или вы хотите использовать рекомендателя. С помощью приведенного выше кода вы оцениваете эффективность алгоритма (мера сходства вместе с рекомендательным алгоритмом) по сравнению с вашим набором данных. Если вы хотите использовать результаты, которые дает рекомендатель, вы можете использовать следующий простой код:

class RecommenderExample { 

      public static void main(String[] args) throws Exception {
            DataModel model = new FileDataModel (new File("u1.base"));

            UserSimilarity similarity = new TanimotoCoefficientSimilarity(model);
            UserNeighborhood neighborhood = new NearestNUserNeighborhood(50, similarity,        model);

            Recommender recommender = new GenericUserBasedRecommender (model, neighborhood, similarity);

            List<RecommendedItem> recommendations = recommender.recommend(1, 1);

            //Print the results
            for (RecommendedItem recommendation : recommendations) {
                 System.out.println(recommendation);
             }
    }
}

В любом случае вам нужна оценка, чтобы выбрать лучший алгоритм, но в конце, если вы хотите порекомендовать элементы пользователю, вы можете использовать аналогичный код, подобный этому.

Дополнительную информацию о Mahout можно найти в книге Mahout в действии.

person Dragan Milcevski    schedule 04.02.2014

Получить ответы Mahout в списках рассылки Mahout всегда будет проще.

Тем не менее, вам не нужно много делать с самим Mahout API, чтобы создать простой рекомендатель. Я предлагаю вам использовать рекомендательный стиль злоупотребления поиском. В этом методе вы запускаете задание Mahout для анализа журналов, а затем импортируете эти журналы в поисковую систему, например Solr или Elastic Search. Затем эта поисковая система действует как рекомендатель.

Подробнее см. http://www.youtube.com/watch?v=fWR1T2pY08Y. подробности

person Ted Dunning    schedule 04.02.2014