Все, что происходит, правильно. Дело в том, что AutoTuner добавляет алгоритм обучения xgboost с помощью метода настройки, который находит (оптимальный? Хороший? Хорошо работающий?) Гиперпараметр, затем устанавливает их в ученике, затем обучает модель посредством окончательного вызова обученияалгоритм.
Вы можете представить это как
Данные -> [Сплит-данные] -> [Настройка] - (opt.HPs, Data) -> [Поезд] -> Модель
Если вы хотите (только немного) менее уродливую картинку для этого, взгляните на мою лекцию по адресу:
https://compstat -lmu.github.io / lecture_i2ml / article /content.html (см. day5, настройка и вложенная повторная выборка)
Теперь в вашем коде выше 3 проходов вышеуказанного конвейера. 2 в вашем 2-кратном резюме, 1 в конце. На каждом проходе происходит настройка вызова. По разным данным. Так что НЕТ ГАРАНТИИ, что 3 оптимальных конфига HP одинаковы. Прежде всего, первые 2 являются выборками данных из выборки, лежащей в основе распределения данных, и имеют одинаковый размер. Так что довольно много «того же», но они все еще являются стохастическими образцами. Так что результаты могут отличаться. Особенно, когда есть много конфигураций HP с почти такой же производительностью, что и оптимальная конфигурация HP. И данных мало. И тюнер довольно стохастический. (NB: Все это верно для вашего примера ....) Для третьего прогона настройки базовое распределение данных остается прежним, но теперь данные обучения стали даже немного больше (в вашем случае, вдвое больше, из-за2CV). Это также может привести к разным результатам.
В общем, вы можете проверить по крайней мере примерно одинаковые результаты настройки, как вы делали выше, и начать «беспокоиться» / проверять / использовать свой инструмент обучения человека (мозг) почему тюнинг на самом деле "нестабилен". Но в вашем случае, данные настолько малы, и эксперимент больше похож на «игрушечный эксперимент», что я не думаю, что имеет смысл задуматься над этим здесь. Почему это технически не ошибка, я объяснил выше.
Вот еще один, надеюсь, полезный аналог: Забудьте AutoTuner, запустите точно такой же код с простой линейной регрессией. Вы запускаете 2CV с ним, и вы помещаете его в полные данные. Для линейной модели создано 3 вектора «бета» параметра. Вы ожидаете, что они будут одинаковыми? Нет. Вы бы волновались, если бы они все были супер-разными? Потенциально.
Мой последний пример и ваш код очень связаны. Мой последний пример я бы назвал «обучение 1-го уровня». И мы оптимизируем функцию риска линейной модели численно. Тюнинг "обучение 2-го уровня". Он по-прежнему оптимизирует параметры, гиперпараметры или параметры 2-го уровня. И это оптимизирует другой «риск»: перекрестная проверка ошибок. И использует другие методы оптимизации, может быть, случайный поиск, может быть байесовской оптимизации. Но на абстрактном уровне оба метода очень похожи.
Это сравнение очень помогло мне как студенту, а также причина, по которой mlr в некоторой степени выглядит так, как и в случае с AutoTuner.