Ejemplo n.º 1
0
def create_confusion_matrix(
        mat: np.ndarray,
        class_labels: Optional[Sequence[str]] = None) -> plt.Figure:
    mat = mat / mat.sum(axis=1, keepdims=True)
    mat = pd.DataFrame(mat, index=class_labels, columns=class_labels)
    if len(mat) != len(mat.columns):
        raise ValueError("'mat' is not squared!")

    if class_labels is not None and len(class_labels) != len(mat):
        raise ValueError(
            f"Incorrect number of class labels provided: {len(class_labels)}/{len(mat)}"
        )

    mat_str = mat.applymap(lambda x: str(int(x))
                           if x.is_integer() else f"{x:.2f}")
    fig = plt.figure(figsize=(14, 10))
    # noinspection PyUnresolvedReferences
    sn.heatmap(mat, annot=mat_str, cmap=plt.cm.Blues, cbar=False, fmt="")
    ax: plt.Axes = fig.get_axes()[0]
    ax.tick_params(labelsize="large")
    fig.tight_layout()
    return fig