Papers › Confident Learning: Estimating Uncertainty in Dataset Labels

Confident Learning: Estimating Uncertainty in Dataset Labels

31 Oct 2019arXiv:1911.00068archive 2025-07-28

Curtis G. Northcutt, Lu Jiang, Isaac L. Chuang

Learning exists in the context of data, yet notions of confidence typically focus on model predictions, not label quality. Confident learning (CL) is an alternative approach which focuses instead on label quality by characterizing and identifying label errors in datasets, based on the principles of pruning noisy data, counting with probabilistic thresholds to estimate noise, and ranking examples to train with confidence. Whereas numerous studies have developed these principles independently, here, we combine them, building on the assumption of a class-conditional noise process to directly estimate the joint distribution between noisy (given) labels and uncorrupted (unknown) labels. This results in a generalized CL which is provably consistent and experimentally performant. We present sufficient conditions where CL exactly finds label errors, and show CL performance exceeding seven recent competitive approaches for learning with noisy labels on the CIFAR dataset. Uniquely, the CL framework is not coupled to a specific data modality or model (e.g., we use CL to find several label errors in the presumed error-free MNIST dataset and improve sentiment classification on text data in Amazon Reviews). We also employ CL on ImageNet to quantify ontological class overlap (e.g., estimating 645 "missile" images are mislabeled as their parent class "projectile"), and moderately increase model accuracy (e.g., for ResNet) by cleaning data prior to training. These results are replicable using the open-source cleanlab release.

PaperPDFCodeCode Syntology ran

In Syntology Open this paper in Syntology's Atlas, the map of the papers in Syntology's graph and their citations.

For agents, Syntology's MCP tool lists every function and class Syntology harvested from this paper and whether it ran (how to connect): get_harvested_code_for_paper(arxiv_id="1911.00068")

Code

Syntology Ran 4 of 29 code samples harvested from 4 repositories linked to this paper; 25 have no recorded run. Of those that ran: 2 ran · our draft was wrong; 2 ran · fixture could not drive it.

By repository: official repository: 2 samples from 1 repository, 2 ran; community (archive-listed): 27 samples from 3 repositories, 2 ran. The run record, sample by sample. “Ran” means executed on a synthesized input, not that the code is correct or reproduces the paper.

cleanlab/cleanlab officialmentioned in papermentioned on GitHubpytorch report
cgnorthcutt/confidentlearning-reproduce mentioned on GitHubpytorch report
chang-yue/ctrl mentioned on GitHubpytorchMIT report
cleanlab/examples mentioned on GitHubpytorchApache-2.0 report

Repository list and official/mentioned flags are the archive's, frozen 2025-07-28. Reachability, where shown, is from one Syntology probe window (2026-09-16 to 2026-09-18); repositories not probed show nothing. GitHub stars are not tracked.

Code Syntology ran Syntology

29 samples harvested; 4 ran; 0 honoured the contract we drafted; 25 have no recorded run. Read from Syntology's graph 2026-09-24; that is when this build read the record, not when the samples ran.

2ran · our draft was wrong
2ran · fixture could not drive it
25unverified

Licence: 3 of the 29 samples are pointer only, meaning Syntology does not serve that copy's text. This page shows no code text for any sample; each one links to its file in the repository.

Harvested from 4 repositories linked to this paper, official or community; each sample names its own and says which. “Ran” means the sample executed on a synthesized input. It does not mean the output is correct, and nothing here reproduces the paper's results. “Honoured” and “violated” refer to a contract Syntology drafted from the code itself; “our draft was wrong” and “fixture could not drive it” are failures of Syntology's instrument, not of the code.

Each sample ends with its code_sha256, Syntology's identity for that exact code. An agent fetches the stored sample with Syntology's MCP tool get_code(code_sha256="…") (how to connect); click an identity to copy that call.

Repository labels, per sample. official repository: The archive marks this repository official for the paper. named in the paper: The archive records that the paper mentions this repository; it is not marked official. community (archive-listed): In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper. found in paper text by Syntology: Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted. community: Not in the archive's code links for this paper; a community repository Syntology harvested. Samples from a repository marked official are listed first. Licence labels name the repository's licence as recorded at harvest. “Pointer only” means Syntology does not serve that copy's text, for one of four reasons: no licence file was found; the licence was not identified; the licence is recorded as permissive but that copy's record is not marked cleared; or the licence is outside the permissive list Syntology serves text under (MIT, Apache-2.0, BSD and similar). Some licences outside that list permit redistribution, such as WTFPL, and GPL-3.0 under its conditions; they are simply not on the list. Hover a licence label for the reason. File links open the file on GitHub at the default branch, which may have changed since the harvest.

