Введение

В этой работе ожидается, что мы реализуем алгоритм градиентного спуска для линейной регрессии и линейной регрессии с методом регуляризации L2 в наборе данных Boston Housing. Этот набор данных содержит информацию, собранную Службой переписи населения США о жилье в районе Бостона, штат Массачусетс. Первый — построить несколько моделей линейной регрессии с разной скоростью обучения и выбрать лучшую из них. Во втором разделе представлены эти модели с помощью метода регуляризации L2. Сделав эти шаги, мы получим глубокое понимание градиентного спуска, линейной регрессии и техники регуляризации L2.

Первый раздел

Есть четыре важных шага, которые необходимо предпринять для реализации первого раздела. Первый заключается в нормализации входных значений. Когда набор данных исследуется с помощью метода Pandas description(), становится очевидным, что нет фатального диапазона признаков для реализации метода масштабирования признаков. Могут быть некоторые исключения. Тем не менее, применение метода масштабирования признаков — это практический прием, позволяющий заставить градиентный спуск работать хорошо. В обработке данных это также известно как нормализация данных и обычно выполняется на этапе предварительной обработки данных.[2] В более общем смысле, когда мы выполняем масштабирование признаков, мы часто хотим получить каждый признак в диапазоне примерно -1 ‹ Xi ‹ 1. Существует несколько методов масштабирования данных, но в качестве метода будет использоваться стандартное масштабирование. Для применения стандартного масштабирования можно использовать библиотеку Sklearn. В модуле предварительной обработки Sklearn есть класс под названием «StandardScaler».

Второй шаг — реализовать градиентный спуск в Python, используя следующую функцию стоимости.

Функцию стоимости J(θ) можно рассматривать как измерение размера ошибки и выражение того, насколько хороша или плоха модель. Мы собираемся использовать среднеквадратичную ошибку в качестве функции стоимости. Существуют фактические целевые значения и прогнозируемые целевые значения. Разница между ними называется остаточной. Сумма всех квадратов остатков представляет собой MSE с нормализатором.

hθ(x) — гипотеза модели. Это простое линейное уравнение. В этом уравнении не будет никаких квадратичных членов или членов высокого порядка, потому что это будет модель линейной регрессии. С помощью этого уравнения или гипотезы модель предсказывает и дает значение. Это уравнение состоит из двух параметров. Это веса, которые называются θ, и входные данные, которые называются x i . θ и x i являются векторами. x i исходит из набора данных. Набор данных можно рассматривать как набор векторов. Итак, x i — это вектор, представляющий одну строку в этой коллекции. θ — вектор в R (n+1), поэтому это вектор размерности n+1. Здесь в игру вступает алгоритм градиентного спуска. Этот вектор θ обновляется алгоритмом градиентного спуска.

Алгоритм градиентного спуска — это итеративный метод, целью которого является поиск глобальных минимумов дифференцируемой и выпуклой функции. В этой работе мы используем его для минимизации затрат.

На этом этапе мы закодировали эти операторы ниже.

Вышеупомянутый метод заключается в вычислении результата нашей гипотезы. Он принимает три аргумента. Это вектор весов, вектор x и член смещения, который равен θ0 .

Приведенный выше метод — это функция стоимости, о которой мы уже говорили на предыдущей странице. Параметр y_hat представляет результат нашей гипотезы. Это будет результат метода calculate_yhat().

Определение производной для весов. Это будет частью раздела обновления в функции Gradient Descent. Gradient Descend будет использовать эту функцию для итеративного обновления весов.

Определение производной для термина смещения. Член смещения равен θ0 в наших обозначениях на предыдущей странице. Он будет принимать свои данные каждый раз как 1. Таким образом, его производная по θ0 всегда равна 1.

В вышеуказанные две функции входит минус. Потому что в правиле обновления после умножения скорости обучения на альфа нам нужно сделать вычитание. Таким образом, мы суммируем их с минусом. Делая это, мы можем суммировать эту часть с предыдущими весами и смещением. Это для простоты. Если бы мы не сделали этого здесь, нам пришлось бы сделать это в функции градиентного спуска.

