15 using namespace shogun;
19 ASSERT(predicted && ground_truth)
25 if (label_p.vlen != label_g.
vlen)
26 SG_ERROR(
"Number of classes are different\n")
27 uint32_t n_class=label_p.vlen;
34 for (
size_t i=0; i < n_class; ++i)
36 for (
size_t j=0; j < n_class; ++j)
38 ilabels_p, label_p[j])/n_label;
43 for (
size_t i=0; i < n_class; ++i)
45 for (
size_t j=0; j < n_class; ++j)
47 G_rowsum[i] += G(i, j);
48 G_colsum[i] += G(j, i);
53 for (
size_t i=0; i < n_class; ++i)
55 for (
size_t j=0; j < n_class; ++j)
58 mutual_info += G(i, j) * log(G(i,j) /
59 (G_rowsum[i]*G_colsum[j]))/log(2.);
65 for (
size_t i=0; i < n_class; ++i)
67 entropy_g += -G_rowsum[i] * log(G_rowsum[i])/log(2.);
68 entropy_p += -G_colsum[i] * log(G_colsum[i])/log(2.);
71 return mutual_info /
CMath::max(entropy_g, entropy_p);