protected override AlternatingLeastSquares CreateRecommender(Dictionary <string, Dictionary <string, double> > data) { var parameters = new AlternatingLeastSquaresParameters(factors: 3, regularization: 0, iterations: 15, useConjugateGradient: true); var recommender = AlternatingLeastSquares.Fit(DataMatrix.Load(data), parameters); return(recommender); }
public void Factorize() { var matrix = new double[][] { new double[] { 1, 1, 0, 1, 0, 0 }, new double[] { 0, 1, 1, 1, 0, 0 }, new double[] { 1, 0, 1, 0, 0, 0 }, new double[] { 1, 1, 0, 0, 0, 0 }, new double[] { 0, 0, 1, 1, 0, 1 }, new double[] { 0, 1, 0, 0, 0, 1 }, new double[] { 0, 0, 0, 0, 1, 1 }, }; var data = Enumerable.Range(0, 7) .SelectMany( o => Enumerable.Range(0, 6), (o, p) => new { UserId = o.ToString(), ItemId = p.ToString(), Confidence = matrix[o][p] }) .Where(o => o.Confidence > 0) .GroupBy(o => o.UserId) .ToDictionary(o => o.Key, o => o.ToDictionary(p => p.ItemId, p => p.Confidence * 2)); var parametersScenarios = new[] { new AlternatingLeastSquaresParameters(factors: 6, regularization: 0, iterations: 15, useConjugateGradient: true), new AlternatingLeastSquaresParameters(factors: 6, regularization: 0, iterations: 15, useConjugateGradient: false), }; foreach (var parameters in parametersScenarios) { var recommender = AlternatingLeastSquares.Fit(DataMatrix.Load(data), parameters); Assert.True(recommender.Loss < 0.00001); } }
public void Setup() { switch (this.Provider) { case ProviderId.Managed: Control.UseManaged(); break; case ProviderId.NativeMKL: MklControl.UseNativeMKL(MklConsistency.Auto, MklPrecision.Double, MklAccuracy.High); break; } this.data = DataMatrix.Load(DataFactory.GetLastFm360k()); }