如何定义数据集是一个多类或多标签问题

问题描述 投票:0回答:1

我真的对多类和多标签术语感到困惑,我有一个数据集如下:

fe_1, fe_2, lb_1, lb_2
12, 34, A, A
34, 56, C, C
...

要求在lb_1或lb_2内,A,C不能同时出现,而在lb_1和lb_2之间,A,A或C,C必须出现,这意味着我的最终标签应该是[A,A] ,[A,C],[C,A],[C,C] 我认为这应该是一个多类多标签问题,我的同事更有信心它应该只是一个多类问题,而从 sklearn 包来看,它是一个多标签指示器。 我的问题是,

  1. 如果是多标签问题,模型能知道哪个A、C属于哪个类吗?会不会意外地使 lb_1 中的 A,C 或 lb_2 中的 A,C 同时发生?

  2. 对于多标签问题,允许标签列同时出现,标签值只能为0/1,这里0/1表示“存在与否”?如果每个标签列中有两个以上的值并且不能同时发生怎么办?例如,我将 lb_2 中的 A,C 替换为 B,D,并且我需要确保 lb_1 中的 A,C 和 lb_2 中的 B,D 不能同时发生,这意味着当我获取一行数据时,它应该有 4 个可能的结果 {[A,B],[A,D],[C,B],[C,D]},这次 sklearn 包检测到这是一个多类多输出问题,所以如果这是真的,可以多类-多输出确保lb_1和lb_2同时出现,并且在lb_1或lb_2内,不同的标签不能同时出现?

  3. 如果我的问题需要多类多输出,任何人都可以建议我一种方法来处理这个多类多输出数据集中的不平衡问题吗? SMote Tomek Link 似乎只能处理一维数组,不知道如何使用 ADASYN,如果我将原始 lb_2 标签从 [A,C] 分配到 [B,D],MLSMOTE 也不起作用

感谢您的帮助和耐心!

multilabel-classification multiclass-classification
1个回答
1
投票

根据我的理解,每个样本有两个输出(L1,L2),其标签可以是:(a,a),(a,c),(c,a),(c,c)。

sklearn
将其定义为多标签分类(2 个或更多输出,其中每个输出都是二进制的)。

每个输出都采用 a 或 c 中的一个类别(二元分类)。多标签方面是每个样本都分配有

two二进制标签。 L1 是二进制的,可以是独立于 L2 的 A 或 C。这意味着理论上该模型可以预测 (A, A)、(C, C)、(A, C) 和 (C, A)。

但是,根据我的理解,就您而言,AA 和 CC 不是有效的组合。严格执行此操作的一种方法是将问题重新定义为简单的“二元分类”,其中唯一允许的两个输出是:0 代表“AC”,1 代表“CA”。您需要删除无效的 L1-L2 组合,将两个有效组合映射到 0(“AC”)和 1(“CA”),然后将二元分类器拟合到这个新的二元目标。

或者,如果您不想删除(A,A)和(C,C)样本,并将其保留为多标签设置,则可以使用下面的一些选项。


我最初的想法是模型将适应您的数据......因此,如果您的数据反映了这些约束,那么一个好的模型将主要以所需的方式运行。

影响

sklearn

中模型的一种方法是在拟合时使用

sample_weight=

参数。您可以将 (a,a) 和 (c,c) 样本的权重设置为零,使模型忽略它们,因此模型只会受到 (a,c) 和 (c,a) 标签的影响。
一个潜在的替代方案是使用像 PyTorch 这样的框架,您可以在其中对 (a,a) 和 (c,c) 预测严重惩罚模型,这将推动模型做出此类预测,尽管它不能保证他们的缺席。

© www.soinside.com 2019 - 2024. All rights reserved.