/lenskit-eval-balke/src/integration-test/matthias-balke-da.groovy
Groovy | 180 lines | 132 code | 19 blank | 29 comment | 0 complexity | 7b7f0667c5a930e34a6cc0b0f8a7966e MD5 | raw file
Possible License(s): LGPL-2.1
- /*
- * LensKit, an open source recommender systems toolkit.
- * Copyright 2010-2011 Regents of the University of Minnesota
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 51
- * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
- import org.grouplens.lenskit.ItemRecommender
- import org.grouplens.lenskit.RatingPredictor
- import org.grouplens.lenskit.baseline.BaselinePredictor
- import org.grouplens.lenskit.baseline.GlobalMeanPredictor
- import org.grouplens.lenskit.baseline.ItemMeanPredictor
- import org.grouplens.lenskit.baseline.ItemUserMeanPredictor
- import org.grouplens.lenskit.baseline.UserMeanPredictor
- import org.grouplens.lenskit.eval.data.crossfold.RandomOrder
- import org.grouplens.lenskit.eval.metrics.StatisticsMetric
- import org.grouplens.lenskit.eval.metrics.predict.CoveragePredictMetric
- import org.grouplens.lenskit.eval.metrics.predict.MAEPredictMetric;
- import org.grouplens.lenskit.eval.metrics.predict.RMSEPredictMetric
- import org.grouplens.lenskit.eval.metrics.recommend.DiversityRecommendMetric
- import org.grouplens.lenskit.eval.metrics.recommend.FScoreRecommendMetric
- import org.grouplens.lenskit.eval.metrics.recommend.DiversityRecommendMetric.DiversityType
- import org.grouplens.lenskit.knn.item.ItemItemRatingPredictor
- import org.grouplens.lenskit.knn.item.ItemItemRecommender;
- import org.grouplens.lenskit.knn.params.NeighborhoodSize
- import org.grouplens.lenskit.knn.params.SimilarityDamping
- import org.grouplens.lenskit.norm.BaselineSubtractingNormalizer
- import org.grouplens.lenskit.norm.VectorNormalizer
- import org.grouplens.lenskit.params.NormalizerBaseline
- import org.grouplens.lenskit.params.UserVectorNormalizer
- import org.grouplens.lenskit.rfrec.RFRecRatingPredictor
- import org.grouplens.lenskit.rfrec.RFRecRecommender
- import org.grouplens.lenskit.rfrec.parameters.DefaultItemWeight
- import org.grouplens.lenskit.rfrec.parameters.DefaultUserWeight
- import org.grouplens.lenskit.rfrec.parameters.Gamma
- import org.grouplens.lenskit.rfrec.parameters.Iterations
- import org.grouplens.lenskit.rfrec.parameters.Lambda
- import org.grouplens.lenskit.slopeone.SlopeOneRecommender;
- import org.grouplens.lenskit.slopeone.WeightedSlopeOneRatingPredictor
- import org.grouplens.lenskit.slopeone.params.DeviationDamping
- import org.grouplens.lenskit.svd.FunkSVDRatingPredictor
- import org.grouplens.lenskit.svd.FunkSVDRecommender;
- import org.grouplens.lenskit.svd.params.FeatureCount
- import org.grouplens.lenskit.svd.params.IterationCount
- def buildDir = System.getProperty("project.build.directory", ".")
- def ml1M = crossfold("ml1M") {
- source csvfile("${buildDir}/ml-1M/ratings.dat") {
- delimiter "::"
- domain {
- minimum 1.0
- maximum 5.0
- precision 1.0
- }
- }
- order RandomOrder
- holdout 10
- partitions 5
- train "${buildDir}/ml-1M/ml-1M.train.%d.csv"
- test "${buildDir}/ml-1M/ml-1M.test.%d.csv"
- }
- def netflix1M = crossfold("Netflix1M") {
- source csvfile("${buildDir}/Netflix-1M/Netflix-1M-dense.mldata.gz") {
- delimiter ","
- domain {
- minimum 1.0
- maximum 5.0
- precision 1.0
- }
- }
- order RandomOrder
- holdout 10
- partitions 5
- train "${buildDir}/Netflix-1M/Netflix-1M.train.%d.csv"
- test "${buildDir}/Netflix-1M/Netflix-1M.test.%d.csv"
- }
- def yahooMovies200k = crossfold("YahooMovies200k") {
- source csvfile("${buildDir}/YahooMovies-200k/YahooMovies-200k.mldata.gz") {
- delimiter ","
- domain {
- minimum 1.0
- maximum 13.0
- precision 1.0
- }
- }
- order RandomOrder
- holdout 0.3
- partitions 5
- train "${buildDir}/YahooMovies-200k/YahooMovies-200k.train.%d.csv"
- test "${buildDir}/YahooMovies-200k/YahooMovies-200k.test.%d.csv"
- }
- trainTest {
- depends ml1M
- dataset ml1M
- depends netflix1M
- dataset netflix1M
- depends yahooMovies200k
- dataset yahooMovies200k
- output "${buildDir}/eval-output/eval-output.csv"
- numRecs 5
- metric CoveragePredictMetric
- metric MAEPredictMetric
- metric RMSEPredictMetric
- metric new FScoreRecommendMetric()
- metric new DiversityRecommendMetric(DiversityType.HITS)
- metric new DiversityRecommendMetric(DiversityType.POPULARITY)
- metric new StatisticsMetric()
- // algorithm("UserUser") {
- // setComponent(RatingPredictor, UserUserRatingPredictor)
- // setComponent(PredictNormalizer, VectorNormalizer, MeanVarianceNormalizer)
- // setComponent(BaselinePredictor, ItemUserMeanPredictor)
- // setComponent(NormalizerBaseline, BaselinePredictor, UserMeanPredictor)
- // setComponent(UserVectorNormalizer, VectorNormalizer, BaselineSubtractingNormalizer)
- // setComponent(UserSimilarity, Similarity, CosineSimilarity)
- // set(SimilarityDamping, 100)
- // set(NeighborhoodSize, 30)
- // }
- //
- algorithm("ItemItem") {
- setComponent(RatingPredictor, ItemItemRatingPredictor)
- setComponent(ItemRecommender, ItemItemRecommender)
- setComponent(BaselinePredictor, ItemUserMeanPredictor)
- setComponent(UserVectorNormalizer, VectorNormalizer, BaselineSubtractingNormalizer)
- set(SimilarityDamping, 100)
- set(NeighborhoodSize, 30);
- }
- algorithm("WeightedSlopeOne") {
- setComponent(RatingPredictor, WeightedSlopeOneRatingPredictor)
- setComponent(ItemRecommender, SlopeOneRecommender)
- setComponent(NormalizerBaseline, BaselinePredictor, GlobalMeanPredictor)
- setComponent(UserVectorNormalizer, VectorNormalizer, BaselineSubtractingNormalizer)
- setComponent(BaselinePredictor, ItemUserMeanPredictor)
- set(DeviationDamping, 0)
- }
- algorithm("RFRec"){
- setComponent(ItemRecommender, RFRecRecommender)
- setComponent(RatingPredictor, RFRecRatingPredictor)
- set(DefaultUserWeight, 0.4)
- set(DefaultItemWeight, 0.6)
- set(Iterations, 15)
- set(Gamma, 0.001)
- set(Lambda, 0.002)
- }
- algorithm("FunkSVD") {
- setComponent(RatingPredictor, FunkSVDRatingPredictor)
- setComponent(ItemRecommender, FunkSVDRecommender)
- setComponent(BaselinePredictor, ItemUserMeanPredictor)
- set(FeatureCount, 30)
- set(IterationCount, 100)
- }
- }