Skip to content

Instantly share code, notes, and snippets.

Last active August 29, 2015 14:02
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save vtomiris/dadf7d48afba91ce8ae3 to your computer and use it in GitHub Desktop.
import org.grouplens.lenskit.knn.item.*
import org.grouplens.lenskit.baseline.*
import org.grouplens.lenskit.transform.normalize.*
import org.grouplens.lenskit.eval.metrics.topn.*;
import org.grouplens.lenskit.ItemScorer
import org.grouplens.lenskit.baseline.ItemMeanRatingItemScorer
import org.grouplens.lenskit.core.Transient
import org.grouplens.lenskit.eval.metrics.predict.*
import org.grouplens.lenskit.external.ExternalProcessItemScorerBuilder
import javax.inject.Inject
import javax.inject.Provider
* Shim class to run to build an ItemScorer.
class ExternalItemMeanScorerBuilder implements Provider<ItemScorer>{
EventDAO eventDAO
UserDAO userDAO
public ExternalItemMeanScorerBuilder(@Transient EventDAO events,
@Transient @QueryData UserDAO users) {
eventDAO = events
userDAO = users
ItemScorer get() {
def wrk = new File("external-scratch")
def builder = new ExternalProcessItemScorerBuilder()
// Note: don't use file names because it will interact badly with crossfolding
return builder.setWorkingDir(wrk)
.setExecutable("python") //can be "R", "matlab", "ruby" etc
.addArgument("../") //relative (or absolute) location of sample recommender
trainTest {
dataset crossfold("ml-100k") {
source csvfile("ml-100k/") { //relative (or absolute) path to the dataset
delimiter "\t"
domain {
minimum 1.0
maximum 5.0
precision 1.0
algorithm("PersMean") {
bind ItemScorer to UserMeanItemScorer
bind (UserMeanBaseline, ItemScorer) to ItemMeanRatingItemScorer
algorithm("ExternalAlgorithm") {
bind ItemScorer toProvider ExternalItemMeanScorerBuilder
metric RMSEPredictMetric
metric topNnDCG {
listSize 10
candidates ItemSelectors.allItems()
exclude ItemSelectors.trainingItems()
output "eval-results.csv"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment