PLearn 0.1
Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Static Protected Member Functions | Protected Attributes | Private Types | Private Member Functions
PLearn::IsomapTangentLearner Class Reference

#include <IsomapTangentLearner.h>

Inheritance diagram for PLearn::IsomapTangentLearner:
Inheritance graph
[legend]
Collaboration diagram for PLearn::IsomapTangentLearner:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 IsomapTangentLearner ()
 Default constructor.
virtual void build ()
 Simply calls inherited::build() then build_().
virtual void makeDeepCopyFromShallowCopy (CopiesMap &copies)
 Transforms a shallow copy into a deep copy.
virtual string classname () const
virtual OptionListgetOptionList () const
virtual OptionMapgetOptionMap () const
virtual RemoteMethodMapgetRemoteMethodMap () const
virtual IsomapTangentLearnerdeepCopy (CopiesMap &copies) const
virtual int outputsize () const
 Returns the size of this learner's output, (which typically may depend on its inputsize(), targetsize() and set options).
virtual void forget ()
 (Re-)initializes the PLearner in its fresh state (that state may depend on the 'seed' option) And sets 'stage' back to 0 (this is the stage of a fresh learner!).
virtual void train ()
 The role of the train method is to bring the learner up to stage==nstages, updating the train_stats collector with training costs measured on-line in the process.
virtual void computeOutput (const Vec &input, Vec &output) const
 Computes the output from the input.
virtual void computeCostsFromOutputs (const Vec &input, const Vec &output, const Vec &target, Vec &costs) const
 Computes the costs from already computed output.
virtual TVec< string > getTestCostNames () const
 Returns the names of the costs computed by computeCostsFromOutpus (and thus the test method).
virtual TVec< string > getTrainCostNames () const
 Returns the names of the objective costs that the train method computes and for which it updates the VecStatsCollector train_stats.

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 PPathdeclaringFile ()

Public Attributes

int n_comp
int knn

Static Public Attributes

static StaticInitializer _static_initializer_

Static Protected Member Functions

static void declareOptions (OptionList &ol)
 Declares this class' options.

Protected Attributes

Isomap iso_learner
Mat k_xi_x_sorted

Private Types

typedef PLearner inherited

Private Member Functions

void build_ ()
 This does the actual building.

Detailed Description

Definition at line 53 of file IsomapTangentLearner.h.


Member Typedef Documentation

Reimplemented from PLearn::PLearner.

Definition at line 58 of file IsomapTangentLearner.h.


Constructor & Destructor Documentation

PLearn::IsomapTangentLearner::IsomapTangentLearner ( )

Default constructor.

Definition at line 53 of file IsomapTangentLearner.cc.

                                           : n_comp(2), knn(10)
/* ### Initialize all fields to their default value here */
{
    // ...

    // ### You may or may not want to call build_() to finish building the object
    // build_();
}

Member Function Documentation

string PLearn::IsomapTangentLearner::_classname_ ( ) [static]

Reimplemented from PLearn::PLearner.

Definition at line 62 of file IsomapTangentLearner.cc.

OptionList & PLearn::IsomapTangentLearner::_getOptionList_ ( ) [static]

Reimplemented from PLearn::PLearner.

Definition at line 62 of file IsomapTangentLearner.cc.

RemoteMethodMap & PLearn::IsomapTangentLearner::_getRemoteMethodMap_ ( ) [static]

Reimplemented from PLearn::PLearner.

Definition at line 62 of file IsomapTangentLearner.cc.

bool PLearn::IsomapTangentLearner::_isa_ ( const Object o) [static]

Reimplemented from PLearn::PLearner.

Definition at line 62 of file IsomapTangentLearner.cc.

Object * PLearn::IsomapTangentLearner::_new_instance_for_typemap_ ( ) [static]

Reimplemented from PLearn::Object.

Definition at line 62 of file IsomapTangentLearner.cc.

StaticInitializer IsomapTangentLearner::_static_initializer_ & PLearn::IsomapTangentLearner::_static_initialize_ ( ) [static]

Reimplemented from PLearn::PLearner.

Definition at line 62 of file IsomapTangentLearner.cc.

void PLearn::IsomapTangentLearner::build ( ) [virtual]

Simply calls inherited::build() then build_().

Reimplemented from PLearn::PLearner.

Definition at line 111 of file IsomapTangentLearner.cc.

References PLearn::PLearner::build(), and build_().

Here is the call graph for this function:

