GridSearchCV - какие данные следует использовать?

В настоящее время я работаю над проблемой бинарной классификации с примерно 2000 точками данных в обучающем наборе, и мне интересно, следует ли мне использовать весь обучающий набор для gridsearch или я должен сначала сделать разделение для генерации данных проверки. У меня есть 2 варианта на выбор. Первый - с разделением train / val, а второй - без разделения (GridSearchCV для всего обучающего набора)

1. Вариант

Сплит поезд / вал

X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, stratify=y, random_state=rs)

GridSearchCV в SVC (только с использованием x_train и y_train)

skf = StratifiedKFold(n_splits=splits, shuffle=True, random_state=rs)

params = {"C": [0.12, 0.13, 0.14, 0.15]}
        
clf = GridSearchCV(SVC(random_state=rs), params, cv=skf, n_jobs=-1, scoring=monetary_score)
clf.fit(X_train, y_train)

print(grid.best_params_)
print(grid.best_score_, "\n")
print(grid.best_estimator_)

Использование набора для проверки

final_clf = clf.best_estimator_

y_pred = final_clf.predict(X_val)
cm = confusion_matrix(y_val, y_pred)
print(cm)

2. Вариант

GridSearchCV в SVC (с использованием всех x и y)

skf = StratifiedKFold(n_splits=splits, shuffle=True, random_state=rs)

params = {"C": [0.12, 0.13, 0.14, 0.15]}
        
clf = GridSearchCV(SVC(random_state=rs), params, cv=skf, n_jobs=-1, scoring=monetary_score)
clf.fit(X, y)

print(grid.best_params_)
print(grid.best_score_, "\n")
print(grid.best_estimator_)

person 4ndy94    schedule 10.11.2020    source источник


Ответы (1)


Вы можете напрямую применить cv поиска по сетке, не разделяя данные на обучающие и тестовые разбиения, как вы это делали в варианте 2. Причина этого в том, что ваш набор данных содержит только 2000 точек данных. Если у вас есть обширный набор данных, в этом случае вам, возможно, придется разделить набор данных на 90% обучение и 10% тестирование. Но пока вы можете продолжить вариант 2.

person Jatin    schedule 28.11.2020