def get(self): n_classes = len([i for i in self.cm.sum_row.values() if i != 0]) n_clusters = len([i for i in self.cm.sum_col.values() if i != 0]) if (n_classes == n_clusters == 1) or (n_classes == n_clusters == 0): return 1.0 mutual_info_score = metrics.MutualInfo(self.cm).get() expected_mutual_info_score = metrics.expected_mutual_info(self.cm) entropy_true = _entropy(cm=self.cm, y_true=True) entropy_pred = _entropy(cm=self.cm, y_true=False) normalizer = self._generalized_average(entropy_true, entropy_pred) denominator = normalizer - expected_mutual_info_score if denominator < 0: denominator = min(denominator, -np.finfo("float64").eps) else: denominator = max(denominator, np.finfo("float64").eps) adjusted_mutual_info_score = ( mutual_info_score - expected_mutual_info_score ) / denominator return adjusted_mutual_info_score
def get(self): n_classes = len([i for i in self.cm.sum_row.values() if i != 0]) n_clusters = len([i for i in self.cm.sum_col.values() if i != 0]) if (n_classes == n_clusters == 1) or (n_classes == n_clusters == 0): return 1.0 mutual_info_score = metrics.MutualInfo(self.cm).get() entropy_true = _entropy(cm=self.cm, y_true=True) entropy_pred = _entropy(cm=self.cm, y_true=False) normalizer = self._generalized_average(entropy_true, entropy_pred) normalizer = max(normalizer, np.finfo("float64").eps) return mutual_info_score / normalizer
def __init__(self, cm: "metrics.ConfusionMatrix" = None): self.cm = metrics.ConfusionMatrix() if cm is None else cm self.pair_cm = metrics.PairConfusionMatrix(self.cm) self.matthews_corr = metrics.MatthewsCorrCoef(cm=self.cm) self.completeness = metrics.Completeness(cm=self.cm) self.homogeneity = metrics.Homogeneity(cm=self.cm) self.vbeta = metrics.VBeta(cm=self.cm) self.q0 = metrics.Q0(cm=self.cm) self.q2 = metrics.Q2(cm=self.cm) self.pt = metrics.PrevalenceThreshold(cm=self.cm) self.mutual_info = metrics.MutualInfo(cm=self.cm) self.normalized_mutual_info = metrics.NormalizedMutualInfo(cm=self.cm) self.adjusted_mutual_info = metrics.AdjustedMutualInfo(cm=self.cm) self.rand = metrics.Rand(cm=self.cm) self.adjusted_rand = metrics.AdjustedRand(cm=self.cm) self.variation_info = metrics.VariationInfo(cm=self.cm)
(metrics.MicroF1(), partial(sk_metrics.f1_score, average="micro", zero_division=0)), ( metrics.WeightedF1(), partial(sk_metrics.f1_score, average="weighted", zero_division=0), ), (metrics.MCC(), sk_metrics.matthews_corrcoef), (metrics.MAE(), sk_metrics.mean_absolute_error), (metrics.MSE(), sk_metrics.mean_squared_error), (metrics.Homogeneity(), sk_metrics.homogeneity_score), (metrics.Completeness(), sk_metrics.completeness_score), (metrics.VBeta(beta=0.5), partial(sk_metrics.v_measure_score, beta=0.5)), (metrics.FowlkesMallows(), sk_metrics.fowlkes_mallows_score), (metrics.Rand(), sk_metrics.rand_score), (metrics.AdjustedRand(), sk_metrics.adjusted_rand_score), (metrics.MutualInfo(), sk_metrics.mutual_info_score), ( metrics.NormalizedMutualInfo(average_method="min"), partial(sk_metrics.normalized_mutual_info_score, average_method="min"), ), ( metrics.NormalizedMutualInfo(average_method="max"), partial(sk_metrics.normalized_mutual_info_score, average_method="max"), ), ( metrics.NormalizedMutualInfo(average_method="arithmetic"), partial(sk_metrics.normalized_mutual_info_score, average_method="arithmetic"), ), ( metrics.NormalizedMutualInfo(average_method="geometric"),