Dummy Mahout Recommender System Example
I already talked about the Open Source Apache Mahout here, and now I'll show a dummy dummy first example of how to use its recommender system.
It is a basic Java example that I used to try out Mahout. Hope it helps people starting to work with it.
It is a basic Java example that I used to try out Mahout. Hope it helps people starting to work with it.
package myexample; import org.apache.mahout.cf.taste.common.TasteException; import org.apache.mahout.cf.taste.impl.model.XmlFile; import org.apache.mahout.cf.taste.impl.recommender.CachingRecommender; import org.apache.mahout.cf.taste.impl.recommender.GenericItemBasedRecommender; import org.apache.mahout.cf.taste.impl.similarity.LogLikelihoodSimilarity; import org.apache.mahout.cf.taste.impl.recommender.slopeone.SlopeOneRecommender; import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity; import org.apache.mahout.cf.taste.similarity.ItemSimilarity; import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood; import org.apache.mahout.cf.taste.similarity.UserSimilarity; import org.apache.mahout.cf.taste.recommender.Recommender; import org.apache.mahout.cf.taste.recommender.RecommendedItem; import org.apache.mahout.cf.taste.recommender.ItemBasedRecommender; 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.AveragingPreferenceInferrer; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.List; /* * Renata Ghisloti - Dummy Mahout Example */ public class GeneralRecommender { public static void main(String[] args) throws IOException, TasteException, SAXException, ParserConfigurationException { String recsFile = args[0]; long userId = Long.parseLong(args[1]); String categoriesFile = args[2]; String outputPlace = args[3]; Integer neighborhoodSize = Integer.parseInt(args[4]); Integer method = 0; String version = null; if(args.length >= 6 ) { method = Integer.parseInt(args[5]); version = args[6]; } //Default - needed to initiate the recommendation InputSource is = new InputSource(new FileInputStream(recsFile)); SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setValidating(false); SAXParser sp = factory.newSAXParser(); ContentHandler handler = new ContentHandler(); sp.parse(is, handler); //Here is were you should load your own input XmlFile dataModel = new XmlFile(new File(recsFile)); switch(method){ case 0: recommenderItemBased(dataModel, userId , categoriesFile, outputPlace, handler, version); break; case 1: recommenderItemBased(dataModel, userId , categoriesFile, outputPlace, handler, version); break; case 2: recommenderSlopeOne(dataModel, userId , categoriesFile, outputPlace, handler); break; case 3: recommenderUserBased(dataModel, userId , categoriesFile, outputPlace, handler, neighborhoodSize, version); break; } } //Item Based Recommender System public static void recommenderItemBased(XmlFile dataModel, long userId , String categoriesFile, String outputPlace, ContentHandler handler, String version) throws TasteException{ System.out.println("Recommending with Item Based"); ItemSimilarity itemSimilarity; if(version == "LogLikelihoodSimilarity") itemSimilarity = new LogLikelihoodSimilarity(dataModel); else { itemSimilarity = new PearsonCorrelationSimilarity(dataModel); System.out.println("Recommending with Item Based Pearson"); } ItemBasedRecommender recommender = new GenericItemBasedRecommender(dataModel, itemSimilarity); //Just get top 5 recommendations Listrecommendations = recommender.recommend(userId, 5); //This is were you should add your own print output method PrintXml.printRecs(dataModel, userId, recommendations, handler.map, categoriesFile, outputPlace); } //Slope One Recommender System public static void recommenderSlopeOne(XmlFile dataModel, long userId , String categoriesFile, String outputPlace, ContentHandler handler) throws TasteException{ System.out.println("Recommending with Slope One"); CachingRecommender cachingRecommender = new CachingRecommender(new SlopeOneRecommender(dataModel)); List recommendations = cachingRecommender.recommend(userId, 5); PrintXml.printRecs(dataModel, userId, recommendations, handler.map, categoriesFile, outputPlace); } //User based Recommender System public static void recommenderUserBased(XmlFile dataModel, long userId , String categoriesFile, String outputPlace, ContentHandler handler, Integer neighborhoodSize, String version) throws TasteException{ System.out.println("Recommending with User Based"); UserSimilarity userSimilarity; if(version == "LogLikelihoodSimilarity") userSimilarity = new LogLikelihoodSimilarity(dataModel); else userSimilarity = new PearsonCorrelationSimilarity(dataModel); userSimilarity.setPreferenceInferrer(new AveragingPreferenceInferrer(dataModel)); UserNeighborhood neighborhood = new NearestNUserNeighborhood(neighborhoodSize, userSimilarity, dataModel); Recommender recommender = new GenericUserBasedRecommender(dataModel, neighborhood, userSimilarity); List recommendations = recommender.recommend(userId, 5); PrintXml.printRecs(dataModel, userId, recommendations, handler.map, categoriesFile, outputPlace); } }
Comments
Post a Comment