cvCopy( _responses, orig_response);\r
orig_response->step = CV_ELEM_SIZE(_responses->type);\r
\r
+ /*\r
if (!is_regression)\r
{\r
int max_label = -1;\r
if (class_labels->data.i[i])\r
class_labels->data.i[i] = ++class_count;\r
}\r
+ */\r
+ if (!is_regression)\r
+ {\r
+ class_count = 0;\r
+ unsigned char * mask = new unsigned char[get_len(orig_response)];\r
+ for (int i=0; i<get_len(orig_response); ++i)\r
+ mask[i] = 0;\r
+ for (int i=0; i<get_len(orig_response); ++i)\r
+ if (!mask[i])\r
+ {\r
+ class_count++;\r
+ for (int j=i; j<get_len(orig_response); ++j)\r
+ if (int(orig_response->data.fl[j]) == int(orig_response->data.fl[i]))\r
+ mask[j] = 1;\r
+ }\r
+ delete[] mask;\r
+ \r
+ class_labels = cvCreateMat(1, class_count, CV_32S);\r
+ class_labels->data.i[0] = int(orig_response->data.fl[0]);\r
+ int j = 1;\r
+ for (int i=1; i<get_len(orig_response); ++i)\r
+ {\r
+ int k = 0;\r
+ while ((int(orig_response->data.fl[i]) - class_labels->data.i[k]) && (k<j))\r
+ k++;\r
+ if (k == j)\r
+ {\r
+ class_labels->data.i[k] = int(orig_response->data.fl[i]);\r
+ j++;\r
+ }\r
+ }\r
+ }\r
\r
data->is_classifier = false;\r
\r
exp_sfi += res;\r
}\r
int orig_label = int(resp_data[idx]);\r
+ /*\r
grad_data[idx] = (float)(!(k-class_labels->data.i[orig_label]+1)) -\r
(float)(exp_fk / exp_sfi);\r
+ */\r
+ int ensemble_label = 0;\r
+ while (class_labels->data.i[ensemble_label] - orig_label)\r
+ ensemble_label++; \r
+ \r
+ grad_data[idx] = (float)(!(k-ensemble_label)) -\r
+ (float)(exp_fk / exp_sfi);\r
}\r
}; break;\r
\r
\r
delete[] sum;\r
\r
+ /*\r
int orig_class_label = -1;\r
for (int i=0; i<get_len(class_labels); ++i)\r
if (class_labels->data.i[i] == class_label+1)\r
orig_class_label = i;\r
+ */\r
+ int orig_class_label = class_labels->data.i[class_label];\r
\r
return float(orig_class_label);\r
}\r