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); }
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); }
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(); }