[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