Skip to content

feat: add class_names support to Precision and Recall metrics#3732

Open
aniketpandey05 wants to merge 10 commits into
pytorch:masterfrom
aniketpandey05:feature/class-names-precision-recall
Open

feat: add class_names support to Precision and Recall metrics#3732
aniketpandey05 wants to merge 10 commits into
pytorch:masterfrom
aniketpandey05:feature/class-names-precision-recall

Conversation

@aniketpandey05

@aniketpandey05 aniketpandey05 commented Apr 14, 2026

Copy link
Copy Markdown
Contributor

Fixes #1466

Description:
Adds an optional class_names parameter to _BasePrecisionRecall, allowing compute() to return a labeled dict instead of an unnamed tensor when average=False or average=None. Useful for per-class metric tracking where knowing which score belongs to which class matters for logging and visualization.

Check list:

  • New tests are added (if a new feature is added)
  • New doc strings: description and/or example code are in RST format
  • Documentation is updated (if required)

@github-actions github-actions Bot added the module: metrics Metrics module label Apr 14, 2026
@aaishwarymishra

Copy link
Copy Markdown
Collaborator

ok so like wont this code break fbeta metric when precision and recall have average=False and they have class_names, we need to update the fbeta too to support this.

There can be more metrics that can benefit from this change. I am not sure though.

Comment thread ignite/metrics/precision.py Outdated
@aniketpandey05

Copy link
Copy Markdown
Contributor Author

@aaishwarymishra would raising errors for those condition a better option or should we add full class_name support to fbeta

@aaishwarymishra

Copy link
Copy Markdown
Collaborator

I am not sure, adding support for the class names in fbeta would be easier, but fbeta uses the MetricsLambda for overloading operator we can update them, I am not sure @vfdev-5 what you think would be appropriate?

@steaphenai

Copy link
Copy Markdown
Contributor

Could we please clarify Fbeta behavior when class_names is used with average=False/None

@vfdev-5

vfdev-5 commented Apr 21, 2026

Copy link
Copy Markdown
Collaborator

I am not sure, adding support for the class names in fbeta would be easier, but fbeta uses the MetricsLambda for overloading operator we can update them, I am not sure @vfdev-5 what you think would be appropriate?

If we can compute F1 score per class than we should propagate the dict structure until the output of the F1 otherwise, take .values() of the dict output from precision and recall.

@aniketpandey05

Copy link
Copy Markdown
Contributor Author

Hey @vfdev-5 , would adding a helper in metric.py to handle dict arithmetic in all operator overloads so the dict propagates through to the Fbeta output be a good approach? Also when average=True and class_names is set, should Fbeta return a scalar float or propagate the dict as is?

@vfdev-5

vfdev-5 commented May 3, 2026

Copy link
Copy Markdown
Collaborator

Hey @vfdev-5 , would adding a helper in metric.py to handle dict arithmetic in all operator overloads so the dict propagates through to the Fbeta output be a good approach? Also when average=True and class_names is set, should Fbeta return a scalar float or propagate the dict as is?

I do not know, what would you suggest? Let's try to make it the most simple possible and intuitively clear.

@aniketpandey05

aniketpandey05 commented May 21, 2026

Copy link
Copy Markdown
Contributor Author

hey @vfdev-5 I think Fbeta should return a per-class dict if class_names is set, regardless of average.

@vfdev-5

vfdev-5 commented May 21, 2026

Copy link
Copy Markdown
Collaborator

@rogueslasher ok, let's implement that this way and see if this works as expected

@aniketpandey05

Copy link
Copy Markdown
Contributor Author

Hey @vfdev-5, would adding a _dict_aware_op helper in metric.py and updating all operator overloads to use it for element-wise dict arithmetic, and skipping average in fbeta.py when class_names is set be a good idea? It touches all operator overloads in metric.py which affects all metrics.

i am worried since it touches all operators overloads

@aniketpandey05

Copy link
Copy Markdown
Contributor Author

@aaishwarymishra ,would love your help in this can you look into it more please

@aaishwarymishra

Copy link
Copy Markdown
Collaborator

@rogueslasher well , I am not sure to be honest i wont touch the metric operators as it kind of affect every metric, for a case which can be only relevant for very few metrics, I think we should modify Fbeta directly.

@aniketpandey05 aniketpandey05 force-pushed the feature/class-names-precision-recall branch from 61e7680 to 7ea2eb5 Compare June 30, 2026 13:48
@aniketpandey05

Copy link
Copy Markdown
Contributor Author

@aaishwarymishra the header rules and other three preview checks are taking insane amount of time . is there any issue

@aaishwarymishra

Copy link
Copy Markdown
Collaborator

Documentation issue :)

@aniketpandey05

Copy link
Copy Markdown
Contributor Author

@aaishwarymishra

Comment thread ignite/metrics/recall.py
Comment on lines +101 to +105
<<<<<<< HEAD
or ``average=None``. If provided, ``compute()`` returns a ``dict`` mapping each class
=======
or ``average=None``. If provided, :meth:`compute` returns a ``dict`` mapping each class
>>>>>>> 7ea2eb50590597780ffae1ab3dc4c7ede3c80be7

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think its from the conflict you forgot to resolve

Comment thread ignite/metrics/recall.py

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you should try to pre-commit we recently moved from the black formatter to ruff, that may be the reason for docstring problem but not sure.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There should be tests for recall too

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

module: metrics Metrics module

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add ability to add class name for metrics

4 participants