Source code for pycognaize.common.confidence

import math
from typing import Union


[docs] class Confidence: """ This class is used by tag object to store confidence values of possible classes. """ def __init__(self, confidences=None): """ Initialize class with confidence scores. :param confidences: dictionary of class names and their confidence """ self._is_finalized = False if confidences is not None and isinstance(confidences, dict): self.confidences = confidences self.finalize() else: self.confidences = {}
[docs] def add_class(self, class_name: str, confidence: Union[float, int]) -> None: """Add new class for confidence scores :param class_name: name of the class :param confidence: confidence score for the class """ self.confidences[class_name] = confidence
[docs] def number_of_classes(self) -> int: """Returns number of classes""" return len(self.confidences)
[docs] def class_names(self) -> list: """Returns class names""" return list(self.confidences.keys())
[docs] def get_confidence(self) -> dict: """Returns confidence scores if finalized""" if not self._is_finalized: raise ValueError('Confidence scores have to be finalized.') return self.confidences
@property def is_finalized(self) -> bool: return self._is_finalized
[docs] def finalize(self, tolerance=0.0001) -> None: """Finalize confidence scores by checking if all scores sum to 1 :param tolerance: tolerance for comparing sum of confidences (float) with 1 """ sum_scores = sum(self.confidences.values()) if not math.isclose(sum_scores, 1, rel_tol=tolerance) and \ self.number_of_classes() > 0: raise ValueError('Confidence scores have to sum up to 1.') self._is_finalized = True
def __getitem__(self, item: str) -> Union[float, int]: if not self._is_finalized: raise ValueError('Confidence scores have to be finalized.') if item in self.confidences: return self.confidences[item] else: raise KeyError(f'Class {item} not found in confidence scores.') def __setitem__(self, key, value) -> None: self.confidences[key] = value