Example usage for org.apache.mahout.cf.taste.recommender RecommendedItem getValue

List of usage examples for org.apache.mahout.cf.taste.recommender RecommendedItem getValue

Introduction

In this page you can find the example usage for org.apache.mahout.cf.taste.recommender RecommendedItem getValue.

Prototype

float getValue();

Source Link

Document

A value expressing the strength of the preference for the recommended item.

Usage

From source file:ContentBasedRecommender.java

License:Apache License

/**
 * Method the creates a list of recommendations.
 * Already rated stories are excluded, as are stories present in the front end array if add="true"
 * /* w w  w  .  ja v a2s .  c om*/
 * @throws TasteException   thrown if there if something went wrong with Mahout
 */
public void runContentBasedRecommender() throws TasteException {
    /*Find out where this file is located*/
    try {
        fileLocation = new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI());
    } catch (URISyntaxException e) {
        e.printStackTrace();
    }
    /*"content"+userId is the name of the view we shall create*/
    conn.setConnection();

    /*Create a temporary view the includes all preferences values for this user*/
    conn.createView((int) userId);

    /*Sets the dataModel based on the data in the created view*/
    conn.setDataModel();

    DataModel model = conn.getDataModel();

    /*Gets all the info from the similarites.csv file into a list of objects accepted by Mahout*/
    Collection<ItemItemSimilarity> sim = getStorySimilarities();

    /*GenericItemBasedRecommender need an ItemSimilarity-object as input, so create an instance of this class.*/
    ItemSimilarity similarity = new GenericItemSimilarity(sim);

    /*Create a new Recommender-instance with our datamodel and story similarities*/
    GenericItemBasedRecommender recommender = new GenericItemBasedRecommender(model, similarity);

    /* Compute the recommendations. model.getNumItems() is the number of recommendations we want (we don't really want that many, 
     * but we don't know how many of the top items the user already have rated), don't worry about the null, 
     * and true tells the recommender that we want to include already known items*/
    List<RecommendedItem> recommendations = recommender.recommend(userId, model.getNumItems(), null, true);

    /*Find the stories that the user have rated*/
    HashMap<Integer, Integer> ratedStories = conn.getRated((int) userId);

    ArrayList<Integer> frontendStories = new ArrayList<>();

    /* Find the stories already present in the recommendations list at front end
     * These stories should not be recommended again*/
    if (add.equals("true")) {
        frontendStories = conn.getStoriesInFrontendArray((int) userId);
    }
    int ranking = 1;
    Random rand = new Random();
    int randomDislikedRanking = rand.nextInt(6) + 5;

    ArrayList<DatabaseInsertObject> itemsToBeInserted = new ArrayList<>();
    ArrayList<Long> idsToBeInserted = new ArrayList<>();
    for (RecommendedItem recommendation : recommendations) {
        /* To get a story outside of the users preferences, finds the least recommended story */
        if (randomDislikedRanking == ranking) {
            /*Make sure the false recommendation is not already in the front end array or already among the top ten recommendation (may happen if the user doesn't have many not seen/not rated stories left) */
            for (int i = 1; i < recommendations.size(); i++) {
                long dislikedStoryId = recommendations.get(recommendations.size() - i).getItemID();
                if (!frontendStories.contains((int) dislikedStoryId)
                        && !idsToBeInserted.contains(dislikedStoryId)
                        && ratedStories.get((int) dislikedStoryId) == null) {
                    itemsToBeInserted.add(new DatabaseInsertObject((int) userId, "DF." + dislikedStoryId,
                            "FalseRecommendation", 1, 0, ranking,
                            recommendations.get(recommendations.size() - i).getValue()));
                    idsToBeInserted.add(dislikedStoryId);
                    System.out.print("False recommend: ");
                    System.out.println(dislikedStoryId);
                    break;
                }
            }
            ranking++;
            if (ranking > 10) {
                break;
            }
            continue;
        }

        /*If the item has not been rated,is not already in the recommendation list at front end or already a false recommendation we insert it*/
        if ((ratedStories.get((int) recommendation.getItemID()) == null)
                && !frontendStories.contains((int) recommendation.getItemID())
                && !idsToBeInserted.contains(recommendation.getItemID())) {
            /*Get the 30 items that had most influence on the recommendation*/
            List<RecommendedItem> becauseItems = recommender.recommendedBecause(userId,
                    recommendation.getItemID(), 30);
            int counter = 1;
            ArrayList<RecommendedItem> explanationItems = new ArrayList<>();
            for (RecommendedItem because : becauseItems) {
                /*Add story to explanation if this story has been rated and the rating is good*/
                if (!explanationItems.contains(because) && ratedStories.get((int) because.getItemID()) != null
                        && ratedStories.get((int) because.getItemID()) > 2) {
                    explanationItems.add(because);
                    counter++;
                }
                if (counter > 3) {
                    break;
                }
            }
            /*Gets the titles of the explanation-stories and creates a string*/
            String explanation = conn.createExplanation(explanationItems);
            itemsToBeInserted.add(new DatabaseInsertObject((int) userId, "DF." + recommendation.getItemID(),
                    explanation, 0, 0, ranking, recommendation.getValue()));
            idsToBeInserted.add(recommendation.getItemID());
            System.out.println(recommendation);
            ranking++;
        }
        /*When we got 10 new recommendations, we're happy*/
        if (ranking > 10) {
            break;
        }
    }
    this.recommendations = recommendations;
    /*Delete the current recommendations stored in stored_story that has not been seen by the user*/
    conn.deleteRecommendations((int) userId);

    /*Insert the 10 items we found*/
    conn.insertUpdateRecommendValues(itemsToBeInserted);

    /*Drop our temporary view*/
    conn.dropView();
    conn.closeConnection();

}

