PLearn 0.1
|
This class implements an Ln distance (defaults to L2 i.e. euclidean distance). More...
#include <PartsDistanceKernel.h>
Public Member Functions | |
PartsDistanceKernel () | |
virtual void | train (VMat data) |
Subclasses may override this method for kernels that can be trained on a dataset prior to being used (e.g. | |
virtual real | evaluate (const Vec &x1, const Vec &x2) const |
** Subclasses must override this method ** | |
virtual string | classname () const |
virtual OptionList & | getOptionList () const |
virtual OptionMap & | getOptionMap () const |
virtual RemoteMethodMap & | getRemoteMethodMap () const |
virtual PartsDistanceKernel * | deepCopy (CopiesMap &copies) const |
Static Public Member Functions | |
static string | _classname_ () |
static OptionList & | _getOptionList_ () |
static RemoteMethodMap & | _getRemoteMethodMap_ () |
static Object * | _new_instance_for_typemap_ () |
static bool | _isa_ (const Object *o) |
static void | _static_initialize_ () |
static const PPath & | declaringFile () |
Public Attributes | |
real | partsize |
real | n |
1 for L1, 2 for L2, etc... | |
bool | standardize |
real | min_stddev |
real | epsilon |
bool | pow_distance |
Vec | inv_stddev |
Static Public Attributes | |
static StaticInitializer | _static_initializer_ |
Static Protected Member Functions | |
static void | declareOptions (OptionList &ol) |
Declare options (data fields) for the class. | |
Protected Attributes | |
Vec | elementdist |
Private Types | |
typedef Kernel | inherited |
This class implements an Ln distance (defaults to L2 i.e. euclidean distance).
Definition at line 51 of file PartsDistanceKernel.h.
typedef Kernel PLearn::PartsDistanceKernel::inherited [private] |
Reimplemented from PLearn::Kernel.
Definition at line 56 of file PartsDistanceKernel.h.
PLearn::PartsDistanceKernel::PartsDistanceKernel | ( | ) |
Definition at line 57 of file PartsDistanceKernel.cc.
References n.
{ partsize = 0.9; n = 2; standardize = true; min_stddev = 1e-8; epsilon = 1e-8; pow_distance = false; }
string PLearn::PartsDistanceKernel::_classname_ | ( | ) | [static] |
Reimplemented from PLearn::Kernel.
Definition at line 52 of file PartsDistanceKernel.cc.
OptionList & PLearn::PartsDistanceKernel::_getOptionList_ | ( | ) | [static] |
Reimplemented from PLearn::Kernel.
Definition at line 52 of file PartsDistanceKernel.cc.
RemoteMethodMap & PLearn::PartsDistanceKernel::_getRemoteMethodMap_ | ( | ) | [static] |
Reimplemented from PLearn::Kernel.
Definition at line 52 of file PartsDistanceKernel.cc.
Reimplemented from PLearn::Kernel.
Definition at line 52 of file PartsDistanceKernel.cc.
Object * PLearn::PartsDistanceKernel::_new_instance_for_typemap_ | ( | ) | [static] |
Reimplemented from PLearn::Object.
Definition at line 52 of file PartsDistanceKernel.cc.
StaticInitializer PartsDistanceKernel::_static_initializer_ & PLearn::PartsDistanceKernel::_static_initialize_ | ( | ) | [static] |
Reimplemented from PLearn::Kernel.
Definition at line 52 of file PartsDistanceKernel.cc.
string PLearn::PartsDistanceKernel::classname | ( | ) | const [virtual] |
Reimplemented from PLearn::Object.
Definition at line 52 of file PartsDistanceKernel.cc.
void PLearn::PartsDistanceKernel::declareOptions | ( | OptionList & | ol | ) | [static, protected] |
Declare options (data fields) for the class.
Redefine this in subclasses: call declareOption
(...) for each option, and then call inherited::declareOptions(options)
. Please call the inherited
method AT THE END to get the options listed in a consistent order (from most recently defined to least recently defined).
static void MyDerivedClass::declareOptions(OptionList& ol) { declareOption(ol, "inputsize", &MyObject::inputsize_, OptionBase::buildoption, "The size of the input; it must be provided"); declareOption(ol, "weights", &MyObject::weights, OptionBase::learntoption, "The learned model weights"); inherited::declareOptions(ol); }
ol | List of options that is progressively being constructed for the current class. |
Reimplemented from PLearn::Kernel.
Definition at line 70 of file PartsDistanceKernel.cc.
References PLearn::OptionBase::buildoption, PLearn::declareOption(), epsilon, inv_stddev, PLearn::OptionBase::learntoption, min_stddev, n, partsize, pow_distance, and standardize.
{ declareOption(ol, "n", &PartsDistanceKernel::n, OptionBase::buildoption, "This class implements a Ln parts distance (L2 is the default)."); declareOption(ol, "pow_distance", &PartsDistanceKernel::pow_distance, OptionBase::buildoption, "If set to 1 (true), the distance computed will be elevated to power n."); declareOption(ol, "standardize", &PartsDistanceKernel::standardize, OptionBase::buildoption, "If set to 1 (true), the inverse standard deviation inv_stddev will be used to scale the vector differences."); declareOption(ol, "min_stddev", &PartsDistanceKernel::min_stddev, OptionBase::buildoption, "When method train computes inv_stddev, it will set it to FLT_MAX for \n" "any component for which the standard deviation is below min_stddev"); declareOption(ol, "epsilon", &PartsDistanceKernel::epsilon, OptionBase::buildoption, "This is added to the absolute value of the elementwise difference between the 2 vectors.\n" "It's especially important for this to be non-zero when standardizing."); declareOption(ol, "partsize", &PartsDistanceKernel::partsize, OptionBase::buildoption, "This determines the number of elements (the size of the part) that will be used to compute the distance.\n" "If >=1 it's interpreted as anabsolute number of elements. If it's <1 it's taken to mean a fraction of all the elements.\n"); declareOption(ol, "inv_stddev", &PartsDistanceKernel::inv_stddev, OptionBase::learntoption, "This is computed when calling method train, and will be used when evaluating distances only if standardize is true.\n" "It crresponds to the inverse of the standard deviation of inputs in the dataset passed to train. But see also min_stddev.\n"); inherited::declareOptions(ol); }
static const PPath& PLearn::PartsDistanceKernel::declaringFile | ( | ) | [inline, static] |
Reimplemented from PLearn::Kernel.
Definition at line 74 of file PartsDistanceKernel.h.
: mutable Vec elementdist;
PartsDistanceKernel * PLearn::PartsDistanceKernel::deepCopy | ( | CopiesMap & | copies | ) | const [virtual] |
Reimplemented from PLearn::Kernel.
Definition at line 52 of file PartsDistanceKernel.cc.
** Subclasses must override this method **
returns K(x1,x2)
Implements PLearn::Kernel.
Definition at line 123 of file PartsDistanceKernel.cc.
References d, PLearn::TVec< T >::data(), i, PLearn::TVec< T >::length(), PLearn::mypow(), n, PLERROR, and PLearn::sortElements().
{ int l = x1.length(); if(x2.length() != l) PLERROR("vectors x1 and x2 must have the same size"); if(standardize && l!=inv_stddev.length()) PLERROR("In PartsDistanceKernel::evaluate, size of vectors (%d) does not match size of inv_stddev (%d). Make sure you called train on the kernel with appropriate dataset",l,inv_stddev.length()); elementdist.resize(l); const real* px1 = x1.data(); const real* px2 = x2.data(); real* pelementdist = elementdist.data(); real* pinv_stddev = 0; if(standardize) pinv_stddev = inv_stddev.data(); char specialn = 0; if(n==2) specialn = 2; else if(n==1) specialn = 1; for(int i=0; i<l; i++) { real d; if(standardize && pinv_stddev[i]>=FLT_MAX ) d = FLT_MAX; else { d = fabs(px1[i]-px2[i])+epsilon; if(standardize) d *= pinv_stddev[i]; switch(specialn) { case 2: d *= d; break; case 1: break; default: d = mypow(d,n); } } pelementdist[i] = d; } int ps = (partsize>=1 ? (int)partsize :(int)(partsize*l+0.5)); if(ps<l) sortElements(elementdist); else ps = l; real res = 0; for(int i=0; i<ps; i++) { real d = elementdist[i]; if(d<FLT_MAX) res += d; } if(!pow_distance) res = mypow(res, 1/n); return res; }
OptionList & PLearn::PartsDistanceKernel::getOptionList | ( | ) | const [virtual] |
Reimplemented from PLearn::Object.
Definition at line 52 of file PartsDistanceKernel.cc.
OptionMap & PLearn::PartsDistanceKernel::getOptionMap | ( | ) | const [virtual] |
Reimplemented from PLearn::Object.
Definition at line 52 of file PartsDistanceKernel.cc.
RemoteMethodMap & PLearn::PartsDistanceKernel::getRemoteMethodMap | ( | ) | const [virtual] |
Reimplemented from PLearn::Object.
Definition at line 52 of file PartsDistanceKernel.cc.
void PLearn::PartsDistanceKernel::train | ( | VMat | data | ) | [virtual] |
Subclasses may override this method for kernels that can be trained on a dataset prior to being used (e.g.
a Mahalanobis distance which could learn the empirical covariance) Note: in general only the input and weight part of the vmat are used
Reimplemented from PLearn::Kernel.
Definition at line 100 of file PartsDistanceKernel.cc.
References PLearn::computeInputMeanAndStddev(), i, and PLearn::TVec< T >::length().
{ if(standardize) { Vec meanvec; Vec stddev; computeInputMeanAndStddev(data, meanvec, stddev, 0.0); int l = stddev.length(); inv_stddev.resize(l); for(int i=0; i<l; i++) { if(stddev[i]<min_stddev) inv_stddev[i] = FLT_MAX; else inv_stddev[i] = 1/stddev[i]; } } }
Reimplemented from PLearn::Kernel.
Definition at line 74 of file PartsDistanceKernel.h.
Vec PLearn::PartsDistanceKernel::elementdist [mutable, protected] |
Definition at line 74 of file PartsDistanceKernel.h.
Definition at line 64 of file PartsDistanceKernel.h.
Referenced by declareOptions().
Definition at line 67 of file PartsDistanceKernel.h.
Referenced by declareOptions().
Definition at line 63 of file PartsDistanceKernel.h.
Referenced by declareOptions().
1 for L1, 2 for L2, etc...
Definition at line 61 of file PartsDistanceKernel.h.
Referenced by declareOptions().
Definition at line 60 of file PartsDistanceKernel.h.
Referenced by declareOptions().
Definition at line 65 of file PartsDistanceKernel.h.
Referenced by declareOptions().
Definition at line 62 of file PartsDistanceKernel.h.
Referenced by declareOptions().