Пришло время построить нашу функцию Gradient Descent. Чтобы начать процесс градиентного спуска, ему нужна отправная точка. Под отправными точками понимается то, что они являются начальными значениями весов и смещения. Как правило, эти начальные точки выбираются случайным образом. Некоторые утверждают, что они могут начать все с 0. Эпоха — это итерация для каждого шага обновления. J(θ) должно уменьшаться после каждой итерации, если алгоритм работает правильно. Эпоха — это количество обновлений весов. В цикле мы применяем правило обновления. Скорость обучения является наиболее важным аргументом в пользу этой функции.

Величина, на которую веса обновляются во время обучения, называется размером шага или «скоростью обучения». [3] Выбор скорости обучения является сложной задачей. Если скорость обучения слишком велика, J(θ) может не уменьшаться на каждой итерации, может не сходиться. Если скорость обучения слишком мала, градиентный спуск может медленно сходиться. Он напрямую влияет на время вычислений, поскольку определяет размер шага.

Третий шаг — протестировать с (𝛼 = 0,001, 0,01, 0,1, 1,0) и выбрать лучший.

Нам нужно передать наш набор данных для градиентного спуска. Сделав это, мы обучим нашу модель и получим наши тета-параметры hθ(x). Так что мы можем использовать это уравнение для прогнозирования новых результатов в тестовом наборе.

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

Для каждого значения альфа получаются аналогичные результаты. Когда альфа равна 1, мы получили очень большую ошибку, и она не сходится. Но основное различие между ними в том, что при альфа 0,001 конвергенция происходила после 1000-й эпохи, а при увеличении альфа конвергенция происходила раньше, как и в 100-й эпохе. Это главное и самое важное отличие в данном примере. Но выбор альфы зависит от вашей проблемы. Это всегда важный вопрос. Есть несколько методов настройки альфы, но это пока не наше дело.

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

Второй раздел

Первый — нормализовать входные значения. Мы это уже сделали и после этого не меняли наши данные. Таким образом, мы можем использовать те же наборы данных для второго раздела.

Во-вторых, нам необходимо реализовать градиентный спуск, используя функцию стоимости ниже.

Во-первых, нам нужно создать нашу функцию обновления для реализации алгоритма градиентного спуска. Когда мы делаем некоторые вычисления для этой функции стоимости J(θ), правило обновления становится таким, как на рис. 200.2.

Если вы сгруппируете вместе все термины, зависящие от тета j, вы можете показать, что это обновление может быть эквивалентно записано следующим образом (рис. 200.3).

Рисунок 200.4 — интересный термин. Обычно она становится чуть меньше единицы. Это делает 𝜃𝑗 немного меньше, чем раньше. Это приводит к небольшому уменьшению 𝜃𝑗 к 0. Рисунок 200.5 точно такой же, как и исходное обновление Gradient Descent. Таким образом, все это делает 𝜃𝑗 меньше. Делая это, он стремится уменьшить сложность. Это позволяет избежать переобучения путем разделения на панели коэффициентов регрессии с высоким значением. [4]

Чтобы реализовать линейную регрессию с регуляризацией L2, нам нужно изменить функцию стоимости, которую мы использовали на предыдущих страницах. Мы должны добавить член регуляризации к функции стоимости J(θ).

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

Согласно рисунку 200.2 нам нужно добавить λ. 𝜃𝑗 к суммированию.

Со всем этим нам также нужно изменить нашу функцию Gradient Descent. Мы должны изменить функцию стоимости и функции весовой производной с вышеуказанными функциями.

На четвертом и пятом шагах нам нужно протестировать с различными параметрами регуляризации (𝜆 = 0,01, 0,1, 1,0, 10,0) и для каждого значения 𝜆 построить график зависимости функции стоимости от количества итераций. Мы передали наш набор данных новой функции Gradient Descent с другими параметрами 𝜆.

Сделав это, мы получили разные результаты. Они не сильно расходятся, но мы можем легко видеть, что погрешность результатов теперь намного ближе друг к другу. Отличия не большие, но их можно учесть. Результаты представлены на рис. 200.8.

На самом деле, мы ожидаем увеличения времени вычислений. Он должен был увеличить количество эпох, пока он сходится.

Источники

[1]: https://www.cs.toronto.edu/~delve/data/boston/bo stonDetail.html

[2]: https://www.atoti.io/articles/when-toperform-a-feature-scaling/

[3]: https://machinelearningmastery.com/understandthe-dynamics-of-learning-rate-on-deep-learningneural-networks/

[4]: https://www.analyticssteps.com/blogs/l2-andl1-regularization-machine-learning