[mlpack-svn] r12735 - mlpack/trunk/src/mlpack/methods/maxip

fastlab-svn at coffeetalk-1.cc.gatech.edu fastlab-svn at coffeetalk-1.cc.gatech.edu
Sun May 20 13:53:28 EDT 2012


Author: rcurtin
Date: 2012-05-20 13:53:27 -0400 (Sun, 20 May 2012)
New Revision: 12735

Modified:
   mlpack/trunk/src/mlpack/methods/maxip/max_ip_main.cpp
Log:
We can do polynomial kernels too.


Modified: mlpack/trunk/src/mlpack/methods/maxip/max_ip_main.cpp
===================================================================
--- mlpack/trunk/src/mlpack/methods/maxip/max_ip_main.cpp	2012-05-20 17:53:20 UTC (rev 12734)
+++ mlpack/trunk/src/mlpack/methods/maxip/max_ip_main.cpp	2012-05-20 17:53:27 UTC (rev 12735)
@@ -6,6 +6,7 @@
  */
 #include <mlpack/core.hpp>
 #include <mlpack/core/kernels/linear_kernel.hpp>
+#include <mlpack/core/kernels/polynomial_kernel.hpp>1
 
 #include "max_ip.hpp"
 
@@ -34,6 +35,9 @@
 PARAM_STRING("indices_file", "File to save indices of inner products into.",
     "i", "");
 
+PARAM_STRING("kernel", "Kernel type to use: 'linear', 'polynomial'.", "K",
+    "linear");
+
 PARAM_FLAG("naive", "If true, O(n^2) naive mode is used for computation.", "N");
 PARAM_FLAG("single", "If true, single-tree search is used (as opposed to "
     "dual-tree search.", "s");
@@ -50,6 +54,8 @@
   const bool naive = CLI::HasParam("naive");
   const bool single = CLI::HasParam("single");
 
+  const string kernelType = CLI::GetParam<string>("kernel");
+
   arma::mat referenceData;
   arma::mat queryData;
 
@@ -66,6 +72,13 @@
     Log::Fatal << referenceData.n_cols << ")." << endl;
   }
 
+  // Check on kernel type.
+  if ((kernelType != "linear") && (kernelType != "polynomial"))
+  {
+    Log::Fatal << "Invalid kernel type: '" << kernelType << "'; must be ";
+    Log::Fatal << "'linear' or 'polynomial'." << endl;
+  }
+
   // Load the query matrix, if we can.
   if (CLI::HasParam("query_file"))
   {
@@ -94,14 +107,32 @@
   // Construct MaxIP object.
   if (queryData.n_elem == 0)
   {
-    MaxIP<LinearKernel> maxip(referenceData, (single && !naive), naive);
-    maxip.Search(k, indices, products);
+    if (kernelType == "linear")
+    {
+      MaxIP<LinearKernel> maxip(referenceData, (single && !naive), naive);
+      maxip.Search(k, indices, products);
+    }
+    else if (kernelType == "polynomial")
+    {
+      MaxIP<PolynomialNoOffsetKernel<2> > maxip(referenceData,
+          (single && !naive), naive);
+      maxip.Search(k, indices, products);
+    }
   }
   else
   {
-    MaxIP<LinearKernel> maxip(referenceData, queryData, (single && !naive),
-        naive);
-    maxip.Search(k, indices, products);
+    if (kernelType == "linear")
+    {
+      MaxIP<LinearKernel> maxip(referenceData, queryData, (single && !naive),
+          naive);
+      maxip.Search(k, indices, products);
+    }
+    else if (kernelType == "polynomial")
+    {
+      MaxIP<PolynomialNoOffsetKernel<2> > maxip(referenceData, queryData,
+          (single && !naive), naive);
+      maxip.Search(k, indices, products);
+    }
   }
 
   // Save output, if we were asked to.




More information about the mlpack-svn mailing list