2017-06-08 6 views
1

Supposons que je souhaite utiliser un LinearSVC pour effectuer une validation croisée sur un jeu de données. Comment pourrais-je effectuer la standardisation sur les données? La meilleure pratique que j'ai lue est de construire votre modèle de normalisation sur vos données d'entraînement, puis d'appliquer ce modèle aux données de test.Comment standardiser les données avec sklearn cross_val_score()

Quand on utilise un simple train_test_split(), cela est facile que nous pouvons faire simplement:

X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y) 

clf = svm.LinearSVC() 

scalar = StandardScaler() 
X_train = scalar.fit_transform(X_train) 
X_test = scalar.transform(X_test) 

clf.fit(X_train, y_train) 
predicted = clf.predict(X_test) 

Comment peut-on aller sur la normalisation des données tout en faisant k fois-validation croisée? Le problème vient du fait que chaque point de données sera pour l'entrainement/test donc vous ne pouvez pas tout standardiser avant cross_val_score(). N'auriez-vous pas besoin d'une normalisation différente pour chaque validation croisée?

Les docs ne mentionnent pas la standardisation qui se passe en interne dans la fonction. Suis-je SOL?

EDIT: Ce poste est super utile: Python - What is exactly sklearn.pipeline.Pipeline?

Répondre

2

Vous pouvez utiliser un Pipeline de combiner les deux processus, puis l'envoyer dans le cross_val_score(). Lorsque le fit() est appelé sur le pipeline, il va adapter toutes les transformations les unes après les autres et transformer les données, puis ajuster les données transformées en utilisant l'estimateur final. Et pendant predict() (Disponible seulement si le dernier objet dans le pipeline est un estimateur, sinon transform()) il appliquera des transformations aux données, et prédira avec l'estimateur final.

Comme ceci:

scalar = StandardScaler() 
clf = svm.LinearSVC() 

pipeline = Pipeline([('transformer', scalar), ('estimator', clf)]) 

cv = KFold(n_splits=4) 
scores = cross_val_score(pipeline, X, y, cv = cv) 

Découvrez différents exemples de pipeline pour mieux la comprendre:

Ne hésitez pas à demander en cas de doute.