3.11 2015-12-31 recommenders - fix incremental update bug (user vs. item ID confusion) for item recommendation ItemKNN (pull request by Jessica Tölke) - get rid of recommender BPRLinear - mark (Weighted)Ensemble, (BiPolar)SlopeOne, GridSearch, CoClustering, FactorWiseMatrixFactorization, NaiveBayes as obsolete correlations - #453: add RatingCosine (Nicolas Hug) misc - #440: fix MovieLens 10M URL (pull request by Greg Najda) - #448: fix misleading documentation in Eval.CandidateItems (Chris Newell) - mark SequentialDiversification as obsolete - remove GUI demo - remove Perl6, Python, and Ruby examples 3.10 2013-09-23 recommenders - BPRMF: init random number generator in LoadModel() (pull request by KwangSeob Kim) command-line tools - write out final predictions after last iteration with --find-iter (reported by Tobias Lang) - item recommendation: prevent NPE with --find-iter when --test-file nor test-ratio is specified (reported by Tobias Lang) - rating prediction: prevent NPE when --test-file=FILE not specified (reported by Roberto Abalde) - support writing predictions to stdout on Unix (requested by GitHub user jkleint) data structures - fix bug in SparseMatrix.Resize() (reported by GitHub user guoguibing) IO - RatingData.cs: add missing param ignore_first_line to method call (reported by GitHub user guoguibing) evaluation - avoid null reference for cold-start users (pull request by KwangSeob Kim) - #425: Randomize ordering of candidate_items in ItemRecommender evaluations (reported by Chris Newell) 3.09 2013-06-22 command-line tools - make sure that --online-evaluation is used together with either --test-file, --test-ratio, or --cross-validation; make sure it is not combined with --find-iter; make sure that --find-iter has something to evaluate on (based on a report by Lina Weichbrodt) - move more CheckParameter() code to the common CommandLineProgram class misc - #413: Add missing reference to System.Data (Roland Richter) - make MyMediaLite.Random a true (per-thread) singleton 3.08 2013-04-15 recommenders - #400: cut ratings to allowed range for SlopeOne (reported by Simon Dooms) - WRMF: - support incremental training - reduce training time by about 50%, by explointing symmmetry and by reducing the number of multiplications - BPRMF: - avoid duplicate calls to UpdateUser() and UpdateItem() during incremental updates - set item bias to zero in RemoveItem() - move some incremental update functionality to class MF - fix fold-in learning - ItemRecommendation.KNN: actually support Weighted property - BPRLinear, BPRSLIM: remove obsolete fast sampling - remove CLiMF, as the implementation was never complete nor working - remove BPRMF_Mapping (incomplete implementation) - remove ItemAttributeSVM command-line tools - #399: add --help-measures to all 3 tools - item_recommendation: add usage information for --(load|save)-(user|item)-mapping=FILE - rating_prediction: - do not print complete usage information for invalid command line argument combinations; only describe what is wrong - allow test files without rating column via --test-no-ratings (suggested by Michael Ekstrand) evaluation - shuffle candidate items to avoid biased results for recommenders that return the same score for many items for --overlap-items and --all-items (reported by Pieter-Jan Perbruggen) data structures - fix updating count_by_user and count_by_items in Ratings, which caused a crash when performing incremental updates for BiasedMatrixFactorization with FrequencyRegularization=true (reported by Jia Huang) misc - remove namespace AttrToFactor 3.07 2013-02-04 #378: get rid of group recommendation code recommenders - new rating predictor GSVD++ (by Marcelo Manzato) - new recommenders ExternalRatingPredictor and ExternalItemRecommender: to evaluate external prediction tools with the MyMediaLite evaluation framework - incremental updates for item recommendation UserKNN and ItemKNN (pull request by João Vinagre) - MatrixFactorization: rename LearnRateDecay to Decay - SLIM: fix wrong data type in LoadModel() evaluation - simplify item recommender evaluation - do not pass ignore_items to the methods computing the measures - item cross-validation: fix bug where train and test sets were switched - item online evaluation: rewrote protocol; now documented and simpler data types - get rid of unused vector and matrix code (mostly double precision code) - matrix operations: speed up and simplify random initialization, element-wise multiplication, increment, addition - more unit tests for vector operations - SymmetricCorrelationMatrix: improve API documentation correlations - throw NotImplementedException for "Weighted" scenario BinaryData(As|S)ymmetricCorrelationMatrix.ComputeCorrelation() command-line tools - share SetupRecommender() code between the 3 command-line tools - add default evaluation measure to rating_based_ranking - rating_based_ranking: add support for --cross-validation (reported by Pieter-Jan Verbruggen) 3.06 2012-12-18 recommenders - CLiMF: add warning that it is not finished yet - BiasedMatrixFactorization, (Sigmoid)SVDPlusPlus: - fix learn rate decay - fix System.ArgumentOutOfRangeException in FoldIn() (reported by Greg Najda) - SigmoidCombinedAsymmetricFactorModel: - implement fold-in - fix potential NullReferenceException in Train() - UserKNN for item recommendation: add fold-in support - UserKNN and ItemKNN for item recommendation: fix prediction bug - wrong scoring and potential exception if k=inf - BPRMF, MultiCoreBPRMF, SoftMarginRankinMF: - #353: get rid of 'fast sampling' feature - MultiCoreBPRMF - fix multithreading behavior for WithReplacement=false and UniformUserSampling=false (thanks to Alex V. for the help) - BPRMF: - move different sampling strategies into different protected methods - improve documentation, add formula for optimization problem - SoftMarginRankingMF: - show all relevant options in ToString() - WeightedBPRMF - fix sampling corner case (last element was ignored) - set WithReplacement = false and UniformUserSampling = true in constructor - SocialMF - fix NRE when UserRelation is not set - more flexible Iterate() method - do not check for negative user/item IDs any more - this would be caught anyway by other means - add more unit tests for rating prediction methods data types - (Sparse)Matrix: implement IsSymmetric according to interface specification command-line tools - #337: use Mono's default garbage collector - #301: reduce measurement output, let user select which measures to display documentation - refer to new website: http://mymedialite.net website - add disclaimer to FAQ - move website into its own repository misc - UnhandledExceptionHandler: fix output formatting - Makefile: use variable ACK for ack/ack-grep - run all system tests with make target 'test' - MultiCore helper class - add unit tests - fix behavior when there are less tasks to divide than threads - method PartitionIndices() returns IList instead of an array 3.05 2012-10-23 recommenders - new item recommenders: BPRSLIM (#120) and LeastSquareSLIM (#118) (by Lucas Drumond) - MatrixFactorization: fix bug related to the learn rate decay introduced in the last release (reported by Lucas Drumond and Josif Grabocka) - MatrixFactorization: support learning rate decay for fold-in - add some more unit tests command-line tools - fix to work when symbolically linked (by Lars Schmidt-Thieme) website - add more MyMediaLite users - fix issue with trailing whitespaces for included links - add Lucas Drumond to authors misc - clean up Makefile - rename Utils.GetTypesInNamespace() to GetTypes(), make it an extension method, add unit tests 3.04 2012-10-14 API - IMatrix.IsSymmetric: now explicitly defined as the storage strategy, not the mathematical property recommenders - new: CLiMF (best paper at RecSys 2012, not complete yet) - BPRMF: improve doc - WRMF: rename hyperparameter c_pos to alpha (more consistent with the paper) - UserKNN, ItemKNN: correct handling of incremental updates for asymmetric correlations; avoid calling Update(User|Item) in baseline_predictor twice - ItemKNN: support fold-in rating prediction - MostPopular: - #312: distinguish number of users and number of events - score computation: divide by number of users or events - SVD++ and AFM variants: better names for temporary values - UserItemBaseline: improved API doc with formula of the optimization problem (suggested by Yong Zheng) - MatrixFactorization: improved API doc - all factorization models for rating prediction: add multiplicative learn rate decay: property LearnRateDecay, --recommender-option learn_rate_decay=0.9 command-line tools - rating_prediction: improve usage description - item_recommendation: new line after prediction_time output evaluation - average precision: more readable computation - PrecisionAndRecall.cs: fix API doc generation - add enum RepatedEvents documentation - document Diversification namespace website - add some papers that use MyMediaLite - add list of organizations that use MyMediaLite misc: - #90: Makefile: call ack-grep instead of ack 3.03 2012-09-09 API - rename (I)EntityMapping to (I)Mapping - attribute- and relation-aware interfaces, IO.AttributeData, IO.RelationData: refer to interfaces instead of classes - introduce more general IIncrementalRecommender inferface, which is extended by IIncrementalRatingRecommender (otherwise not changed) and IIncrementalItemRecommender (now more flexible) - introduce abstract Recommender class that implements behavior common to most rating predictors and item recommenders recommenders - BPRMF: add fold-in support, new incremental update interface - MostPopular: new incremental update interface - MostPopularByItemAttributes: divide score by number of item attributes (otherwise attributes with many attributes have automatically higher scores) - KNN: - add option to select the kind of correlation for determining the nearest neighbors - get rid of the distinction between weighted and non-weighted kNN - safer and shorter implementation of GetMostSimilar(Users|Items) - ensembles: define attributes as interfaces instead of classes correlations - new correlations: ConditionalProbability, Cooccurrence (#267), BidirectionalConditionalProbability - share routines between different kinds of binary data correlations (#166) - support weighting according to global frequency of an entity (#170) command line tools - fix early abortion if cutoff not set for item_recommendation (bug was introduced in 3.02) - rename --repeat-evaluation to --repeat-items, and support this option also for writing out predictions, not only for evaluation (reported by Elvio Vicosa, #124) - remove KDDCup 2011 and ICDM 2010 executables: would have to be maintained; for reference, they are still available in MML's older releases - new argument --num-iter=N - add version number to stack trace - move more code to abstract CommandLineProgram class data types - IMatrix: rename Grow() to Resize() documentation - improve Installation description - correct Doxygen namespace for MyMediaLite.GroupRecommendation scripts - add artist-to-song preprocessing script for MSD challenge - add script to allow easier adding of results to YAML files evaluation - fix some Gendarme warnings tests - test_item_recommendation_online.sh: constant random seed misc - get rid of generic Pair class, use System.Tuple instead - get rid of Util namespace 3.02 2012-07-23 API - information about the rating scale (minimum rating, maximum rating, the different levels, etc.) are now in contained in the class RatingScale recommenders - new item recommender: MostPopularByItemAttributes: predict songs with same attributes even if they have a count of zero - new rating predictor: NaiveBayes - group recommenders: take CanPredict() into account, some cleanup - WeightedBPRMF: use Feedback data structure more efficiently - ItemKNN item recommender: fix cast/integer division bug in Predict() (reported by Cees Wesseling) - SigmoidCombinedAsymmetricFactorModel: fix crash during training data structures - get rid of SparseBooleanMatrixBinarySearch and SparseBooleanMatrixStatic - sparse matrix types: get rid of NonEmptyRows property - Ratings: enable GetEnumerator() - DataSet, PosOnlyFeedback: add C(dataset) constructors command line tools - #32: share some code between the command line tools - rating prediction: support binary ranking measures evaluation - fix MAP@k computation - aggregated output for cross-validation of iterative models documentation - improve documentation on website: - GUI demo - attribute files - get rid of mdoc-generated HTML documentation scripts - MSD challenge evaluation: fix MAP@k computation, give out number of users with AP=0 - MSD challenge: add script to generate artist attributes - import_dataset.pl: allow event constants of value 0 3.01 2012-05-30 API - move CountBy(User|Item) from IRatings to IDataSet recommenders - new rating predictors Sigmoid(User|Combined)AsymmetricFactorModel - new item recommender MostPopularByItemAttributes - WRMF: support out-of-the-box multi-core learning (#233) - SocialMF: remove unnecessary if-statement - BiasedMatrixFactorization: 'naive' parallelization - BPRMF and variants: get rid of bold-driver heuristics (not effective/efficient for these recommenders) - (Sigmoid)SVDPlusPlus, SigmoidItemAsymmetricFactorModel: take the ratings that have to be predicted into account command line tools - do not print all usage information on errors that have easy explanations - #234: get rid of argument --show-fold-results evaluation - MyMediaLite.Extensions: parameter n (number of top-n predictions) for PredictItems() and ScoreItems() methods - rating prediction: detailed evaluation of cold-start events - remove ItemsFiltered class scripts - add scripts for creating submissions, evaluation, and blending for the Million Song Dataset Challenge on Kaggle - add script for user-stratified crossvalidation - import_dataset.pl: more flexible ID mapping file format tests - NUnit tests now also run from the command line - update time estimates to newer computer misc - more readable doc/ComponentLicenses (pointed out by Greg Najda) 3.0 2012-04-05 recommenders - new recommender: SigmoidItemAsymmetricFactorModel - SocialMF: - implement with sigmoid function - training bug fixes (error reported by Nicholas Ampazis) - speed up case social_regularization=0 - add bold-driver heuristics - add support for MAE and logistic loss optimization - RatingPredictor.KNN: - NumIter attribute for the underlying bias model - set default K to 80 instead of inf - speed up rating access by using user-wise indices of item-wise ones - remove the seldomly used InitMean and InitStdDev from the ToString() method of all recommenders that have it - generalize parts of ComputeObjective() - (Sigmoid)SVDPlusPlus: implement ComputeObjective() - BPRLinear: get rid of unnecessary iteration_length variable - GlobalAverage, ItemAverage, UserAverage, ItemAttributeKNN: fix incorrect statements in API documentation (reported by Chris Newell) command-line programs - fix #78: '--recommender-options="option=" leads to exception' - rating prediction: --prediction-line=ranking writes a ranked list of items for each user - item recommendation: load user and item ID mappings if requested - item recommendation: fix crash when predicting for all users - item recommendation: always use --data-dir for --test-users-file - item recommendation: get rid of --filtered-evaluation - rating prediction: simplify LoadData() method - make the program classes static I/O - speed up writing out item recommendations by using a heap to store intermediate results (suggested by Brian McFee) - add static class IO.FileSerializer - perform fast binary (de)serialization if user and item IDs are not mapped - TimedRatingData: improved handling of different time/date formats - database access: introduce GetFloatGetter() to retrieve ratings data structures - make DataSet, Ratings, StaticRatings, StaticByteRatings, TimedRatings, PosOnlyFeedback, and EntityMapping serializable - RatingType: represent enum by byte evaluation - add static classes to Eval.Measures: MAE, RMSE, LogisticLoss scripts - import_dataset.pl: fix indentation of usage message; allow output without event column - add some helper scripts for KDD Cup 2012 - add overlap.pl and statistics.pl misc - #132: get rid of package MyMediaLiteExperimental - HyperParameter.NelderMead: fix bug in center computation (reported by Chris Newell) - speed up test scipts - get rid of delegate definitions in some classes, use Func<> instead - Util.RecommenderParameters: get rid of redundant constructor code 2.99 2012-03-02 API - most rating stuff is now using float instead of double - IRecommender: Predict(user, item) now returns float instead of double - IIncrementalRatingPredictor: (Add|Update)Rating(u,i,r) -> (Add|Update)Ratings(ratings), RemoveRating(u,i) -> RemoveRatings(ratings) - move PredictItems from ItemRecommendation.Extensions to Extensions, add method ScoreItems - add interface IFoldInRatingPredictor with extension methods - implement this interface for (Biased)MatrixFactorization, UserKNN(Cosine|Pearson), UserAverage, and (Sigmoid)SVDPlusPlus - add interface IFoldInItemRecommender - IIterativeModel: double ComputeLoss() => float ComputeObjective() recommenders - new rating predictors: SVDPlusPlus and SigmoidSVDPlusPlus - #157: matrix factorization recommenders use float to store the latent factors - BiasedMatrixFactorization: differentiate regularization of user and item biases, by using reg_u * bias_reg and reg_i * bias_reg, same with the learn rate;: compute rating_range_size only once; use global average (#162), use user/item bias whenever possible (#163), frequency-based regularization - MatrixFactorization: proper intialization of latent factors for users and items without known feedback - merge MultiCoreMatrixFactorization and LogisticRegressionMatrixFactorization into BiasedMatrixFactorization - RatingPredictor: fix setting MaxUserID and MaxItemID - TimeAwareBaseline: fix day computation (reported by Chris Newell), fix initialization of c_u parameter, proper use of user_scaling - TimeAwareBaseline(WithFrequencies): fixes in UpdateParameters() and ComputeLoss() - ItemRecommender.ItemKNN: fix wrong prediction (reported by Chris Newell) - EntityAverage: - remove unnecessary parameter from Retrain() - compute averages using doubles instead of floats - initialize entity_averages in Train() (reported by Chris Newell) - ItemAttributeSVM: improve API doc and ToString() method command-line programs - more compact usage information - item recommendation: actually take user list into account when writing predictions (reported by Yue Shi) - add --(save|load)-(user|item)-mapping=FILE options - rating prediction: add option --prediction-header=LINE - add --no-id-mapping option to save memory for large-scale datasets where the user and item IDs have no gaps - #202, #203: the criterion to be used for cut-off/convergence checking can now be configured via the --measure=MEASURE option for both rating prediction and item recommendation, --epsilon=NUM is now also supported by the item recommendation tool - explicitly prevent combination of --cross-validation=K and --(load|save)-model=FILE - rating prediction: fix bug in KDD Cup data handling - item recommendation: add dependency to System.Data assembly - item recommendation: fix usage description of --predict-items-number and --repeat-evaluation (reported by Simon Renaud) - item recommendation: show number of test users when writing out predictions I/O - #206 (suggested by Simon Dooms): string user, item, and attribute IDs (instead of long) - DB: support integer, long, and string IDs - rename IO.IMatrixExtensions to IO.MatrixExtensions - remove class NumberFile (not used any more) data types - MatrixExtensions: speed up some operations by precomputing offsets - remove SparseVector and Triple: not used any more data structures - correctly handle MinRating and MaxRating in CombinedRatings - Ratings: update indices after removing ratings, fix bug in RemoveUser() and RemoveItem() - RatingsProxy: proper handling of MaxUserID and MaxItemID, implement Remover(At|User|Item) - EntityMappings: use List instead of Dictionary to store internal to external mappings correlations - BinaryCosine: fix division by zero (reported by Chris Newell) evaluation - save results as float instead of double documentation - improve API doc of IIncrementalItemRecommender misc - remove Data.WeightedItem (use Pair instead) - NelderMead: fix compilation in VisualStudio (reported by Artus Krohn-Grimberghe and user LHCGreg on reddit) - Utils.Shuffle is now an extension method - Utils.Recommender: simplify, allow enum options 2.03 2012-01-14 API - add method Grow(x, y) to IMatrix interface - #72: method ComputeFit() renamed to ComputeLoss(), ComputeFit() is now an extension method (see below under 'evaluation') - #145: move index-related methods from IRatings to IDataSet - #147: add interfaces IItemSimilarityProvider and IUserSimilarityProvider recommenders - new (experimental) recommender: MultiCoreBPRMF - new recommender: LogisticRegressionMatrixFactorization - #171: add random and constant rating predictors - BPRMF: fix bug in negative item sampling with fast sampling deactivated - UserItemBaseline: fix wrong initialization in OptimizeUserBiases() and OptimizeItemBiases(), reported by Tom Tung - ItemKNNCosine: fix bug in incremental updates - SoftMarginRankingMF: move to main package, improve API doc - MultiCoreMatrixFactorization: rename Blocks to blocks (not a property), rename NumBlocks to MaxThreads - #177: FactorWiseMatrixFactorization: add RegU and RegI properties (of the underlying baseline predictor) - TimeAwareBaseline(WithFrequencies): fixes in UpdateParameters() and ComputeLoss() functions - UserKNN, ItemKNN: implement SimilarityProvider interfaces - #161: rename BPR_Linear to BPRLinear - #160: incremental updates for (Global|User|Item)Average - move MultiCoreMatrixFactorization, SoftMarginRankingMF, SocialMF, and WeightedBPRMF from experimental to normal section command-line programs - #51: mark iterative and incremental recommenders - starter scripts: use --gc=sgen to allow very large datasets - avoid exception when combining --cross-validation=K and --compute-fit - remove redundant code for setting the random seed - fix error message when using --online-evaluation with a non-incremental recommender - rating prediction: fix usage --file-format=kddcup_2011 instead of --file-format=kddcup2011 - KDD Cup tool (track 2): support compute_fit, align iteration output with the other MyMediaLite programs correlations - get rid of unnecessary copy constructor in Jaccard and BinaryCosine - use dense matrices for computing Pearson, BinaryCosine and Jaccard, to avoid the overhead of our sparse matrices - use SymmetricMatrix as base class of CorrelationMatrix, saving some memory - make BinaryDataCorrelationMatrix and RatingCorrelationMatrix abstract - Pearson: perform shrinkage as in chapter 5 of the RecSys Handbook, which describes an MAP estimate; improve API doc; turn shrinkage field into property 'Shrinkage' - implement weighted cosine similarity (Xie et al., ) data types - add data type SymmetricMatrix evaluation - new rating prediction measure: CBD (capped binomial deviance) - #75: allow combination of --cross-validation=K and --compute-fit - introduce extension method ComputeFit() which computes the fit (RMSE/AUC) on the training data of the recommender - fix potential race condition in DoCrossValidation() documentation - #158: put API documentation into a separate package - Diversification: improve API doc - UserItemBaseline, RatingPrediction.KNN: improve API doc - FactorWiseMatrixFactorization: improve API doc misc - fix #176: DoCrossValidation() hangs forever; random number generation now should be thread-safe and reproducible (thanks to Tom Tung for reporting the issue and suggesting the solution) - #165: move statistics routines in Util.Utils to Data.Extensions, now return string instead of writing to STDOUT - turn more methods in Util.Recommender into extension methods - C# rating prediction example: add DoCrossValidation() example - Nelder-Mead: use InvariantCulture for output formatting - #173: remove Makefile target 'source-package' - move Diversification namespace from experimental to normal section - move code related to the KDD Cup 2011 data from experimental to normal section - move namespace HyperParameter from experimental to normal section - add script visualize_iterations.pl - add options --no-mapping and --ignore-line-regex=REGEX to script import_dataset.pl 2.02 2011-11-29 MyMediaLite now needs MonoDevelop 2.6 or later or xbuild to build API - IRecommender: now inherits from IClonable, improve API doc - IDataSet: add Count property - IRatings: get rid of Get() method - IIncrementalRatingPredictor: add UpdateUsers and UpdateItems properties - TimeAwareBaseline: fix crash when trying to predict a rating after the training period - #114: methods in (ItemRecommendation|RatingPrediction).Prediction are now extension methods, rename to Extensions - make mapping arguments optional - less method overloads - move Pair and Triple from Util namespace to DataType - Recommender.Configure() and SetProperty() are now an extension methods - Recommender.CreateRatingPredictor() and CreateItemRecommender() now also accept complete type names (including namespaces) recommenders - new rating predictor: CoClustering (based on a 2005 paper by George and Merugu) - BPRMF: fix bug in incremental updates - MulticoreMatrixFactorization: simplify implementation - UserItemBaseline: make RetrainUser(user_id) and RetrainItem(item_id) public instead of protected - TimeAwareBaseline(WithFrequencies): several bug fixes - FactorWiseMatrixFactorization: - remove unused field global_bias - turn field residuals into a local variable - fix crash on LoadModel() with Ratings == null - #49: kNN recommenders: use UserItemBaseline via composition, not inheritance - (BiPolar)SlopeOne: remove unnecessary cast to double - move group recommenders from experimental to main section command-line programs - rename from ItemRecommendation.exe to item_recommendation.exe and RatingPrediction.exe to rating_prediction.exe - add scripts that call Mono on Unix-like systems: item_recommendation and rating_prediction - #61: add the option to ignore first line of training/test file - #27: command-line programs: load from model file without specifying recommender type - print "prediction_time" instead of "predicting_time" - item recommendation - add --file-format= option - fix wrong check "predict_for_users_file == null" to "!=" in Predict() method examples - simplify the C#, Python, and Ruby examples - add F# example evaluation - #109: formulate evaluation routines as extension methods - #122: introduce specific datatypes for evaluation results - move filtered evaluation and group recommendation evaluation from experimental to main section - move online eval for item recommendation into its own test script - provide defaults for test_users and candidate_items in Items.Evaluate() I/O - fix reading in timestamps in TimedRatingData and MovieLensRatingData - add enum IO.ItemDataFileFormat - add IGNORE_FIRST_LINE to enum IO.RatingFileFormat - add read/write methods for integer vectors to IO.VectorExtensions - user/item mappings are now optional arguments for all IO routines - add unit tests for all interaction data reading classes - Model.Load: do not check for empty string any more data structures - move MinRating and MaxRating from DataSet to Ratings documentation - improve API doc of Correlation.Jaccard and ItemRecommendation.IIncrementalItemRecommender - improve GUI Demo documentation on website - update doc/Installation misc - ship NUnit DLLs so that we won't have any versioning problems - add test cases for CoClustering, MultiCoreMatrixFactorization, --rating-format=float|byte|double to rating prediction test script - add test script for time-aware rating prediction - #87: create Makefile in src/ that calls xbuild to build MyMediaLite on the command line - add make targets "install" and "uninstall" for installation on Unix-like systems (thanks go to Simon Dooms for valuable feedback on this) 2.01 2011-11-13 bugfix release: fix a null pointer exception in the item recommendation tool (reported by Damir Logar) 2.00 2011-11-10 API - add abstract class TimeAwareRatingPredictor and interface ITimeAwareRatingPredictor - add interface ITimedDataSet - add interface IHyperParameterSearch - most methods in *MatrixUtils are now extension methods, allowing them to be called in a much more elegant way: mat.method() instead of MatrixUtils.method(mat); renamed *MatrixUtils to *MatrixExtensions - IIterativeModel is no sub-interface of IRecommender any more (not necessary) recommenders - add TimeAwareBaseline and TimeAwareBaselineWithFrequencies rating predictors (from Koren's Netflix Grand Prize report) - RatingPredictor: LoadModel() and SaveModel() now have default implementations that throw a NotImplementedException() - UserItemBaseline: make parameters protected so that library users can inherit from the class; ComputeFit now returns the exact loss instead of the training error - MultiCoreMatrixFactorization: complete API doc command line programs - move source code into Programs/ directory - improved exception handler - #76: allow combination of --cross-validation and --find-iter - rating prediction: - improved usage information - --chronological-split parameter evaluation - add chronological splits (global and per user) for rating prediction - PosOnlyFeedbackCrossValidationSplit: fix compilation problem with Visual Studio 2010 (reported by Saurabh S.) - rating prediction: transparently support using dates/times in the evaluation (if present) - RatingsSimpleSplit: better ArgumentException message; guaranteed sizes for train and test parts; add unit tests - catch exceptions in parallel CV code - AUC - fix computation involving ignore_items - handle empty and complete correct item lists - throw exception if ranked item list is too short (reported by Tomas Horvath) - add unit tests data structures - (I)TimedRatings: add EarliestTime and LatestTime properties - add RatingsChronologicalSplit - Matrix, SparseMatrix, SparseBooleanMatrix, SparseVector, SparseBooleanMatrixStatic, SparseBooleanMatrixBinarySearch: change accessibility of internal data presentation to "protected internal" - SparseBooleanMatrix: change datatype of internal representation from List to IList> - add SparseMatrixExtensions I/O - completely drop support for reading from STDIN - catch line format exceptions in a uniform way - use default arguments for rating_type argument of methods StaticRatingData.Read() - ItemData I/O: on error, display offending line - NumberFile I/O: add unit tests - rename TimedRatings to TimedRatingData - improved support for MovieLens 1M/10M file format - move DataType.IMatrixUtils.cs to IO.IMatrixExtensions - the class only contains extension methods for matrix IO - move IO part of VectorUtils to IO.VectorExtensions misc - update script download_movielens.sh because the download URLs have changed - introduce static Wrap class, which contains MeasureTime() and FormatException() method wrappers - Utils.DisplayDataStats: use default parameters" - move hyper-parameter search to its own namespace - MatrixUtils: add Max() method 1.99 2011-10-08 - MyMediaLite now needs .NET 4.0/Mono 2.8 or later (2.10.x recommended) - add multicore support - item recommendation evaluation and filtered item rec. evaluation - cross-validation for rating prediction and item recommendation - distributed SGD (see below) - API changes - add (more abstract) IDataSet interface, and DataSet class - rename IItemRecommender to IIncrementalItemRecommender and split off IIncrementalRatingPredictor from IRatingPredictor - to better reflect what those interfaces actually offer - add classes IncrementalItemRecommender and IncrementalRatingPredictor (classes for the above interfaces) - rename IO.RatingPrediction to IO.RatingData and IO.RatingPredictionStatic to IO.StaticRatingData - rename IO.ItemRecommendation to IO.ItemData and IO.ItemRecommendationRatingThreshold to IO.ItemDataRatingThreshold - move read/write routines from Util.Recommender to the new static class IO.Model; rename LoadModel() to Load(), SaveModel to Save() - RatingPrediction.Prediction.WritePredictions(): move line_format argument to last position to be able to use it as an optional argument - IPosOnlyFeedback - AllUsers and AllItems properties: ICollection -> IList - Overlap() -> OverlapCount() - IBooleanMatrix NonEmpty(Row|Column)IDs properties: ICollection -> IList - Data.IRatings.AllUsers/AllItems: HashSet -> IList - recommenders - new rating predictor MultiCoreMatrixFactorization based on Distributed SGD paper at KDD 2011 by Gemulla et al. - MostPopular: set MaxItemID in LoadModel() (by Chris Newell) - BiasedMatrixFactorization: make fields needed for the bold-driver learning rate heuristic protected - MatrixFactorization: avoid unnecessary computation of update terms - kNN models for item recommendation: deal gracefully with unknown users and items - BPRMF: - add UpdateJ option - fully support RemoveItem() - add WithReplacement option to choose between sampling with and without replacement - add UniformUserSampling option - factorization models that need random initialization: rename property Stdev to StdDev - BPR_Linear: no warning when predicting for unknown items; get rid of random initialization - 0 is okay for linear model - MostPopular: adapt to new PosOnlyFeedback - command-line tools - add --show-fold-results for cross-validation - support --compute-fit for all kinds of modes, not only in conjunction with --find-iter=N - rename ItemPrediction.exe to ItemRecommendation.exe - item recommendation: all items in training+test are now the default, instead of all items in training; get this behavior now via the --in-training-items option; add --all-items option (makes a difference if there are also items which were not observed - viewed, bought - at all, e.g. in combination with --rating-threshold); thanks go to Jagadeesh Gorla for bugging me about the details of the evaluation protocol. - item recommendation: rename --relevant-items=FILE to --candidate-items=FILE to avoid confusion with the way the word "relevance" is used in information retrieval; rename --relevant-users=FILE to --test-users=FILE - drop support for --prediction-file=- (write to STDOUT) - improved usage information - check parameters after creating recommender, catching more errors - refer to GitHub issue tracker in exception handler, make handler output more noticeable - evaluation - different modes for selecting candidate items now also work for cross-validation - fixes and improvements for item recommendation CV - new evaluation measure: mean reciprocal rank (MRR) - item recommender evaluation: more descriptive parameter name repeated_events - move item recommender evaluation measures into their own classes (Eval.Items class got too big) - move online evaluation and cross-validation for both items and ratings into their own classes, respectively - I/O - new static class IO.Constants, which for now contains SPLIT_CHARS (used by several other IO classes) - new static class IO.NumberFile (with routines that used to be in Util.Utils) - support long user and item IDs (instead of 32 bit integer), as suggested by Sebastian Schelter - data structures - SparseBooleanMatrix: more unit tests - PosOnlyFeedback: add unit tests, inherit from DataSet - Ratings.BuildRandomIndex(): shuffle existing index instead building from scratch - documentation - API docs: - improved literature references and web links - add links to RecSysWiki articles - IItemRecommender: explain the task of item recommendation - IRatingPredictor: explain the task of rating prediction - add data file format descriptions to website - misc - upgrade from Math.NET Iridium to Math.NET Numerics Beta 2 - use Math.NET Numerics for generating normal distributed random numbers (doubles the speed of MF initialization) - cleaned up solution and project files for MonoDevelop - improved ToString() methods - declared all classes as static that contain only static methods - move unit tests into namespaces, rename their top namespace from MyMediaLiteTest to Tests - updated and improved test scripts; add test script for the cross-validation feature - rename example programs from item_prediction.* to item_recommendation.* - also add RatingPrediction.exe.mdb (the file with the debug information) to the binary package 1.05 2011-09-01 - API changes - ISplit - use IList instead of List for Train and Test - NumberOfFolds is now a uint instead of an int - Eval.Ratings and Eval.Items - replace DisplayResults by FormatResults - add support for group recommendation - recommenders - add WeightedBPRMF: the item recommender developed for KDD Cup 2011 track 2 - group recommenders: add aggregation methods Average, Minimum, Maximum, PairwiseWins, Weighted Average - add SoftMarginRankingMF: item recommender inspired both by CofiRank (ranking loss) and BPR-MF (stochastic gradient descent learning) - WRMF: set NumIter default value down to 15 - BiasedMatrixFactorization: improved API doc - BPRMF: do not implement IIterativeModel (this is done indirectly by inheriting from the MF class) - command-line tools - display memory stats just once when the program finishes - display memory stats after loading data is complete - introduce CheckParameters() method for better source readability - ensure that 'random' data splitting is reproducible when using --random-seed=N - improved attribute statistics output - item prediction: - add support for k-fold cross-validation: --cross-validation=K - better handling of different prediction scenarios - improved error/usage messages - new parameter --rating-threshold=NUM uses ratings of at least NUM as positive examples - support --user-prediction by transposing the user-item matrix - support group recommendation: --group-evaluation and --user-groups=FILE - add 'groups as user' approach for group recommendation - evaluation - item prediction: more generic method signatures; more compact code - item/group/filtered prediction: modify progress output - add class PosOnlyFeedbackCrossValidationSplit - RatingsSimpleSplit and PosOnlyFeedbackSimpleSplit: simplified constructor - RatingsCrossValidationSplit: check in constructor whether num_folds has a legal value - add Eval.Items.RecallAt() - add Eval.Items.EvaluateOnSplit() - IO - support CSV format also for attribute and relation files - documentation - more detailed system requirements in doc/Installation - improved API documentation, with some links to RecSysWiki http://recsyswiki.com - helper scripts - fix bug in ml100k_genres.pl - better --help usage information for crossvalidation.pl 1.04 2011-08-03 - API changes - Eval.RatingPrediction -> RatingPrediction.Prediction - Eval.ItemPrediction -> ItemRecommendation.Prediction - Eval.RatingPredictionEval -> Eval.Ratings - Eval.ItemPredictionEval -> Eval.Items - IUserAttributeAwareRecommender: remove set from NumUserAttributes - IItemAttributeAwareRecommender: remove set from NumItemAttributes - recommenders - BPRMF: speed up training by about 5% for higher num_factors - UserAverage, ItemAverage, GlobalAverage: support LoadModel() and SaveModel() - BiasedMatrixFactorization: fix incorrect output of LoadModel() - merge functionality of BiasedMatrixFactorizationMAE into BiasedMatrixFactorization - RatingPredictor: get rid of InitModel() method - SlopeOne: get rid of unnecessary String.Format() call - UserItemBaseline: fixed incorrect item ID check - simple recommenders: avoid reimplementation of ToString() method - command-line tools - --find-iter=N: explicitly state that the last number refers to the number of iterations computed so far - fix bug that suppressed evaluation with --test-ratio - rating prediction: - add user-defined prediction format via the --prediction-line argument - get rid of --min-rating and --max-rating, it is now automatically read from the data - rename --split-ratio to --test-ratio: more intuitive, and consistent with the item prediction tool - item prediction: - always obey --relevant-users=FILE and --relevant-items=FILE arguments - add arguments --num-test-users, --overlap-items and --test-items - improved error messages - evaluation - add "filtered evaluation" protocol for item recommendation: for every user, compute recommendation quality for item sets filtered according to given attributes: Eval.ItemsFiltered - support predicting and evaluating items that have interactions with the given user in the training set (which would usually be ignored). This is useful e.g. for repeat buying, and for computing the fit on the training data. - data structures - Ratings: set MinRating and MaxRating to double.MaxValue and double.MinValue, respectively - examples - fix KDD Cup examples (reported by Subramanyeshwar Cherukuri) - misc - MatrixUtils: rename RowInitNormal(m, d, d) to InitNormal() - "row" made no sense here - Utils.Recommender: add Load(filename) method that creates a recommender object of the appropriate type and loads the model from file - also create genres file for MovieLens 10M - packaging: add missing lib/ directory to source package (reported by Artus Krohn-Grimberghe) 1.03 2011-06-22 - IMPORTANT ANNOUNCEMENT: This may be the last version to support Mono 2.6. If you use MyMediaLite and rely on running it on Mono 2.6, please contact the authors: mymedialite@ismll.de. - web service API - add prototype for a SOAP web service for rating prediction, plus three test scripts - API changes - IRatingPredictor - Add() is now AddRating() - remove AddUser() and AddItem() - IItemRecommender - remove AddUser() and AddItem() - Util.Recommender.Configure can now be called without a delegate argument. - IIterativeModel: NumIter is now uint instead of int - recommenders - remove NewKNN from project (still not finished) - new rating predictor FactorWiseMatrixFactorization - new rating predictor BiasedMatrixFactorizationMAE, which is BMF optimized for MAE instead of RMSE - BiasedMatrixFactorization: fixed a wrong constant factor in ComputeLoss() - BPRMF: add optional bold driver heuristic for learn rate adaptation - MatrixFactorization: - use method from Eval namespace to compute fit - NumFactors: int -> uint - ItemRecommendation.MF: NumFactors: int -> uint - UserItemBaseline: - use several iterations of alternating optimization instead of just one; implement IIterativeModel - implement LoadModel() and SaveModel() - command-line tools - item prediction: rename --predict-for-users-file to --relevant-users for consistency with --relevant-items - rating prediction: - support all IIterativeModel recommenders, not just the ones derived from MatrixFactorization - --compute-fit now works in all cases - evaluate on simple split (given split ratio) - write out predictions every N iterations with --prediction-file=F and --find-iter=N (bug reported by Alejandro Bellogin) - write loading time to STDERR, not STDOUT - support online evaluation with incremental updates (see below) - allow several --recommender-options arguments - evaluation - RatingEval - add EvaluateOnline() method - rename RatingPredictionMeasures to Measures - ItemPredictionEval - add EvaluateOnline() method - rename ItemPredictionMeasures to Measures - data structures - add interfaces IBooleanMatrix and IPosOnlyFeedback - make PosOnlyFeedback generic to allow different backends - add SparseBooleanMatrixBinarySearch and SparseBooleanMatrixStatic - IMatrix interface: add Transpose() method - SparseBooleanMatrix: remove Rows() method (not necessary) - Matrix: - perform bounds check only when DEBUG is set - faster GetRow()/SetRow() - generic return types - additional constructor with list of list of T as argument - MatrixUtils: - remove ContainsNaN() - rename InitNormal() to RowInitNormal(); add ColumnInitNormal() - VectorUtils: - add L1Norm() - simplify ReadVector() - fix bug in Ratings that prevented incremental updates to work properly (reported by Chris Newell) - documentation - some API doc improvements - get rid of the word 'engine', as it usually carries no relevant information - get rid of the term 'online updates', as it may cause confusion because of the term "online learning" in the machine learning literature; we now use the term 'incremental updates' - IO - minor speed-up: do not .Trim() lines before checking whether they are empty - misc - reflection-based recommender configuration from string: check whether properties are read-only - move GridSearch to experimental section - add Nelder-Mead algorithm for hyperparameter selection; currently only rating prediction is supported (experimental) - remove obsolete option_file functionality - add test script for incremental updates (rating prediction) - suppress localized formatting in a more elegant way (saves more than 100 lines of source code overall) - 'make clean' now removes more temporary files 1.02 2011-05-24 - recommenders - BPR_Linear: less verbose output - BPRMF: fix loading/saving of models - BiasedMatrixFactorization: simplify a bit - SlopeOne: move computation of rating average to Train() - BiPolarSlopeOne: fix loading/saving of models - UserItemBias: set default values for reg_u and reg_i - command-line tools - item prediction: fix null pointer exception when no --test-file is given - rating prediction: save model file in all cases when requested - documentation - fix Doxygen API doc (wrong path) - Doxygen: do not build LaTeX doc; add main page - remove XML tags - currently not supported by any tool we use - drop ImmDoc.NET support 1.01 2011-05-19 - API changes - add interface IEntityMapping - IRatings: add CountByUser and CountByItem - recommenders - make ItemRecommender and RatingPredictor clonable - BiasedMatrixFactorization - rename BiasRegularization to BiasReg for consistency with other recommenders - different regularization parameters for user and item factors - add ComputeLoss() (also for MatrixFactorization) - add optional bold driver heuristic for learn rate adaptation - BPRMF: - get rid of unnecessary IterationLength parameter - only interate once over relevant data points in online learning - explicitly model item bias - significant training speed-up - BPR_Linear - significant training speed-up - kNN recommenders - improve API documentation - Random: remove unnecessary methods - Zero: new item recommender that always predicts the score 0 - rename MyMediaLite.ensemble namespace to MyMediaLite.Ensemble - make matrix factorization recommender faster by using MatrixUtils.RowScalarProduct - command-line tools - move DisplayDataStats() for item recommendation from the program to the library - improved usage information - use Mono.Options for command-line argument parsing - support --help and --version - evaluation - add relevant_users feature for item prediction - rating evaluation: check arguments for null - rating evaluation cross validation: clone recommender to be unaffected by state changes - data structures - fix incorrect error message in Matrix class (reported by Chris Newell) - documentation - update performance stats - misc - add target download-imdb to Makefile - KDD Cup 2011 - one program per track - add validation functionality for track 2 - add IKDDCupRecommender interface for recommenders that use the KDDCup item data 1.0 2011-03-19 - recommenders - BPRMF: bug fix in item bias handling (reported by Christian Brauch) - UserItemBaseline: use internal splitting to find good regularization parameters - API changes - new data structures and interfaces for rating prediction and for item prediction from implicit feedback (consume less memory) - CanPredict() is now part of the IRecommender interface. - rename IO.RatingPredictionData to IO.RatingPrediction - rename IO.ItemRecommenderData to IO.ItemRecommendation - add rating data structures with time stamps: RatingsWithDateTime and StaticRatingsWithDateTime - command-line programs - add command-line program for KDD Cup 2011 - rating prediction now lets the user specify to store the ratings as bytes or floats instead of doubles, to save memory - display number of ratings - give out memory usage also for find_iter - move some statistics routines to the library because they are used several times - rename the arguments rating_predictions_file and item_predictions_file to prediction_file for consistency in all command-line programs - IO - add routines for KDD Cup 2011 data - evaluation - add simple dataset splitting - improve grid search routines - example programs - fix a bug in the example programs (reported by Yongfeng Wang) - data preprocessing scripts - fix download_movielens.sh 0.11 2011-03-04 - add simple GUI demo for CeBIT - recommenders - SlopeOne and BiPolarSlopeOne - faster and consume less memory - fix exception when predicting for new users - MatrixFactorization and BiasedMatrixFactorization - online update bug fixes - command-line programs - handle DirectoryNotFoundExceptions - give out memory usage - ignore abstract recommender classes - API changes - seal some classes - IO - support for MovieLens 1M and 10M rating data format - data types - add SkewSymmetricSparseMatrix - data preprocessing scripts - also download MovieLens 10M - add IMDB data download script - utils - remove the Utils.Split() method 0.10 2011-02-04 - API changes - rename IRecommenderEngine to IRecommender - rename namespace ItemRecommender to ItemRecommendation - rename Memory to ItemRecommender - rename namespace RatingPredictor to RatingPrediction - rename Memory to RatingPredictor - command-line programs - find and load recommenders via reflection - recommender names are now CamelCase (exactly their class names) - recommenders - kNN-based recommenders are now much faster and consume less memory - add BiPolarSlopeOne - move SlopeOne to the stable code - data types - SparseBooleanMatrix now implements IMatrix - new type SymmetricSparseMatrix - IMatrix: new property IsSymmetric - Matrix: faster computation of IsSymmetric - move WeightedItem from DataType to Data - add unit tests for SparseMatrix - add sequential diversification (Ziegler et al.) to experimental section - correlation matrices - distinguish between different kinds of data: binary data and real-valued rating vectors - rename Correlation.Cosine to CorrelationBinaryCosine - add Correlation.Jaccard and Correlation.AdjustedCosine - data preprocessing scripts - add item genre script for MovieLens 100K 0.09 2011-01-12 - IO - add database and IDataReader support (by Artus Krohn-Grimberghe) - graceful handling of FileNotExceptions - bug fix in rating data reading routine: expect at least three columns - recommenders - add Slope-One rating predictor - weighted-item-kNN: fix ToString() method - fix configuration bug that affected parameters of type float - recommender configuration: interpret string "inf" as MaxValue for signed and unsigned integers - evaluation - initial support for dataset splits, cross-validation, and hyperparameter search - add evaluation measure normalized mean absolute error (NMAE) - shorter method names for RatingEval and ItemRecommenderEval - data types - add IMatrix interface for both sparse and dense matrices - improve SparseMatrix implementation - source code structure - split up unit tests: one file per tested class - get rid of 'Experimental' namespace, experimental recommenders now reside in their own project 0.08 2010-12-09 - add information about ML's non-commercial use license to the download script - Makefiles, unit tests, and MonoDevelop finally work together nicely - the number of factors (per entity) for matrix factorization models is now consistently called num_factors, both in the code as well as in the documentation (thank you Artus for pointing this out) - simplify IO.RelationData and IO.ItemRecommenderData - rename namespace 'attr_to_feature' to 'AttrToFactor' - LoadModel() of MF methods: assign correct number of factors - move experimental code into its own project - add three different kinds of API documentation generators for HTML: mdoc (included with Mono), Doxygen, and ImmDoc.NET - add IronRuby examples - rename namespace from 'my_namespace' to 'MyNamespace' to follow the .NET platform habits; it also allows us to support IronRuby - removed the interface ILatentFactorModel 0.07 2010-11-18 - Bugfix release. You only need to upgrade if you encounter problems with the issues mentioned below. - fix some tiny errors in the Makefile - fix an error in the MovieLens download script - command line tools: ignore data_dir for save_model and load_model - small documentation updates 0.06 2010-11-17 - Makefile-based build system allows compilation without IDE - automated release management - also read comma-separated text files (like Mahout) - export Mahout-compatible item predictions - attribute-to-factor mapping framework (ICDM 2010) - add shell/Perl cripts to download MovieLens and IMDB data - tests should now run on every Unix computer - recommenders - encapsulate hyperparameters of ItemAttributeSVM and WRMF - print newline after Pearson correlation is computed - support LoadModel() and SaveModel() for biased MF - simpler LoadModel() and SaveModel() for all matrix factorization methods - fix LoadModel() and SaveModel() for item prediction kNN recommenders - differentiate between weighted and unweighted item-based kNN for item prediction - fix off-by-one error in attribute-aware recommenders - interfaces - new interfaces ILatentFactorModel - new interface IItemRecommender (instead of abstract class) - simplify interface of io.AttributeData - add property NumberOfColumns to SparseBooleanMatrix - attibute-aware recommenders: attributes now also have getters - command-line programs - exception handler: encourage users to file bug reports - check again for unknown program parameters - misc - code clean-ups - documentation improvements in many places - automagic recommender configuration: proper handling of read-only properties - development: improve 'make gendarme' and 'make todo' - add more test cases (e.g. for LoadModel() and SaveModel()) - separate test code from production code - The core library and the command-line programs now do not contain any critical issues that Gendarme would complain about. - add Perl script to create k-fold CV dataset splits, and for generating cold-start evaluation scenarions 0.05 2010-11-02 - rename the library from 'Algorithms' to 'MyMediaLite' - recommenders - more fixes to ensure locale-independent output of '.' as floating point separator - MF and linear recommenders for item prediction: rename init_f_mean to init_mean and init_f_stdev to init_stdev - return hyperparameter values in ItemAttributeSVM.ToString() and all kNN recommenders - fix bug that caused crashes with new users/items for user/item knn rating predictors - kNN: do not store hyperparameter values in model files (consistent with the other recommenders) - RatingPredictor: shorter property names: - MinRatingValue -> MinRating - MaxRatingValue -> MaxRating - interface names now all start with 'I' - BiasedMatrixFactorization: model biases explicitly, allow separate regularization - command-line programs - rating prediction: map internal user/item IDs back to the original ones (this bug was found and reported by Thorsten Angermann) - configure recommenders via reflection - improve usage information - item prediction: rename option 'prec_cutoff' to 'prec5_cutoff' - item prediction: fix iteration statistics display - rating prediction: display correct number of users and items - evaluation - correct computation of AUC if there are irrelevant items in the test set - misc: - add unit tests for some basic data types (Christina Lichtenthäler) - improve exception handling in CorrelationMatrix - rename util.EngineStorage class to util.Engines, because it now contains different utility methods, not just for storing - code clean-ups - more XML API documentation - add IronPython examples 0.04 2010-10-21 - new features: - Map user/item IDs to internal IDs on the fly. That makes it unnecessary to convert datasets before using them with the MyMediaLite command-line tools. - MAP (mean average precision) for item recommender evaluation - API documentation in XML (generated from the inline XML docs) - support recommenders that use relations over users and/or items using the interfaces UserRelationAwareRecommender and ItemRelationAwareRecommender - SocialMF by Jamali+Ester 2010 - recommender changes: - add global bias term to BiasedMatrixFactorization - command-line programs: - allow input from STDIN and output to STDOUT - nicer time output for both demo programs - nicer result output for both demo programs - rating prediction: save model earlier - rating prediction: option to stop iterating if there is no progress - always output '.'-separated floating point numbers, independent of the current locale. - better documentation of arguments - rating prediction: MAE and RMSE cutoff values for iteration search - give out data loading time - give out iteration statistics even if program stopped with Ctrl-C - interface changes: - use IterativeModel interface in rating prediction program - consistent parameters for RatingData constructor - SparseBooleanMatrix now allows [x, y] and [x] access, has properties instead of GetXXX() methods - Matrix now allows [x, y] access - UserAttributeAwareRecommender and ItemAttributeAwareRecommender now both are completely property-based - misc: - code clean-up and bug fixes 0.03 2010-09-29 - fix some crashes in both demo programs - add initial pre-release test suite - allow lower case names for all recommenders - some code clean-up - introduced interface IterativeModel 0.02 2010-09-27 - save some memory - fix an argument bug in the command line programs - nicer find_iter output in rating prediction command line program - add a flyer for the RecSys 2010 demo session - finalize README 0.01 2010-09-24 - Initial release