Exemple #1
0
        public void testRecommenderWithSyntheticData()
        {
            setUpSyntheticData();

            factorizer     = new ParallelSGDFactorizer(dataModel, rank, lambda, numIterations, 0.01, 1, 0, 0);
            svdRecommender = new SVDRecommender(dataModel, factorizer);

            /// a hold out test would be better, but this is just a toy example so we only check that the
            /// factorization is close to the original matrix
            IRunningAverage avg     = new FullRunningAverage();
            var             userIDs = dataModel.GetUserIDs();

            while (userIDs.MoveNext())
            {
                long userID = userIDs.Current;
                foreach (IPreference pref in dataModel.GetPreferencesFromUser(userID))
                {
                    double rating   = pref.GetValue();
                    double estimate = svdRecommender.EstimatePreference(userID, pref.GetItemID());
                    double err      = rating - estimate;
                    avg.AddDatum(err * err);
                }
            }

            double rmse = Math.Sqrt(avg.GetAverage());

            logger.Info("rmse: " + rmse);
            Assert.True(rmse < 0.2);
        }
 public CachedFactorizer(ISieve sieve, IFactorizer factorizer)
 {
     Sieve      = sieve;
     Factorizer = factorizer;
     _memory.Add(2);
     _memory.Add(3);
     _memory.Add(5);
     _memory.Add(7);
     _fullySeached = 7;
 }
        /// Create an SVDRecommender using a persistent store to cache factorizations. A factorization is loaded from the
        /// store if present, otherwise a new factorization is computed and saved in the store.
        ///
        /// The {@link #refresh(java.util.Collection) refresh} method recomputes the factorization and overwrites the store.
        ///
        /// @param dataModel
        /// @param factorizer
        /// @param candidateItemsStrategy
        /// @param persistenceStrategy
        ///
        /// @throws TasteException
        public SVDRecommender(IDataModel dataModel, IFactorizer factorizer, ICandidateItemsStrategy candidateItemsStrategy,
                              IPersistenceStrategy persistenceStrategy) : base(dataModel, candidateItemsStrategy)
        {
            this.factorizer          = factorizer;          //Preconditions.checkNotNull(factorizer);
            this.persistenceStrategy = persistenceStrategy; // Preconditions.checkNotNull(persistenceStrategy);
            try {
                factorization = persistenceStrategy.Load();
            } catch (IOException e) {
                throw new TasteException("Error loading factorization", e);
            }

            if (factorization == null)
            {
                train();
            }

            refreshHelper = new RefreshHelper(() => {
                train();
            });
            refreshHelper.AddDependency(GetDataModel());
            refreshHelper.AddDependency(factorizer);
            refreshHelper.AddDependency(candidateItemsStrategy);
        }
 /// Create an SVDRecommender using a persistent store to cache factorizations. A factorization is loaded from the
 /// store if present, otherwise a new factorization is computed and saved in the store.
 ///
 /// The {@link #refresh(java.util.Collection) refresh} method recomputes the factorization and overwrites the store.
 ///
 /// @param dataModel
 /// @param factorizer
 /// @param persistenceStrategy
 /// @throws TasteException
 /// @throws IOException
 public SVDRecommender(IDataModel dataModel, IFactorizer factorizer, IPersistenceStrategy persistenceStrategy)
     : this(dataModel, factorizer, GetDefaultCandidateItemsStrategy(), persistenceStrategy)
 {
 }
 public SVDRecommender(IDataModel dataModel, IFactorizer factorizer, ICandidateItemsStrategy candidateItemsStrategy) :
     this(dataModel, factorizer, candidateItemsStrategy, getDefaultPersistenceStrategy())
 {
 }
 public SVDRecommender(IDataModel dataModel, IFactorizer factorizer) :
     this(dataModel, factorizer, new AllUnknownItemsCandidateItemsStrategy(), getDefaultPersistenceStrategy())
 {
 }
        public void testRecommenderWithToyData()
        {
            setUpToyData();

            factorizer = new ParallelSGDFactorizer(dataModel, rank, lambda, numIterations, 0.01, 1, 0,0);
            svdRecommender = new SVDRecommender(dataModel, factorizer);

            /// a hold out test would be better, but this is just a toy example so we only check that the
             /// factorization is close to the original matrix
            IRunningAverage avg = new FullRunningAverage();
            var userIDs = dataModel.GetUserIDs();
            while (userIDs.MoveNext()) {
              long userID = userIDs.Current;
              foreach (IPreference pref in dataModel.GetPreferencesFromUser(userID)) {
            double rating = pref.GetValue();
            double estimate = svdRecommender.EstimatePreference(userID, pref.GetItemID());
            double err = rating - estimate;
            avg.AddDatum(err * err);
              }
            }

            double rmse = Math.Sqrt(avg.GetAverage());
            logger.Info("rmse: " + rmse);
            Assert.True(rmse < 0.2);
        }
        public void testFactorizerWithWithSyntheticData()
        {
            setUpSyntheticData();

            var stopWatch = new System.Diagnostics.Stopwatch();
            stopWatch.Start();

            factorizer = new ParallelSGDFactorizer(dataModel, rank, lambda, numIterations, 0.01, 1, 0, 0);

            Factorization factorization = factorizer.Factorize();

            stopWatch.Stop();
            long duration = stopWatch.ElapsedMilliseconds;

            /// a hold out test would be better, but this is just a toy example so we only check that the
             /// factorization is close to the original matrix
            IRunningAverage avg = new FullRunningAverage();
            var userIDs = dataModel.GetUserIDs();
            IEnumerator<long> itemIDs;

            while (userIDs.MoveNext()) {
              long userID = userIDs.Current;
              foreach (IPreference pref in dataModel.GetPreferencesFromUser(userID)) {
            double rating = pref.GetValue();
            var userVector = factorization.getUserFeatures(userID);
            var itemVector = factorization.getItemFeatures(pref.GetItemID());
            double estimate = vectorDot( userVector, itemVector);
            double err = rating - estimate;

            avg.AddDatum(err * err);
              }
            }

            double sum = 0.0;

            userIDs = dataModel.GetUserIDs();
            while (userIDs.MoveNext()) {
              long userID = userIDs.Current;
              var userVector = factorization.getUserFeatures(userID);
              double regularization = vectorDot( userVector, userVector);
              sum += regularization;
            }

            itemIDs = dataModel.GetItemIDs();
            while (itemIDs.MoveNext()) {
              long itemID = itemIDs.Current;
              var itemVector = factorization.getUserFeatures(itemID);
              double regularization = vectorDot( itemVector, itemVector);
              sum += regularization;
            }

            double rmse = Math.Sqrt(avg.GetAverage());
            double loss = avg.GetAverage() / 2 + lambda / 2 * sum;
            logger.Info("RMSE: " + rmse + ";\tLoss: " + loss + ";\tTime Used: " + duration + "ms");
            Assert.True(rmse < 0.2);
        }
