[mlpack-git] master: Add serialization to DecisionStump. (c20bcdc)

gitdub at big.cc.gt.atl.ga.us gitdub at big.cc.gt.atl.ga.us
Mon Nov 30 17:24:19 EST 2015


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

On branch  : master
Link       : https://github.com/mlpack/mlpack/compare/10b9d45b806a3e879b0564d78ccb183ebc7051ba...31c557d9cc7e4da57fd8a246085c19e076d12271

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

commit c20bcdcd29750a4a814dc72aff13dc46304018ae
Author: Ryan Curtin <ryan at ratml.org>
Date:   Sat Nov 21 01:40:34 2015 +0000

    Add serialization to DecisionStump.


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

c20bcdcd29750a4a814dc72aff13dc46304018ae
 .../methods/decision_stump/decision_stump.hpp      | 11 +++++++
 .../methods/decision_stump/decision_stump_impl.hpp | 34 ++++++++++++++++++++++
 2 files changed, 45 insertions(+)

diff --git a/src/mlpack/methods/decision_stump/decision_stump.hpp b/src/mlpack/methods/decision_stump/decision_stump.hpp
index 10099b9..a9cc605 100644
--- a/src/mlpack/methods/decision_stump/decision_stump.hpp
+++ b/src/mlpack/methods/decision_stump/decision_stump.hpp
@@ -60,6 +60,13 @@ class DecisionStump
                 const arma::rowvec& weights);
 
   /**
+   * Create a decision stump without training.  This stump will not be useful
+   * and will always return a class of 0 for anything that is to be classified,
+   * so it would be a prudent idea to call Train() after using this constructor.
+   */
+  DecisionStump();
+
+  /**
    * Train the decision stump on the given data.  This completely overwrites any
    * previous training data, so after training the stump may be completely
    * different.
@@ -99,6 +106,10 @@ class DecisionStump
   //! Modify the labels for each split bin (be careful!).
   arma::Col<size_t>& BinLabels() { return binLabels; }
 
+  //! Serialize the decision stump.
+  template<typename Archive>
+  void Serialize(Archive& ar, const unsigned int /* version */);
+
  private:
   //! The number of classes (we must store this for boosting).
   size_t classes;
diff --git a/src/mlpack/methods/decision_stump/decision_stump_impl.hpp b/src/mlpack/methods/decision_stump/decision_stump_impl.hpp
index c052063..446ce2e 100644
--- a/src/mlpack/methods/decision_stump/decision_stump_impl.hpp
+++ b/src/mlpack/methods/decision_stump/decision_stump_impl.hpp
@@ -35,6 +35,21 @@ DecisionStump<MatType>::DecisionStump(const MatType& data,
 }
 
 /**
+ * Empty constructor.
+ */
+template<typename MatType>
+DecisionStump<MatType>::DecisionStump() :
+    classes(1),
+    bucketSize(0),
+    splitAttribute(0),
+    split(1),
+    binLabels(1)
+{
+  split[0] = DBL_MAX;
+  binLabels[0] = 0;
+}
+
+/**
  * Train on the given data and labels.
  */
 template<typename MatType>
@@ -157,6 +172,25 @@ DecisionStump<MatType>::DecisionStump(const DecisionStump<>& other,
 }
 
 /**
+ * Serialize the decision stump.
+ */
+template<typename MatType>
+template<typename Archive>
+void DecisionStump<MatType>::Serialize(Archive& ar,
+                                       const unsigned int /* version */)
+{
+  using data::CreateNVP;
+
+  // This is straightforward; just serialize all of the members of the class.
+  // None need special handling.
+  ar & CreateNVP(classes, "classes");
+  ar & CreateNVP(bucketSize, "bucketSize");
+  ar & CreateNVP(splitAttribute, "splitAttribute");
+  ar & CreateNVP(split, "split");
+  ar & CreateNVP(binLabels, "binLabels");
+}
+
+/**
  * Sets up attribute as if it were splitting on it and finds entropy when
  * splitting on attribute.
  *



More information about the mlpack-git mailing list