Изучив ранее линейную регрессию, логистическую регрессию и градиентный спуск, этот метод, изученный сегодня, может помочь нашей обученной модели делать более точные прогнозы на неизвестных данных — метод регуляризации!
Приходите и учитесь вместе, обучение делает меня счастливым (^▽^)!
1. Что такое регуляризация?
Три слова "регуляризация" звучат довольно высоко, но на самом деле это технология для решения проблемы переобучения в машинном обучении. Использование этой технологии позволяет модели, которую мы обучили на тренировочном наборе, понимать неизвестные данные. Подходит хорошо.
Способность модели машинного обучения подбирать неизвестные данные также называется способностью к обобщению.Модель с лучшей способностью к обобщению также может хорошо подходить к неизвестным данным.Если возникает проблема переобучения обучающих данных, способность к обобщению также будет плохой .
Когда возникает проблема переоснащения, есть два способа справиться с ней:
- Уменьшение размерности: уменьшите количество признаков и уменьшите полиномиальный порядок модели, чтобы было меньше членов высокого порядка, и кривая модели не была такой сложной.
- Регуляризация: вместо прямого уменьшения признаков увеличьте коэффициенты параметров признаков в функции стоимости.
Сегодня мы собираемся представитьметод регуляризации, Давайте используем пример, чтобы проиллюстрировать, что такое переобучение и недообучение.
2. Переобучение против недообучения
2.1 Пример линейной регрессии
Вот также пример прогнозирования цен на жилье для объяснения следующих трех ситуаций:
- Недообучение: количество функций, выбранных моделью, слишком мало (2), чтобы хорошо соответствовать обучающим данным, что приводит к большому смещению.
- Нормальная подгонка: модель выбирает подходящее количество функций (3) и может хорошо соответствовать обучающим данным.
- Переобучение: модель выбирает слишком много признаков (5) и переобучает данные обучения, что приводит к высокой дисперсии.
В практических приложениях обычно выбирается много признаков, и их легко переобучить, поэтому необходимо решить эту проблему.
2.2 Пример логистической регрессии
Проблемы логистической регрессии также порождают проблемы переоснащения и недообучения, такие как эта проблема классификации:
Тип аннотации здесь забыт, но принцип тот же:
- Недообучение: классификация с помощью прямых линий на первый взгляд неуместна, потому что интуитивно граница решения представляет собой форму дуги.
- Нормальная подгонка: граница решения имеет форму дуги, и эффект подгонки лучше.
- Переобучение: классификация границ решения слишком строгая, а эффект прогнозирования для неизвестных выборок плохой.
Кратко: чем больше параметров у модели, тем больше полиномиальных степеней (), тем сложнее модельная кривая, и эти члены более высокого порядка могут привести к проблемам переобучения.
Суть этого метода регуляризации для решения проблемы переобучения заключается в следующем:Уменьшите влияние терминов высокого порядка на общую модель, чтобы улучшить прогностическую способность модели для неизвестных образцов.
Потому что модель, которую мы обучаем на обучающих данных, со временем будет использоваться на неизвестных выборках, иначе она потеряет значение инженерных приложений. Хорошо, тогда давайте формально изучим принцип этой технологии.На самом деле это очень просто, то есть добавить формулу члена регуляризации после функции стоимости.
В-третьих, принцип регуляризации
3.1 Понимание регуляризации в гипотетических функциях
Я также использую пример прогнозирования цен на жилье, чтобы проиллюстрировать принцип метода регуляризации.Гипотетическая функция модели выглядит следующим образом:
еслиУказывает кухонную площадь дома,представляет географическое положение дома, эти две функции приводят к тому, что порядок модели слишком высок (), я хочу уменьшить влияние двух на функцию гипотезы, то есть я хочу получить оптимальный собственный вектор после того, как функция стоимости получит оптимальное значение.стремится к 0, поэтому приведенная выше модель становится:
Примечание: здесь только,, вместо того, чтобы сделать их прямо равными 0, потому что мы регуляризуем не уменьшение размерности, сделав эти 2 параметра стремящимися к 0 так, чтобы их члены более высокого порядка были пренебрежимо малы, мы можем получить сокращениевоздействие на исходную модель.
В терминах машинного обучения это: с помощью методов регуляризации длянаказывать иЭти 2 особенности! Пусть они меньше влияют на прогнозы модели!
3.2 Понимание регуляризации в функции стоимости
Чтобы оштрафовать параметры в приложении, необходимо упорядочить функцию стоимости, то есть, когда функция стоимости сведена к минимуму, параметры, которые должны быть оштрафованы, устанавливаются на 0, насколько это возможно.
Вот пример функции стоимости линейной регрессии, чтобы увидеть, как упорядочить:
Добавляем 2 члена после функции стоимости, так как мы хотим минимизировать функцию стоимости в конце, нам также нужно минимизировать добавленные два члена, но поскольку коэффициент 10000 относительно велик, это приводит кОбщая оптимизация становится меньше, надо менять параметрыУстановите его достаточно маленьким, чтобы результат умножения двух стал достаточно маленьким, и соединение было завершено.регуляризация, например:
Коэффициенты перед параметрами, которые необходимо упорядочить, должны быть правильно выбраны в соответствии с реальной ситуацией.В примерах здесь установлены значения 1000 и 10000.
В приведенном выше примере указано, что параметры, подлежащие регуляризации,, но в практических приложениях, поскольку обучающая выборка имеет много особенностей, мы не знаем, какие параметры нужно регуляризовать, поэтому мы регуляризуем все параметры, а затем позволяем алгоритму оптимизации определить каждый параметр регуляризации перед коэффициентами , такая функция стоимости выглядит следующим образом:
код показывает, как показано ниже:
# 线性回归正则化代价函数
# 正则化系数 lambda 设置为 1
def regularized_cost(theta, X, y, lamd = 1):
# 不对 theta_0 正则化
theta_one2n = theta[1:]
# 正则化项, power 求平方,sum 求和
regularized_term = (lamd / 2 * len(X)) * np.power(theta_one2n, 2).sum()
# cost_function 是未加正则化的代价函数
return cost_function(theta, X, y) + regularized_term
Это окончательная формула для регуляризации функции стоимости.Видно, что добавлен член регуляризации, где коэффициентназывается коэффициентом регуляризации, следует отметить, что, то есть нет праварегуляризация, потому чтоСоответствующая функция,иОн искусственно добавлен нами, поэтому нет необходимости исправлятьРегуляризация.
3.3 Влияние коэффициента регуляризации
При регуляризации коэффициентыВыбор очень важен, в целом он будет иметь следующие последствия:
- Слишком большой: все параметры чрезмерно регуляризированы, в результате чего параметры функции почти равны 0, гипотетическая функция станетпрямая линия, т.е. недообучение
- Слишком мал: степень регуляризации параметров недостаточна, когда параметров много, это все равно приведет к переобучению
- Подходит: уменьшить влияние терминов высокого порядка, нормальное соответствие
В ПОРЯДКЕ! Принцип регуляризации закончен, и следующее - фактическое использование технологии регуляризации.
В-четвертых, регуляризованный кодовый бой
В этой части я намерен поделиться с вами тем, как использовать программирование регуляризации в линейной регрессии и логистической регрессии.
4.1 Регуляризация линейной регрессии
Потому что мы добавили член регуляризации в функцию стоимости:
Таким образом, вычисление градиентного спуска также добавляет градиент регуляризации (прямой вывод части регуляризации):
потому что тебе не нужноРегуляризация, поэтому расчет итерации градиента делится на следующие две части:
Мы находим, что вторая формула выше может быть дополнительно объединена:
Пока вышла формула регуляризованного градиента для линейной регрессии, давайте запишем ее в коде Python:
# 添加正则化项的线性回归梯度下降
def regularized_gradient(theta, X, y, lamd = 1):
# 不对 theta_0 正则化
theta_one2n = theta[1:]
# 正则化梯度:(lambda / m) * theta_j
regularized_theta = (lamd / len(X)) * theta_one2n
# 合并 theta_0
regularized_term = np.concatenate([np.array([0]), regularized_theta])
# 返回梯度:原梯度 + 正则化梯度
return gradient(theta, X, y) + regularized_term
4.2 Регуляризация логистической регрессии
Термин регуляризации для функции стоимости логистической регрессии такой же, как и для линейной регрессии:
# 逻辑回归正则化代价函数
# lambda 设置为 1
def regularized_cost(theta, X, y, lamd = 1):
theta_one2n = theta[1:]
# lambda / (2 * m)
regularized_term = (lamd / (2 * len(X))) * np.power(theta_one2n, 2).sum()
# 返回加上正则化的总代价
return cost_function(theta, X, y) + regularized_term
Регуляризованный градиент логистической регрессии (разные):
# 添加正则化项的逻辑回归梯度下降
def regularized_gradient(theta, X, y, lamd = 1):
# 不对 theta_0 正则化
theta_one2n = theta[1:]
# 计算正则化项
regularized_theta = (lamd / len(X)) * theta_one2n
# 加上 theta_0
regularized_term = np.concatenate([np.array([0]), regularized_theta])
# 返回增加正则化后的总梯度
return gradient(theta, X, y) + regularized_term
Ягненок в приведенном выше коде — это коэффициент регуляризации., вы можете попробовать изменить его во время обучения модели, а затем протестировать влияние этого коэффициента на параметры модели, чтобы глубже понять технику регуляризации.
в текстеполный исполняемый кодСсылка на сайт:
В ПОРЯДКЕ! Я поделюсь ими сегодня, увидимся в следующем выпуске, не забудьте подписаться на меня :)
Эта статья была первоначально опубликована в общедоступной учетной записи WeChat «Denglong», в которой были опубликованы оригинальные статьи, такие как машинное обучение, программирование алгоритмов, Python, робототехника и т. Д., Отсканируйте код, чтобы следовать, и ответьте «1024», знаете ли!