Skip to content

feat: add class_names support to Precision, Recall, FBeta metrics - #3732

Merged
vfdev-5 merged 2 commits into
pytorch:masterfrom
aniketpandey05:feature/class-names-precision-recall
Sep 3, 2026
Merged

vfdev-5 merged 2 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 Outdated
Comment thread ignite/metrics/recall.py
Comment thread tests/ignite/metrics/test_precision.py
@aniketpandey05
aniketpandey05 force-pushed the feature/class-names-precision-recall branch from 9c71695 to 817f33b Compare August 1, 2026 15:14
@aniketpandey05

Copy link
Copy Markdown
Contributor Author

@aaishwarymishra

Comment thread ignite/metrics/fbeta.py Outdated
Comment thread ignite/metrics/fbeta.py Outdated
Comment thread ignite/metrics/fbeta.py
Comment thread ignite/metrics/fbeta.py Outdated
@aniketpandey05
aniketpandey05 force-pushed the feature/class-names-precision-recall branch from 3a93092 to 7e12121 Compare August 3, 2026 10:49
@aniketpandey05

Copy link
Copy Markdown
Contributor Author

Hi @aaishwarymishra, thanks for the review! I've updated the implementation:

Comment thread ignite/metrics/fbeta.py Outdated
Comment thread ignite/metrics/fbeta.py Outdated
Comment thread ignite/metrics/fbeta.py Outdated
@aaishwarymishra

Copy link
Copy Markdown
Collaborator

Also try to reslove previous comments it gets hard to read the code :)

@aniketpandey05
aniketpandey05 force-pushed the feature/class-names-precision-recall branch from aebabb1 to 7b8ce31 Compare August 6, 2026 08:03
@github-actions github-actions Bot added module: contrib Contrib module docker examples Examples ci CI module: base Base module module: utils Utils module labels Aug 23, 2026
@aniketpandey05
aniketpandey05 force-pushed the feature/class-names-precision-recall branch 2 times, most recently from f16f33b to 9882fa3 Compare August 23, 2026 16:30
@vfdev-5 vfdev-5 removed docs module: engine Engine module module: handlers Core Handlers module module: distributed Distributed module module: contrib Contrib module docker examples Examples ci CI module: base Base module module: utils Utils module labels Sep 1, 2026

@vfdev-5 vfdev-5 left a comment

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.

Thanks @aniketpandey05 , looks good to me!

Comment thread ignite/metrics/fbeta.py Outdated
@aniketpandey05
aniketpandey05 force-pushed the feature/class-names-precision-recall branch from 88c2a26 to 443ed42 Compare September 2, 2026 16:21
Signed-off-by: Aniket Pandey <aniketpandey25092005@gmail.com>
@aniketpandey05
aniketpandey05 force-pushed the feature/class-names-precision-recall branch from 443ed42 to a752d75 Compare September 2, 2026 16:26
@vfdev-5

vfdev-5 commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

@aniketpandey05 can you please send a separate PR with a fix for the pyrefly: either put ignore the error or if it is possible to fix it would be fine as well. Thanks!

@vfdev-5

vfdev-5 commented Sep 3, 2026

Copy link
Copy Markdown
Collaborator

Made this PR to fix pyrefly: #3835

@vfdev-5
vfdev-5 enabled auto-merge September 3, 2026 11:59
@vfdev-5
vfdev-5 added this pull request to the merge queue Sep 3, 2026
Merged via the queue into pytorch:master with commit d91d8ed Sep 3, 2026
26 checks passed
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