Skip to content

Instantly share code, notes, and snippets.

@vtomiris
Last active August 29, 2015 14:02
Show Gist options
  • Select an option

  • Save vtomiris/dc850fd4e78611ff8887 to your computer and use it in GitHub Desktop.

Select an option

Save vtomiris/dc850fd4e78611ff8887 to your computer and use it in GitHub Desktop.

Revisions

  1. vtomiris revised this gist Jun 19, 2014. 1 changed file with 1 addition and 3 deletions.
    4 changes: 1 addition & 3 deletions eval_derived_class.groovy
    Original file line number Diff line number Diff line change
    @@ -63,9 +63,7 @@ trainTest {
    }


    metric CoveragePredictMetric
    metric RMSEPredictMetric
    metric NDCGPredictMetric
    metric RMSEPredictMetric

    metric topNnDCG {
    listSize 10
  2. vtomiris created this gist Jun 19, 2014.
    77 changes: 77 additions & 0 deletions eval_derived_class.groovy
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,77 @@
    import org.grouplens.lenskit.knn.item.*
    import org.grouplens.lenskit.baseline.*
    import org.grouplens.lenskit.transform.normalize.*

    import org.grouplens.lenskit.ItemScorer
    import org.grouplens.lenskit.baseline.ItemMeanRatingItemScorer
    import org.grouplens.lenskit.core.Transient
    import org.grouplens.lenskit.data.dao.EventDAO
    import org.grouplens.lenskit.data.dao.UserDAO
    import org.grouplens.lenskit.eval.data.traintest.QueryData
    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 item-mean.py to build an ItemScorer.
    */

    class ExternalItemMeanScorerBuilder implements Provider {
    EventDAO eventDAO
    UserDAO userDAO

    @Inject
    public ExternalItemMeanScorerBuilder(@Transient EventDAO events,
    @Transient @QueryData UserDAO users) {
    eventDAO = events
    userDAO = users
    }

    @Override
    ItemScorer get() {
    def wrk = new File("external-scratch")
    wrk.mkdirs()
    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("/user/home/item_mean.py") //location of sample recommender
    .addArgument("--for-users")
    .addRatingFileArgument(eventDAO)
    .addUserFileArgument(userDAO)
    .build()
    }
    }

    trainTest {
    dataset crossfold("ml-100k") {
    source csvfile("u.data") {
    delimiter "\t"
    domain {
    minimum 1.0
    maximum 5.0
    precision 1.0
    }
    }
    }

    algorithm("PersMean") {
    bind ItemScorer to UserMeanItemScorer
    bind (UserMeanBaseline, ItemScorer) to ItemMeanRatingItemScorer
    }


    metric CoveragePredictMetric
    metric RMSEPredictMetric
    metric NDCGPredictMetric

    metric topNnDCG {
    listSize 10
    candidates ItemSelectors.allItems()
    exclude ItemSelectors.trainingItems()
    }

    output "eval-results.csv"
    }