Je travaille sur un problème de classification de texte multi-étiquettes. Afin de coder les étiquettes, j'utilise quand j'utilise p> Ça me donne - P> multilabelbiniazerzerzarizer code>. Les étiquettes de l'ensemble de données ressemblent -
array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])
3 Réponses :
Parce que lorsque vous appelez Il explique également pourquoi lorsque vous appelez à la place, vous devez appeler les différentes fonctions avec juste mlb.fit ([y_train]) code>, vous n'aboralisez pas vos données de formation à Multilabelbinarizer - Vous passez une matrice avec un seul élément, ce tableau étant votre données d'entraînement. Cela explique pourquoi vos classes sont bizarres - chaque "classe" est l'un de vos "échantillons":
fit_transform code>, vous en obtenez un classe avec chaque valeur définie sur 1 - parce que vous l'avez transmis un échantillon, qui contenait
[cs.ai, cs.cc] code> et
[cs.ai, cs.cv] code> et ainsi de suite - il interpréta chacun de ceux-ci comme une classe et que vos données globales définies comme un seul échantillon. p>
Y_TRAIN CODE>: P>
mlb.fit(y_train)
mlb.fit_transform(y_train)
Cela ne fonctionnait pas car vos étiquettes ne sont pas dans le format souhaité. Il devrait s'agir d'une liste des listes. Dans votre exemple, vous avez 5 lignes de données, chacune avec 5 étiquettes, vos étiquettes doivent être une liste de 5 listes d'étiquettes (1 liste d'étiquettes pour 1 ligne de données), chaque liste d'étiquettes avec les 5 étiquettes: binarisez les étiquettes en utilisant et vous obtiendrez la sortie souhaitée, où et sklearn code>: p>
y_label_binarisé code> est: p>
mlb.classes _ code> est p>
Lors du chargement de mon jeu de données, je me lâche les indésirables cité des étiquettes et les étiquettes ont l'air: «` `` «CS.ai», 'cs.cl', 'cs.cv', 'cs.ne', ' stat.ml '] [' cs.cl ',' cs.ai ',' cs.lg ',' cs.ne ',' stat.ml '] [' cs.cl ',' cs.ai ',' " cs.lg ',' cs.ne ',' stat.ne '] `` `` "Quand je le fais:` `` mlb = multilabelbinariseur () mlb.fit_transform ([arxiv_data [' labels ']]) MLB.Classes_ `` ` `Je reçois:` `` `` `([" ["CS.ai ',' cs.ar ']", "[' CS.AI ',' CS.CC ',' CS.DM ',' CS.LG '] "," [' CS.ai ',' cs.cc ',' cs.it ',' cs.lg ',' math.it '] ", ..."], dtype = objet) `` `
Je ne sais pas ce que vous dites. Mais si vous souhaitez utiliser Sklearn Package, vous devez préparer vos données sous la forme que Sklearn attend.
cela a résolu le problème: strong> Premièrement, vous devez vous débarrasser des supports / guillemets: P> one_hot = MultiLabelBinarizer()
y_classes = one_hot.fit_transform(data['labels'].str.split(', '))
Je ne connais pas très bien cette classe spécifique, mais pourquoi faites-vous
mlb.fit ([y_train]) code> au lieu de
mlb.fit (y_train) code>?