ich muß die Hyperparameter einer LinearSVC mithilfe von GridSearchCV optimieren.
Erstaunlicherweise ist die Accuracy des besten gefundenen Modells aus GridSearchCV (clf.best_score_) mit 0.6991, wesentlich niedriger als die Accuracy welche beim Training der LinearSVC mit dem vollen Trainingsdatensatz und den optimierten Hyperparameter erzielt wird (0.7968).
Meine Vermutung ist, dass ich evtl. den StandardScaler falsch anwende.
Der Code wäre folgender:
Code: Alles auswählen
from sklearn.svm import LinearSVC
from sklearn.preprocessing import StandardScaler
import numpy as np
from sklearn.model_selection import GridSearchCV
def tuning_hyper_params(X, y,
X_test=X_test,
y_test=y_test,
cv=10,
scoring='accuracy',
c_range=np.logspace(-16,10,14, base=2),
seed=7):
seed = seed
np.random.seed(seed)
pipeline = Pipeline([
("scaler", StandardScaler()),
("svm", LinearSVC(loss='hinge'))])
param_grid=[{'svm__C': c_range}]
clf = GridSearchCV(pipeline, param_grid=param_grid, cv=cv, scoring=scoring, n_jobs=-1)
clf.fit(X,y)
print('\n Best score: ',clf.best_score_)
print('\n Best parameter: ', clf.best_params_)
scaler = StandardScaler()
scaler.fit(X)
X = scaler.transform(X)
X_test = scaler.transform(X_test)
y_pred = clf.predict(X_test)
print(classification_report(y_test, y_pred))
print("Best estimator score: ",clf.best_estimator_.score(X_test, y_test))
test = LinearSVC(C= clf.best_params_['svm__C'], loss='hinge')
test.fit(X,y)
print("score retrained with best parameter: ", test.score(X_test, y_test))
Nach dem Ausführen dieses Codes erhalte ich folgende Ergebnisse:
Code: Alles auswählen
Best score: 0.784
Best parameter: {'svm__C' : 0.00390625}
Best estimator score: 0.6991
score retrained with best parameter: 0.7968
Vielleicht fällt jemanden der Grund für diese Diskrepanz ins Auge.
Vielen Dank im voraus