main.cc
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00039 #include "infomax_ica.h"
00040 #include "test_infomax_ica.h"
00041 #include "fastlib/fastlib.h"
00042 #include "fastlib/data/dataset.h"
00043
00044 const fx_entry_doc infomax_ica_main_entries[] = {
00045 {"data", FX_REQUIRED, FX_STR, NULL,
00046 " The name of the file containing mixture data.\n"},
00047 {"lambda", FX_PARAM, FX_DOUBLE, NULL,
00048 " The learning rate.\n"},
00049 {"B", FX_PARAM, FX_INT, NULL,
00050 " Infomax data window size.\n"},
00051 {"epsilon", FX_PARAM, FX_DOUBLE, NULL,
00052 " Infomax algorithm stop threshold.\n"},
00053 FX_ENTRY_DOC_DONE
00054 };
00055
00056 const fx_submodule_doc infomax_ica_main_submodules[] = {
00057 FX_SUBMODULE_DOC_DONE
00058 };
00059
00060 const fx_module_doc infomax_ica_main_doc = {
00061 infomax_ica_main_entries, infomax_ica_main_submodules,
00062 "This performs ICA decomposition on a given dataset using the Infomax method.\n"
00063 };
00064
00065 int main(int argc, char *argv[]) {
00066 fx_module *root = fx_init(argc, argv, &infomax_ica_main_doc);
00067
00068 const char *data_file_name = fx_param_str_req(root, "data");
00069 double lambda = fx_param_double(root,"lambda",0.001);
00070 int B = fx_param_int(root,"B",5);
00071 double epsilon = fx_param_double(root,"epsilon",0.001);
00072 Matrix dataset;
00073 data::Load(data_file_name,&dataset);
00074 InfomaxICA *ica = new InfomaxICA(lambda, B, epsilon);
00075
00076 ica->applyICA(dataset);
00077 Matrix west;
00078 ica->getUnmixing(west);
00079
00080
00081 fx_done(NULL);
00082 }