2017-04-18 3 views
1

Ein Problem, auf das ich stieß, wenn Sie mit einem Feature ausgewählte Datensatz vorhersagen, ist, dass, wenn Sie bestimmte Funktionen ausgewählt haben, wenn Sie auf dem Testdatensatz vorhersagen, die Testdatensatzfunktionen nicht ausgerichtet werden weil der Trainingsdatensatz aufgrund der Merkmalauswahl weniger Merkmale hätte. Wie implementieren Sie die Merkmalauswahl ordnungsgemäß, sodass der Testdatensatz die gleichen Merkmale wie der Trainingsdatensatz aufweist?Implementieren von Funktionsauswahl

Beispiel:

from sklearn.datasets import load_iris 
from sklearn.feature_selection import SelectKBest 
from sklearn.feature_selection import chi2 
iris = load_iris() 
X, y = iris.data, iris.target 
X.shape 
(150, 4) 
X_new = SelectKBest(chi2, k=2).fit_transform(X, y) 
X_new.shape 
(150, 2) 
+0

Sie müssen 'Ihre Tests zu setzen transform' ... Und * nicht * verwenden' fit_transform', aber nur 'transform'. –

+0

@ juanpa.arrivillaga Meine einzige Sorge ist, wenn die Merkmalauswahl auf dem Testdatensatz implementiert wird, gibt es eine Möglichkeit, andere Reihe von Eigenschaften von der des Trainingsdatensatzes zu erreichen? – user

+1

Sie * nicht * Feature wählen Sie auf die Testdaten aus genau diesem Grund. –

Antwort

2

Sie haben Ihre Prüfung zu setzen, um transform ... Und nicht Verwendung fit_transform, aber nur transform. Hierfür müssen Sie Ihr SelectKBest Objekt speichern, so etwas in der Art von:

selector = SelectKBest(chi2, k=2) 
X_train_clean = selector.fit_transform(X_train, y_train) 
X_test_clean = selector.transform(X_test) 
0

Ich glaube, Sie feature_selector Objekt erstellen möchten, indem sie mit SelectKBest ersten Einpassen und dann transform Ihre Testdaten. Wie so:

feature_selector = SelectKBest(chi2, k=2).fit(X_train, y) 
X_train_pruned = feature_selector.transform(X_train) 
X_test_pruned = feature_selector.transform(X_test)