Что произойдет с весами lasso если alpha сделать очень большим
Регресс Риджа и Лассо: полное руководство с Python Scikit-Learn
Дата публикации Sep 26, 2018
Поскольку я использую термин «линейный», сначала поясним, что линейные модели являются одним из самых простых способов прогнозирования результатов с использованием линейной функции входных функций.
В приведенном выше уравнении (1.1) мы показали линейную модель, основанную на n числах признаков. Учитывая только одну особенность, как вы, вероятно, уже поняли, чтош [0]будет склон иббудет представлять перехват. Линейная регрессия ищет оптимизациювеса такжебтакой, что минимизирует функцию стоимости. Функция стоимости может быть записана как
Хребет регрессии: В регрессии гребня функция стоимости изменяется путем добавления штрафа, эквивалентного квадрату величины коэффициентов.
Это эквивалентно высказыванию минимизации функции стоимости в уравнении 1.2 при условии, как показано ниже
Таким образом, регрессия гребня накладывает ограничение на коэффициенты(Ш).Наказывающий член (лямбда) упорядочивает коэффициенты так, что если коэффициенты принимают большие значения, функция оптимизации штрафуется. Такрегрессия гребня уменьшает коэффициенты и помогает уменьшить сложность модели и мультиколлинеарность.Возвращаясь к уравнению. 1.3 можно видеть, что при λ → 0 функция затрат становится аналогичной функции стоимости линейной регрессии (уравнение 1.2). ТакЧем ниже ограничение (низкое λ) на свойствах, модель будет напоминать модель линейной регрессии.Давайте рассмотрим пример с использованием данных Бостонского дома, а ниже приведен код, который я использовал для изображения линейной регрессии как ограничивающего случая регрессии Риджа.
Давайте разберемся с рисунком выше. По оси X мы строим индекс коэффициента и, для данных Бостона, имеется 13 объектов (для Python 0-й индекс относится к 1-му объекту). Для низкого значения α (0,01), когда коэффициенты менее ограничены, величины коэффициентов почти такие же, как у линейной регрессии. При более высоком значении α (100) мы видим, что для коэффициентов 3,4,5 величины значительно меньше по сравнению со случаем линейной регрессии. Это примерсокращениеКоэффициент коэффициента с использованием регрессионного хребта.
Лассо регрессия:Функция стоимости для регрессии Лассо (оператор наименьшей абсолютной усадки и выбора) может быть записана как
Код, который я использовал, чтобы сделать эти графики, как показано ниже
Давайте разберемся с сюжетом и кодом в кратком изложении.
До сих пор мы изучили основы регрессии Риджа и Лассо и увидели несколько примеров для понимания приложений. Теперь я попытаюсь объяснить, почему регрессия Лассо может привести к выбору объектов, а регрессия Риджа только уменьшает коэффициенты, близкие к нулю, но не к нулю. Приведенный ниже иллюстративный рисунок поможет нам лучше понять, где мы примем гипотетический набор данных только с двумя функциями. Используя ограничение для коэффициентов регрессии Риджа и Лассо (как показано выше в дополнениях 1 и 2), мы можем построить график ниже
Для двумерного пространства признаков области ограничения (см. Дополнения 1 и 2) построены для регрессии Лассо и Риджа с голубым и зеленым цветами. Эллиптические контуры являются функцией стоимости линейной регрессии (уравнение 1.2). Теперь, если у нас есть смягченные условия на коэффициенты, тогда ограниченные области могут стать больше, и в конечном итоге они попадут в центр эллипса. Это тот случай, когда регрессия Риджа и Лассо напоминает результаты линейной регрессии. Иначе,оба метода определяют коэффициенты путем нахождения первой точки, где эллиптические контуры попадают в область ограничений. Алмаз (Лассо) имеет углы на осях, в отличие от диска, и всякий раз, когда эллиптическая область достигает такой точки, одна из особенностей полностью исчезает!Для пространств пространственных объектов может быть много решений на оси с регрессией Лассо, и поэтому мы получаем только важные выбранные объекты.
Наконец, чтобы закончить эту медитацию, давайте подведем итог тому, что мы узнали до сих пор.
Для дальнейшего чтения я предлагаю «Элемент статистического обучения»; J. Friedman et.al., Springer, pages- 79-91, 2008.
Надеюсь, вам понравился пост и оставайтесь счастливыми! Ура!
5 алгоритмов регрессии в машинном обучении, о которых вам следует знать
Источник: Vecteezy
Да, линейная регрессия не единственная
Быстренько назовите пять алгоритмов машинного обучения.
Вряд ли вы назовете много алгоритмов регрессии. В конце концов, единственным широко распространенным алгоритмом регрессии является линейная регрессия, главным образом из-за ее простоты. Однако линейная регрессия часто неприменима к реальным данным из-за слишком ограниченных возможностей и ограниченной свободы маневра. Ее часто используют только в качестве базовой модели для оценки и сравнения с новыми подходами в исследованиях.
Команда Mail.ru Cloud Solutions перевела статью, автор которой описывает 5 алгоритмов регрессии. Их стоит иметь в своем наборе инструментов наряду с популярными алгоритмами классификации, такими как SVM, дерево решений и нейронные сети.
1. Нейросетевая регрессия
Теория
Нейронные сети невероятно мощные, но их обычно используют для классификации. Сигналы проходят через слои нейронов и обобщаются в один из нескольких классов. Однако их можно очень быстро адаптировать в регрессионные модели, если изменить последнюю функцию активации.
Каждый нейрон передает значения из предыдущей связи через функцию активации, служащую цели обобщения и нелинейности. Обычно активационная функция — это что-то вроде сигмоиды или функции ReLU (выпрямленный линейный блок).
Источник. Свободное изображение
Но, заменив последнюю функцию активации (выходной нейрон) линейной функцией активации, выходной сигнал можно отобразить на множество значений, выходящих за пределы фиксированных классов. Таким образом, на выходе будет не вероятность отнесения входного сигнала к какому-либо одному классу, а непрерывное значение, на котором фиксирует свои наблюдения нейронная сеть. В этом смысле можно сказать, что нейронная сеть как бы дополняет линейную регрессию.
Нейросетевая регрессия имеет преимущество нелинейности (в дополнение к сложности), которую можно ввести с сигмоидной и другими нелинейными функциями активации ранее в нейронной сети. Однако чрезмерное использование ReLU в качестве функции активации может означать, что модель имеет тенденцию избегать вывода отрицательных значений, поскольку ReLU игнорирует относительные различия между отрицательными значениями.
Это можно решить либо ограничением использования ReLU и добавлением большего количества отрицательных значений соответствующих функций активации, либо нормализацией данных до строго положительного диапазона перед обучением.
Реализация
Используя Keras, построим структуру искусственной нейронной сети, хотя то же самое можно было бы сделать со сверточной нейронной сетью или другой сетью, если последний слой является либо плотным слоем с линейной активацией, либо просто слоем с линейной активацией. (Обратите внимание, что импорты Keras не указаны для экономии места).
model = Sequential()
model.add(Dense(100, input_dim=3, activation=’sigmoid’))
model.add(ReLU(alpha=1.0))
model.add(Dense(50, activation=’sigmoid’))
model.add(ReLU(alpha=1.0))
model.add(Dense(25, activation=’softmax’))
#IMPORTANT PART
model.add(Dense(1, activation=’linear’))
Проблема нейронных сетей всегда заключалась в их высокой дисперсии и склонности к переобучению. В приведенном выше примере кода много источников нелинейности, таких как SoftMax или sigmoid.
Если ваша нейронная сеть хорошо справляется с обучающими данными с чисто линейной структурой, возможно, лучше использовать регрессию с усеченным деревом решений, которая эмулирует линейную и высокодисперсную нейронную сеть, но позволяет дата-сайентисту лучше контролировать глубину, ширину и другие атрибуты для контроля переобучения.
2. Регрессия дерева решений
Теория
Деревья решений в классификации и регрессии очень похожи, поскольку работают путем построения деревьев с узлами «да/нет». Однако в то время как конечные узлы классификации приводят к одному значению класса (например, 1 или 0 для задачи бинарной классификации), деревья регрессии заканчиваются значением в непрерывном режиме (например, 4593,49 или 10,98).
Иллюстрация автора
Из-за специфической и высокодисперсной природы регрессии просто как задачи машинного обучения, регрессоры дерева решений следует тщательно обрезать. Тем не менее, подход к регрессии нерегулярен — вместо того, чтобы вычислять значение в непрерывном масштабе, он приходит к заданным конечным узлам. Если регрессор обрезан слишком сильно, у него слишком мало конечных узлов, чтобы должным образом выполнить свою задачу.
Следовательно, дерево решений должно быть обрезано так, чтобы оно имело наибольшую свободу (возможные выходные значения регрессии — количество конечных узлов), но недостаточно, чтобы оно было слишком глубоким. Если его не обрезать, то и без того высокодисперсный алгоритм станет чрезмерно сложным из-за природы регрессии.
Реализация
Регрессия дерева решений может быть легко создана в sklearn :
Бонус: близкий родственник дерева решений, алгоритм random forest (алгоритм случайного леса), также может быть реализован в качестве регрессора. Регрессор случайного леса может работать лучше или не лучше, чем дерево решений в регрессии (в то время как он обычно работает лучше в классификации) из-за тонкого баланса между избыточным и недостаточным в природе алгоритмов построения дерева.
3. Регрессия LASSO
Метод регрессии лассо (LASSO, Least Absolute Shrinkage and Selection Operator) — это вариация линейной регрессии, специально адаптированная для данных, которые демонстрируют сильную мультиколлинеарность (то есть сильную корреляцию признаков друг с другом).
Она автоматизирует части выбора модели, такие как выбор переменных или исключение параметров. LASSO использует сжатие коэффициентов (shrinkage), то есть процесс, в котором значения данных приближаются к центральной точке (например среднему значению).
Иллюстрация автора. Упрощенная визуализация процесса сжатия
Процесс сжатия добавляет регрессионным моделям несколько преимуществ:
Регрессия лассо использует регуляризацию L1, то есть взвешивает ошибки по их абсолютному значению. Вместо, например, регуляризации L2, которая взвешивает ошибки по их квадрату, чтобы сильнее наказывать за более значительные ошибки.
Такая регуляризация часто приводит к более разреженным моделям с меньшим количеством коэффициентов, так как некоторые коэффициенты могут стать нулевыми и, следовательно, будут исключены из модели. Это позволяет ее интерпретировать.
Реализация
В sklearn регрессия лассо поставляется с моделью перекрестной проверки, которая выбирает наиболее эффективные из многих обученных моделей с различными фундаментальными параметрами и путями обучения, что автоматизирует задачу, которую иначе пришлось бы выполнять вручную.
4. Гребневая регрессия (ридж-регрессия)
Теория
Гребневая регрессия или ридж-регрессия очень похожа на регрессию LASSO в том, что она применяет сжатие. Оба алгоритма хорошо подходят для наборов данных с большим количеством признаков, которые не являются независимыми друг от друга (коллинеарность).
Однако самое большое различие между ними в том, что гребневая регрессия использует регуляризацию L2, то есть ни один из коэффициентов не становится нулевым, как это происходит в регрессии LASSO. Вместо этого коэффициенты всё больше приближаются к нулю, но не имеют большого стимула достичь его из-за природы регуляризации L2.
Сравнение ошибок в регрессии лассо (слева) и гребневой регрессии (справа). Поскольку гребневая регрессия использует регуляризацию L2, ее площадь напоминает круг, тогда как регуляризация лассо L1 рисует прямые линии. Свободное изображение. Источник
В лассо улучшение от ошибки 5 до ошибки 4 взвешивается так же, как улучшение от 4 до 3, а также от 3 до 2, от 2 до 1 и от 1 до 0. Следовательно, больше коэффициентов достигает нуля и устраняется больше признаков.
Однако в гребневой регрессии улучшение от ошибки 5 до ошибки 4 вычисляется как 5² − 4² = 9, тогда как улучшение от 4 до 3 взвешивается только как 7. Постепенно вознаграждение за улучшение уменьшается; следовательно, устраняется меньше признаков.
Гребневая регрессия лучше подходит в ситуации, когда мы хотим сделать приоритетными большое количество переменных, каждая из которых имеет небольшой эффект. Если в модели требуется учитывать несколько переменных, каждая из которых имеет средний или большой эффект, лучшим выбором будет лассо.
Реализация
Гребневую регрессию в sklearn можно реализовать следующим образом (см. ниже). Как и для регрессии лассо, в sklearn есть реализация для перекрестной проверки выбора лучших из многих обученных моделей.
5. Регрессия ElasticNet
Теория
ElasticNet стремится объединить лучшее из гребневой регрессии и регрессии лассо, комбинируя регуляризацию L1 и L2.
Лассо и гребневая регрессия представляют собой два различных метода регуляризации. В обоих случаях λ — это ключевой фактор, который контролирует размер штрафа:
Регрессия Лассо в Python
Здравствуйте, читатели! В нашей последней статье мы сосредоточены на регрессии Ridge в программировании Python, подробно. Теперь мы говорим о регрессии Лассо в Python.
Регрессия Лассо в Python
Здравствуйте, читатели! В нашей последней статье мы сосредоточены на регрессии Ridge в программировании Python, подробно. Теперь мы говорим о Регрессия Лассо в питоне.
Итак, давайте начнем!
Во-первых, что такое регрессия Лассо?
В области науки о науке и машине наша главная цель заключается в том, чтобы сделать прогнозы по реальным проблемам с помощью различных алгоритмов на основе типа значений данных.
Линейная регрессия – один из таких алгоритмов. С помощью этого алгоритма мы можем определить лучшую подходящую линию для нашей модели I.e. Понимать корреляцию между переменными набора данных.
Это помогает нам выяснить взаимосвязь между зависимой переменной и независимыми переменными набора данных для создания предполагаемой модели для прогнозов.
Вопросы с линейной регрессией :
Решение – регрессия Лассо
Итак, здесь мы идем с решением. Регрессия Лассо, также известная как L1 регрессия хватает цели. С регрессией Лассо мы склонны наказывать модель против ценности коэффициентов. Таким образом, он манипулирует функцию потери, включая дополнительные расходы на переменные модели, которая происходит, имеет большое значение коэффициентов.
Это наказывает модель против Абсолютный коэффициент значения. При этом он позволяет ценить коэффициенты (которые не вносят вклад в переменную предикторов) стать нулевым. Дальше к этому, Это удаляет эти функции ввода из модели Отказ
Таким образом, можно сказать,
Lasso + (лямбда * l1_penaltyty)
Здесь лямбда Является ли гиперпараметр, который имеет проверку при взвешивании штрафных значений.
Регрессия Лассо – практический подход
Изначально мы загружаем набор данных в среду Python, используя read_csv () функция. Кроме того, мы выполняем расщепление набора данных в тренировку и тестовые данные, используя rain_test_split () функция.
Для этого примера мы установили Maпе в качестве метрики ошибки для оценки модели пенальти для регрессии Lasso.
Sklearn.linear_model Библиотека Python, дает нам lasso () Функция для создания модели над набором данных.
Заключение
По этому, мы подошли к концу этой темы. Не стесняйтесь комментировать ниже, если вы столкнетесь с любым вопросом.
Порекомендуйте попробовать концепцию регрессии LASSO с другими наборами набора данных и давайте узнаем свой опыт примерно одинаково в разделе «Комментарий»!
Русские Блоги
Библиотека машинного обучения Python sklearn-Lasso regression (регуляризация L1)
Руководство по разработке Full Stack Engineer (Автор: Луан Пэн)
Lasso
С точки зрения выражения математической формулы, он состоит из ℓ 1 » role=»presentation»> ℓ 1 Состав линейной модели предыдущего регулярного семестра. Целевая функция, которую необходимо минимизировать:
лассо оценивает, что штраф был решен α | | w | | 1 » role=»presentation» style=»position: relative;»> α | | w | | 1 Метод наименьших квадратов минимизации, где, α » role=»presentation» style=»position: relative;»> α Постоянная, | | w | | 1 » role=»presentation» style=»position: relative;»> | | w | | 1 Вектор параметров ℓ 1 − n o r m » role=»presentation» style=»position: relative;»> ℓ 1 − n o r m Норма.
Реализация класса Lasso использует координатный спуск (алгоритм координатного спуска) для подбора коэффициентов.
Установить параметры регуляризации
scikit-learn использует перекрестную проверку, чтобы сделать общедоступными настройки в Lasso α » role=»presentation» style=»position: relative;»> α Объект параметров: LassoCV и LassoLarsCV. LassoLarsCV основан на следующем объясненииМинимальная угловая регрессия алгоритм.
Для многомерных наборов данных с множеством линейных регрессий наиболее распространенным является LassoCV. Однако LassoLarsCV ищет α » role=»presentation» style=»position: relative;»> α Значение параметра более выгодно, и если размер выборки очень мал по сравнению с количеством функций, обычно LassoLarsCV быстрее, чем LassoCV.
Сравнение с параметрами регуляризации SVM
Установка основных параметров
alpha : float, Необязательно, по умолчанию 1.0. Когда альфа равна 0, алгоритм эквивалентен обычному методу наименьших квадратов и может быть реализован с помощью линейной регрессии, поэтому не рекомендуется устанавливать альфа равным 0.
fit_intercept : boolean
Выполнять ли вычисление перехвата (перехват). Если false, вычислений нет (например, данные были сконцентрированы). Я здесь не совсем понимаю, похоже, это связано с перекосом.
normalize : boolean, Необязательно, по умолчанию False
Если True, сначала нормализуйте, а затем регрессию. Если fit_intercept имеет значение false, этот параметр игнорируется. При нормализации регрессоров следует отметить, что изучение гиперпараметров будет более стабильным и почти не зависит от выборок. Для стандартизованных данных это не так. Если вам нужны стандартизованные данные, обработайте их предварительно. Затем установите normalize = False при обучении.
copy_X : boolean, Необязательно, по умолчанию True
Если True, X будет скопирован; в противном случае он может быть перезаписан.
precompute : True | False | как массив, по умолчанию = False
Следует ли использовать предварительно вычисленную матрицу Грама для ускорения вычислений. Если установлено «авто», решение принимает машина. Матрица Грама также может быть передана. Для разреженного ввода эта опция всегда True.
max_iter : int, необязательно
Максимальное количество циклов.
tol : float, Необязательный
Допуск для оптимизации: если после обновления он меньше tol, код оптимизации проверяет оптимизированный двойной зазор и продолжает работу, пока он не станет меньше tol.
warm_start : bool, необязательно
Когда имеет значение True, предыдущее исследование будет повторно использоваться в качестве инициализации, в противном случае последний план будет удален напрямую.
positive : bool, необязательно
Когда для установлено значение True, коэффициент принудительно должен быть положительным.
selection : str, по умолчанию «циклический»
Если установлено значение «random», параметры будут обновляться случайным образом при каждом цикле и будут обновляться последовательно в соответствии с настройками по умолчанию. Установка его на случайное значение обычно значительно ускоряет генерацию сходимости, особенно когда tol больше 1e-4.
random_state : int, экземпляр RandomState или None (значение по умолчанию)
Генератор псевдослучайных чисел используется для генерации случайных функций для обновления
seed. Доступно только при случайном выборе.
Регресс многозадачности
Математически он состоит из линейной модели со смешанным ℓ 1 ℓ 2 » role=»presentation» style=»position: relative;»> ℓ 1 ℓ 2 Тренируйтесь как регуляризатор. Минимизация целевой функции:
Где Fro представляет стандарт Фробениуса:
А также ℓ 1 ℓ 2 » role=»presentation» style=»position: relative;»> ℓ 1 ℓ 2 Читать как:
Реализация класса MultiTaskLasso использует спуск координат как алгоритм подбора коэффициентов.
Что произойдет с весами lasso если alpha сделать очень большим
Linear regression: retraining and regularization
Мы будем работать с датасетом «bikes_rent.csv», в котором по дням записаны календарная информация и погодные условия, характеризующие автоматизированные пункты проката велосипедов, а также число прокатов в этот день. Последнее мы будем предсказывать; таким образом, мы будем решать задачу регрессии.
Знакомство с данными
season | yr | mnth | holiday | weekday | workingday | weathersit | temp | atemp | hum | windspeed(mph) | windspeed(ms) | cnt | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 0 | 1 | 0 | 6 | 0 | 2 | 14.110847 | 18.18125 | 80.5833 | 10.749882 | 4.805490 | 985 |
1 | 1 | 0 | 1 | 0 | 0 | 0 | 2 | 14.902598 | 17.68695 | 69.6087 | 16.652113 | 7.443949 | 801 |
2 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 8.050924 | 9.47025 | 43.7273 | 16.636703 | 7.437060 | 1349 |
3 | 1 | 0 | 1 | 0 | 2 | 1 | 1 | 8.200000 | 10.60610 | 59.0435 | 10.739832 | 4.800998 | 1562 |
4 | 1 | 0 | 1 | 0 | 3 | 1 | 1 | 9.305237 | 11.46350 | 43.6957 | 12.522300 | 5.597810 | 1600 |
Для каждого дня проката известны следующие признаки:
Итак, у нас есть вещественные, бинарные и номинальные (порядковые) признаки, и со всеми из них можно работать как с вещественными. Давайте посмотрим на графиках, как целевой признак зависит от остальных
Давайте более строго оценим уровень линейной зависимости между признаками и целевой переменной. Хорошей мерой линейной зависимости между двумя векторами является корреляция Пирсона. В pandas ее можно посчитать с помощью двух методов датафрейма: corr и corrwith. Метод df.corr вычисляет матрицу корреляций всех признаков из датафрейма. Методу df.corrwith нужно подать еще один датафрейм в качестве аргумента, и тогда он посчитает попарные корреляции между признаками из df и этого датафрейма.
В выборке есть признаки, коррелирующие с целевым, а значит, задачу можно решать линейными методами.
По графикам видно, что некоторые признаки похожи друг на друга. Поэтому давайте также посчитаем корреляции между вещественными признаками.
temp | atemp | hum | windspeed(mph) | windspeed(ms) | cnt | |
---|---|---|---|---|---|---|
temp | 1.000000 | 0.991702 | 0.126963 | -0.157944 | -0.157944 | 0.627494 |
atemp | 0.991702 | 1.000000 | 0.139988 | -0.183643 | -0.183643 | 0.631066 |
hum | 0.126963 | 0.139988 | 1.000000 | -0.248489 | -0.248489 | -0.100659 |
windspeed(mph) | -0.157944 | -0.183643 | -0.248489 | 1.000000 | 1.000000 | -0.234545 |
windspeed(ms) | -0.157944 | -0.183643 | -0.248489 | 1.000000 | 1.000000 | -0.234545 |
cnt | 0.627494 | 0.631066 | -0.100659 | -0.234545 | -0.234545 | 1.000000 |
На диагоналях, как и полагается, стоят единицы. Однако в матрице имеются еще две пары сильно коррелирующих столбцов: temp и atemp (коррелируют по своей природе) и два windspeed (потому что это просто перевод одних единиц в другие). Далее мы увидим, что этот факт негативно сказывается на обучении линейной модели.
Напоследок посмотрим средние признаков (метод mean), чтобы оценить масштаб признаков и доли 1 у бинарных признаков.
Признаки имеют разный масштаб, значит для дальнейшей работы нам лучше нормировать матрицу объекты-признаки.
Проблема первая: коллинеарные признаки
Итак, в наших данных один признак дублирует другой, и есть еще два очень похожих. Конечно, мы могли бы сразу удалить дубликаты, но давайте посмотрим, как бы происходило обучение модели, если бы мы не заметили эту проблему.
Для начала проведем масштабирование, или стандартизацию признаков: из каждого признака вычтем его среднее и поделим на дисперсию. Это можно сделать с помощью метода scale:
Давайте обучим линейную регрессию на наших данных и посмотрим на веса признаков.
Мы видим, что веса при линейно-зависимых признаках по модулю значительно больше, чем при других признаках.
Чтобы понять, почему так произошло, вспомним аналитическую формулу, по которой вычисляются веса линейной модели в методе наименьших квадратов:
С парой temp-atemp чуть менее коррелирующих переменных такого не произошло, однако на практике всегда стоит внимательно следить за коэффициентами при похожих признаках.
Обучите регрессоры Ridge и Lasso с параметрами по умолчанию и убедитесь, что проблема с весами решилась.
Проблема вторая: неинформативные признаки
В отличие от L2-регуляризации, L1 обнуляет веса при некоторых признаках. Объяснение последнему факту было дано на лекции (всё из-за ромбообразных линий уровня L1-нормы).
Визуализируем динамику весов при увеличении параметра регуляризации:
Далее будем работать с Lasso.
Итак, мы видим, что при изменении alpha модель по-разному подбирает коэффициенты признаков. Нам нужно выбрать наилучшее alpha.
Для этого, во-первых, нам нужна метрика качества. Будем использовать в качестве метрики сам оптимизируемый функционал метода наименьших квадратов, то есть Mean Square Error.
Во-вторых, нужно понять, на каких данных эту метрику считать. Нельзя выбирать alpha по значению MSE на обучающей выборке, потому что тогда мы не сможем оценить, как модель будет делать предсказания на новых для нее данных. Если мы выберем одно разбиение выборки на обучающую и тестовую (это называется holdout), то настроимся на конкретные «новые» данные, и вновь можем переобучиться. Поэтому будем делать несколько разбиений выборки, на каждом пробовать разные значения alpha, а затем усреднять MSE. Удобнее всего делать такие разбиения кросс-валидацией, то есть разделить выборку на K частей, или блоков, и каждый раз брать одну из них как тестовую, а из оставшихся блоков составлять обучающую выборку.
Делать кросс-валидацию для регрессии в sklearn совсем просто: для этого есть специальный регрессор, LassoCV, который берет на вход список из alpha и для каждого из них вычисляет MSE на кросс-валидации. После обучения (если оставить параметр cv=3 по умолчанию) регрессор будет содержать переменную mse_path_, матрицу размера len(alpha) x k, k = 3 (число блоков в кросс-валидации), содержащую значения MSE на тесте для соответствующих запусков. Кроме того, в переменной alpha_ будет храниться выбранное значение параметра регуляризации, а в coef_, традиционно, обученные веса, соответствующие этому alpha_.
Обратите внимание, что регрессор может менять порядок, в котором он проходит по alphas; для сопоставления с матрицей MSE лучше использовать переменную регрессора alphas_.
Итак, мы выбрали некоторый параметр регуляризации. Давайте посмотрим, какие бы мы выбирали alpha, если бы делили выборку только один раз на обучающую и тестовую, то есть рассмотрим траектории MSE, соответствующие отдельным блокам выборки.
На каждом разбиении оптимальное значение alpha свое, и ему соответствует большое MSE на других разбиениях. Получается, что мы настраиваемся на конкретные обучающие и контрольные выборки. При выборе alpha на кросс-валидации мы выбираем нечто «среднее», что будет давать приемлемое значение метрики на разных разбиениях выборки. Наконец, как принято в анализе данных, давайте проинтерпретируем результат.
Итак, мы посмотрели, как можно следить за адекватностью линейной модели, как отбирать признаки и как грамотно, по возможности не настраиваясь на какую-то конкретную порцию данных, подбирать коэффициент регуляризации.
Стоит отметить, что с помощью кросс-валидации удобно подбирать лишь небольшое число параметров (1, 2, максимум 3), потому что для каждой допустимой их комбинации нам приходится несколько раз обучать модель, а это времязатратный процесс, особенно если нужно обучаться на больших объемах данных.