// system include files // #include #include "FuzzyClassifier.h" int main() { // local varables // int value, i; int num_class = 11, dim = 10; FuzzyClassifier fc; fc.num_class_d = num_class; fc.dimension_d = dim; fc.class_d.setLength(num_class); fc.num_vec_d.setLength(num_class); for (i = 0; i < num_class; i++) { fc.class_d(i) = i + 1; } // input the transcription file of training data // //char *input_file = "../data/train/train_trans_1.text"; char *input_file = "../data/training/training_1.class"; FILE* fin = fopen((char*)input_file, "r"); if (fin == (FILE*)NULL) { fprintf(stdout, "Error : cannot open input file ../data/train/train_trans_1.text%s\n", input_file); exit(1); } VectorLong trans; i = 0; while (!feof(fin)) { fscanf(fin, "%d\n", &value); trans.setLength(i + 1); trans(i) = value; fc.num_vec_d(value - 1) += 1; i++; // printf("%d %d\n", i, value); } fclose(fin); fc.vec_d = new VectorFloat**[num_class]; for (i = 0; i < num_class; i++) { fc.vec_d[i] = new VectorFloat*[fc.num_vec_d(i)]; int num_vec = fc.num_vec_d(i); for (int j = 0; j < num_vec; j++) { fc.vec_d[i][j] = new VectorFloat(dim); } } //input_file = "../data/train/train_1.text"; input_file = "../data/training/training_1.text"; fin = fopen((char*)input_file, "r"); if (fin == (FILE*)NULL) { fprintf(stdout, "Error : cannot open input file %s\n", input_file); exit(1); } float v[10]; int m = 0; fc.num_vec_d.clear(Integral::RETAIN); while (!feof(fin)) { fscanf(fin, "%f %f %f %f %f %f %f %f %f %f\n", &v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]); i = trans(m) - 1; (*fc.vec_d[i][fc.num_vec_d(i)]).assign(fc.dimension_d, v); fc.num_vec_d(i) += 1; m++; } fc.num_vec_d.debug(L"num_vec.d = "); fclose(fin); // ===TRAINING======================================= fc.normalize(); fc.vec_max_d.debug(L"vec_max_d"); fc.train(); for (int i = 0; i <6; i++) { if (fc.remove_junk()) { fc.train(); } } fc.debug(); // ===TEST======================================== //long num_test = 528; // long num_test = 379; long num_test = 83; VectorFloat vec_test[num_test]; //input_file = "../data/train/train_1.text"; //input_file = "../data/test/test_1.text"; input_file = "../data/eval/eval_1.data"; fin = fopen((char*)input_file, "r"); if (fin == (FILE*)NULL) { fprintf(stdout, "Error : cannot open input test file %s\n", input_file); exit(1); } i = 0; while (!feof(fin)) { fscanf(fin, "%f %f %f %f %f %f %f %f %f %f\n", &v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]); vec_test[i].setLength(dim); vec_test[i].assign(dim, v); // normaliztion // vec_test[i].div(fc.vec_max_d); i++; } printf("num_test = %d\n", i); fclose(fin); VectorLong hypothesis(num_test); for (i = 0; i < num_test; i++) { hypothesis(i) = fc.decode(vec_test[i]); } char *output_file = "test_hypo.text"; FILE* fout = fopen((char*)output_file, "w"); if (fout == (FILE*)NULL) { fprintf(stdout, "Error : cannot open input test file %s\n", input_file); exit(1); } for (i = 0; i < num_test; i++) { fprintf(fout, "%d\n", (int)hypothesis(i)); } fclose(fout); // ===EVAL======================================== /* num_test = 83; input_file = "../data/eval/eval_1.data"; fin = fopen((char*)input_file, "r"); if (fin == (FILE*)NULL) { fprintf(stdout, "Error : cannot open input test file %s\n", input_file); exit(1); } i = 0; while (!feof(fin)) { fscanf(fin, "%f %f %f %f %f %f %f %f %f %f\n", &v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8], &v[9]); vec_test[i].setLength(dim); vec_test[i].assign(dim, v); // normaliztion // vec_test[i].div(fc.vec_max_d); i++; } printf("num_test = %d\n", i); fclose(fin); hypothesis(num_test); for (i = 0; i < num_test; i++) { hypothesis(i) = fc.decode(vec_test[i]); } output_file = "eval_hypo.text"; fout = fopen((char*)output_file, "w"); if (fout == (FILE*)NULL) { fprintf(stdout, "Error : cannot open input test file %s\n", input_file); exit(1); } for (i = 0; i < num_test; i++) { fprintf(fout, "%d\n", (int)hypothesis(i)); } fclose(fout); */ // fc.debug(); fc.record_class_d.debug(L"record_class_d"); fc.record_num_cluster_d.debug(L"record_num_cluster_d"); // ------------------------------------------ // delete vectors // for (i = 0; i < num_class; i++) { int num_vec = fc.num_vec_d(i); for (int j = 0; j < num_vec; j++) { delete fc.vec_d[i][j]; } } for (i = 0; i < num_class; i++) { delete [] fc.vec_d[i]; } delete [] fc.vec_d; return 1; }