РЕДАКТИРОВАТЬ: фактический ответ на вопрос.Попробуйте передать cv
команду генератору индексов:
def index_gen(listTrain, listTest):
yield listTrain, listTest
grid_search = GridSearchCV(estimator = model, param_grid =
param_grid,cv = index_gen(listTrain, listTest), n_jobs = -1,
verbose = 0,scoring=errorType)
РЕДАКТИРОВАТЬ: До редактирования:
Как уже упоминалось в комментарии пустынного, то, что вы пытаетесь сделать, это плохая практика MLи в итоге вы получите предвзятую оценку производительности обобщения окончательной модели.Использование набора тестов так, как вы предлагаете, эффективно утечет информацию о наборе тестов на этапе обучения и даст вам переоценку способности модели классифицировать невидимые данные.Что я предлагаю в вашем случае:
grid_search = GridSearchCV(estimator = model, param_grid = param_grid,cv = 5,
n_jobs = -1, verbose = 0,scoring=errorType)
grid_search.fit(x[listTrain], y[listTrain]
Теперь ваш тренировочный набор будет разбит на 5 (вы можете выбрать количество здесь) сгибов, обученных с использованием 4 из этих сгибов на определенном наборе гиперпараметров, ипроверил сгиб, который был опущен.Это повторяется 5 раз, пока все ваши тренировочные примеры не станут частью пропущенного набора.Вся эта процедура выполняется для каждого параметра гиперпараметра, который вы тестируете (в данном случае 5x3)
grid_search.best_params_
даст вам словарь параметров, которые показали наилучшие результаты за все 5 сгибов.Вот параметры, которые вы используете для обучения вашего окончательного классификатора, снова используя только обучающий набор:
clf = LogisticRegression(**grid_search.best_params_).fit(x[listTrain],
y[listTrain])
Теперь, наконец, ваш классификатор проверяется на тестовом наборе и дается объективная оценка эффективности обобщения:
predictions = clf.predict(x[listTest])