PLearn 0.1
|
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 :