Example usage for org.apache.mahout.cf.taste.impl.recommender.svd FilePersistenceStrategy FilePersistenceStrategy

List of usage examples for org.apache.mahout.cf.taste.impl.recommender.svd FilePersistenceStrategy FilePersistenceStrategy

Introduction

In this page you can find the example usage for org.apache.mahout.cf.taste.impl.recommender.svd FilePersistenceStrategy FilePersistenceStrategy.

Prototype

public FilePersistenceStrategy(File file) 

Source Link

Usage

From source file:org.plista.kornakapi.core.config.FactorizationbasedRecommenderConfig.java

License:Apache License

@Override
public KornakapiRecommender buildRecommenderFromConfig(Configuration conf, DataModel persistentData)
        throws IOException, TasteException {
    String name = this.getName();

    File modelFile = new File(conf.getModelDirectory(), name + ".model");

    PersistenceStrategy persistence = new FilePersistenceStrategy(modelFile);

    if (!modelFile.exists()) {
        createEmptyFactorization(persistence);
    }//from ww  w  . j  av  a  2s .  c  om

    CandidateItemsStrategy allUnknownItemsStrategy = new CachingAllUnknownItemsCandidateItemsStrategy(
            persistentData);

    FoldingFactorizationBasedRecommender svdRecommender = new FoldingFactorizationBasedRecommender(
            persistentData, allUnknownItemsStrategy, persistence);

    return svdRecommender;
}

From source file:org.plista.kornakapi.core.training.FactorizationbasedInMemoryTrainer.java

License:Apache License

@Override
protected void doTrain(File targetFile, DataModel inmemoryData, int numProcessors) throws IOException {
    try {//  w  w  w  . j a  v  a  2 s  .com
        if (inmemoryData.getNumItems() >= 5 && inmemoryData.getNumUsers() >= 10) {//preventing matrix singularity
            ALSWRFactorizer factorizer = new ALSWRFactorizer(inmemoryData, conf.getNumberOfFeatures(),
                    conf.getLambda(), conf.getNumberOfIterations(), conf.isUsesImplicitFeedback(),
                    conf.getAlpha(), numProcessors);

            long start = System.currentTimeMillis();
            Factorization factorization = factorizer.factorize();
            long estimateDuration = System.currentTimeMillis() - start;

            if (log.isInfoEnabled()) {
                log.info("Model trained in {} ms", estimateDuration);
            }

            new FilePersistenceStrategy(targetFile).maybePersist(factorization);
        }
    } catch (Exception e) {
        throw new IOException(e);
    }
}

From source file:org.plista.kornakapi.web.servlets.BaseServlet.java

License:Apache License

protected void createRecommenderForLabel(String label) throws IOException, TasteException {
    Configuration conf = getConfiguration();
    List<FactorizationbasedRecommenderConfig> factorizationbasedConfs = conf
            .getFactorizationbasedRecommenders();
    FactorizationbasedRecommenderConfig factorizationbasedConf = factorizationbasedConfs.get(0);

    String name = factorizationbasedConf.getName() + "_" + label;
    if (conf.getMaxPersistence()) {
        storages().put(label, new CandidateCacheStorageDecorator(
                new MySqlMaxPersistentStorage(conf.getStorageConfiguration(), label, getDataSource())));
    } else {//from w w w. j  av  a 2 s  .  c  o  m
        storages().put(label, new CandidateCacheStorageDecorator(
                new MySqlStorage(conf.getStorageConfiguration(), label, getDataSource())));

    }

    File modelFile = new File(conf.getModelDirectory(), name + ".model");

    PersistenceStrategy persistence = new FilePersistenceStrategy(modelFile);

    if (!modelFile.exists()) {
        createEmptyFactorization(persistence);
    }

    DataModel persistenData = storages().get(label).recommenderData();

    CandidateItemsStrategy allUnknownItemsStrategy = new CachingAllUnknownItemsCandidateItemsStrategy(
            persistenData);

    FoldingFactorizationBasedRecommender svdRecommender = new FoldingFactorizationBasedRecommender(
            persistenData, allUnknownItemsStrategy, persistence,
            conf.getFactorizationbasedRecommenders().get(0).getNumberOfThreadsForEstimation());

    setRecommender(name, svdRecommender);
    setTrainer(name, new FactorizationbasedInMemoryTrainer(factorizationbasedConf));

    String cronExpression = factorizationbasedConf.getRetrainCronExpression();
    if (cronExpression == null) {
        scheduler().addRecommenderTrainingJob(name);
    } else {
        scheduler().addRecommenderTrainingJobWithCronSchedule(name, cronExpression);
        try {
            scheduler().immediatelyTrainRecommender(name);
        } catch (SchedulerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    if (factorizationbasedConf
            .getRetrainAfterPreferenceChanges() != RecommenderConfig.DONT_RETRAIN_ON_PREFERENCE_CHANGES) {
        ((DelegatingPreferenceChangeListenerForLabel) preferenceChangeListener())
                .addDelegate(new InMemoryPreferenceChangeListener(scheduler(), name,
                        factorizationbasedConf.getRetrainAfterPreferenceChanges()), label);
    }

    log.info("Added FactorizationBasedRecommender [{}] using [{}] features and [{}] iterations for label: {}",
            new Object[] { name, factorizationbasedConf.getNumberOfFeatures(),
                    factorizationbasedConf.getNumberOfIterations(), label });
}