precision = np.mean(dist.max(axis=0))
// Recall: how many of the intervals did we catch?recall = np.mean(dist.max(axis=1))// And the f-measure
f_measure = util.f_measure(precision, recall, beta=beta)
After Change
n_ref, n_est = len(reference_boundaries), len(estimated_boundaries)
skew_adjacency = np.zeros((n_ref + n_est, n_ref + n_est), dtype=np.int32)
window_match = np.abs(np.subtract.outer(reference_boundaries, estimated_boundaries)) <= window
window_match = window_match.astype(int)
// L. Lovasz On determinants, matchings and random algorithms. // In L. Budach, editor, Fundamentals of Computation Theory, pages 565-574. Akademie-Verlag, 1979.//// If we build the skew-symmetric adjacency matrix // D[i, n_ref+j] = 1 <=> ref[i] within window of est[j]// D[n_ref + j, i] = -1 <=> same//// then rank(D) = 2 * maximum matching//skew_adjacency[:n_ref, n_ref:] = window_match
skew_adjacency[n_ref:, :n_ref] = -window_match.T
matching_size = np.linalg.matrix_rank(skew_adjacency) / 2.0// Precision = |matching| / |// predictions|// Recall = |matching| / |// annotations|