Exemple #9
0
        public void testFactorizerWithWithSyntheticData()
        {
            setUpSyntheticData();

            var stopWatch = new System.Diagnostics.Stopwatch();

            stopWatch.Start();

            factorizer = new ParallelSGDFactorizer(dataModel, rank, lambda, numIterations, 0.01, 1, 0, 0);

            Factorization factorization = factorizer.Factorize();

            stopWatch.Stop();
            long duration = stopWatch.ElapsedMilliseconds;

            /// a hold out test would be better, but this is just a toy example so we only check that the
            /// factorization is close to the original matrix
            IRunningAverage    avg     = new FullRunningAverage();
            var                userIDs = dataModel.GetUserIDs();
            IEnumerator <long> itemIDs;

            while (userIDs.MoveNext())
            {
                long userID = userIDs.Current;
                foreach (IPreference pref in dataModel.GetPreferencesFromUser(userID))
                {
                    double rating     = pref.GetValue();
                    var    userVector = factorization.getUserFeatures(userID);
                    var    itemVector = factorization.getItemFeatures(pref.GetItemID());
                    double estimate   = vectorDot(userVector, itemVector);
                    double err        = rating - estimate;

                    avg.AddDatum(err * err);
                }
            }

            double sum = 0.0;

            userIDs = dataModel.GetUserIDs();
            while (userIDs.MoveNext())
            {
                long   userID         = userIDs.Current;
                var    userVector     = factorization.getUserFeatures(userID);
                double regularization = vectorDot(userVector, userVector);
                sum += regularization;
            }

            itemIDs = dataModel.GetItemIDs();
            while (itemIDs.MoveNext())
            {
                long   itemID         = itemIDs.Current;
                var    itemVector     = factorization.getUserFeatures(itemID);
                double regularization = vectorDot(itemVector, itemVector);
                sum += regularization;
            }

            double rmse = Math.Sqrt(avg.GetAverage());
            double loss = avg.GetAverage() / 2 + lambda / 2 * sum;

            logger.Info("RMSE: " + rmse + ";\tLoss: " + loss + ";\tTime Used: " + duration + "ms");
            Assert.True(rmse < 0.2);
        }
