/****************************************************************************************/ /* */ /* Project : 1D-BRNN */ /* Release : 3.3 */ /* */ /* File : Dataset.cpp */ /* Description : Dataset of sequences in input of the program */ /* */ /* Author(s) : Christophe Magnan (2013) - New generic version */ /* : Jianlin Cheng (2003) - New custom version for SCRATCH */ /* : Gianluca Pollastri (2001) - Customized version for SCRATCH */ /* : Paolo Frasconi (1997) - Initial generic version */ /* */ /* Copyright : Institute for Genomics and Bioinformatics */ /* University of California, Irvine */ /* */ /* Modified : 2015/07/01 */ /* */ /****************************************************************************************/ #include "Dataset.h" /*******************************************/ /* Interface */ /*******************************************/ // Constructor Dataset::Dataset() : Num_Sequences(-1),Num_Positions(0),Num_Features(-1), Num_Classes(-1),Sequences(NULL){} // Destructor Dataset::~Dataset() { for(int i=0;i> Num_Sequences; is >> Num_Features; is >> Num_Classes; Num_Positions=0; Sequences=new Sequence*[Num_Sequences]; for(int i=0;iload(is,Num_Features,Num_Classes); Num_Positions+=Sequences[i]->Num_Positions; } in_buffer.close(); check_viability(); } else{ cerr << "Cannot read file \"" << filein << "\"\n"; exit(1); } } // Allocate memory for propagation void Dataset::alloc_propagation(int out_fwd,int out_bwd) { for(int i=0;ialloc_propagation(out_fwd,out_bwd); } } // Allocate memory for back-propagation void Dataset::alloc_backpropagation(int out_fwd,int out_bwd) { for(int i=0;ialloc_backpropagation(out_fwd,out_bwd); } } // Write the model predictions void Dataset::write_predictions(char* fileout) { filebuf out_buffer; if(out_buffer.open(fileout,ios::out)!=0){ ostream os(&out_buffer); for(int i=0;iwrite_predictions(os); } out_buffer.close(); } else{ cerr << "Cannot write into file \"" << fileout << "\"\n"; exit(1); } } // Display the confusion matrix for the last predictions void Dataset::display_confusion() { int i,j,cor=0,n=Num_Classes; float acc; int** conf; conf=new int*[n]; for(i=0;iNum_Positions;j++){ conf[s->Classes[j]][s->Predictions[j]]++; } } for(i=0;iNum_Positions;p++){ error+=s->prediction_error(p); } } return error; } // Check the viability of the dataset void Dataset::check_viability() { if((Num_Sequences<=0)||(Num_Positions<=0)||(Sequences==NULL)){ cerr << "\n\nERROR : the input dataset is empty\n"; exit(1); } }