Comment appliquer de la normalisation pour les SVMs dans scikit-learn?

J'utilise la version stable actuelle 0.13 des scikit-learn. Je suis de l'application d'un linéaire de vecteurs de support classificateur à certaines données à l'aide de la classe sklearn.svm.LinearSVC.

Dans le chapitre sur le préprocesseur dans scikit-learn documentation, j'ai lu les suivantes:

De nombreux éléments utilisés dans la fonction objectif d'un algorithme d'apprentissage (comme le noyau RBF des Machines à Vecteurs de Support ou de la l1 et de la l2 regularizers de modèles linéaires) supposons que toutes les fonctionnalités sont centrées autour de zéro et ont de la variance dans le même ordre. Si une fonction a un écart qui est des ordres de grandeur de plus que les autres, il pourrait dominer la fonction objectif et de faire de l'estimateur sont incapables d'apprendre des autres caractéristiques correctement comme prévu.

Question 1: la normalisation Est utile pour les SVMs, en général, également pour les personnes avec un linéaire de la fonction noyau, comme dans mon cas?

Question 2: Comme je le comprends, je dois calculer la moyenne et l'écart-type sur les données d'apprentissage et d'appliquer cette même transformation sur les données de test à l'aide de la classe sklearn.prétraitement.StandardScaler. Cependant, ce que je ne comprends pas, c'est que j'ai de transformer les données d'entraînement en tant que bien ou tout simplement les données de test avant d'alimenter le SVM.

Qui est, dois-je faire ceci:

scaler = StandardScaler()
scaler.fit(X_train)                # only compute mean and std here
X_test = scaler.transform(X_test)  # perform standardization by centering and scaling

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

Ou dois-je faire ceci:

scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)  # compute mean, std and transform training data as well
X_test = scaler.transform(X_test)  # same as above

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

En bref, dois-je utiliser scaler.fit(X_train) ou scaler.fit_transform(X_train) sur les données d'apprentissage afin d'obtenir des résultats raisonnables avec LinearSVC?

InformationsquelleAutor pemistahl | 2013-02-04