Skip to content

Instantly share code, notes, and snippets.

@pingles
Created July 28, 2010 14:19
Show Gist options
  • Save pingles/494653 to your computer and use it in GitHub Desktop.
Save pingles/494653 to your computer and use it in GitHub Desktop.
(ns mahout-test.recommend
(:import [java.io File]
[org.apache.mahout.cf.taste.model DataModel]
[org.apache.mahout.cf.taste.impl.model.file FileDataModel]
[org.apache.mahout.cf.taste.impl.similarity PearsonCorrelationSimilarity TanimotoCoefficientSimilarity LogLikelihoodSimilarity]
[org.apache.mahout.cf.taste.impl.neighborhood NearestNUserNeighborhood ThresholdUserNeighborhood]
[org.apache.mahout.cf.taste.impl.recommender GenericUserBasedRecommender GenericItemBasedRecommender]))
(defn create-user-recommender
[file]
(let [model (FileDataModel. file)
similarity (LogLikelihoodSimilarity. model)]
(GenericUserBasedRecommender. model
(ThresholdUserNeighborhood. 0.5 similarity model)
similarity)))
(defn recommend-user
"Make n recommendations from file for user."
[file user n]
(.recommend (create-user-recommender file) user n))
(defn create-item-recommender
[file]
(let [model (FileDataModel. file)]
(GenericItemBasedRecommender. model (LogLikelihoodSimilarity. model))))
(defn recommend-item
"Make n recommendations from file for user."
[file user n]
(.recommend (create-item-recommender file) user n))
; user=> (map #(str (.getItemID %) " @" (.getValue %)) (recommend-user (File. "ratings.csv") 1 5))
; ("104 @4.257081" "106 @4.0")
; user=> (map #(str (.getItemID %) " @" (.getValue %)) (recommend-item (File. "ratings.csv") 1 5))
; ("104 @2.8088317" "106 @2.5915816" "105 @2.5748677")
1 101 5.0
1 102 3.0
1 103 2.5
2 101 2.0
2 102 2.5
2 103 5.0
2 104 2.0
3 101 2.5
3 104 4.0
3 105 4.5
3 107 5.0
4 101 5.0
4 103 3.0
4 104 4.5
4 106 4.0
5 101 4.0
5 102 3.0
5 103 2.0
5 104 4.0
5 105 3.5
5 106 4.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment