[mlpack-git] master: Use Row instead of Col for labels. (fb3a4ad)

gitdub at big.cc.gt.atl.ga.us gitdub at big.cc.gt.atl.ga.us
Fri Dec 11 12:46:56 EST 2015


Repository : https://github.com/mlpack/mlpack

On branch  : master
Link       : https://github.com/mlpack/mlpack/compare/dd7c8b93fe5f299cb534cda70c1c786456f9a78f...3b926fd86ab143eb8af7327b9fb89fead7538df0

>---------------------------------------------------------------

commit fb3a4ad71602d17e927bd54e5ef0848b2549b05c
Author: Ryan Curtin <ryan at ratml.org>
Date:   Fri Dec 11 02:51:37 2015 +0000

    Use Row instead of Col for labels.


>---------------------------------------------------------------

fb3a4ad71602d17e927bd54e5ef0848b2549b05c
 .../methods/decision_stump/decision_stump_main.cpp | 13 +++++------
 src/mlpack/methods/naive_bayes/nbc_main.cpp        | 26 ++++++++++------------
 src/mlpack/methods/nca/nca_main.cpp                | 12 +++++-----
 src/mlpack/methods/perceptron/perceptron_main.cpp  | 16 ++++++-------
 src/mlpack/tests/load_save_test.cpp                | 12 +++++-----
 5 files changed, 38 insertions(+), 41 deletions(-)

diff --git a/src/mlpack/methods/decision_stump/decision_stump_main.cpp b/src/mlpack/methods/decision_stump/decision_stump_main.cpp
index c01394d..6b2c7f1 100644
--- a/src/mlpack/methods/decision_stump/decision_stump_main.cpp
+++ b/src/mlpack/methods/decision_stump/decision_stump_main.cpp
@@ -147,14 +147,14 @@ int main(int argc, char *argv[])
     }
 
     // Normalize the labels.
-    Col<size_t> labels;
-    data::NormalizeLabels(labelsIn.unsafe_col(0), labels, model.mappings);
+    Row<size_t> labels;
+    data::NormalizeLabels(labelsIn.row(0), labels, model.mappings);
 
     const size_t bucketSize = CLI::GetParam<int>("bucket_size");
     const size_t classes = labels.max() + 1;
 
     Timer::Start("training");
-    model.stump.Train(trainingData, labels.t(), classes, bucketSize);
+    model.stump.Train(trainingData, labels, classes, bucketSize);
     Timer::Stop("training");
   }
   else
@@ -184,13 +184,12 @@ int main(int argc, char *argv[])
     // Denormalize predicted labels, if we want to save them.
     if (CLI::HasParam("predictions_file"))
     {
-      Col<size_t> labelsTmp = predictedLabels.t();
-      Col<size_t> actualLabels;
-      data::RevertLabels(labelsTmp, model.mappings, actualLabels);
+      Row<size_t> actualLabels;
+      data::RevertLabels(predictedLabels, model.mappings, actualLabels);
 
       // Save the predicted labels in a transposed form as output.
       const string predictionsFile = CLI::GetParam<string>("predictions_file");
-      data::Save(predictionsFile, actualLabels, true, false);
+      data::Save(predictionsFile, actualLabels, true);
     }
   }
 
diff --git a/src/mlpack/methods/naive_bayes/nbc_main.cpp b/src/mlpack/methods/naive_bayes/nbc_main.cpp
index eac078f..c87b94a 100644
--- a/src/mlpack/methods/naive_bayes/nbc_main.cpp
+++ b/src/mlpack/methods/naive_bayes/nbc_main.cpp
@@ -29,8 +29,8 @@ PARAM_STRING_REQ("test_file", "A file containing the test set.", "T");
 
 PARAM_STRING("labels_file", "A file containing labels for the training set.",
     "l", "");
-PARAM_STRING("output", "The file in which the predicted labels for the test set"
-    " will be written.", "o", "output.csv");
+PARAM_STRING("output_file", "The file in which the predicted labels for the "
+    "test set will be written.", "o", "output.csv");
 PARAM_FLAG("incremental_variance", "The variance of each class will be "
     "calculated incrementally.", "I");
 
@@ -49,8 +49,7 @@ int main(int argc, char* argv[])
   data::Load(trainingDataFilename, trainingData, true);
 
   // Normalize labels.
-  Col<size_t> labels;
-  Row<size_t> labelst;
+  Row<size_t> labels;
   vec mappings;
 
   // Did the user pass in labels?
@@ -62,22 +61,21 @@ int main(int argc, char* argv[])
     data::Load(labelsFilename, rawLabels, true, false);
 
     // Do the labels need to be transposed?
-    if (rawLabels.n_rows == 1)
+    if (rawLabels.n_cols == 1)
       rawLabels = rawLabels.t();
 
-    data::NormalizeLabels(rawLabels.unsafe_col(0), labels, mappings);
+    data::NormalizeLabels(rawLabels.row(0), labels, mappings);
   }
   else
   {
     // Use the last row of the training data as the labels.
     Log::Info << "Using last dimension of training data as training labels."
-        << std::endl;
-    vec rawLabels = trans(trainingData.row(trainingData.n_rows - 1));
-    data::NormalizeLabels(rawLabels, labels, mappings);
+        << endl;
+    data::NormalizeLabels(trainingData.row(trainingData.n_rows - 1), labels,
+        mappings);
     // Remove the label row.
     trainingData.shed_row(trainingData.n_rows - 1);
   }
-  labelst = labels.t();
 
   const string testingDataFilename = CLI::GetParam<std::string>("test_file");
   mat testingData;
@@ -92,7 +90,7 @@ int main(int argc, char* argv[])
 
   // Create and train the classifier.
   Timer::Start("training");
-  NaiveBayesClassifier<> nbc(trainingData, labelst, mappings.n_elem,
+  NaiveBayesClassifier<> nbc(trainingData, labels, mappings.n_elem,
       incrementalVariance);
   Timer::Stop("training");
 
@@ -103,10 +101,10 @@ int main(int argc, char* argv[])
   Timer::Stop("testing");
 
   // Un-normalize labels to prepare output.
-  vec rawResults;
-  data::RevertLabels(results.t(), mappings, rawResults);
+  rowvec rawResults;
+  data::RevertLabels(results, mappings, rawResults);
 
   // Output results.  Transpose: one result per line.
-  const string outputFilename = CLI::GetParam<string>("output");
+  const string outputFilename = CLI::GetParam<string>("output_file");
   data::Save(outputFilename, rawResults, true, false);
 }
diff --git a/src/mlpack/methods/nca/nca_main.cpp b/src/mlpack/methods/nca/nca_main.cpp
index 2ab976c..db6fe3c 100644
--- a/src/mlpack/methods/nca/nca_main.cpp
+++ b/src/mlpack/methods/nca/nca_main.cpp
@@ -180,10 +180,10 @@ int main(int argc, char* argv[])
   {
     data::Load(labelsFile, rawLabels, true);
 
-    if (rawLabels.n_rows == 1)
+    if (rawLabels.n_cols == 1)
       rawLabels = trans(rawLabels);
 
-    if (rawLabels.n_cols > 1)
+    if (rawLabels.n_rows > 1)
       Log::Fatal << "Labels must have only one column or row!" << endl;
   }
   else
@@ -196,8 +196,8 @@ int main(int argc, char* argv[])
 
   // Now, normalize the labels.
   arma::uvec mappings;
-  arma::Col<size_t> labels;
-  data::NormalizeLabels(rawLabels.unsafe_col(0), labels, mappings);
+  arma::Row<size_t> labels;
+  data::NormalizeLabels(rawLabels.row(0), labels, mappings);
 
   arma::mat distance;
 
@@ -222,7 +222,7 @@ int main(int argc, char* argv[])
   // Now create the NCA object and run the optimization.
   if (optimizerType == "sgd")
   {
-    NCA<LMetric<2> > nca(data, labels);
+    NCA<LMetric<2> > nca(data, labels.t());
     nca.Optimizer().StepSize() = stepSize;
     nca.Optimizer().MaxIterations() = maxIterations;
     nca.Optimizer().Tolerance() = tolerance;
@@ -232,7 +232,7 @@ int main(int argc, char* argv[])
   }
   else if (optimizerType == "lbfgs")
   {
-    NCA<LMetric<2>, L_BFGS> nca(data, labels);
+    NCA<LMetric<2>, L_BFGS> nca(data, labels.t());
     nca.Optimizer().NumBasis() = numBasis;
     nca.Optimizer().MaxIterations() = maxIterations;
     nca.Optimizer().ArmijoConstant() = armijoConstant;
diff --git a/src/mlpack/methods/perceptron/perceptron_main.cpp b/src/mlpack/methods/perceptron/perceptron_main.cpp
index f22d077..8282c5b 100644
--- a/src/mlpack/methods/perceptron/perceptron_main.cpp
+++ b/src/mlpack/methods/perceptron/perceptron_main.cpp
@@ -170,12 +170,12 @@ int main(int argc, char** argv)
     }
 
     // Do the labels need to be transposed?
-    if (labelsIn.n_rows == 1)
+    if (labelsIn.n_cols == 1)
       labelsIn = labelsIn.t();
 
     // Normalize the labels.
-    Col<size_t> labels;
-    data::NormalizeLabels(labelsIn.unsafe_col(0), labels, mappings);
+    Row<size_t> labels;
+    data::NormalizeLabels(labelsIn.row(0), labels, mappings);
 
     // Now, if we haven't already created a perceptron, do it.  Otherwise, make
     // sure the dimensions are right, then continue training.
@@ -183,7 +183,7 @@ int main(int argc, char** argv)
     {
       // Create and train the classifier.
       Timer::Start("training");
-      p = new Perceptron<>(trainingData, labels.t(), max(labels) + 1,
+      p = new Perceptron<>(trainingData, labels, max(labels) + 1,
           maxIterations);
       Timer::Stop("training");
     }
@@ -235,11 +235,11 @@ int main(int argc, char** argv)
     Timer::Stop("testing");
 
     // Un-normalize labels to prepare output.
-    vec results;
-    data::RevertLabels(predictedLabels.t(), mappings, results);
+    rowvec results;
+    data::RevertLabels(predictedLabels, mappings, results);
 
-    // Save the predictedLabels, but we have to transpose them.
-    data::Save(outputFile, results, false /* non-fatal */, false);
+    // Save the predicted labels.
+    data::Save(outputFile, results, false /* non-fatal */);
   }
 
   // Lastly, do we need to save the output model?
diff --git a/src/mlpack/tests/load_save_test.cpp b/src/mlpack/tests/load_save_test.cpp
index 646cdd1..407fd40 100644
--- a/src/mlpack/tests/load_save_test.cpp
+++ b/src/mlpack/tests/load_save_test.cpp
@@ -655,8 +655,8 @@ BOOST_AUTO_TEST_CASE(NoHDF5Test)
  */
 BOOST_AUTO_TEST_CASE(NormalizeLabelSmallDatasetTest)
 {
-  arma::ivec labels("-1 1 1 -1 -1 -1 1 1");
-  arma::Col<size_t> newLabels;
+  arma::irowvec labels("-1 1 1 -1 -1 -1 1 1");
+  arma::Row<size_t> newLabels;
   arma::ivec mappings;
 
   data::NormalizeLabels(labels, newLabels, mappings);
@@ -673,7 +673,7 @@ BOOST_AUTO_TEST_CASE(NormalizeLabelSmallDatasetTest)
   BOOST_REQUIRE_EQUAL(newLabels[6], 1);
   BOOST_REQUIRE_EQUAL(newLabels[7], 1);
 
-  arma::ivec revertedLabels;
+  arma::irowvec revertedLabels;
 
   data::RevertLabels(newLabels, mappings, revertedLabels);
 
@@ -686,18 +686,18 @@ BOOST_AUTO_TEST_CASE(NormalizeLabelSmallDatasetTest)
  */
 BOOST_AUTO_TEST_CASE(NormalizeLabelTest)
 {
-  arma::vec randLabels(5000);
+  arma::rowvec randLabels(5000);
   for (size_t i = 0; i < 5000; ++i)
     randLabels[i] = math::RandInt(-50, 50);
   randLabels[0] = 0.65; // Hey, doubles work too!
 
-  arma::Col<size_t> newLabels;
+  arma::Row<size_t> newLabels;
   arma::vec mappings;
 
   data::NormalizeLabels(randLabels, newLabels, mappings);
 
   // Now map them back and ensure they are right.
-  arma::vec revertedLabels(5000);
+  arma::rowvec revertedLabels(5000);
   data::RevertLabels(newLabels, mappings, revertedLabels);
 
   for (size_t i = 0; i < 5000; ++i)



More information about the mlpack-git mailing list