Wie gehe ich mit Funktionen um, die nicht immer verfügbar sind?


8

Ich habe ein Feature in meinem Feature-Vektor, das nicht immer verfügbar ist. Manchmal (für einige Beispiele) macht es keinen Sinn, es zu verwenden. Ich füttere einen sklearn MLPClassifier mit diesem Merkmalsvektor. Lernt das neuronale Netzwerk von selbst, wenn das Merkmal für seine Entscheidung sinnvoll ist, oder muss ich dem Merkmalsvektor ein Flag hinzufügen, das beispielsweise "1" sagt, wenn es sinnvoll ist, oder "0", wenn es keinen Sinn ergibt .

Antworten:


1

Wenn die Funktion in einer Teilmenge der Beispiele keinen Sinn ergibt, bedeutet dies nicht, dass dies ein separater Datensatz ist (oder sein sollte), der ein zweites Modell benötigt? Das ist ein Ansatz, über den ich nachdenken würde.

Die zweite wäre, mit den Daten (Feature) selbst zu arbeiten. Es ist wahrscheinlich am besten, einen neutralen Wert zu verwenden.

  • Bei numerischem Wert:
    • Versuchen Sie es mit einem Mittelwert oder Medianwert, der für alle Einträge berechnet wird
    • Versuchen Sie es mit einem Extremwert, z. B. -1, wenn Ihre Funktion nur positive Werte hat. Dies sollte darauf hinweisen, dass die Funktion fehlt und das Netzwerk damit umgehen kann.
  • Bei Textwerten, z. B. Worteinbettungen, ersetzen Sie den Wert durch einen Platzhalter N/A, der keine Einbettung enthält

0

Wenn die Funktionen, mit denen Sie trainieren, nicht dieselben sind, mit denen Sie vorhersagen möchten, haben Sie mehrere Möglichkeiten:

  1. Trainieren Sie das Modell so, dass das betreffende Feature nicht verwendet wird, da es nicht in Ihrem Vorhersagedatensatz enthalten ist.
  2. Setzen Sie einen Wert für diese Funktion ein, wenn sie in Ihrem Datensatz fehlt. In Ihrem Beispiel können Sie davon ausgehen, dass es "0" ist, wenn es fehlt, aber Sie müssen dies basierend auf dem Datensatz und Ihrer Intuition entscheiden.

Wenn die Merkmalsvektorlängen Ihres Trainingssatzes und des Vorhersagesatzes unterschiedlich sind, treten Fehler im Vorhersagesatz auf.


0

Je nach Problem können Sie das Problem lösen, indem Sie diese Werte löschen und sie mit einer Schätzung versehen, wenn dies möglich ist. Eine andere Strategie besteht darin, Features auf einer -1,1-Skala zu skalieren und diese Werte beispielsweise mit -3 zu belegen. Verwenden Sie dann einige robuste Methoden, die die "Ausreißer" vollständig ignorieren. Hoffe das hilft.


0

In den Fällen können Sie die Dummy-Variablencodierung verwenden. Sie können diese Idee auch auf Ihr Problem ausweiten. Ich werde das Verfahren für eine einfache lineare Regression veranschaulichen.

Stellen Sie sich vor, wir möchten das Einkommen einer Person anhand der jahrelangen Ausbildung , der gelehrten Vorlesungen , der veröffentlichten und der aktuellen akademischen Position . Die Stichprobe enthält sowohl akademische als auch nichtakademische Personen.yix1ix2ix3ix4i

1. Alternative : Weisen Sie natürliche Hohlraumwerte zu. ZB Wenn wir ein Kind suchen, ist es nicht sinnvoll, das Einkommen einzubeziehen. Das Einkommen hat jedoch einen natürlichen Leerwert von . Sie können überprüfen, ob Ihre Variablen auch einen solchen ungültigen Wert zulassen.0

2. Alternative : Sie können den Datensatz in zwei Gruppen aufteilen (akademisch und nicht akademisch). Und führen Sie zwei separate Modelle aus.

3. Alternative : eine neue Dummy-Variable Diese Variable ist wenn die Person nicht akademisch ist, und der Wert ist wenn die Person akademisch ist. Dann würde Ihr Regressionsmodell so aussehenis_academic x5i0i1i

yi=w0+w~0x5i+w1x1i+w~1x5ix1i+w~2x5ix2i+w~3x5ix3i++w~4x5ix4i+εi

Unser Datensatz ist also nicht sondern Jetzt ist der Datensatz vollständig, aber das Modell verwendet keine lineare Basisfunktion mehr.x1i,x2i,x3i,x4i,yix1i,x5i,x5ix1i,x5ix2i,x5ix3i,x5ix4i,yi

Ebenso können Sie über Ihr Dataset nachdenken und Dummy-Variablen einführen, wenn Sie feststellen, dass einige Funktionen nur für eine Teilstichprobe in Ihrem Dataset vorhanden / nützlich sind.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.