zl程序教程

您现在的位置是:首页 >  其它

当前栏目

cleanlab实战处理二之处理多分类任务标签

处理 实战 任务 分类 标签
2023-09-14 09:13:20 时间

0.总结

  • LawsonAbs的认知与思考,不一定完善和准确,还请各位读者怀批判思维阅读。
  • 持续更新

1.需求

想使用cleanlab 这个工具,找出数据中错误的人工标注的标签。
普通的标签任务有两种:

  • 单标签
  • 多标签
    单标签的任务使用 cleanlab 较好实现,这里主要介绍一 使用cleanlab完成多标签任务中错误标注标签的查找
    实现这个任务,只需要6行代码。如下所示:
from cleanlab.pruning import get_noise_indices
# 输入
# s:噪声标签
# psx: n x m 的预测概率概率,通过交叉验证获得
ordered_label_errors = get_noise_indices(
    s=numpy_array_of_noisy_labels,
    psx=numpy_array_of_predicted_probabilities,
    sorted_index_method='normalized_margin', # Orders label errors
 )

针对之前对cleanlab的学习,分别调整好s,psx的值就可以作为参数传入了。但是它们的格式该怎么控制呢?

2.数据格式

这里以我做的一个任务为例,介绍一下s,psx取值的情况。

有1000个样本,153中标签,每个样本可以有多个标签。

  • 原始标签 s
    在 一个实体可以分为很多类 的这种任务中,s是一个list of list,但是必须其中的每个list都必须是numpy array类型,那么最后得到的s长如下的样子:
    在这里插入图片描述
  • 概率矩阵 psx
    是一个n*m的矩阵,不过依然是用numpy 中的arraay存储。格式如下:
    在这里插入图片描述

3.运行结果

在这里插入图片描述
得到的结果中,如果是为True,则说明该人工标注的标签可能存在问题。

4.存在的问题

4.1

可能在运行的过程中出现如下问题:
cleanlab ValueError: operands could not be broadcast together with shapes (10,195),(2,)
这种问题的原因就是 标签数对应不上导致出错。上面的这个报错(10,195),(2,)指的是你想做一个10*195的分类,但实际存在的标签只有2个,这个工作就无法进行下去所以报错了。也就是 {总标签集合}的个数 > {实际出现的标签集合}的个数
修改的方法就是:只将人工标注的标签的集合总数作为m值。

5.参考文章

  • https://github.com/cgnorthcutt/cleanlab/issues/41