From source file:be.ugent.tiwi.sleroux.newsrec.newsreccollaborativefiltering.App.java

public static void main(String[] args) throws DaoException, IOException, TasteException {
    IRatingsDao ratingsDao = new JDBCRatingsDao();

    MahoutDataFileWriter fileWriter = new MahoutDataFileWriter(ratingsDao, mahoutInputFile);
    String[] ids = fileWriter.writeOutputFile();

    MahoutTermRecommender recommender = new MahoutTermRecommender(mahoutInputFile);
    Map<Long, List<RecommendedItem>> recommendations = recommender.makeRecommendations(10);

    for (Long user : recommendations.keySet()) {
        List<RecommendedItem> items = recommendations.get(user);
        System.out.println(user);
        for (RecommendedItem item : items) {
            System.out.println(ids[(int) item.getItemID()] + "\t" + item.getValue());
        }// w  ww .j  a v  a2  s  .  c  o  m
        System.out.println("");
    }

    RecommendationsToDatabase r2db = new RecommendationsToDatabase(ratingsDao);
    r2db.store(ids, recommendations);
}

From source file:be.ugent.tiwi.sleroux.newsrec.newsreccollaborativefiltering.RecommendationsToDatabase.java

public void store(String[] terms, Map<Long, List<RecommendedItem>> recommendations) throws RatingsDaoException {
    for (Long user : recommendations.keySet()) {
        List<RecommendedItem> items = recommendations.get(user);
        if (items.size() > 0) {
            Map<String, Double> scoreMap = new HashMap<>();
            for (RecommendedItem item : items) {
                String term = terms[(int) item.getItemID()];
                double score = item.getValue();
                scoreMap.put(term, score);
            }/*from   w ww  .  j  a  v a  2s. c  om*/
            ratingsDao.giveRating(user, scoreMap);
        }
    }
}

From source file:businessreco.BusinessReco.java

public static void main(String args[]) {

    try {/*from   ww w .j a v a  2 s .c  om*/

        //Loading the DATA;    

        DataModel dm = new FileDataModel(new File(
                "C:\\Users\\bryce\\Course Work\\3. Full Summer\\Big Data\\Final Project\\Yelp\\FINAL CODE\\Mahout\\data\\busirec_new.csv"));

        // We use the below line to relate businesses. 
        //ItemSimilarity sim = new LogLikelihoodSimilarity(dm);

        TanimotoCoefficientSimilarity sim = new TanimotoCoefficientSimilarity((dm));

        //Using the below line get recommendations
        GenericItemBasedRecommender recommender = new GenericItemBasedRecommender(dm, sim);

        //Looping through every business.
        for (LongPrimitiveIterator items = dm.getItemIDs(); items.hasNext();) {
            long itemId = items.nextLong();

            // For each business we recommend 3 businesses.

            List<RecommendedItem> recommendations = recommender.mostSimilarItems(itemId, 2);

            for (RecommendedItem recommendation : recommendations) {

                System.out.println(itemId + "," + recommendation.getItemID() + "," + recommendation.getValue());

            }

        }
    }

    catch (IOException | TasteException e) {
        System.out.println(e);
    }

}

