1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
#include <fstream>
#include <BALL/QSAR/registry.h>
#include <BALL/QSAR/featureSelection.h>
#include <BALL/QSAR/configIO.h>
using namespace BALL::QSAR;
using namespace BALL;
void startValidation(std::ifstream& in, QSARData* q, String* data_filename)
{
ValidationConfiguration conf = ConfigIO::readValidationConfiguration(&in);
if(conf.done || conf.for_visualization_only==1) return ; // stop processing this section and continue with next section
bool created_data_object=0;
if(q==NULL || data_filename==NULL)
{
q = new QSARData;
created_data_object=1;
}
Registry reg;
Model* m;
String model_type;
std::ifstream model_input(conf.model.c_str()); // read model-abbreviation
if(!model_input)
{
std::cout<<"Error: Model-file '"<<conf.model<<"' does not exist!!"<<std::endl;
return;
}
std::getline(model_input,model_type);
std::getline(model_input,model_type);
model_type = model_type.getField(0,"\t");
model_input.close();
RegistryEntry* entry = reg.getEntry(model_type);
bool regression = entry->regression;
if(!entry->kernel)
{
m = (*entry->create)(*q);
}
else
{
// parameters irrelevant; will be overwritten by those read from file
m = (*entry->createKernel1)(*q,1,1, -1);
}
m->readFromFile(conf.model.c_str());
m->model_val->selectStat(conf.statistic);
if(conf.data!="")
{
if(!data_filename || conf.data!=*data_filename)
{
q->readFromFile(conf.data);
*data_filename = conf.data;
}
if(conf.val_type==1) m->model_val->testInputData(1);
else if(conf.val_type==2) m->model_val->crossValidation(conf.k_folds,1);
else if(conf.val_type==3) m->model_val->bootstrap(conf.bootstrap_samples);
else if(conf.val_type==4) m->model_val->yRandomizationTest(conf.no_of_permutation_tests,conf.k_folds);
else if(conf.val_type==6)
{
if(entry->regression)
{
((RegressionModel*)m)->validation->calculateCoefficientStdErrors(conf.bootstrap_samples);
}
}
else if(conf.val_type==7)
{
if(!data_filename || conf.validation_data!=*data_filename)
{
q->readFromFile(conf.validation_data.c_str());
*data_filename = conf.validation_data;
}
m->model_val->testInputData(1);
}
}
// save the result of the validation to the specified file
m->model_val->saveToFile(conf.output);
if(created_data_object) delete q;
delete m;
}
#ifndef EXT_MAIN
int main(int argc, char* argv[])
{
if(argc<2)
{
std::cout<<"Please specify configuration file!"<<std::endl;
return 0;
}
ifstream in(argv[1]);
if(!in)
{
std::cout<<"Configuration file '"<<argv[1]<<"' not found!"<<std::endl;
return 0;
}
String line;
for(int i=0;!in.eof();i++) // read ALL Validator sections
{
for(int j=0;!in.eof();j++) // skip everthing until the beginning of the next Validator-section
{
std::getline(in,line);
if(!line.hasPrefix("[Validator]")) continue;
else break;
}
if(!line.hasPrefix("[Validator]")) break; // there are no (more) Validator-sections!
ConfigIO::putbackLine(&in,line);
startValidation(in,NULL,NULL);
}
}
#endif
|