PLearn 0.1
incremental_pca.cc
Go to the documentation of this file.
00001 
00002 #include <plearn/vmat/VMat.h>
00003 #include <plearn/vmat/AutoVMatrix.h>
00004 #include <plearn_learners/unsupervised/PCA.h>
00005 
00006 using namespace PLearn;
00007 
00008 bool compare( PCA& classical, PCA& incremental,
00009               VMat data, int start, int end  )
00010 {
00011     classical.setTrainingSet  ( data.subMatRows(start, end-start), false );
00012     incremental.setTrainingSet( data.subMatRows(0, end)    , false );
00013   
00014     cout << "From " << start << " to " << end << endl;
00015        
00016     classical.train();
00017     incremental.train();
00018 
00019     bool equal = true;
00020     for ( int i=0; i < classical.eigenvals.length(); i++ )
00021         if ( not is_equal( classical.eigenvals[i],
00022                            incremental.eigenvals[i] ) )
00023         {
00024             cerr << "classical.eigenvals[" << i << "] = "
00025                  << classical.eigenvals[i] << endl
00026                  << "incremental.eigenvals[" << i << "] = "
00027                  << incremental.eigenvals[i] << endl
00028                  << endl;
00029             equal = false;
00030         }
00031 
00032     if ( equal )
00033         cout << "OK.\n===\n" << endl;
00034     else
00035         cout << "FAILED!!!" << endl;
00036   
00037     return equal;
00038 }
00039 
00040 int main(int argc, char** argv)
00041 {
00042     try{
00043         PCA classical;
00044         classical.ncomponents         = 3;
00045         classical.report_progress     = 0;
00046         classical.normalize_warning   = 0;
00047         classical.build();
00048   
00049         PCA incremental;
00050         incremental.algo              = "incremental";
00051         incremental._horizon          = 10;
00052     
00053         incremental.ncomponents       = 3;
00054         incremental.report_progress   = 0;
00055         incremental.normalize_warning = 0;
00056         incremental.build();
00057 
00058         VMat data = new AutoVMatrix( "PLEARNDIR:examples/data/test_suite/multi_gaussian_data.amat" );
00059         compare( classical, incremental, data,  0, 10 );
00060         compare( classical, incremental, data, 10, 20 );
00061 
00062         for ( int i=11; i <= 20; i++ )
00063             compare( classical, incremental, data, i, i+10 );
00064     }
00065     catch(const PLearnError& e)
00066     {
00067         cerr << "FATAL ERROR: " << e.message() << endl;
00068     }
00069     catch (...) 
00070     {
00071         cerr << "FATAL ERROR: uncaught unknown exception" << endl;
00072     }
00073     
00074     return 0;
00075 }
00076 
00077 
00078 /*
00079   Local Variables:
00080   mode:c++
00081   c-basic-offset:4
00082   c-file-style:"stroustrup"
00083   c-file-offsets:((innamespace . 0)(inline-open . 0))
00084   indent-tabs-mode:nil
00085   fill-column:79
00086   End:
00087 */
00088 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=79 :
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines