Halten Sie die gleiche Dummy-Variable in Trainings- und Testdaten

8

Ich baue ein Vorhersagemodell in Python mit zwei separaten Trainings- und Test-Sets. Die Trainingsdaten enthalten numerische kategoriale Variablen, z. B. Postleitzahl, [91521,23151,12355, ...], und auch string-kategorische Variablen, z. B. city ['Chicago', 'New York', 'Los Angeles', ...].

Um die Daten zu trainieren, benutze ich zuerst 'pd.get_dummies', um eine Dummy-Variable dieser Variablen zu erhalten, und passe das Modell dann an die transformierten Trainingsdaten an.

Ich mache die gleiche Transformation an meinen Testdaten und prognostiziere das Ergebnis mit dem trainierten Modell. Allerdings habe ich den Fehler 'ValueError: Anzahl der Features des Modells muss mit der Eingabe übereinstimmen. Modell n_features ist 1487 und Eingabe n_features ist 1345 '. Der Grund dafür ist, dass in den Testdaten weniger Dummy-Variablen enthalten sind, da weniger "Stadt" und "Postleitzahl" vorhanden sind.

Wie kann ich dieses Problem lösen? Zum Beispiel wird "OneHotEncoder" nur alle kategorialen Variablen des numerischen Typs codieren. 'DictVectorizer ()' wird nur alle kategorialen Variablen des Stringtyps codieren. Ich suche online und sehe ein paar ähnliche Fragen, aber keine von ihnen beantwortet meine Frage wirklich.

Umgang mit kategorialen Merkmalen mit scikit-learn

Ссылка

Ссылка

    
nimning 26.12.2016, 19:54
quelle

3 Antworten

13

Sie können auch die fehlenden Spalten abrufen und sie zum Test-Dataset hinzufügen:

%Vor%

Dieser Code stellt auch sicher, dass die Spalte, die sich aus der Kategorie im Testdatensatz ergibt, aber nicht im Trainingsdatensatz enthalten ist, entfernt wird

    
Thibault Clement 28.07.2017 04:59
quelle
11

Angenommen, Sie haben im Zug- und Test-Datensatz identische Namen. Sie können verkettete Datasets aus Train und Test generieren, Dummies aus verketteten Datasets abrufen und sie teilen, um sie zu trainieren und zu testen.

Sie können es so machen:

%Vor%

Als Ergebnis haben Sie die gleiche Anzahl an Funktionen für Zug- und Testdaten.

    
Eduard Ilyasov 27.12.2016 04:34
quelle
1
%Vor%

train2 und test2 haben die gleichen Spalten. Fill_value gibt den Wert an, der für fehlende Spalten verwendet werden soll.

    
user1482030 11.11.2017 16:50
quelle