int main(int argc, char **argv){ fflush(stdout); fprintf(stdout, "\nProgram that generates training, evaluation and test sets for the OPF classifier\n"); fprintf(stdout, "\nIf you have any problem, please contact: "); fprintf(stdout, "\n- [email protected]"); fprintf(stdout, "\n- [email protected]\n"); fprintf(stdout, "\nLibOPF version 2.0 (2009)\n"); fprintf(stdout, "\n"); fflush(stdout); if(argc != 6){ fprintf(stderr, "\nusage opf_split <P1> <P2> <P3> <P4> <P5>"); fprintf(stderr, "\nP1: input dataset in the OPF file format"); fprintf(stderr, "\nP2: percentage for the training set size [0,1]"); fprintf(stderr, "\nP3: percentage for the evaluation set size [0,1] (leave 0 in the case of no learning)"); fprintf(stderr, "\nP4: percentage for the test set size [0,1]"); fprintf(stderr, "\nP5: normalize features? 1 - Yes 0 - No\n\n"); exit(-1); } Subgraph *g = NULL, *gAux = NULL, *gTraining = NULL, *gEvaluating = NULL, *gTesting = NULL; float training_p = atof(argv[2]), evaluating_p = atof(argv[3]), testing_p = atof(argv[4]); int normalize = atoi(argv[5]); CheckInputData(training_p, evaluating_p, testing_p); fprintf(stdout, "\nReading data set ..."); fflush(stdout); g = ReadSubgraph(argv[1]); fprintf(stdout, " OK"); fflush(stdout); if(normalize) opf_NormalizeFeatures(g); fprintf(stdout, "\nSplitting data set ..."); fflush(stdout); opf_SplitSubgraph(g, &gAux, &gTesting, training_p+evaluating_p); if (evaluating_p > 0) opf_SplitSubgraph(gAux, &gTraining, &gEvaluating, training_p/(training_p+evaluating_p)); else gTraining = CopySubgraph(gAux); fprintf(stdout, " OK"); fflush(stdout); fprintf(stdout, "\nWriting data sets to disk ..."); fflush(stdout); WriteSubgraph(gTraining, "training.dat"); WriteSubgraphPrototype(gTraining, "trainingp.dat"); if (evaluating_p > 0) { WriteSubgraph(gEvaluating, "evaluating.dat"); WriteSubgraphPrototype(gEvaluating, "evaluatingp.dat"); } WriteSubgraph(gTesting, "testing.dat"); WriteSubgraphPrototype(gTesting, "testingp.dat"); fprintf(stdout, " OK"); fflush(stdout); fprintf(stdout, "\nDeallocating memory ..."); DestroySubgraph(&g); DestroySubgraph(&gAux); DestroySubgraph(&gTraining); DestroySubgraph(&gEvaluating); DestroySubgraph(&gTesting); fprintf(stdout, " OK\n"); return 0; }
int main(int argc, char **argv) { if (argc != 5) { fprintf(stderr, "\nusage FeatureSelection <training set> <evaluating set> <testing set> <search space configuration file>\n"); exit(-1); } SearchSpace *s = NULL; int i; double time_opt, time_classify, classification_error; timer tic, toc; FILE *f = NULL; TransferFunc optTransfer = NULL; Subgraph *Train = NULL, *Evaluate = NULL, *Merge = NULL, *Test = NULL, *newTrain = NULL, *newTest = NULL; Train = ReadSubgraph(argv[1]); Evaluate = ReadSubgraph(argv[2]); Test = ReadSubgraph(argv[3]); s = ReadSearchSpaceFromFile(argv[4], _WCA_); optTransfer = S2TransferFunction; for (i = 0; i < Train->nfeats; i++) { s->LB[i] = -20; s->LB[i] = 20; } fprintf(stderr, "\nInitializing search space ... "); InitializeSearchSpace(s, _WCA_); fprintf(stderr, "\nOk\n"); fflush(stderr); fprintf(stderr, "\nRunning WCA ... "); gettimeofday(&tic, NULL); runWCA(s, FeatureSelectionOPF, Train, Evaluate, optTransfer); gettimeofday(&toc, NULL); fflush(stderr); fprintf(stderr, "\nOK\n"); time_opt = ((toc.tv_sec - tic.tv_sec) * 1000.0 + (toc.tv_usec - tic.tv_usec) * 0.001) / 1000.0; fprintf(stdout, "\nOptimization time: %f seconds\n", time_opt); fflush(stderr); Merge = opf_MergeSubgraph(Train, Evaluate); fflush(stderr); fprintf(stderr, "\nWriting new training and testing sets ...\n"); newTrain = CreateSubgraphFromSelectedFeatures(Merge, s->g); newTest = CreateSubgraphFromSelectedFeatures(Test, s->g); fprintf(stderr, "\nTraining set\n"); WriteSubgraph(newTrain, "training.wca.dat"); fprintf(stderr, "\n\nTesting set\n"); WriteSubgraph(newTest, "testing.wca.dat"); fflush(stderr); fprintf(stderr, "\nOK\n"); opf_OPFTraining(newTrain); gettimeofday(&tic, NULL); opf_OPFClassifying(newTrain, newTest); gettimeofday(&toc, NULL); classification_error = opf_Accuracy(newTest); time_classify = ((toc.tv_sec - tic.tv_sec) * 1000.0 + (toc.tv_usec - tic.tv_usec) * 0.001) / 1000.0; fprintf(stdout, "\nClassification time: %f seconds\n", time_classify); fflush(stderr); f = fopen("best_feats.txt", "a"); fprintf(f, "%d %d", newTrain->nfeats, (int)s->g[0]); for (i = 1; i < Train->nfeats; i++) { fprintf(f, " %d", (int)s->g[i]); } fprintf(f, "\n"); fclose(f); fprintf(stderr, "\nAccuracy: %.2lf%%\n", 100 * classification_error); f = fopen("final_accuracy.txt", "a"); fprintf(f, "%lf\n", classification_error); fclose(f); fflush(stderr); fprintf(stderr, "\nDeallocating memory ..."); DestroySubgraph(&Train); DestroySubgraph(&Evaluate); DestroySubgraph(&Merge); DestroySubgraph(&Test); DestroySubgraph(&newTrain); DestroySubgraph(&newTest); fflush(stderr); fprintf(stderr, "\nOK\n"); f = fopen("optimization.time", "a"); fprintf(f, "%f %f\n", time_opt, time_classify); fclose(f); DestroySearchSpace(&s, _WCA_); return 0; }