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);
            }
        }
Beispiel #3
0
        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());
        }