void PLearn::IsomapTangentLearner::build_ ( ) [private]

This does the actual building.

Reimplemented from PLearn::PLearner.

Definition at line 84 of file IsomapTangentLearner.cc.

References PLearn::Isomap::build(), iso_learner, knn, PLearn::Isomap::knn, n_comp, PLearn::KernelProjection::n_comp, PLearn::KernelProjection::setTrainingSet(), and PLearn::PLearner::train_set.

Referenced by build().

{
    // ### This method should do the real building of the object,
    // ### according to set 'options', in *any* situation. 
    // ### Typical situations include:
    // ###  - Initial building of an object from a few user-specified options
    // ###  - Building of a "reloaded" object: i.e. from the complete set of all serialised options.
    // ###  - Updating or "re-building" of an object after a few "tuning" options have been modified.
    // ### You should assume that the parent class' build_() has already been called.
   
    iso_learner.knn = knn;
    iso_learner.n_comp = n_comp;
    if (train_set)
        iso_learner.setTrainingSet(train_set);
    iso_learner.build();

// peut etre qu'il faut un VectatsCollector

//       PP<VecStatsCollector> train_stats = new VecStatsCollector();
//     learner->setTrainStatsCollector(train_stats);
//     learner->setTrainingSet(trainset);
//     learner->train();

      
}

Here is the call graph for this function:

Here is the caller graph for this function:

string PLearn::IsomapTangentLearner::classname ( ) const [virtual]

Reimplemented from PLearn::Object.

Definition at line 62 of file IsomapTangentLearner.cc.

void PLearn::IsomapTangentLearner::computeCostsFromOutputs ( const Vec input,
const Vec output,
const Vec target,
Vec costs 
) const [virtual]

Computes the costs from already computed output.

Implements PLearn::PLearner.

Definition at line 271 of file IsomapTangentLearner.cc.

{
// Compute the costs from *already* computed output. 
// ...
}                                
void PLearn::IsomapTangentLearner::computeOutput ( const Vec input,
Vec output 
) const [virtual]

Computes the output from the input.

Reimplemented from PLearn::PLearner.

Definition at line 162 of file IsomapTangentLearner.cc.

References PLearn::KernelProjection::eigenvectors, i, PLearn::PLearner::inputsize(), iso_learner, j, k_xi_x_sorted, PLearn::KernelProjection::kernel, knn, PLearn::VMat::length(), PLearn::TMat< T >::length(), n_comp, PLearn::PLearner::n_examples, PLearn::norm(), PLearn::TMat< T >::subMatRows(), and PLearn::TMat< T >::toVec().

