[mlpack-git] master, mlpack-1.0.x: Patch from Siddharth for #342. (4e84e9f)
gitdub at big.cc.gt.atl.ga.us
gitdub at big.cc.gt.atl.ga.us
Thu Mar 5 21:45:56 EST 2015
Repository : https://github.com/mlpack/mlpack
On branches: master,mlpack-1.0.x
Link : https://github.com/mlpack/mlpack/compare/904762495c039e345beba14c1142fd719b3bd50e...f94823c800ad6f7266995c700b1b630d5ffdcf40
>---------------------------------------------------------------
commit 4e84e9f347c8032c3c05f9b05d3743dba867ee75
Author: Ryan Curtin <ryan at ratml.org>
Date: Mon Apr 7 15:19:24 2014 +0000
Patch from Siddharth for #342.
>---------------------------------------------------------------
4e84e9f347c8032c3c05f9b05d3743dba867ee75
src/mlpack/methods/cf/cf.hpp | 66 +++++++--------------------------------
src/mlpack/methods/cf/cf_impl.hpp | 49 +++++------------------------
src/mlpack/methods/cf/cf_main.cpp | 5 ++-
src/mlpack/tests/cf_test.cpp | 16 +++-------
4 files changed, 25 insertions(+), 111 deletions(-)
diff --git a/src/mlpack/methods/cf/cf.hpp b/src/mlpack/methods/cf/cf.hpp
index 38d1550..0283091 100644
--- a/src/mlpack/methods/cf/cf.hpp
+++ b/src/mlpack/methods/cf/cf.hpp
@@ -38,14 +38,11 @@ namespace cf /** Collaborative filtering. */{
*
* 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 @@ class CF
* 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 @@ class CF
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 @@ class CF
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.
diff --git a/src/mlpack/methods/cf/cf_impl.hpp b/src/mlpack/methods/cf/cf_impl.hpp
index 89d6c37..5c29ab9 100644
--- a/src/mlpack/methods/cf/cf_impl.hpp
+++ b/src/mlpack/methods/cf/cf_impl.hpp
@@ -24,23 +24,12 @@ namespace cf {
*/
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 @@ CF<FactorizerType>::CF(arma::mat& data,
this->numUsersForSimilarity = 5;
}
- //Set default factorizer
+ // Set default factorizer.
FactorizerType f(10000, 1e-5);
Factorizer(f);
@@ -58,7 +47,8 @@ CF<FactorizerType>::CF(arma::mat& data,
}
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 @@ void CF<FactorizerType>::GetRecommendations(arma::Mat<size_t>& recommendations)
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 @@ void CF<FactorizerType>::GetRecommendations(arma::Mat<size_t>& recommendations,
}
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
diff --git a/src/mlpack/methods/cf/cf_main.cpp b/src/mlpack/methods/cf/cf_main.cpp
index 4c001cf..7914573 100644
--- a/src/mlpack/methods/cf/cf_main.cpp
+++ b/src/mlpack/methods/cf/cf_main.cpp
@@ -71,7 +71,6 @@ int main(int argc, char** argv)
// 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 @@ int main(int argc, char** argv)
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");
diff --git a/src/mlpack/tests/cf_test.cpp b/src/mlpack/tests/cf_test.cpp
index b9cfcd5..5744721 100644
--- a/src/mlpack/tests/cf_test.cpp
+++ b/src/mlpack/tests/cf_test.cpp
@@ -27,16 +27,12 @@ BOOST_AUTO_TEST_CASE(CFConstructorTest)
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 @@ BOOST_AUTO_TEST_CASE(CFGetRecommendationsAllUsersTest)
// 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 @@ BOOST_AUTO_TEST_CASE(CFGetRecommendationsQueriedUserTest)
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 @@ BOOST_AUTO_TEST_CASE(RecommendationAccuracyTest)
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-git
mailing list