// pat.C #include #include #include #include "../Basics/pipeostream.h" #include "../Basics/basic.h" #include "../Basics/chrono.h" #include "../Basics/exception.h" #include "../Matrices/Matrix.h" //#include "../Matrices/setCovering.h" #include "main_def.h" #include "multiDS.h" #include "pattern.h" int main () { try { //------------------------------------------- //Collect general information for the batch //------------------------------------------- char inFile[80], outFile[80], choice[80]; // Declaration of all parameters, with default values float percFrom=10.0; float percTo=10.0; float percInter=1.0; int nbIter=1; int nbSizes=1; int initSeed=0; int iteration=0; float percForPat=100; int maxDgr=3; int minCovPos=1; int minCovNeg=1; int satCov=20; int minDist=1; float except=0; boolean patching=true; int patReduce=-1; #if _batch_mode trace=0; #else cout<<"Trace level (1=normal, 2=debug): "; cin>>trace; #endif cout.setf(ios::fixed | ios::showpoint); cout<<"Prefix XXX of the files (.tra) containing the training data : "; cin>>inFile; cout<<"Prefix XXX for the files (.pos, .neg) with the patterns : "; cin>>outFile; sprintf(choice,"%s-pat.out",outFile); ofstream fout(choice); fout<<"Prefix XXX of the files (.tra) containing the training data : " <>percFrom; fout<>percTo; fout<>percInter; fout<>nbIter; fout<>iteration; fout<>initSeed; fout<>percForPat; fout<>maxDgr; fout<>minCovPos; fout<>minCovNeg; fout<>satCov; fout<>minDist; fout<>except; fout<>choice; patching=(choice[0]=='y'); fout<>choice; patReduce=(choice[0]=='y'); fout<>patReduce; fout<>choice; patReduce = (choice[0]=='y' ? -1 : 0); fout< seed(nbSizes,nbIter); fixSeed(initSeed); if(singleExp) seed(0,0)= initSeed; else for (int size=0; size stat(1,9,0.0), statS(1,9,0.0), statSSQ(1,9,0.0), statMin(1,9,1E10), statMax(1,9,-1E10); flog<10 ? Iter%20==0 : (!Iter && (!cSize || (((cSize-1)*nbSizes)/20 != (cSize*nbSizes)/20))) ) { cout<<(fout<<= "Perc- |sample-sz| |#pat-gene--#pat--kept| |#-uncover| |pat|\n"); cout<<(fout<<= " -Iter |difP-difN| |-Pos--Neg---Pos---Neg| |-Pos--Neg| |tim|\n"); } fixSeed(seed(cSize, Iter)); flog< training; { char fn[80]; ostrstream buff(fn,80); buff< whole; fn>>whole; training.separate(whole); } // extract subset of training data used for pattern generation multiDS trainFP(training,percForPat/100.0); if ( trace>1 && percForPat<100.0 ) cout<< "\n*** data for pattern generation:\n" << trainFP; stat(ii++) = trainFP.ds[1].distinct(); stat(ii++) = trainFP.ds[0].distinct(); // generate patterns chrono patternGeneration; patterns posPat(trainFP.ds[1].dim()); patterns negPat(trainFP.ds[0].dim()); int puc,nuc; Matrix one(1,1,1); Matrix zero(1,1,0); if ( trace>2 ) cout<< "\n*** generation of small patterns:\n"; trainFP.smallPatterns(posPat,puc,one,zero,true, maxDgr,minCovPos,satCov,minDist,except); trainFP.smallPatterns(negPat,nuc,zero,one,false, maxDgr,minCovNeg,satCov,minDist,except); if ( patching ) { trainFP.patchPatterns(negPat,zero,one,false,nuc); trainFP.patchPatterns(posPat,one,zero,true,puc); } if ( trace>2 ) cout<< "\n*** positive patterns generated:\n" << posPat << "\n*** negative patterns generated:\n" << negPat; stat(ii++) = posPat.nbPatterns(); stat(ii++) = negPat.nbPatterns(); // Reduction of patterns if ( patReduce==-1 || patReduce==1 ) { trainFP.cleanPatterns(posPat,one); trainFP.cleanPatterns(negPat,zero); if ( trace>2 ) cout<< "\n*** positive patterns (after cleaning):\n" << posPat << "\n*** negative patterns (after cleaning):\n" << negPat; } if ( patReduce>0 ) { trainFP.reducePatterns(posPat,one, patReduce); trainFP.reducePatterns(negPat,zero,patReduce); if ( trace>2 ) cout<< "\n*** positive patterns (after reduction):\n" << posPat << "\n*** negative patterns (after reduction):\n" << negPat; } stat(ii++) = posPat.nbPatterns(); stat(ii++) = negPat.nbPatterns(); stat(ii++) = puc; stat(ii++) = nuc; stat(ii++) = patternGeneration.time(); // Save patterns on file { char pref[80]; ostrstream buff(pref,80); buff<1 ) { cout<<" mean"<