//-------------------------------------------------------------------------- double Performance(const DVector &ytest_truth, const DVector &ytest_predict, int NumClasses) { long n = ytest_truth.GetN(); if (n != ytest_predict.GetN()) { printf("Performance. Error: Vector lengths mismatch. Return NAN"); return NAN; } if (NumClasses != 1 && NumClasses != 2) { printf("Performance. Error: Neither regression nor binary classification. Return NAN"); return NAN; } double perf = 0.0; if (NumClasses == 1) { // Relative error DVector diff; ytest_truth.Subtract(ytest_predict, diff); perf = diff.Norm2()/ytest_truth.Norm2(); } else if (NumClasses == 2) { // Accuracy double *y1 = ytest_truth.GetPointer(); double *y2 = ytest_predict.GetPointer(); for (long i = 0; i < n; i++) { perf += y1[i]*y2[i]>0 ? 1.0:0.0; } perf = perf/n * 100.0; } return perf; }