多标签分类深度学习

数据挖掘 深度学习 神经网络
2022-02-25 01:30:48

我有一个多标签分类问题,我有多个目标,每个目标都是一个列表。

每个目标的预测可以是一个或多个项目的列表(一种或多种蔬菜和一种或多种水果)

Features                            lables :  

  A        B       C                Vegetable                fruits
   1       3        8               [carrot, corn, carrot]   [Apricot, Cherry]
   1       3        8               [eggplant, pepper]       [Mango ]
   1       3        8               [carrot]                 [Banana, Cherry, Mango]

我想知道什么是正确的方法,例如什么是正确的模型,或者是否有类似问题的预定义模型或预定义模型?

2个回答

如果您正在考虑每个配方完全不同的标签,尽管可能存在成分交叉,您应该将您的目标编码为不同的类,就像您通常对标签进行编码一样,例如:

>>> le = preprocessing.LabelEncoder()
>>> le.fit(["paris", "paris", "tokyo", "amsterdam"])
LabelEncoder()
>>> list(le.classes_)
['amsterdam', 'paris', 'tokyo']
>>> le.transform(["tokyo", "tokyo", "paris"])
array([2, 2, 1]...)
>>> list(le.inverse_transform([2, 2, 1]))
['tokyo', 'tokyo', 'paris']

您将嵌套列表作为类对象,因此要执行上述操作,您可以将标签列的类型更改为字符串,如下所示:

df['str_labels'] = [','.join(map(str, l)) for l in df['list_labels']]
df

   list_labels             str_labels
0  [carrot, corn, carrot]  carrot, corn, carrot
1  [eggplant, pepper]      eggplant, pepper

它被称为多输出、多标签分类多输出是一组以上的目标,并且在每个单独的目标中可以有多个标签。

一种选择是在尝试神经网络之前从传统的机器学习开始。Scikit-learn 使用MultiOutputClassifier支持这种问题形成