0
votes

Multilabelbinarizer donne des caractères individuels au lieu des classes

Je travaille sur un problème de classification de texte multi-étiquettes. Afin de coder les étiquettes, j'utilise multilabelbiniazerzerzarizer code>. Les étiquettes de l'ensemble de données ressemblent - xxx pré>

quand j'utilise p> xxx pré>

Ça me donne - P>

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]])


1 commentaires

Je ne connais pas très bien cette classe spécifique, mais pourquoi faites-vous mlb.fit ([y_train]) au lieu de mlb.fit (y_train) ?


3 Réponses :


1
votes

Parce que lorsque vous appelez 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": xxx pré>

Il explique également pourquoi lorsque vous appelez 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> xxx pré>

à la place, vous devez appeler les différentes fonctions avec juste Y_TRAIN CODE>: P>

mlb.fit(y_train)
mlb.fit_transform(y_train)


0 commentaires

2
votes

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: xxx < / pré>

binarisez les étiquettes en utilisant sklearn : xxx

et vous obtiendrez la sortie souhaitée, où y_label_binarisé est: xxx

et mlb.classes _ est xxx


2 commentaires

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.



1
votes

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(', '))


0 commentaires