:py:mod:`kwcoco.metrics.drawing` ================================ .. py:module:: kwcoco.metrics.drawing Module Contents --------------- Functions ~~~~~~~~~ .. autoapisummary:: kwcoco.metrics.drawing.draw_perclass_roc kwcoco.metrics.drawing.inty_display kwcoco.metrics.drawing._realpos_label_suffix kwcoco.metrics.drawing.draw_perclass_prcurve kwcoco.metrics.drawing.draw_perclass_thresholds kwcoco.metrics.drawing.draw_roc kwcoco.metrics.drawing.draw_prcurve kwcoco.metrics.drawing.draw_threshold_curves .. py:function:: draw_perclass_roc(cx_to_info, classes=None, prefix='', fnum=1, fp_axis='count', **kw) :Parameters: * **cx_to_info** (*PerClass_Measures | Dict*) * **fp_axis** (*str*) -- can be count or rate .. py:function:: inty_display(val, eps=1e-08, ndigits=2) Make a number as inty as possible .. py:function:: _realpos_label_suffix(info) Creates a label suffix that indicates the number of real positive cases versus the total amount of cases considered for an evaluation curve. :Parameters: **info** (*Dict*) -- with keys, nsuppert, realpos_total .. rubric:: Example >>> info = {'nsupport': 10, 'realpos_total': 10} >>> _realpos_label_suffix(info) 10/10 >>> info = {'nsupport': 10.0, 'realpos_total': 10.0} >>> _realpos_label_suffix(info) 10/10 >>> info = {'nsupport': 10.3333, 'realpos_total': 10.22222} >>> _realpos_label_suffix(info) 10.22/10.33 >>> info = {'nsupport': 10.000000001, 'realpos_total': None} >>> _realpos_label_suffix(info) 10 >>> info = {'nsupport': 10.009} >>> _realpos_label_suffix(info) 10.01 .. py:function:: draw_perclass_prcurve(cx_to_info, classes=None, prefix='', fnum=1, **kw) :Parameters: **cx_to_info** (*PerClass_Measures | Dict*) .. rubric:: Example >>> # xdoctest: +REQUIRES(module:kwplot) >>> from kwcoco.metrics.drawing import * # NOQA >>> from kwcoco.metrics import DetectionMetrics >>> dmet = DetectionMetrics.demo( >>> nimgs=3, nboxes=(0, 10), n_fp=(0, 3), n_fn=(0, 2), classes=3, score_noise=0.1, box_noise=0.1, with_probs=False) >>> cfsn_vecs = dmet.confusion_vectors() >>> print(cfsn_vecs.data.pandas()) >>> classes = cfsn_vecs.classes >>> cx_to_info = cfsn_vecs.binarize_ovr().measures()['perclass'] >>> print('cx_to_info = {}'.format(ub.repr2(cx_to_info, nl=1))) >>> import kwplot >>> kwplot.autompl() >>> draw_perclass_prcurve(cx_to_info, classes) >>> # xdoctest: +REQUIRES(--show) >>> kwplot.show_if_requested() .. py:function:: draw_perclass_thresholds(cx_to_info, key='mcc', classes=None, prefix='', fnum=1, **kw) :Parameters: **cx_to_info** (*PerClass_Measures | Dict*) .. note:: Each category is inspected independently of one another, there is no notion of confusion. .. rubric:: Example >>> # xdoctest: +REQUIRES(module:kwplot) >>> from kwcoco.metrics.drawing import * # NOQA >>> from kwcoco.metrics import ConfusionVectors >>> cfsn_vecs = ConfusionVectors.demo() >>> classes = cfsn_vecs.classes >>> ovr_cfsn = cfsn_vecs.binarize_ovr(keyby='name') >>> cx_to_info = ovr_cfsn.measures()['perclass'] >>> import kwplot >>> kwplot.autompl() >>> key = 'mcc' >>> draw_perclass_thresholds(cx_to_info, key, classes) >>> # xdoctest: +REQUIRES(--show) >>> kwplot.show_if_requested() .. py:function:: draw_roc(info, prefix='', fnum=1, **kw) :Parameters: **info** (*Measures | Dict*) .. note:: There needs to be enough negative examples for using ROC to make any sense! .. rubric:: Example >>> # xdoctest: +REQUIRES(module:kwplot, module:seaborn) >>> from kwcoco.metrics.drawing import * # NOQA >>> from kwcoco.metrics import DetectionMetrics >>> dmet = DetectionMetrics.demo(nimgs=30, null_pred=1, classes=3, >>> nboxes=10, n_fp=10, box_noise=0.3, >>> with_probs=False) >>> dmet.true_detections(0).data >>> cfsn_vecs = dmet.confusion_vectors(compat='mutex', prioritize='iou', bias=0) >>> print(cfsn_vecs.data._pandas().sort_values('score')) >>> classes = cfsn_vecs.classes >>> info = ub.peek(cfsn_vecs.binarize_ovr().measures()['perclass'].values()) >>> # xdoctest: +REQUIRES(--show) >>> import kwplot >>> kwplot.autompl() >>> draw_roc(info) >>> kwplot.show_if_requested() .. py:function:: draw_prcurve(info, prefix='', fnum=1, **kw) Draws a single pr curve. :Parameters: **info** (*Measures | Dict*) .. rubric:: Example >>> # xdoctest: +REQUIRES(module:kwplot) >>> from kwcoco.metrics import DetectionMetrics >>> dmet = DetectionMetrics.demo( >>> nimgs=10, nboxes=(0, 10), n_fp=(0, 1), classes=3) >>> cfsn_vecs = dmet.confusion_vectors() >>> classes = cfsn_vecs.classes >>> info = cfsn_vecs.binarize_classless().measures() >>> import kwplot >>> kwplot.autompl() >>> draw_prcurve(info) >>> # xdoctest: +REQUIRES(--show) >>> kwplot.show_if_requested() .. py:function:: draw_threshold_curves(info, keys=None, prefix='', fnum=1, **kw) :Parameters: **info** (*Measures | Dict*) .. rubric:: Example >>> # xdoctest: +REQUIRES(module:kwplot) >>> import sys, ubelt >>> sys.path.append(ubelt.expandpath('~/code/kwcoco')) >>> from kwcoco.metrics.drawing import * # NOQA >>> from kwcoco.metrics import DetectionMetrics >>> dmet = DetectionMetrics.demo( >>> nimgs=10, nboxes=(0, 10), n_fp=(0, 1), classes=3) >>> cfsn_vecs = dmet.confusion_vectors() >>> info = cfsn_vecs.binarize_classless().measures() >>> keys = None >>> import kwplot >>> kwplot.autompl() >>> draw_threshold_curves(info, keys) >>> # xdoctest: +REQUIRES(--show) >>> kwplot.show_if_requested()