Package io.prediction.examples.java.recommendations.tutorial5

Source Code of io.prediction.examples.java.recommendations.tutorial5.MahoutAlgoModel

package io.prediction.examples.java.recommendations.tutorial5;

import java.io.Serializable;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectStreamException;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.impl.recommender.GenericItemBasedRecommender;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.similarity.ItemSimilarity;
import org.apache.mahout.cf.taste.impl.similarity.LogLikelihoodSimilarity;
import org.apache.mahout.cf.taste.impl.similarity.TanimotoCoefficientSimilarity;
import com.esotericsoftware.kryo.KryoSerializable;
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MahoutAlgoModel implements Serializable, KryoSerializable {

  private DataModel dataModel;
  private MahoutAlgoParams params;
  private transient Recommender recommender; // declare "transient" because it's not serializable.

  final static Logger logger = LoggerFactory.getLogger(MahoutAlgoModel.class);

  public MahoutAlgoModel(DataModel dataModel, MahoutAlgoParams params) {
    this.dataModel = dataModel;
    this.params = params;
    this.recommender = buildRecommender(this.dataModel, this.params);
  }

  public Recommender getRecommender() {
    return this.recommender;
  }

  private Recommender buildRecommender(DataModel dataModel, MahoutAlgoParams params) {
    ItemSimilarity similarity;
    switch (params.itemSimilarity) {
      case MahoutAlgoParams.LOG_LIKELIHOOD:
        similarity = new LogLikelihoodSimilarity(dataModel);
        break;
      case MahoutAlgoParams.TANIMOTO_COEFFICIENT:
        similarity = new TanimotoCoefficientSimilarity(dataModel);
        break;
      default:
        logger.error("Invalid itemSimilarity: " + params.itemSimilarity +
          ". LogLikelihoodSimilarity is used.");
        similarity = new LogLikelihoodSimilarity(dataModel);
        break;
    }
    return new GenericItemBasedRecommender(
      dataModel,
      similarity
    );
  }

  // KryoSerializable interface
  public void write (Kryo kryo, Output output) {
    kryo.writeClassAndObject(output, this.dataModel);
    kryo.writeClassAndObject(output, this.params);
  }

  // KryoSerializable interface
  public void read (Kryo kryo, Input input) {
    this.dataModel = (DataModel) kryo.readClassAndObject(input);
    this.params = (MahoutAlgoParams) kryo.readClassAndObject(input);
    this.recommender = buildRecommender(this.dataModel, this.params); // recover the recommender
  }

  @Override
  public String toString() {
    return "Mahout Recommender";
  }
}
TOP

Related Classes of io.prediction.examples.java.recommendations.tutorial5.MahoutAlgoModel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.