Shortcuts

Source code for sentarget.metrics.functional

r"""
Elementary functions used for statistical reports.
"""

import numpy as np


[docs]def true_positive(matrix): r"""True positive values from a confusion matrix. .. math:: TP(M) = \text{Diag}(M) Args: matrix (numpy.ndarray): confusion matrix of shape :math:`(C, C)`. Returns: numpy.ndarray """ return np.diag(matrix)
[docs]def true_negative(matrix): r"""True negatives values from a confusion matrix. .. math:: TN(M) = \sum_{i=0}^{C-1}{\sum_{j=0}^{C-1}{M_{i, j}}} - FN(M) + FP(M) + TP(M) Args: matrix (numpy.ndarray): confusion matrix of shape :math:`(C, C)`. Returns: numpy.ndarray """ return np.sum(matrix) - (false_positive(matrix) + false_negative(matrix) + true_positive(matrix))
[docs]def false_positive(matrix): r"""False positives values from a confusion matrix. .. math:: FP(M) = \sum_{i=0}^{C-1}{M_i} - \text{Diag}(M) Args: matrix (numpy.ndarray): confusion matrix of shape :math:`(C, C)`. Returns: numpy.ndarray """ return np.sum(matrix, axis=0) - np.diag(matrix)
[docs]def false_negative(matrix): r"""False negatives values from a confusion matrix. .. math:: FN(M) = \sum_{j=0}^{C-1}{M_j} - \text{Diag}(M) Args: matrix (numpy.ndarray): confusion matrix of shape :math:`(C, C)`. Returns: numpy.ndarray """ return np.sum(matrix, axis=1) - np.diag(matrix)
[docs]def true_positive_rate(matrix): r"""True positive rate from a confusion matrix. .. math:: TPR(M) = \frac{TP(M)}{TP(M) + FN(M)} Args: matrix (numpy.ndarray): confusion matrix of shape :math:`(C, C)`. Returns: numpy.ndarray """ top = true_positive(matrix) bottom = true_positive(matrix) + false_negative(matrix) return np.where(bottom != 0, top / bottom, 0)
[docs]def true_negative_rate(matrix): r"""True negative rate from a confusion matrix. .. math:: TNR(M) = \frac{TN(M)}{TN(M) + FP(M)} Args: matrix (numpy.ndarray): confusion matrix of shape :math:`(C, C)`. Returns: numpy.ndarray """ top = true_negative(matrix) bottom = true_negative(matrix) + false_positive(matrix) return np.where(bottom != 0, top / bottom, 0)
[docs]def positive_predictive_value(matrix): r"""Positive predictive value from a confusion matrix. .. math:: PPV(M) = \frac{TP(M)}{TP(M) + FP(M)} Args: matrix (numpy.ndarray): confusion matrix of shape :math:`(C, C)`. Returns: numpy.ndarray """ top = true_positive(matrix) bottom = true_positive(matrix) + false_positive(matrix) return np.where(bottom != 0, top / bottom, 0)
[docs]def negative_predictive_value(matrix): r"""Negative predictive value from a confusion matrix. .. math:: NPV(M) = \frac{TN(M)}{TN(M) + FN(M)} Args: matrix (numpy.ndarray): confusion matrix of shape :math:`(C, C)`. Returns: numpy.ndarray """ top = true_negative(matrix) bottom = true_negative(matrix) + false_negative(matrix) return np.where(bottom != 0, top / bottom, 0)
[docs]def false_positive_rate(matrix): r"""False positive rate from a confusion matrix. .. math:: FPR(M) = \frac{FP(M)}{FP(M) + FN(M)} Args: matrix (numpy.ndarray): confusion matrix of shape :math:`(C, C)`. Returns: numpy.ndarray """ top = false_positive(matrix) bottom = false_positive(matrix) + false_negative(matrix) return np.where(bottom != 0, top / bottom, 0)
[docs]def false_negative_rate(matrix): r"""False negative rate from a confusion matrix. .. math:: FNR(M) = \frac{FN(M)}{FN(M) + TP(M)} Args: matrix (numpy.ndarray): confusion matrix of shape :math:`(C, C)`. Returns: numpy.ndarray """ top = false_negative(matrix) bottom = true_positive(matrix) + false_negative(matrix) return np.where(bottom != 0, top / bottom, 0)
[docs]def false_discovery_rate(matrix): r"""False discovery rate from a confusion matrix. .. math:: FDR(M) = \frac{FP(M)}{FP(M) + TP(M)} Args: matrix (numpy.ndarray): confusion matrix of shape :math:`(C, C)`. Returns: numpy.ndarray """ top = false_positive(matrix) bottom = true_positive(matrix) + false_positive(matrix) return np.where(bottom != 0, top / bottom, 0)
[docs]def accuracy(matrix): r"""Per class accuracy from a confusion matrix. .. math:: ACC(M) = \frac{TP(M) + TN(M)}{TP(M) + TN(M) + FP(M) + FN(M)} Args: matrix (numpy.ndarray): confusion matrix of shape :math:`(C, C)`. Returns: numpy.ndarray """ top = true_positive(matrix) + true_negative(matrix) bottom = true_positive(matrix) + true_negative(matrix) + false_positive(matrix) + false_negative(matrix) return np.where(bottom != 0, top / bottom, 0)
[docs]def flatten_matrix(matrix, axis_label=0, axis_pred=1, map=None): r"""Flatten a confusion matrix to retrieve its prediction and gold labels. Args: matrix (numpy.ndarray): confusion matrix of shape :math:`(C, C)`. axis_label (int): axis index corresponding to the gold labels. axis_pred (int): axis index corresponding to the predictions. map (dict): dictionary to map indices to label. Returns: gold labels and predictions. """ gold_labels = [] predictions = [] # Change the index order ? matrix = np.array(matrix) if axis_label != 0 or axis_pred != 1: matrix = matrix.T # Make sure the matrix is a confusion matrix C = len(matrix) map = {idx: idx for idx in range(C)} if map is None else map assert matrix.shape == (C, C), 'the provided matrix is not square' for i in range(C): for j in range(C): gold_labels.extend([map[i]] * int(matrix[i, j])) predictions.extend([map[j]] * int(matrix[i, j])) return gold_labels, predictions

Docs

Access comprehensive developer documentation for PyTorch

View Docs

Tutorials

Get in-depth tutorials for beginners and advanced developers

View Tutorials

Resources

Check the GitHub page and contribute to the project

View GitHub