[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