#python #training-data #grid-search #gridsearchcv #train-test-split
#python #обучение-данные #сетка-поиск #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_)
Ответ №1:
Вы можете напрямую применить cv поиска по сетке, не разделяя данные на обучающие и тестовые разделы, как вы делали в варианте 2. Причина этого в том, что ваш набор данных содержит только 2000 точек данных. Если у вас большой набор данных, в этом случае вам, возможно, придется разделить набор данных на 90% обучения и 10% тестирования. Но пока вы можете продолжить с вариантом 2