Я работаю над проблемой двоичной классификации и хотел бы выполнить вложенную перекрестную проверку для оценки ошибки классификации. Причина, по которой я делаю вложенное CV, объясняется небольшим размером выборки (N_0 = 20, N_1 = 10), где N_0, N_1 - количество экземпляров в 0 и 1 классах соответственно.Вложенная перекрестная проверка с помощью StratifiedShuffleSplit в sklearn
Мой код довольно прост:
>> pipe_logistic = Pipeline([('scl', StandardScaler()),('clf', LogisticRegression(penalty='l1'))])
>> parameters = {'clf__C': logspace(-4,1,50)}
>> grid_search = GridSearchCV(estimator=pipe_logistic, param_grid=parameters, verbose=1, scoring='f1', cv=5)
>> cross_val_score(grid_search, X, y, cv=5)
До сих пор, так хорошо. Если я хочу изменить схему CV (от случайного расщепления до StratifiedShuffleSplit в обоих, внутренних и внутренних циклах CV, я столкнулся с проблемой: как я могу передать вектор класса y, как это требуется функцией StratifiedShuffleSplit?
Наивно:
>> grid_search = GridSearchCV(estimator=pipe_logistic, param_grid=parameters, verbose=1, scoring='f1', cv=StratifiedShuffleSplit(y_inner_loop, 5, test_size=0.5, random_state=0))
>> cross_val_score(grid_search, X, y, cv=StratifiedShuffleSplit(y, 5, test_size=0.5, random_state=0))
Таким образом, проблема заключается в том, чтобы указать y_inner_loop
** Мой набор данных немного несбалансированным (20/10), и я хотел бы сохранить это соотношение расщепления для обучения? и оценки модели.
Отчасти не в тему, но @ arnold-klein, я изо всех сил пытаюсь понять, как это реализует вложенный CV - могли бы вы дать мне какие-либо указания, чтобы понять этот код? – ScottEdwards2000
@ ScottEdwards2000, пожалуйста, см. Мой ответ для полного фрагмента кода. Вложенное CV состоит из двух этапов: внешнего и внутреннего. Внешний цикл (в моем случае это «sss_outer»), разбивает весь ваш набор данных на 5 кусков (BTW, не обязательно вы должны использовать «StratifiedShuffleSplit»), тогда внутренний цикл разбивает КАЖДЫЙ кусок на 3 куска, который он итерации тренировочные и тестовые наборы (как обычно, CV). Вложенное CV в моем коде реализовано в одной строке: '>> cross_val_score (grid_search, X, y, cv = sss_outer)', оно _оценивает нашу модель 5 раз (как sss_outer ~ 5). –
гиперпараметр C (сила обратной регуляризации) настраивается на проверку внутреннего пересечения, которая определяется через «sss_inner» и передается как параметр в функции «grid_search»: '' >> grid_search = GridSearchCV (оценка = pipe_logistic, param_grid = параметры, verbose = 1, scoring = 'f1', cv = sss_inner) '' Таким образом, «cross_val_score» оценивает 5 моделей (5 суррогатных моделей), которые настроены на внутренний цикл CV в '' grid_search '. –