fastmks_stat.hpp

Go to the documentation of this file.
00001 
00022 #ifndef __MLPACK_METHODS_FASTMKS_FASTMKS_STAT_HPP
00023 #define __MLPACK_METHODS_FASTMKS_FASTMKS_STAT_HPP
00024 
00025 #include <mlpack/core.hpp>
00026 #include <mlpack/core/tree/tree_traits.hpp>
00027 
00028 namespace mlpack {
00029 namespace fastmks {
00030 
00035 class FastMKSStat
00036 {
00037  public:
00041   FastMKSStat() :
00042       bound(-DBL_MAX),
00043       selfKernel(0.0),
00044       lastKernel(0.0),
00045       lastKernelNode(NULL)
00046   { }
00047 
00055   template<typename TreeType>
00056   FastMKSStat(const TreeType& node) :
00057       bound(-DBL_MAX),
00058       lastKernel(0.0),
00059       lastKernelNode(NULL)
00060   {
00061     // Do we have to calculate the centroid?
00062     if (tree::TreeTraits<TreeType>::FirstPointIsCentroid)
00063     {
00064       // If this type of tree has self-children, then maybe the evaluation is
00065       // already done.  These statistics are built bottom-up, so the child stat
00066       // should already be done.
00067       if ((tree::TreeTraits<TreeType>::HasSelfChildren) &&
00068           (node.NumChildren() > 0) &&
00069           (node.Point(0) == node.Child(0).Point(0)))
00070       {
00071         selfKernel = node.Child(0).Stat().SelfKernel();
00072       }
00073       else
00074       {
00075         selfKernel = sqrt(node.Metric().Kernel().Evaluate(
00076             node.Dataset().unsafe_col(node.Point(0)),
00077             node.Dataset().unsafe_col(node.Point(0))));
00078       }
00079     }
00080     else
00081     {
00082       // Calculate the centroid.
00083       arma::vec centroid;
00084       node.Centroid(centroid);
00085 
00086       selfKernel = sqrt(node.Metric().Kernel().Evaluate(centroid, centroid));
00087     }
00088   }
00089 
00091   double SelfKernel() const { return selfKernel; }
00093   double& SelfKernel() { return selfKernel; }
00094 
00096   double Bound() const { return bound; }
00098   double& Bound() { return bound; }
00099 
00101   double LastKernel() const { return lastKernel; }
00103   double& LastKernel() { return lastKernel; }
00104 
00106   void* LastKernelNode() const { return lastKernelNode; }
00109   void*& LastKernelNode() { return lastKernelNode; }
00110 
00111  private:
00113   double bound;
00114 
00116   double selfKernel;
00117 
00119   double lastKernel;
00120 
00123   void* lastKernelNode;
00124 };
00125 
00126 }; // namespace fastmks
00127 }; // namespace mlpack
00128 
00129 #endif

Generated on 29 Sep 2016 for MLPACK by  doxygen 1.6.1