From source file:com.anjuke.romar.http.rest.BaseResource.java

License:Apache License

List<Object> wrapRecommendItem(RecommendResultResponse recommendResponse) {
    List<RecommendedItem> list = recommendResponse.getList();
    List<Object> result = new ArrayList<Object>();
    for (RecommendedItem item : list) {
        if (_allowItemStringID) {
            RecommendStringBean bean = new RecommendStringBean();
            bean.setItem(getItemString(item.getItemID()));
            bean.setValue(item.getValue());
            result.add(bean);// www .j  a va2  s  . c o m
        } else {
            RecommendBean bean = new RecommendBean();
            bean.setItem(item.getItemID());
            bean.setValue(item.getValue());
            result.add(bean);
        }
    }
    return result;
}

From source file:com.mashup.resys.recommender.ByValueRecommendedItemComparator.java

License:Apache License

@Override
public int compare(RecommendedItem o1, RecommendedItem o2) {
    float value1 = o1.getValue();
    float value2 = o2.getValue();
    return value1 > value2 ? -1 : value1 < value2 ? 1 : 0;
}

From source file:com.msiiplab.recsys.rwr.GLRecommenderIRStatsEvaluator.java

License:Apache License

protected PreferenceArray getPreferenceArray(List<RecommendedItem> recommendedItems, long userID) {
    ArrayList<Preference> userPredictionArray = new ArrayList<Preference>();
    for (int i = 0; i < recommendedItems.size(); i++) {
        RecommendedItem item = recommendedItems.get(i);
        userPredictionArray.add(new GenericPreference(userID, item.getItemID(), item.getValue()));
    }/* w w  w  . j  a  v a 2  s. c o m*/
    PreferenceArray userPredictions = new GenericUserPreferenceArray(userPredictionArray);
    userPredictions.sortByValueReversed();
    return userPredictions;
}

From source file:com.mykidscart.mahout_service.RecommenderServlet.java

License:Apache License

private static void writeXML(HttpServletResponse response, Iterable<RecommendedItem> items) throws IOException {
    response.setContentType("application/xml");
    response.setCharacterEncoding("UTF-8");
    response.setHeader("Cache-Control", "no-cache");
    PrintWriter writer = response.getWriter();
    writer.print("<?xml version=\"1.0\" encoding=\"UTF-8\"?><recommendedItems>");
    for (RecommendedItem recommendedItem : items) {
        writer.print("<item><value>");
        writer.print(recommendedItem.getValue());
        writer.print("</value><id>");
        writer.print(recommendedItem.getItemID());
        writer.print("</id></item>");
    }//from   ww  w  .ja  v  a2s  . com
    writer.println("</recommendedItems>");
}

From source file:com.mykidscart.mahout_service.RecommenderServlet.java

License:Apache License

private static void writeJSON(HttpServletResponse response, Iterable<RecommendedItem> items)
        throws IOException {
    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    response.setHeader("Cache-Control", "no-cache");
    PrintWriter writer = response.getWriter();
    writer.print("{\"recommendedItems\":{\"item\":[");
    for (RecommendedItem recommendedItem : items) {
        writer.print("{\"value\":\"");
        writer.print(recommendedItem.getValue());
        writer.print("\",\"id\":\"");
        writer.print(recommendedItem.getItemID());
        writer.print("\"},");
    }// w  w w . ja v  a2 s  .  co  m
    writer.println("]}}");
}

From source file:com.mykidscart.mahout_service.RecommenderServlet.java

License:Apache License

private static void writeRecommendations(Iterable<RecommendedItem> items, PrintWriter writer) {
    for (RecommendedItem recommendedItem : items) {
        writer.print(recommendedItem.getValue());
        writer.print('\t');
        writer.println(recommendedItem.getItemID());
    }/* w  ww . j av a2s  .  com*/
}