Cleanlab rank 模块完全指南:标签质量评分与数据排序 API 详解
Cleanlab rank 模块完全指南标签质量评分与数据排序 API 详解【免费下载链接】cleanlabCleanlabs open-source library is the standard>项目地址: https://gitcode.com/GitHub_Trending/cl/cleanlabcleanlab.rank是 Cleanlab 数据质量库中负责为每个数据点计算标签质量分数label quality score并据此排序的核心模块。在真实世界充满噪声标签的分类数据集中你可以用它对全量样本打分分数越低越可能是错误标签再通过排序快速定位最值得人工复核的样本或直接作为cleanlab.filter、cleanlab.classification等高层 API 的评分后端。读完本文你将掌握三种评分方法self_confidence / normalized_margin / confidence_weighted_entropy的数学定义与适用场景、集成模型评分方案、问题样本排序工具以及这些 API 在仓库源码与测试中的真实用法。一、模块定位一切排序问题的评分基础从 cleanlab/rank.py 的模块 docstring 可以明确该模块的定位为多分类multi-class数据集中的每个样本提供标签质量分数。除order_label_issues只作用于已被识别为潜在标签错误的子集外其余方法可以作用于你选择的任意数据子集包括整个数据集。拿到分数后一句np.argsort(label_quality_score)即可得到按质量升序排列的样本索引——这正是排序二字的直接体现。该模块有两个重要前提不支持多标签分类每个样本必须属于单一类别例如labels np.ndarray([1,0,2,1,1,0...])。多标签场景应改用cleanlab.multilabel_classification.get_label_quality_scores见 cleanlab/multilabel_classification/rank.py。分数精度依赖样本外预测概率评分最准确的前提是使用模型的样本外out-of-sample预测概率pred_probs建议通过交叉验证获取参考文档 docs/source/tutorials/pred_probs_cross_val.rst。二、核心 APIget_label_quality_scoresget_label_quality_scores(labels, pred_probs, *, methodself_confidence, adjust_pred_probsFalse)是整个模块的入口函数cleanlab/rank.py。它返回与样本一一对应的分数数组分数范围 0~11 表示标签很可能是正确的clean0 表示标签很可能错误dirty。2.1 参数详解参数类型/默认值说明labelsnp.ndarray噪声标签向量。K 类数据集取值必须为 0,1,...,K-1且仅支持单标签pred_probsnp.ndarray形状(N, K)模型预测概率P(labelk|x)列顺序必须对应类别 0,1,...,K-1methodself_confidence评分方法可选三种见下节adjust_pred_probsFalse是否通过减去类别置信阈值并重新归一化来校正类别不平衡True时启用2.2 三种评分方法的数学定义设第i个样本的给定标签为k labels[i]模型预测概率为P pred_probs[i]三种方法分别定义为cleanlab/rank.pynormalized_margin归一化边际P[k] - max_{k ! k}[P[k]]即给定标签的概率减去其余类别中最大概率。它擅长识别类别条件标签错误class conditional label errors——即数据本身属于类别集合C中的某个类但被标错了类。self_confidence自置信度P[k]即模型认为该样本属于其给定标签的概率。它更擅长识别替代性标签问题alternative label issues包括不属于C中任何类别的坏样本、同时被C中两个及以上类别良好描述的样本、以及分布外OOD异常样本。confidence_weighted_entropy置信度加权熵entropy(P) / self_confidence用自置信度对归一化熵加权。注意实际返回的分数可能是上述原始值的变换版本目的是保证数值落在 0~1 区间且越低越可疑。2.3 底层实现机制从源码看get_label_quality_scores首先调用assert_valid_inputs校验输入合法性允许单类别allow_one_classTrue随后委托给内部函数_compute_label_quality_scorescleanlab/rank.py该内部函数用字典scoring_funcs将方法名映射到三个具体实现函数方法名非法时抛出ValueError提示可选值若adjust_pred_probsTrue调用_subtract_confident_thresholds调整概率但confidence_weighted_entropy不支持该参数会直接抛错测试test_unsupported_method_for_adjust_pred_probs验证了这一点。类不平衡校正的细节在 cleanlab/internal/label_quality_utils.py先由get_confident_thresholds计算每个类别的置信阈值该类样本自置信度的期望均值执行pred_probs - confident_thresholds后再整体平移confident_thresholds.max()消除负值并重新归一化最终保证每行概率为正且和为 1测试test__subtract_confident_thresholds对此有严格断言。其中置信阈值的计算逻辑可进一步参阅 cleanlab/count.py 中的get_confident_thresholds。三、三个单方法评分函数模块同时暴露三个可直接调用的单方法函数注意它们不接受adjust_pred_probs是纯评分实现3.1 get_self_confidence_for_each_label定义在 cleanlab/rank.py实现极其简洁——用高级索引直接取每个样本给定标签位置的预测概率return pred_probs[np.arange(labels.shape[0]), labels]3.2 get_normalized_margin_for_each_label定义在 cleanlab/rank.py。先求自置信度再通过np.delete剔除每个样本的给定标签列后取最大概率作为max_prob_not_label最后做线性变换(self_confidence - max_prob_not_label 1) / 2将原始边际范围 -1~1映射到 0~1。3.3 get_confidence_weighted_entropy_for_each_label定义在 cleanlab/rank.py。核心步骤自置信度先做下界裁剪CLIPPING_LOWER_BOUND 1e-6见 cleanlab/internal/constants.py防止除零和对数计算出错用归一化熵除以自置信度再做log(scores 1) / scores变换压缩到 0~1。归一化熵由 cleanlab/internal/label_quality_utils.py 的get_normalized_entropy计算-sum(P * log P) / log(num_classes)除以log(K)相当于把熵的底数从自然对数换为 K从而将熵值缩放到 0~1。该方法会校验所有概率必须位于 [0,1] 区间否则抛出ValueError其中min_allowed_prob参数自 2.5.0 起已弃用应保持默认。四、集成模型评分get_label_quality_ensemble_scores真实项目中往往用多个模型或同一模型的多折组成集成。get_label_quality_ensemble_scores(labels, pred_probs_list, *, method, adjust_pred_probs, weight_ensemble_members_by, custom_weights, log_loss_search_T_values, verbose)cleanlab/rank.py接受一个pred_probs 列表每个元素对应一个模型对所有样本的预测为每个模型单独算分后再加权聚合最终仍返回 0~1 的分数数组。4.1 四种集成加权方案weight_ensemble_members_by含义实现要点uniform简单平均scores_ensemble.mean(axis1)accuracy按模型准确率加权权重 各模型准确率 / 准确率之和verbose 模式下会打印每个模型的 accuracy 与权重log_loss_search按负对数损失指数加权权重 ∝exp(-t * log_loss)t 从log_loss_search_T_values中搜索出使加权平均 pred_probs 的 log_loss 最小的值custom用户自定义权重权重数组长度必须等于模型数否则抛AssertionErrorlog_loss_search的实现细节cleanlab/rank.py对每个候选t先将各模型 pred_probs 裁剪下界CLIPPING_LOWER_BOUND并重新归一化计算exp(-t * log_loss(labels, pred_probs_clipped))作为原始权重并归一化再评估加权平均 pred_probs 在给定标签上的 log_loss最终保留 log_loss 最小的那一组权重。4.2 边界校验与默认值pred_probs_list必须是非空 list传入 np.array 或空列表都会抛AssertionError见测试test_bad_pred_probs_list_parameter_error列表只有一个元素时发出warnings.warn建议改用get_label_quality_scores传入custom_weights但weight_ensemble_members_by ! custom会抛ValueErrorlog_loss_search_T_values默认[1e-4, 1e-3, 1e-2, 1e-1, 1e0, 1e1, 1e2, 2e2]verboseTrue时打印集成加权方案可设False静默。五、问题样本排序工具5.1 order_label_issues为已识别的标签错误排序order_label_issues(label_issues_mask, labels, pred_probs, *, rank_byself_confidence, rank_by_kwargs{})cleanlab/rank.py接收一个布尔掩码True表示该样本是标签问题返回按标签质量分数升序排列的问题样本索引数组——排在越前面问题越严重。实现上先通过np.arange(len(labels))[label_issues_mask]得到问题索引再对全量数据计算分数并仅取问题子集排序。rank_by接受三种评分方法名rank_by_kwargs可透传adjust_pred_probs等参数传入非法方法名会抛ValueError见测试test_bad_rank_by_parameter_error。5.2 find_top_issues按任意质量分数取 Top-K 问题find_top_issues(quality_scores, *, top10)cleanlab/rank.py是一个通用工具接受任意形状为(N,)的质量分数数组不限于标签质量也可用于异常分数等返回分数最小的前top个索引即最可能存在问题的样本升序排列。当top大于数组长度或为None时自动取全量。测试test_find_top_issues验证了它既可以与cleanlab.outlier的 OOD 分数配合使用也能处理top超过样本数的情况。六、在高层 API 中的实际应用cleanlab.rank是整个库排序能力的底层基础设施仓库中多处直接复用cleanlab/filter.pyfind_label_issues的return_indices_ranked_by参数直接透传rank_by_kwargs给get_label_quality_scorescleanlab/filter.py并支持low_normalized_margin、low_self_confidence等基于分数的过滤策略cleanlab/filter.py。cleanlab/classification.pyCleanLearning在fit过程中调用get_label_quality_scores为每个样本计算label_quality列并写入label_issues_dfcleanlab/classification.py。cleanlab/experimental/label_issues_batched.py批量模式下复用find_top_issues与_compute_label_quality_scores完成问题筛选cleanlab/experimental/label_issues_batched.py。datalab 多标签/回归子模块各自通过cleanlab.multilabel_classification.rank与cleanlab.regression.rank的评分函数实现标签问题检测cleanlab/datalab/internal/issue_manager/multilabel/label.py。七、测试验证评分与排序的正确性保障仓库测试 tests/test_rank.py 对模块行为做了系统验证可作为理解语义的参考排序有效性test_get_normalized_margin_for_each_label与test_get_self_confidence_for_each_label断言——全样本中分数最低的样本必然属于真实标签错误集合分数最高的样本必然不属于。这直接印证了分数越低越可疑的语义。一致性test_order_label_issues_using_scoring_func_ranking参数化遍历三种方法 ×adjust_pred_probs两种取值断言order_label_issues的排序结果与手工按分数排序完全一致。集成一致性test_ensemble_scoring_func验证当集成中所有模型的 pred_probs 都相同时集成分数与单模型分数误差小于1e-6。健壮性非法方法名、空/非 list 的pred_probs_list、错误长度的custom_weights、custom_weights与加权方案不匹配等场景均有对应的异常断言。测试数据生成方式tests/test_rank.py也很有参考价值用cleanlab.benchmarking.noise_generation生成噪声矩阵与噪声标签再经count.estimate_py_noise_matrices_and_cv_pred_proba通过 3 折交叉验证得到样本外 pred_probs——这正对应模块 docstring 中建议使用样本外预测概率的最佳实践。八、使用建议与注意事项输入格式labels必须为 0~K-1 的整数向量pred_probs形状为(N, K)且列顺序与类别一致模块不支持多标签输入。样本外预测优先用交叉验证生成 pred_probs方法见 docs/source/tutorials/pred_probs_cross_val.rst否则分数会被模型过拟合偏差污染。方法选择怀疑错误主要来自类别间标错选normalized_margin怀疑存在分布外/模糊/多义样本选self_confidenceconfidence_weighted_entropy更偏不确定性度量且不支持类不平衡校正。类不平衡数据类别严重不平衡时可将adjust_pred_probsTrue校正概率后再评分。集成场景多模型集成用get_label_quality_ensemble_scores其中log_loss_search加权方案无需人工调权重适合作为默认选择之一。九、总结cleanlab.rank以一个分数 一套排序的极简抽象为标签错误检测、数据清洗与样本优先级排序提供了统一入口。三种评分方法覆盖了类别条件错误与分布外异常两类主要噪声模式集成评分与 Top-K 工具则让它能无缝嵌入真实生产流水线。理解本模块后你可以直接基于它构建自定义的数据质量报告、主动学习采样策略或训练集清洗流程。【免费下载链接】cleanlabCleanlabs open-source library is the standard>项目地址: https://gitcode.com/GitHub_Trending/cl/cleanlab创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考