{
    // Compute the output from the input.
    // int nout = outputsize();
    // output.resize(nout);
    // ...
  
    // ici je recupere le GeodesicDistanceKernel
    PP<AdditiveNormalizationKernel> ank = dynamic_cast<AdditiveNormalizationKernel*>((Kernel*)iso_learner.kernel);  
    PP<GeodesicDistanceKernel> gdk = dynamic_cast<GeodesicDistanceKernel*>((Kernel*)ank->source_kernel);

//   output.resize(outputsize());
  
    Mat k_xi_x;
    //cout<<input<<endl;
    // on fait un knn+1 au cas ou on elve la premiere ligne un peu plus loin
    gdk->distance_kernel->computeNearestNeighbors(input, k_xi_x, knn+1);

    Mat k_xi_x_sorted;
  
    // we assume that the trainingset contains each exemple only one time
    // here we manage the case of computing tangent plane on a point of the training set
    if (k_xi_x(0,0) < 1e-9)
        k_xi_x_sorted = k_xi_x.subMatRows(1,k_xi_x.length() - 1);
    else
        k_xi_x_sorted = k_xi_x;
    //cout<<k_xi_x.subMatRows(1,knn);
    Mat result(n_comp,inputsize());
  
    Vec dkdx(inputsize()); //dk/dx
    Vec temp(inputsize());
    Vec term2(inputsize());
    Vec term1(inputsize());
  
//   Vec tangentVector(inputsize()); // = sum_i v_ik*dk(i)/dx
  
    int ngn;
    VMat trainset = ank->specify_dataset;
    int n_examples = trainset->length();
    Mat diK_dx(n_examples,inputsize());
  
    int i,j,nc;
    real D;

    term1<<0;  
    // real seuil = 1e-9;
    for(j=0;j<n_examples;++j)
    {
        ngn = gdk->computeNearestGeodesicNeighbour(j, k_xi_x_sorted);// ngn minimise la distance geodesique entre input et j
        trainset->getRow(ngn,temp);
        temp << (input-temp);
        D =  norm(temp) + gdk->geo_distances->get(j,ngn);
        //      cout<<D<<endl;
        // probleme resolu: il faut appeler gdk->distance_kernel->compute...
//       cout<<" "<<D*D<<" "<<gdk->evaluate_i_x_from_distances(j,k_xi_x_sorted) <<endl;
        //if (norm(temp) > seuil)
        term1 += D*(temp)/norm(temp);
    }
    term1/=n_examples;

    for(i=0;i<n_examples;++i)
    {

        // get the nearest neighbor
        ngn = gdk->computeNearestGeodesicNeighbour(i, k_xi_x_sorted); // ngn minimise la distance geodesique entre input et i
      
        trainset->getRow(ngn,temp);
        //cout<<i<<"="<<ngn<<"-"<<int(k_xi_x_sorted(ngn,1))<<" ";
        temp << (input-temp); // temp = x-xN
        //       cout<<gdk->evaluate_i_x(i,input,k_xi_x_sorted);
        //       cout<<norm(temp)<<endl;
        term2<<0;
        D =  norm(temp) + gdk->geo_distances->get(i,ngn);
        //if (norm(temp) > seuil) 
        term2 = D*(temp)/norm(temp);
//       else
//         term2.fill(0);
      

        //cout<<term2<<endl;
        //cout<<sum;
        diK_dx(i) << (term1 - term2); // exactement la formule de NIPS
        //cout<<diK_dx(i);
    }
  
    for(nc=0;nc<n_comp;++nc)
    {
        // compute the corresponding vector with the Nystrom formula
        // d ek / dx = 1/n sum_i dK/dX
    
        // initialisation
        temp<<(0);
        for(i=0;i<n_examples;++i)
        {
            temp += (iso_learner.eigenvectors(nc,i) * diK_dx(i));
        }
        // on ne normalise pas car c'est la direction vecteur qui nous interesse et pas sa norme
        // en plus on normalise tout a 1 dans matlab pour eviter les erreurs numériques.
//     result(nc)<<(temp/iso_learner.eigenvalues[nc]);
        result(nc)<<(temp);
    }    
    //cout<<result; 
    // toVec: a mettre dans l'aide
    output << result.toVec();
  
}

Here is the call graph for this function:

void PLearn::IsomapTangentLearner::declareOptions ( OptionList ol) [static, protected]

Declares this class' options.

Reimplemented from PLearn::PLearner.

Definition at line 64 of file IsomapTangentLearner.cc.

References PLearn::OptionBase::buildoption, PLearn::declareOption(), PLearn::PLearner::declareOptions(), iso_learner, knn, PLearn::OptionBase::learntoption, and n_comp.

{
    // ### Declare all of this object's options here
    // ### For the "flags" of each option, you should typically specify  
    // ### one of OptionBase::buildoption, OptionBase::learntoption or 
    // ### OptionBase::tuningoption. Another possible flag to be combined with
    // ### is OptionBase::nosave
  
  
    declareOption(ol, "knn", &IsomapTangentLearner::knn, OptionBase::buildoption,
                  "Number of nearest neighbor taken into account");
    declareOption(ol, "n_comp", &IsomapTangentLearner::n_comp, OptionBase::buildoption,
                  "Number of Components");
    declareOption(ol, "iso_learner", &IsomapTangentLearner::iso_learner, OptionBase::learntoption,
                  "The Isomap Learner");
  
    // Now call the parent class' declareOptions
    inherited::declareOptions(ol);
}

Here is the call graph for this function:

static const PPath& PLearn::IsomapTangentLearner::declaringFile ( ) [inline, static]

Reimplemented from PLearn::PLearner.

Definition at line 124 of file IsomapTangentLearner.h.

IsomapTangentLearner * PLearn::IsomapTangentLearner::deepCopy ( CopiesMap copies) const [virtual]

Reimplemented from PLearn::PLearner.

Definition at line 62 of file IsomapTangentLearner.cc.

void PLearn::IsomapTangentLearner::forget ( ) [virtual]

(Re-)initializes the PLearner in its fresh state (that state may depend on the 'seed' option) And sets 'stage' back to 0 (this is the stage of a fresh learner!).

(Re-)initialize the PLearner in its fresh state (that state may depend on the 'seed' option) And sets 'stage' back to 0 (this is the stage of a fresh learner!)

