Когда модель страдает от высокой дисперсии, часто используется метод, называемый регуляризацией, чтобы бороться с ее тенденцией к переоснащению. Например, Ridge и Lasso — это две классические формы линейной регрессии, которые уменьшают сложность модели, добавляя штрафные условия к их функциям потерь.

Используя Ridge в качестве примера, добавление штрафного члена к его функции потерь приводит к уменьшению коэффициентов ближе к нулю, что в конечном итоге снижает сложность модели. Следовательно, очень важно стандартизировать набор данных перед регуляризацией, чтобы гарантировать, что каждый предиктор или переменная одинаково и справедливо обрабатываются/наказываются. Другими словами, вы хотите избежать наказания переменной просто из-за величины/масштаба ее природы.

В этой статье я покажу, как вы можете предварительно обработать свои данные, проверить и обучить свою модель за один простой шаг, объединив все свои шаги с помощью Pipeline и GridSearchCV в sklearn.

Набор данных

Этот конкретный набор данных о качестве вина состоит из 6 497 образцов и 13 признаков. Для целей этой статьи я объединил наборы данных о качестве красного и белого вина. Я также разделил категорию вина/красного на 1 и 0, где 1 означает красное, а 0 — белое. Наконец, достаточно отметить, что каждый признак в наборе данных описывает определенную характеристику каждого образца вина.

Настраивать

В этом упражнении я собираюсь установить «качество» в качестве целевой переменной (y) и использовать оставшиеся функции в качестве предикторов (X). Кроме того, обратите внимание, что для того, чтобы подчеркнуть эффект регуляризации, я намеренно сделал свой тестовый набор намного больше, чем мой набор поездов, и добавил условия мультипликативного взаимодействия в степени 2.

В качестве примечания, очень важно, чтобы любое преобразование, которое вы выполняете с вашими данными, происходило ПОСЛЕ того, как вы обучаете/тестируете разделение данных. В противном случае вы подвергаете себя утечке данных, которая может исказить производительность вашей модели.

Линейная регрессия

Как и ожидалось, резкая разница между двумя оценками R2 между обучающей и тестовой выборкой указывает на то, что модель очень хорошо приспособлена. Следовательно, имеет смысл применить метод регуляризации и посмотреть, как мы можем снизить дисперсию за счет увеличения систематической ошибки.

Ridge, завернутый в Pipeline и GridSearchCV

Используя Ridge в качестве примера, вот как вы можете выполнить всю необходимую предварительную обработку данных, обучение и проверку вашей модели, включив в свой код функции Pipeline и GridSearchCV. В Ridge альфа-параметр, вероятно, является наиболее популярным гиперпараметром, поскольку он представляет «силу» регуляризации.

Первым шагом в этом процессе является создание конвейера, который объединяет преобразователи данных и модель. В этом примере я использую StandardScaler и PolynomialFeatures в качестве преобразователей, а Ridge — в качестве регрессионной модели.

Во-вторых, вы хотите получить список всех параметров, по которым вы можете использовать GridSearch. Чтобы этот пример был чистым и ясным, я решил изучить различные значения альфа-канала Ridge. Но, как вы можете видеть выше, я мог бы выбрать поиск по многим другим параметрам.

В-третьих, используя конвейер в качестве теперь «новой» модели, вы хотите обернуть конвейер в GridSearchCV, чтобы вы могли выполнять перекрестную проверку и обучение одновременно. По умолчанию GridSearchCV будет использовать KFold, но вы можете использовать другие методы проверки, если хотите. В моем примере я придерживаюсь метода KFold по умолчанию с 5 сгибами.

Кроме того, обратите внимание, что когда я подхожу, я просто использую X_train вместо Z_train_pf, потому что преобразователи завернуты в конвейер. Вы можете себе представить, насколько полезным и удобным может быть этот метод, когда вам нужно выполнить гораздо больше преобразований, чем два в моем примере.

Наконец, GridSearchCV теперь является вашим лучшим «оценщиком», основанным на перекрестной проверке. Обратите внимание, что оценка R2 для тестового набора улучшилась по сравнению с обычной линейной регрессией. Хотя улучшение невелико, оно демонстрирует силу регуляризации и то, почему этот метод часто используется в подобных ситуациях.

Краткое содержание

Комбинация Pipeline и GridSearchCV может быть мощным инструментом, который стоит иметь под рукой. Эта комбинация может применяться и во многих других различных ситуациях, а не только в контексте регуляризации. Каждый раз, когда ваши данные требуют большого количества преобразований, я думаю, что этот подход может принести много пользы с точки зрения поддержания чистоты ваших кодов и устранения сложной задачи пошагового преобразования данных.