.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/metrics/plot_autc.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_examples_metrics_plot_autc.py: AUTC ------------------------- Historgram and Metrics for random scores with different delta. .. GENERATED FROM PYTHON SOURCE LINES 8-16 .. code-block:: Python :lineno-start: 9 import torch import numpy as np import matplotlib.pyplot as plt from pytorch_ood.utils.metrics import binary_clf_curve from pytorch_ood.utils import OODMetrics .. GENERATED FROM PYTHON SOURCE LINES 17-18 Parameters .. GENERATED FROM PYTHON SOURCE LINES 18-32 .. code-block:: Python :lineno-start: 19 # delta between in and ood data near_delta = 2 far_delta = 10 # split in_samples_num = 9 out_samples_num = 1 # random torch tensors offset = 10**3 in_scores = torch.rand(in_samples_num * offset) out_scores = torch.rand(out_samples_num * offset) .. GENERATED FROM PYTHON SOURCE LINES 33-34 Define function .. GENERATED FROM PYTHON SOURCE LINES 34-84 .. code-block:: Python :lineno-start: 36 def metrics_and_plots(in_scores, out_scores, delta, name): metrics = OODMetrics() # concat all scores scores = torch.cat([in_scores, out_scores + delta]) # create labels labels = torch.cat([torch.zeros_like(in_scores), torch.ones_like(out_scores)]) metrics.update(scores, -labels) metric_dict = metrics.compute() print(name, metric_dict) # Create a single figure with two subplots fig, axes = plt.subplots(1, 2, figsize=(12, 5)) # Plot histogram axes[0].hist( in_scores.cpu().numpy(), bins=100, alpha=0.5, label="In-Distribution", color="tab:blue", ) axes[0].hist( (out_scores + delta).cpu().numpy(), bins=100, alpha=0.5, label="Out-of-Distribution", color="tab:orange", ) axes[0].set_title(f"{name} Histogram", weight="bold") axes[0].set_xlabel("Scores") axes[0].set_ylabel("Frequency") axes[0].legend(loc="upper right") # Plot FPR and FNR curve fpr, tpr, thresholds = binary_clf_curve(labels, scores) axes[1].plot(thresholds, fpr, label="FPR", color="tab:blue") axes[1].plot(thresholds, 1 - tpr, label="FNR", color="tab:orange") axes[1].set_title(f"{name} FPR and FNR", weight="bold") axes[1].set_xlabel("Thresholds") axes[1].set_ylabel("Rate") axes[1].legend(loc="best") # Adjust layout and save plt.tight_layout() plt.savefig(f"{name}_metrics_plots.png") plt.show() .. GENERATED FROM PYTHON SOURCE LINES 85-86 Plot and calculate metrics .. GENERATED FROM PYTHON SOURCE LINES 86-88 .. code-block:: Python :lineno-start: 86 metrics_and_plots(in_scores, out_scores, near_delta, "Near") metrics_and_plots(in_scores, out_scores, far_delta, "Far") .. rst-class:: sphx-glr-horizontal * .. image-sg:: /auto_examples/metrics/images/sphx_glr_plot_autc_001.png :alt: Near Histogram, Near FPR and FNR :srcset: /auto_examples/metrics/images/sphx_glr_plot_autc_001.png :class: sphx-glr-multi-img * .. image-sg:: /auto_examples/metrics/images/sphx_glr_plot_autc_002.png :alt: Far Histogram, Far FPR and FNR :srcset: /auto_examples/metrics/images/sphx_glr_plot_autc_002.png :class: sphx-glr-multi-img .. rst-class:: sphx-glr-script-out .. code-block:: none Near {'AUROC': 0.9999999403953552, 'AUTC': 0.16641604900360107, 'AUPR-IN': 1.0, 'AUPR-OUT': 0.9999999403953552, 'FPR95TPR': 0.0} Far {'AUROC': 1.0, 'AUTC': 0.04535288363695145, 'AUPR-IN': 1.0, 'AUPR-OUT': 1.0, 'FPR95TPR': 0.0} .. _sphx_glr_download_auto_examples_metrics_plot_autc.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_autc.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_autc.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_autc.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_