0

Ich versuche, ein Vorhersagemodell mit Python zu erstellen. Der Trainings- und Testdatensatz hat über 400 Variablen. Feature Auswahl an Trainingsdatensatz die Anzahl der Variablen reduziert auf 180Vorhersage nach Feature-Auswahl python

from sklearn.feature_selection import VarianceThreshold 
sel = VarianceThreshold(threshold = .9) 

über die Verwendung und dann trainiere ich ein Modell Gradienten Boosting-Algorithmus 0,84 AUC Genauigkeit bei der Kreuzvalidierung achieveing.

from sklearn import ensemble 
from sklearn.cross_validation import train_test_split 
from sklearn.metrics import roc_auc_score as auc 
df_fit, df_eval, y_fit, y_eval= train_test_split(df, y, test_size=0.2, random_state=1) 
boosting_model = ensemble.GradientBoostingClassifier(n_estimators=100, max_depth=3, 
                min_samples_leaf=100, learning_rate=0.1, 
                subsample=0.5, random_state=1) 
boosting_model.fit(df_fit, y_fit) 

Aber wenn ich dieses Modell zu verwenden, versuchen für Vorhersagedaten vorherzusagen setzt es mir Fehler geben

predict_target = boosting_model.predict(df_prediction) 
Error: Number of variables in prediction data set 'df_prediction' does not match the number of variables in the model 

was Sinn macht, da insgesamt Variablen in Testdaten bleiben über 400 seine Meine Frage ist sowieso, dieses Problem zu umgehen und weiterhin Feature-Auswahl für die prädiktive Modellierung zu verwenden. Denn wenn ich es entferne, sinkt die Genauigkeit des Modells auf 0,5, was sehr schlecht ist. Danke!

Antwort

1

Sie sollten Ihre Vorhersagematrix auch durch Ihre Featureauswahl transformieren. Also irgendwo im Code tun Sie

df = sel.fit_transform(X) 

und vor

df_prediction = sel.transform(X_prediction) 
+0

die Vorhersage, dass gearbeitet, kann nicht glauben, wie einfach es war. Ich danke dir sehr! – Uasthana