Мне нужно оптимизировать гиперпараметры LinearSVC с помощью GridSearchCV и получать очень разные результаты, касающиеся оценок лучшего оценщика и оценки, когда я снова тренирую svm с наилучшим найденным параметром (см. «Оценка, переобученная с лучшим параметром»).
Код Python выглядит следующим образом:
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))
Результат:
Best score: 0.784
Best parameter: {'svm__C' : 0.00390625}
Best estimator score: 0.6991
score retrained with best parameter: 0.7968
Может быть, я неправильно использую StandardScaler? А может я что-то не так делаю?
Большое спасибо за любой совет