2017-01-08 2 views
2

Ich versuche eine Webanwendung für die Vorhersage von Verzögerungen bei Fluggesellschaften zu erstellen. Ich habe mein Modell offline auf meinem Computer trainiert und versuche jetzt, eine Flask-App zu erstellen, um basierend auf Benutzereingaben Vorhersagen zu treffen. Zur Vereinfachung sagen wir, mein Modell hat 3 kategorische Variablen: UNIQUE_CARRIER, ORIGIN und DESTINATION. Während des Trainings, erstelle ich Dummy-Variablen aller 3 unter Verwendung von Pandas:Wie erstellt man Dummy-Variablen für die Vorhersage von Benutzereingaben (nur ein Datensatz)?

df = pd.concat([df, pd.get_dummies(df['UNIQUE_CARRIER'], drop_first=True, prefix="UNIQUE_CARRIER")], axis=1) 
df = pd.concat([df, pd.get_dummies(df['ORIGIN'], drop_first=True, prefix="ORIGIN")], axis=1) 
df = pd.concat([df, pd.get_dummies(df['DEST'], drop_first=True, prefix="DEST")], axis=1) 
df.drop(['UNIQUE_CARRIER', 'ORIGIN', 'DEST'], axis=1, inplace=True) 

So jetzt mein Merkmalsvektor ist 297 lang (vorausgesetzt, es gibt 100 verschiedene einzigartige Träger und 100 verschiedene Flughäfen in meinen Daten). Ich habe mein Modell mit Essiggurke gespeichert und versuche nun anhand von Benutzereingaben vorherzusagen. Die Benutzereingabe hat jetzt die Form von 3 Variablen (Ursprung, Ziel, Träger).

Offensichtlich kann ich pd.get_dummies (weil es nur einen eindeutigen Wert für alle drei Felder geben würde) für jede Benutzereingabe nicht verwenden. Was ist der effizienteste Weg, um die Benutzereingabe in den Feature-Vektor für mein Modell zu konvertieren?

+0

können Sie nach, was der Kopf von 'df' aussieht, nachdem Sie wie oben gezeigt Verarbeitung? – AlexG

+1

Ich würde vorschlagen, [scikit-learns 'OneHotEncoder'] (http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html#sklearn.preprocessing.OneHotEncoder) anstelle von 'get_dummies' zu verwenden. Mit dieser Methode erstellen Sie ein Objekt, mit dem neue Daten transformiert werden können. – AlexG

+0

Danke für den Vorschlag! – RRC

Antwort

0

Da Sie Pandas Dummies verwenden und damit dichte Vektoren, ein guter Weg, um einen neuen Vektor zu schaffen, wäre ein dict von Begriffen zu erstellen: vector_index und dann ein Nullen Vektor bevölkern nach ihm, etwas entlang der Linien der folgenden jetzt

index_dict = dict(zip(df.columns,range(df.shape[1]))) 

wenn Sie einen neuen Flug gebucht haben:

new_vector = np.zeroes(297) 
try: 
    new_vector[index_dict[origin]] = 1 
except: 
    pass 
try: 
    new_vector[index_dict[destination]] = 1 
except: 
    pass 
try: 
    new_vector[index_dict[carrier]] = 1 
except: 
    pass 
Verwandte Themen