2016-08-02 11 views
0

ich ein Projekt in der klinischen Textklassifikation tue. In meinem Korpus sind die Daten bereits mit einem Code versehen (Beispiele: 768.2, V13.02, V13.09, 599.0 ...). Ich habe bereits Text und Labels getrennt und dann Word-Embedded für Text verwendet. Ich werde sie in ein neuronales Faltungsnetzwerk einspeisen. Wie auch immer, die Labels müssen codiert werden, ich habe Beispiele für Sentiment-Textklassifizierung und Mnist gelesen, aber sie alle verwendeten Ganzzahlen, um ihre Daten zu klassifizieren, mein Label in Textform, weshalb ich keine Ein-Hot-Kodierung wie sie verwenden kann. Kann jemand irgendeinen Vorschlag machen? Dank Encoding Datenetikett für Textklassifikation

+0

Sie können für einzelne Etiketten One-Hot-Codierung verwenden. Beispielsweise können Sie für die Beschriftungen "Ja", "Nein" und "Vielleicht" "Nein = 0", "Ja = 1", "Vielleicht = 2" zuweisen und dann in mehrere binäre/fortlaufende Beschriftungen codieren. – Mephy

+0

Danke Mephy, meine Textdaten sind nach 45 Labels geordnet. Einige der Texte können zwei Etiketten gleichzeitig haben. – ngoduyvu

Antwort

1

Discrete Textlabel leicht umwandelbar diskrete numerische Daten durch eine Aufzählungsumsetzung zu schaffen. Wenn zum Beispiel angenommen, die Etiketten „Ja“, „Nein“ und „Vielleicht“:

No -> 0 
Yes -> 1 
Maybe -> 2 

Und jetzt haben Sie numerische Daten, die später wieder umgerechnet werden können (solange der Algorithmus diejenigen, die als diskrete Werte zu behandeln und gib nicht 0.5 oder so zurück.

Im Fall jede Instanz kann Multiples Etiketten haben, wie Sie in einem Kommentar sagte, Sie die Codierung, indem jedes Etikett in einer Spalte erstellen können („One-Hot-Codierung“). Selbst wenn einige Software dies nicht von der Stange implementiert, ist es nicht schwer, sie von Hand zu erledigen.

Hier ist ein sehr einfache (und nicht gut geschrieben, ehrlich zu sein) Beispiel mit get_dummies Funktion des Panda:

import numpy as np 
import pandas as pd 
labels = np.array(['a', 'b', 'a', 'c', 'ab', 'a', 'ac']) 
df = pd.DataFrame(labels, columns=['label']) 
ndf = pd.get_dummies(df) 
ndf.label_a = ndf.label_a + ndf.label_ab + ndf.label_ac 
ndf.label_b = ndf.label_b + ndf.label_ab 
ndf.label_c = ndf.label_c + ndf.label_ac 
ndf = ndf.drop(['label_ab', 'label_ac'], axis=1) 
ndf 

    label_a label_b label_c 
0 1.0  0.0  0.0 
1 0.0  1.0  0.0 
2 1.0  0.0  0.0 
3 0.0  0.0  1.0 
4 1.0  1.0  0.0 
5 1.0  0.0  0.0 
6 1.0  0.0  1.0 

kann man jetzt auch ein multivariaten Modell zur Ausgabe trainiert die Werte von label_a, label_b und label_c und dann rekonstruiere die ursprünglichen Bezeichnungen wie "ab". Stellen Sie nur sicher, dass die Ausgabe in der Menge [0, 1] ist (durch Anwenden von softmax-layer oder ähnlichem).

+0

Danke Merphy, ich habe dich ideal. Coud Ich benutze get_dummies, um kategorische Labels in Integer-Zahlen umzuwandeln, und benutze sie dann, um sie in one_hot-Encodierungen einzufügen. – ngoduyvu

+0

Hey Merphy, ich habe dein Ideal aber mein Projekt in Tensorflow implementieren lassen. Das neuronale Netzwerk benötigt nur Tensor nicht Array. Wissen Sie, wie ich diese kategorischen Daten in numerische Daten implementieren könnte, die ein ähnliches Ergebnis wie in Tensorflow haben? – ngoduyvu

1

Dit 4 Minuten Video (Corsera: ML-Klassifizierung (University of Washington) -> Week1 -> Encoding kategorische Eingänge) https://www.coursera.org/learn/ml-classification/lecture/kCY0D/encoding-categorical-inputs

Es gibt zwei Methoden der Codierung:

  1. One Hot Encoding

  2. Tasche von Wörtern (ich denke, das geeignetere Verfahren ist in diesem Fall)

folgende Diagramm beschreibt, wie Beutel von Wörtern Methode funktioniert. Text kann 10.000 verschiedene Wörter haben, die von ihm kommen, oder mehr, viele mehr, Millionen. Und was Bag of Words tut, nimmt diesen Text und kodiert ihn dann als Zählimpulse.

enter image description here

bearbeiten 1

Python Implementierung: Besuchen http://www.python-course.eu/text_classification_python.php

+0

Dank Sayali, ich Ihren idealen bekam, damit ich 46 Etiketten, erstelle ich ein Array von 46 und wenn der Text das Etikett, habe ich es auf 1 wie (00100000..0). Ich weiß wirklich nicht, wie man den Code dafür schreibt, weißt du irgendeine Funktion in Python das tun? – ngoduyvu

+0

https://www.kaggle.com/c/word2vec-nlp-tutorial/details/part-1-for-beginners-bag-of-words –

+0

Sie diese Funktion in finden Scikit-Learn Bibliothek –