Предположим, что мы дали два вектора меток, одна из которых является правдой, а другая - предсказанной. Мой вопрос заключается в том, как мы можем написать правильную матрицу путаницы для нее на C. Это функция, которая предполагает найти матрицу путаницы в большем C-коде. Я ценю некоторую помощь по этому поводу.
double ConfusionMatrix(int truth[], int prediction[]){
/* The truth vector of labels, the predicted vector of labels, and the unique length of labels which should be given. */
int i, j, c;
int labels; /* The length of unique labels */
conf_mat = (float**)calloc(truth, sizeof(float*)); /* Allocating Memory to the Confusion Matrix. */
for (i = 0; i < truth; i++)
conf_mat[i] = (float*)calloc(truth, sizeof(float));
for (i = 0; i < truth; i++)
for (c = 0; c < truth; c++)
conf_mat[c][i] = 0.0;
for (j = 0; j < truth; j++){
c = labels[j];
for (i = 0; i < prediction; i++)
conf_mat[c][i] += prediction[i][j];
}
/* As Confusion Matrix is sparse, then print only the entries above the threshold. */
printf("Print the Confusion Matrix \n Print only the entries above 0.1\n");
for (c = 0; c < truth; c++){
printf("\n\nClass %d documents were classified in these classes\n", c);
for (i = 0; i < truth; i++)
if (conf_mat[c][i] >= 0.1)
printf("class %d:%5.1f times ", i, conf_mat[c][i]);
}
}