#include #include #include #include #include "svm_rbf.h" double *load_ay (char *filename) { int i; double *ay = malloc(sizeof(double) * NUM_SUPPORT_VECTORS); FILE *fp = fopen(filename, "rt"); for (i = 0; i < NUM_SUPPORT_VECTORS; i++) { const char *separators = " \t"; char line[1024]; char *current; fgets(line, sizeof(line) - 1, fp); ay[i] = strtod(line, NULL); // printf("val=%lf\n", ay[i]); } fclose(fp); return ay; } double *load_VS (char *filename) { int i, j; double *VS = malloc(sizeof(double) * FEATURE_VECTOR_LENGTH * NUM_SUPPORT_VECTORS); FILE *fp = fopen(filename, "rt"); int const MAX_LINE_LENGTH = 1024 * 1024; char *line = (char *) malloc(sizeof(char) * MAX_LINE_LENGTH); for (i = 0; i < NUM_SUPPORT_VECTORS; i++) { const char *separators = " \t"; char *current; fgets(line, MAX_LINE_LENGTH - 1, fp); current = strtok(line, separators); for (j = 0; j < FEATURE_VECTOR_LENGTH; j++) { VS[i*FEATURE_VECTOR_LENGTH + j] = strtod(current, NULL); current = strtok(NULL, separators); // printf("%lf ", VS[i*FEATURE_VECTOR_LENGTH + j]); } // printf("\n"); } fclose(fp); free(line); return VS; } /* h=histogram representation [1xFEATURE_VECTOR_LENGTH] VS = support vector in histogram representation [NUM_SUPPORT_VECTORSxFEATURE_VECTOR_LENGTH]. ay = coefficients of support [NUM_SUPPORT_VECTORSx1] g = gaussian width [1x1] */ double svm_rbf (double *h, double *VS, double *ay, double g) { int i, j; double y = 0; double D[FEATURE_VECTOR_LENGTH]; double D2; for (i = 0; i < NUM_SUPPORT_VECTORS; i++) { D2 = 0; for (j = 0; j < FEATURE_VECTOR_LENGTH; j++) { D[j] = h[j] - VS[i*FEATURE_VECTOR_LENGTH + j]; D2 += D[j] * D[j]; } y += ay[i]*exp(-0.5*D2/g); printf("%% y=%lf\n", y); } return y; }