Seite 1 von 1

GridSearchCV: Wann StandardScaler notwendig?

Verfasst: Dienstag 7. Mai 2019, 21:45
von CodeIt
Hallo,
ich versuche die optimalen Hyperparameter für eine SVM per GridSearch zu finden.
Der Datensätz wäre FashionMNIST.
Wenn ich einfach nur eine SVM trainiere, dann normalisiere ich die Daten zuvor wie z.B. in folgendem Code:

Code: Alles auswählen

from keras.datasets import fashion_mnist
import numpy as np
from sklearn.svm import LinearSVC
from sklearn.model_selection import GridSearchCV

(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()

#normalisieren der Daten
x_train = x_train/255
x_test = x_test/255

#trainieren eines Modells mithilfe Default-Parameter
svm = LinearSVC().fit(x_train.reshape(-1,784),y_train)
print(svm.score(x_test.reshape(-1,784), y_test))
print(svm.score(x_train.reshape(-1,784), y_train))
Wenn ich jedoch die optimalen Hyperparameter per GridsearchCV bestimmten möchte, sollte ich dann trotzdem noch den
StandardScaler verwenden, sowie im folgenden Code? Oder sollte ich diesem Fall das obige Normalisieren (x_train /255....) nicht durchführen?

Code: Alles auswählen

#suchen der optimalen Hyperparameter per GridSearchCV
pipeline = Pipeline([
    ("scaler", StandardScaler()),
    ("svm", LinearSVC())])
param_grid = {"svm__C":np.arange(0.00001,100,1)}
clf = GridSearchCV(pipeline, param_grid, cv=5, return_train_score=True)
clf.fit(x_train.reshape(-1,784), y_train)

print('Beste Parameter: ', clf.best_params_)
print('Test_Score: ', clf.score(x_test.reshape(-1,784), y_test))
print('Train_Score: ', clf.score(x_train.reshape(-1,784), y_train))
Vielen Dank im voraus

Re: GridSearchCV: Wann StandardScaler notwendig?

Verfasst: Dienstag 7. Mai 2019, 21:53
von __deets__
Der standard scaler macht ja was anderes. Wenn du selbst normalisierst, würde ich den weglassen.

Re: GridSearchCV: Wann StandardScaler notwendig?

Verfasst: Dienstag 7. Mai 2019, 21:59
von CodeIt
Das würde dann bedeutet, nur wenn die Daten nicht schon bereits normalisiert wurden (sowie in meinen 1. Code), dann sollte man bei GridSearch einen StandardScaler verwenden.

Re: GridSearchCV: Wann StandardScaler notwendig?

Verfasst: Dienstag 7. Mai 2019, 22:28
von __deets__
Ich habe mal gelernt SVMs sind am besten mit werten zwischen 0..1. Der Standard scaler stellt die NICHT her. Sondern normalisiert (wenn ich das recht verstehe) auf eine standardabweichung von 1. das ist was anderes. Ich würde das darum nicht machen. Aber wie oft beim ML - Versuch macht kluch.

Re: GridSearchCV: Wann StandardScaler notwendig?

Verfasst: Mittwoch 8. Mai 2019, 06:13
von ThomasL
Die MNIST Daten bewegen sich zwischen 0 und 255.
Wenn du die durch 255 teilst bekommst du Werte zwischen 0.0 und 1.0.

Der Standartscaler macht by default etwas anderes:
class sklearn.preprocessing.StandardScaler(copy=True, with_mean=True, with_std=True)
Standardize features by removing the mean and scaling to unit variance
The standard score of a sample x is calculated as:
z = (x - u) / s
where u is the mean of the training samples or zero if with_mean=False, and s is the standard deviation of the training samples or one if with_std=False.
Du kannst die gleiche Funktionalität durch die Parameter with_mean=False, with_std=False erreichen.
Dann aber vorher nicht extra durch 255 teilen.