A typical forget() method should do the following:

  • initialize a random number generator with the seed option
  • initialize the learner's parameters, using this random generator
  • stage = 0

Reimplemented from PLearn::PLearner.

Definition at line 140 of file IsomapTangentLearner.cc.

{

}
OptionList & PLearn::IsomapTangentLearner::getOptionList ( ) const [virtual]

Reimplemented from PLearn::Object.

Definition at line 62 of file IsomapTangentLearner.cc.

OptionMap & PLearn::IsomapTangentLearner::getOptionMap ( ) const [virtual]

Reimplemented from PLearn::Object.

Definition at line 62 of file IsomapTangentLearner.cc.

RemoteMethodMap & PLearn::IsomapTangentLearner::getRemoteMethodMap ( ) const [virtual]

Reimplemented from PLearn::Object.

Definition at line 62 of file IsomapTangentLearner.cc.

TVec< string > PLearn::IsomapTangentLearner::getTestCostNames ( ) const [virtual]

Returns the names of the costs computed by computeCostsFromOutpus (and thus the test method).

Implements PLearn::PLearner.

Definition at line 278 of file IsomapTangentLearner.cc.

{
    // Return the names of the costs computed by computeCostsFromOutpus
    // (these may or may not be exactly the same as what's returned by getTrainCostNames).
    // ...
    return TVec<string>();
}
TVec< string > PLearn::IsomapTangentLearner::getTrainCostNames ( ) const [virtual]

Returns the names of the objective costs that the train method computes and for which it updates the VecStatsCollector train_stats.

Implements PLearn::PLearner.

Definition at line 286 of file IsomapTangentLearner.cc.

{
    // Return the names of the objective costs that the train method computes and 
    // for which it updates the VecStatsCollector train_stats
    // (these may or may not be exactly the same as what's returned by getTestCostNames).
    // ...
    return TVec<string>();
}
void PLearn::IsomapTangentLearner::makeDeepCopyFromShallowCopy ( CopiesMap copies) [virtual]

Transforms a shallow copy into a deep copy.

Reimplemented from PLearn::PLearner.

Definition at line 118 of file IsomapTangentLearner.cc.

References PLearn::PLearner::makeDeepCopyFromShallowCopy(), and PLERROR.

{
    inherited::makeDeepCopyFromShallowCopy(copies);

    // ### Call deepCopyField on all "pointer-like" fields 
    // ### that you wish to be deepCopied rather than 
    // ### shallow-copied.
    // ### ex:
    // deepCopyField(trainvec, copies);

    // ### Remove this line when you have fully implemented this method.
    PLERROR("IsomapTangentLearner::makeDeepCopyFromShallowCopy not fully (correctly) implemented yet!");
}

Here is the call graph for this function:

int PLearn::IsomapTangentLearner::outputsize ( ) const [virtual]

Returns the size of this learner's output, (which typically may depend on its inputsize(), targetsize() and set options).

Implements PLearn::PLearner.

Definition at line 133 of file IsomapTangentLearner.cc.

References PLearn::PLearner::inputsize(), and n_comp.

{
    // Compute and return the size of this learner's output (which typically
    // may depend on its inputsize(), targetsize() and set options).
    return inputsize()*n_comp;
}

Here is the call graph for this function:

void PLearn::IsomapTangentLearner::train ( ) [virtual]

The role of the train method is to bring the learner up to stage==nstages, updating the train_stats collector with training costs measured on-line in the process.

Implements PLearn::PLearner.

Definition at line 152 of file IsomapTangentLearner.cc.

References iso_learner, and PLearn::KernelProjection::train().

{
    // The role of the train method is to bring the learner up to stage==nstages,
    // updating train_stats with training costs measured on-line in the process.

    iso_learner.train();
    
}

Here is the call graph for this function:


Member Data Documentation

Reimplemented from PLearn::PLearner.

Definition at line 124 of file IsomapTangentLearner.h.

Definition at line 68 of file IsomapTangentLearner.h.

Referenced by build_(), computeOutput(), declareOptions(), and train().

Definition at line 69 of file IsomapTangentLearner.h.

Referenced by computeOutput().

Definition at line 74 of file IsomapTangentLearner.h.

Referenced by build_(), computeOutput(), and declareOptions().

Definition at line 73 of file IsomapTangentLearner.h.

Referenced by build_(), computeOutput(), declareOptions(), and outputsize().


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines