[mlpack-svn] r16403 - in mlpack/trunk/src/mlpack: methods/cf tests

fastlab-svn at coffeetalk-1.cc.gatech.edu fastlab-svn at coffeetalk-1.cc.gatech.edu
Mon Apr 7 11:19:24 EDT 2014


Author: rcurtin
Date: Mon Apr  7 11:19:24 2014
New Revision: 16403

Log:
Patch from Siddharth for #342.


Modified:
   mlpack/trunk/src/mlpack/methods/cf/cf.hpp
   mlpack/trunk/src/mlpack/methods/cf/cf_impl.hpp
   mlpack/trunk/src/mlpack/methods/cf/cf_main.cpp
   mlpack/trunk/src/mlpack/tests/cf_test.cpp

Modified: mlpack/trunk/src/mlpack/methods/cf/cf.hpp
==============================================================================
--- mlpack/trunk/src/mlpack/methods/cf/cf.hpp	(original)
+++ mlpack/trunk/src/mlpack/methods/cf/cf.hpp	Mon Apr  7 11:19:24 2014
@@ -38,14 +38,11 @@
  *
  * CF<> cf(data); // Default options.
  *
- * // Generate the default number of recommendations for all users.
- * cf.GetRecommendations(recommendations);
- *
- * // Generate the default number of recommendations for specified users.
- * cf.GetRecommendations(recommendations, users);
+ * // Generate 10 recommendations for all users.
+ * cf.GetRecommendations(recommendations, numRecommendations);
  *
  * // Generate 10 recommendations for specified users.
- * cf.GetRecommendations(recommendations, users, numRecommendations);
+ * cf.GetRecommendations(recommendations, numRecommendations, users);
  *
  * @endcode
  *
@@ -74,33 +71,13 @@
    * a simple density-based heuristic will be used to choose a rank.
    *
    * @param data Initial (user, item, rating) matrix.
-   * @param numRecs Desired number of recommendations for each user.
    * @param numUsersForSimilarity Size of the neighborhood.
    * @param rank Rank parameter for matrix factorization.
    */
   CF(arma::mat& data,
-     const size_t numRecs = 5,
      const size_t numUsersForSimilarity = 5,
      const size_t rank = 0);
 
-  //! Sets number of Recommendations.
-  void NumRecs(const size_t recs)
-  {
-    if (recs < 1)
-    {
-      Log::Warn << "CF::NumRecs(): invalid value (< 1) "
-          "ignored." << std::endl;
-      return;
-    }
-    this->numRecs = recs;
-  }
-
-  //! Gets the number of recommendations.
-  size_t NumRecs() const
-  {
-    return numRecs;
-  }
-
   //! Sets number of users for calculating similarity.
   void NumUsersForSimilarity(const size_t num)
   {
@@ -149,45 +126,26 @@
   const arma::sp_mat& CleanedData() const { return cleanedData; }
 
   /**
-   * Generates default number of recommendations for all users.
+   * Generates the given number of recommendations for all users.
    *
+   * @param numRecs Number of Recommendations
    * @param recommendations Matrix to save recommendations into.
    */
-  void GetRecommendations(arma::Mat<size_t>& recommendations);
+  void GetRecommendations(const size_t numRecs,
+                          arma::Mat<size_t>& recommendations);
 
   /**
-   * Generates default number of recommendations for specified users.
+   * Generates the given number of recommendations for the specified users.
    *
+   * @param numRecs Number of Recommendations
    * @param recommendations Matrix to save recommendations
    * @param users Users for which recommendations are to be generated
    */
-  void GetRecommendations(arma::Mat<size_t>& recommendations,
+  void GetRecommendations(const size_t numRecs,
+                          arma::Mat<size_t>& recommendations,
                           arma::Col<size_t>& users);
 
   /**
-   * Generates a fixed number of recommendations for specified users.
-   *
-   * @param recommendations Matrix to save recommendations
-   * @param users Users for which recommendations are to be generated
-   * @param num Number of Recommendations
-   */
-  void GetRecommendations(arma::Mat<size_t>& recommendations,
-                          arma::Col<size_t>& users, size_t num);
-
-  /**
-   * Generates a fixed number of recommendations for specified users.
-   *
-   * @param recommendations Matrix to save recommendations
-   * @param users Users for which recommendations are to be generated
-   * @param num Number of Recommendations
-   * @param neighbours Number of user to be considered while calculating
-   *        the neighbourhood
-   */
-  void GetRecommendations(arma::Mat<size_t>& recommendations,
-                          arma::Col<size_t>& users, size_t num,
-                          size_t neighbours);
-
-  /**
    * Returns a string representation of this object.
    */
   std::string ToString() const;
@@ -195,8 +153,6 @@
  private:
   //! Initial data matrix.
   arma::mat data;
-  //! Number of recommendations.
-  size_t numRecs;
   //! Number of users for similarity.
   size_t numUsersForSimilarity;
   //! Rank used for matrix factorization.

Modified: mlpack/trunk/src/mlpack/methods/cf/cf_impl.hpp
==============================================================================
--- mlpack/trunk/src/mlpack/methods/cf/cf_impl.hpp	(original)
+++ mlpack/trunk/src/mlpack/methods/cf/cf_impl.hpp	Mon Apr  7 11:19:24 2014
@@ -24,23 +24,12 @@
  */
 template<typename FactorizerType>
 CF<FactorizerType>::CF(arma::mat& data,
-                      const size_t numRecs,
-                      const size_t numUsersForSimilarity,
-                      const size_t rank) :
+                       const size_t numUsersForSimilarity,
+                       const size_t rank) :
     data(data),
-    numRecs(numRecs),
     numUsersForSimilarity(numUsersForSimilarity),
     rank(rank)
 {
-  // Validate number of recommendation factor.
-  if (numRecs < 1)
-  {
-    Log::Warn << "CF::CF(): number of recommendations should be > 0("
-        << numRecs << " given). Setting value to 5.\n";
-    //Setting Default Value of 5
-    this->numRecs = 5;
-  }
-
   // Validate neighbourhood size.
   if (numUsersForSimilarity < 1)
   {
@@ -50,7 +39,7 @@
     this->numUsersForSimilarity = 5;
   }
 
-  //Set default factorizer
+  // Set default factorizer.
   FactorizerType f(10000, 1e-5);
   Factorizer(f);
 
@@ -58,7 +47,8 @@
 }
 
 template<typename FactorizerType>
-void CF<FactorizerType>::GetRecommendations(arma::Mat<size_t>& recommendations)
+void CF<FactorizerType>::GetRecommendations(const size_t numRecs,
+                                            arma::Mat<size_t>& recommendations)
 {
   // Used to save user IDs.
   arma::Col<size_t> users =
@@ -68,11 +58,12 @@
     users(i) = i;
 
   // Calling base function for recommendations.
-  GetRecommendations(recommendations, users);
+  GetRecommendations(numRecs, recommendations, users);
 }
 
 template<typename FactorizerType>
-void CF<FactorizerType>::GetRecommendations(arma::Mat<size_t>& recommendations,
+void CF<FactorizerType>::GetRecommendations(const size_t numRecs,
+                                            arma::Mat<size_t>& recommendations,
                                             arma::Col<size_t>& users)
 {
   // Base function for calculating recommendations.
@@ -176,30 +167,6 @@
 }
 
 template<typename FactorizerType>
-void CF<FactorizerType>::GetRecommendations(arma::Mat<size_t>& recommendations,
-                                            arma::Col<size_t>& users,size_t num)
-{
-  //Setting Number of Recommendations
-  NumRecs(num);
-  //Calling Base Function for Recommendations
-  GetRecommendations(recommendations,users);
-}
-
-template<typename FactorizerType>
-void CF<FactorizerType>::GetRecommendations(arma::Mat<size_t>& recommendations,
-                                            arma::Col<size_t>& users,size_t num,
-                                            size_t s)
-{
-  //Setting number of users that should be used for calculating
-  //neighbours
-  NumUsersForSimilarity(s);
-  //Setting Number of Recommendations
-  NumRecs(num);
-  //Calling Base Function for Recommendations
-  GetRecommendations(recommendations,users,num);
-}
-
-template<typename FactorizerType>
 void CF<FactorizerType>::CleanData()
 {
   // Generate list of locations for batch insert constructor for sparse

Modified: mlpack/trunk/src/mlpack/methods/cf/cf_main.cpp
==============================================================================
--- mlpack/trunk/src/mlpack/methods/cf/cf_main.cpp	(original)
+++ mlpack/trunk/src/mlpack/methods/cf/cf_main.cpp	Mon Apr  7 11:19:24 2014
@@ -71,7 +71,6 @@
   // Perform decomposition to prepare for recommendations.
   Log::Info << "Performing CF matrix decomposition on dataset..." << endl;
   CF<> c(dataset);
-  c.NumRecs(numRecs);
   c.NumUsersForSimilarity(neighborhood);
 
   // Reading users.
@@ -86,12 +85,12 @@
 
     Log::Info << "Generating recommendations for " << users.n_elem << " users "
         << "in '" << queryFile << "'." << endl;
-    c.GetRecommendations(recommendations, users);
+    c.GetRecommendations(numRecs, recommendations, users);
   }
   else
   {
     Log::Info << "Generating recommendations for all users." << endl;
-    c.GetRecommendations(recommendations);
+    c.GetRecommendations(numRecs, recommendations);
   }
 
   const string outputFile = CLI::GetParam<string>("output_file");

Modified: mlpack/trunk/src/mlpack/tests/cf_test.cpp
==============================================================================
--- mlpack/trunk/src/mlpack/tests/cf_test.cpp	(original)
+++ mlpack/trunk/src/mlpack/tests/cf_test.cpp	Mon Apr  7 11:19:24 2014
@@ -27,16 +27,12 @@
   arma::mat dataset;
   data::Load("GroupLens100k.csv", dataset);
 
-  // Number of recommendations (not the default).
-  const size_t numRecs = 15;
-
   // Number of users for similarity (not the default).
   const size_t numUsersForSimilarity = 8;
 
-  CF<> c(dataset, numRecs, numUsersForSimilarity);
+  CF<> c(dataset, numUsersForSimilarity);
 
   // Check parameters.
-  BOOST_REQUIRE_EQUAL(c.NumRecs(), numRecs);
   BOOST_REQUIRE_EQUAL(c.NumUsersForSimilarity(), numUsersForSimilarity);
 
   // Check data.
@@ -70,11 +66,8 @@
   // Creat a CF object
   CF<> c(dataset);
 
-  // Set number of recommendations.
-  c.NumRecs(numRecs);
-
   // Generate recommendations when query set is not specified.
-  c.GetRecommendations(recommendations);
+  c.GetRecommendations(numRecs, recommendations);
 
   // Check if correct number of recommendations are generated.
   BOOST_REQUIRE_EQUAL(recommendations.n_rows, numRecs);
@@ -109,7 +102,7 @@
   CF<> c(dataset);
 
   // Generate recommendations when query set is specified.
-  c.GetRecommendations(recommendations, users);
+  c.GetRecommendations(numRecsDefault, recommendations, users);
 
   // Check if correct number of recommendations are generated.
   BOOST_REQUIRE_EQUAL(recommendations.n_rows, numRecsDefault);
@@ -171,8 +164,7 @@
     users(i) = (size_t) savedCols(0, i);
   arma::Mat<size_t> recommendations;
   size_t numRecs = 150;
-  c.NumRecs(numRecs);
-  c.GetRecommendations(recommendations, users);
+  c.GetRecommendations(numRecs, recommendations, users);
 
   BOOST_REQUIRE_EQUAL(recommendations.n_rows, numRecs);
   BOOST_REQUIRE_EQUAL(recommendations.n_cols, 300);



More information about the mlpack-svn mailing list