Результаты из GridSearchCV / RandomizedSearchCV невозможно воспроизвести, запустив одну модель с использованием тех же параметров. - PullRequest
0 голосов
/ 02 июля 2019

Я запускаю RandomizedSearchCV с 5-кратным увеличением, чтобы найти лучшие параметры.У меня есть удерживающий набор (X_test), который я использую для прогнозирования.Моя часть кода:

svc= SVC(class_weight=class_weights, random_state=42)
Cs = [0.01, 0.1, 1, 10, 100, 1000, 10000]
gammas = [1e-1, 1e-2, 1e-3, 1e-4, 1e-5]

param_grid = {'C': Cs,
              'gamma': gammas,
              'kernel': ['linear', 'rbf', 'poly']}

my_cv = TimeSeriesSplit(n_splits=5).split(X_train)
rs_svm = RandomizedSearchCV(SVC(), param_grid, cv = my_cv, scoring='accuracy', 
                              refit='accuracy', verbose = 3, n_jobs=1, random_state=42)
rs_svm.fit(X_train, y_train)
y_pred = rs_svm.predict(X_test)
cm = confusion_matrix(y_test, y_pred)
clfreport = classification_report(y_test, y_pred)
print (rs_svm.best_params_)

Результат - отчет о классификации: Results after RS

Теперь я заинтересован в воспроизведении этого результата с использованием прогона в одиночкумодель (не рандомизированный поиск CV) с выбранными параметрами:

from sklearn.model_selection import TimeSeriesSplit
tcsv=TimeSeriesSplit(n_splits=5)
for train_index, test_index in tcsv.split(X_train):
    train_index_ = int(train_index.shape[0])
    test_index_ = int(test_index.shape[0])
    X_train_, y_train_ = X_train[0:train_index_],y_train[0:train_index_]
    X_test_, y_test_ = X_train[test_index_:],y_train[test_index_:]
    class_weights = compute_class_weight('balanced', np.unique(y_train_), y_train_)
    class_weights = dict(enumerate(class_weights))
    svc= SVC(C=0.01, gamma=0.1, kernel='linear', class_weight=class_weights, verbose=True,
             random_state=42)
    svc.fit(X_train_, y_train_)

y_pred_=svc.predict(X_test)
cm = confusion_matrix(y_test, y_pred_)
clfreport = classification_report(y_test, y_pred_)

В моем понимании clfreports должны быть идентичны, но мой результат после этого прогона:

Stand-Alone model

У кого-нибудь есть предложения, почему это может происходить?

1 Ответ

1 голос
/ 02 июля 2019

Учитывая ваш первый фрагмент кода, где вы используете RandomizedSearchCV, чтобы найти лучшие гиперпараметры, вам не нужно снова делать расщепление; Итак, во втором фрагменте вы должны просто подобрать, используя найденные гиперпараметры и веса классов, используя весь свой тренировочный набор, а затем предсказать на своем тестовом наборе:

class_weights = compute_class_weight('balanced', np.unique(y_train), y_train)
class_weights = dict(enumerate(class_weights))
svc= SVC(C=0.01, gamma=0.1, kernel='linear', class_weight=class_weights, verbose=True, random_state=42)
svc.fit(X_train, y_train)

y_pred_=svc.predict(X_test)
cm = confusion_matrix(y_test, y_pred)
clfreport = classification_report(y_test, y_pred)

Обсуждение в Порядке между использованием проверочных, обучающих и тестовых наборов может быть полезно для пояснения процедуры ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...