Exemple #10
0
        public FactorizationControl()
        {
            InitializeComponent();

            QS.FactorizationInfo = Primes.Resources.lang.WpfControls.Factorization.Factorization.fac_result;
            QS.factors           = "";
            QS.lblInput          = "";
            QS.FreeText          = "100";
            QS.CalcFactorText    = "2";
            QS.CalcBaseText      = "13";
            QS.CalcExpText       = "2";
            QS.CalcSumText       = "7";

            BF.FactorizationInfo = Primes.Resources.lang.WpfControls.Factorization.Factorization.fac_result;
            BF.factors           = "";
            BF.lblInput          = "";
            BF.FreeText          = "100";
            BF.CalcFactorText    = "2";
            BF.CalcBaseText      = "13";
            BF.CalcExpText       = "2";
            BF.CalcSumText       = "7";

            _bruteforce              = graph;
            _bruteforce.Start       += OnFactorizationStart;
            _bruteforce.Stop        += OnFactorizationStop_BF;
            _bruteforce.FoundFactor += OnFoundFactor;
            _bruteforce.Cancel      += new VoidDelegate(_bruteforce_Cancel);

            _rho              = rhoctrl;
            _rho.Start       += OnFactorizationStart;
            _rho.Stop        += OnFactorizationStop;
            _rho.FoundFactor += OnFoundFactor;
            _rho.Cancel      += new VoidDelegate(_rho_Cancel);

            _qs              = qsctrl;
            _qs.Start       += OnFactorizationStart;
            _qs.Stop        += OnFactorizationStop_QS;
            _qs.FoundFactor += OnFoundFactor;
            _qs.Cancel      += new VoidDelegate(_qs_Cancel);

            _rho.ForceGetInteger        += new CallbackDelegateGetInteger(_rho_ForceGetValue);
            _bruteforce.ForceGetInteger += new CallbackDelegateGetInteger(_rho_ForceGetValue);

            inputnumbermanager.Execute += new ExecuteSingleDelegate(InputSingleNumberControl_Execute);
            inputnumbermanager.Cancel  += new VoidDelegate(InputSingleNumberControl_Cancel);
            inputnumbermanager.HelpActionGenerateRandomNumber = Primes.OnlineHelp.OnlineHelpActions.Factorization_Generate;
            inputnumbermanager.generateNumberControlVertFree.OnRandomNumberGenerated += new GmpBigIntegerParameterDelegate(ResetMessages);
            inputnumbermanager.KeyDown += new ExecuteSingleDelegate(inputnumbermanager_ValueChanged);

            SetInputValidators();
            m_TbFactorizationCopy             = new TextBox();
            m_TbFactorizationCopy.IsReadOnly  = true;
            m_TbFactorizationCopy.MouseLeave += new MouseEventHandler(m_TbFactorizationCopy_MouseLeave);
            m_TbFactorizationCopy.MouseMove  += new MouseEventHandler(m_TbFactorizationCopy_MouseMove);
            ContextMenu tbFactorizationCopyContextMenu     = new ContextMenu();
            MenuItem    tbFactorizationCopyContextMenuCopy = new MenuItem();

            tbFactorizationCopyContextMenuCopy.Click += new RoutedEventHandler(tbFactorizationCopyContextMenuCopy_Click);
            tbFactorizationCopyContextMenuCopy.Header = Primes.Resources.lang.WpfControls.Factorization.Factorization.qs_copytoclipboard;
            tbFactorizationCopyContextMenu.Items.Add(tbFactorizationCopyContextMenuCopy);
            m_TbFactorizationCopy.ContextMenu = tbFactorizationCopyContextMenu;

            UpdateMessages();
        }