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.
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
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.
train2 und test2 haben die gleichen Spalten. Fill_value gibt den Wert an, der für fehlende Spalten verwendet werden soll.
Tags und Links python scikit-learn dataframe prediction dummy-variable