Как вы уже сами наблюдали, ваш выбор функций (выбор функций) может повлиять на то, какие гиперпараметры для вашего алгоритма являются оптимальными, и какие гиперпараметры, выбранные для вашего алгоритма, могут повлиять на то, какой выбор функций будет оптимальным.
Так что, да, если вы действительно заботитесь о том, чтобы выжать каждый процент производительности из вашей модели, и вы можете позволить себе необходимый объем вычислений, лучшим решением, вероятно, будет выбор функций и настройка гиперпараметра «одновременно». Это, вероятно, не легко (в зависимости от того, как вы делаете выбор функции), хотя. То, как я представляю, как это работает, было бы похоже на использование различных наборов функций в качестве кандидатов и рассмотрение выбора одного набора функций из всех этих наборов кандидатов в качестве дополнительного гиперпараметра.
На практике это может быть неосуществимо. В общем, если вы не можете позволить себе оценить все возможные комбинации, я бы порекомендовал:
Слегка оптимизируйте гиперпараметры, просто чтобы убедиться, что вы не присваиваете слишком плохие значения некоторым гиперпараметрам. Часто это можно сделать вручную, если у вас есть хорошее интуитивное понимание ваших гиперпараметров, или с помощью очень короткой процедуры оптимизации гиперпараметров, использующей только набор функций, которые, как вы знаете, прилично хороши в противном случае.
Выбор функций с гиперпараметрами, которые, возможно, не оптимизированы на 100%, но, по крайней мере, не слишком ужасны Если у вас уже есть хотя бы несколько прилично настроенный алгоритм машинного обучения, наличие хороших функций будет значительно важнее для вашей производительности, чем микрооптимизирующие гиперпараметры. Экстремальные примеры: если у вас нет функций, вы не можете ничего предсказать. Если у вас есть функция мошенничества, которая содержит метку класса, вы можете отлично классифицировать все.
Оптимизируйте гиперпараметры с помощью функций, выбранных на шаге выше. Это должно быть хорошим набором функций сейчас, где, возможно, стоит немного оптимизировать гиперпарам.
Чтобы ответить на дополнительный вопрос, который Николас разместил в комментариях, рассматривая, как все эти вещи (выбор функций, оптимизация гиперпараметров) взаимодействуют с перекрестной проверкой в k-кратном размере: я бы сказал, что это зависит.
Всякий раз, когда вы используете данные в одном из сгибов для чего-либо вообще, а затем оцениваете производительность в этом же сгибе, вы получаете предвзятую оценку своей производительности (вы будете переоценивать производительность). Таким образом, если вы используете данные во всех сгибах для шага выбора функции, а затем оцениваете производительность для каждого из этих сгибов, вы получите смещенные оценки производительности для каждого из них (что не очень хорошо). Точно так же, если у вас есть оптимизация гиперпараметра на основе данных и вы используете данные из определенных сгибов (или всех сгибов), а затем оцениваете по этим же сгибам, вы снова получите необъективные оценки производительности. Возможные решения:
Повторите весь конвейер в каждом сгибе отдельно (например, в каждом сгибе, сделайте выбор функции + оптимизация гиперпараметра и модель обучения). Это означает, что перекрестная проверка в k-кратном режиме дает вам объективные оценки производительности этого полного конвейера .
Разделите ваш начальный набор данных на «набор данных предварительной обработки» и «набор данных train / test». Вы можете сделать свой выбор функции + оптимизацию гиперпараметра в '' наборе данных предварительной обработки ''. Затем вы исправляете выбранные функции и гиперпараметры и выполняете перекрестную проверку в k-кратном порядке в «наборе данных поезда / теста». Это означает, что перекрестная проверка в k-кратном размере дает вам объективные оценки производительности вашего алгоритма ML с учетом фиксированного набора функций и значений гиперпараметров .
Обратите внимание, что оба решения приводят к несколько разным оценкам производительности. Какой из них более интересен, зависит от вашего варианта использования, зависит от того, как вы планируете внедрять свои решения для машинного обучения на практике. Если вы, например, компания, которая намеревается иметь полный набор возможностей для выбора + оптимизация гиперпараметров + обучение, проводимое автоматически каждый день / неделю / месяц / год / что угодно, вы также будете заинтересованы в выполнении этого завершения. трубопровод, и вам нужно первое решение.
Если, с другой стороны, вы можете позволить себе выполнять выбор функции + оптимизацию гиперпараметра только один раз в своей жизни, а затем лишь несколько раз регулярно переучивать свой алгоритм (с фиксированными значениями набора функций и гиперпарама), тогда производительность только этот шаг будет то, что вас интересует, и вы должны пойти на второе решение