make_high_dim_data cleanlab/cleanlab/tests/test_classification.py official repository ran · our draft was wrong fingerprinted Apache-2.0 (permissive) · 1c153ef503aaf9eb · report
make_rare_label cleanlab/cleanlab/tests/test_classification.py official repository ran · our draft was wrong Apache-2.0 (permissive) · fd166ad20264e6c5 · report
accuracy cgnorthcutt/confidentlearning-reproduce/cifar10/cifar10_train_crossval.py community (archive-listed) ran · fixture could not drive it licence not identified · pointer only · fdaf5cebb0291130 · report
validate cgnorthcutt/confidentlearning-reproduce/cifar10/cifar10_train_crossval.py community (archive-listed) ran · fixture could not drive it licence not identified · pointer only · c2ddc9bead0fdccb · report
ResNet18 chang-yue/ctrl/cifar10/models/resnet.py community (archive-listed) unverified MIT (permissive) · 62ec8bcaa46b3dd9 · report
ResNet34 chang-yue/ctrl/cifar10/models/resnet.py community (archive-listed) unverified MIT (permissive) · f9bdc20fe8505a75 · report
ResNet50 chang-yue/ctrl/cifar10/models/resnet.py community (archive-listed) unverified MIT (permissive) · 552c65482043842b · report
add_new_annotator cleanlab/examples/active_learning_multiannotator/utils/active_learning.py community (archive-listed) unverified Apache-2.0 (permissive) · 99b009a70defaf35 · report
compute_mask chang-yue/ctrl/clustering.py community (archive-listed) unverified MIT (permissive) · 19c73d208a6decaf · report
convert_examples_to_features cleanlab/examples/entity_recognition/run_ner.py community (archive-listed) unverified Apache-2.0 (permissive) · d885b9e5d1082285 · report
create_folds cleanlab/examples/entity_recognition/token_classification_tutorial_utils.py community (archive-listed) unverified Apache-2.0 (permissive) · a3996dd996610e41 · report
data_loader cleanlab/examples/fasttext_amazon_reviews/fasttext_wrapper.py community (archive-listed) unverified Apache-2.0 (permissive) · f452766c96419106 · report
get_dataLoader chang-yue/ctrl/tabular/neural_net.py community (archive-listed) unverified MIT (permissive) · c7de0d291388fff4 · report
get_file_path chang-yue/ctrl/cifar10/cifar10_train.py community (archive-listed) unverified MIT (permissive) · 1eb3b80ba5b9be37 · report
get_pred_probs cleanlab/examples/entity_recognition/token_classification_tutorial_utils.py community (archive-listed) unverified Apache-2.0 (permissive) · 82eb499efbc9df49 · report
get_probs cgnorthcutt/confidentlearning-reproduce/cifar10/cifar10_train_crossval.py community (archive-listed) unverified licence not identified · pointer only · c84054e10c7be2c8 · report
get_probs chang-yue/ctrl/cifar10/cifar10_train.py community (archive-listed) unverified MIT (permissive) · 2a12b21504e8e284 · report
get_silhouette_score chang-yue/ctrl/clustering.py community (archive-listed) unverified MIT (permissive) · a29df62168676716 · report
modified cleanlab/examples/entity_recognition/token_classification_tutorial_utils.py community (archive-listed) unverified Apache-2.0 (permissive) · ba493b5ddfd2a7d5 · report
moving_avg chang-yue/ctrl/clustering.py community (archive-listed) unverified MIT (permissive) · b7de9a2eab9a6e44 · report
nn_get_stats chang-yue/ctrl/tabular/neural_net.py community (archive-listed) unverified MIT (permissive) · 414063771e92cb73 · report
readfile cleanlab/examples/entity_recognition/run_ner.py community (archive-listed) unverified Apache-2.0 (permissive) · 217e4fc276ef67c1 · report
setup_next_iter_data cleanlab/examples/active_learning_multiannotator/utils/active_learning.py community (archive-listed) unverified Apache-2.0 (permissive) · dff282e739a467b7 · report
shuffle_data chang-yue/ctrl/tabular/utils.py community (archive-listed) unverified MIT (permissive) · 9225a7b054268f0b · report
shuffle_split_data chang-yue/ctrl/tabular/utils.py community (archive-listed) unverified MIT (permissive) · 6574f335f3554108 · report
sum_xval_folds cleanlab/examples/multiannotator_cifar10/utils/model_training.py community (archive-listed) unverified Apache-2.0 (permissive) · 40573427c196c6d0 · report
sum_xval_folds cleanlab/examples/outlier_detection_cifar10/utils/model_training.py community (archive-listed) unverified Apache-2.0 (permissive) · 385ff3ba7097eae0 · report
train_NN chang-yue/ctrl/tabular/neural_net.py community (archive-listed) unverified MIT (permissive) · 6fb7710e0e5b9e28 · report
validate chang-yue/ctrl/cifar10/cifar10_train.py community (archive-listed) unverified MIT (permissive) · 903f61ae8c27c53b · report

Tasks

Learning with noisy labelsSentiment AnalysisSentiment Classification

Results from the paper archive 2025-07-28

No leaderboard rows for this paper in the archive.

Methods

Pruning

Report a problem or propose a change · a person checks every report against the paper or source before anything changes; decisions are listed on /corrections