1.1 Введение в логистическую регрессию
Хотя слово «регрессия» решает проблему классификации, а не предсказывает непрерывное значение.
В соответствии с моделью линейной регрессии мы можем предсказывать только непрерывные значения, но для задач классификации, взяв в качестве примера бинарную классификацию, нам нужно вывести 0 или 1, и мы можем предсказать:
когдапри предсказании;когдапри предсказании.
Хотя приведенное выше описание, кажется, решает проблему, когда y > 1, модель также изменится соответствующим образом.В настоящее время нецелесообразно использовать 0,5 в качестве порогового значения, что указывает на то, что линейная модель не подходит для решения такой проблемы. .
На этом этапе мы вводим новую модель, выходная переменная которой всегда находится в диапазоне от 0 до 1.в:репрезентативный вектор признаковпредставляет собой логическую функцию (logistic function) или называетсяSфункция формы (Sigmoid function), формула:.
pythonКод:
import numpy as np
def sigmoid(z):
return 1 / (1 + np.exp(-z))
Изображение функции:
Эффект заключается в том, что для данной входной переменной вероятность того, что выходная переменная = 1, рассчитывается на основе выбранных параметров (estimated probablity),который
Например, если для заданного, рассчитанный по определяемым параметрам, есть вероятность 70%является форвардным классом, соответственноВероятность оказаться в отрицательном классе 1-0,7=0,3.
1.2 Функция стоимости
У нас есть предположение h(θ), как показано ниже
Для моделей линейной регрессии функция стоимости, которую мы определяем, представляет собой сумму квадратов всех ошибок модели. Теоретически мы могли бы также использовать это определение для моделей логистической регрессии, но проблема в том, что когда мы используемПри введении в функцию стоимости, определенную таким образом, функция стоимости, которую мы получаем, будет невыпуклой функцией (non-convexfunction).
Это означает, что наша функция стоимости имеет много локальных минимумов, которые повлияют на алгоритм градиентного спуска, чтобы найти глобальные минимумы.
Функция стоимости линейной регрессии:; затем мы переопределяем функцию стоимости логистической регрессии как:
,в
иСвязь между ними показана на следующем рисунке:
построен такОсобенностями функции являются:
- когда фактическоеиТакже 1, ошибка равна 0, когданоЕсли не 1, ошибка следуетстановиться меньше и больше;
- когда фактическоеитоже 0, стоимость 0, когданоЕсли не 0, ошибка следуетстановится все больше и больше.
будет строитьУпрощено следующим образом:Ввести функцию стоимостиПосле получения:Отрицательный знак:
PythonКод:
import numpy as np
def cost(theta, X, y):
theta = np.matrix(theta)
X = np.matrix(X)
y = np.matrix(y)
first = np.multiply(-y, np.log(sigmoid(X* theta.T)))
second = np.multiply((1 - y), np.log(1 - sigmoid(X* theta.T)))
return np.sum(first - second) / (len(X))
1.3 Градиентный спуск
Получив такую функцию стоимости, мы можем использовать алгоритм градиентного спуска, чтобы найти параметры, минимизирующие функцию стоимости. Алгоритм:
Repeat {
(simultaneously update all )
}
После вывода получаем:
Repeat {
(simultaneously update all )
}
Итак, если у вас естьхарактеристики, то есть:
, вектор параметроввключают до того как, то вам нужно использовать эту формулу.Процесс получения:
учитывать:но:
так:
Примечание. Хотя результирующий алгоритм градиентного спуска внешне выглядит так же, как алгоритм градиентного спуска для линейной регрессии,В отличие от линейной регрессии, так что на самом деле это не то же самое. Кроме того, по-прежнему необходимо выполнять масштабирование признаков перед запуском алгоритма градиентного спуска.
Некоторые альтернативы алгоритмам градиентного спуска: В дополнение к алгоритмам градиентного спуска существуют другие алгоритмы, которые часто используются для минимизации функции стоимости.Эти алгоритмы более сложны и совершенны, обычно не требуют ручного выбора скорости обучения и обычно быстрее, чем алгоритмы градиентного спуска. Эти алгоритмы:Сопряженный градиент(Conjugate Gradient),локальная оптимизация(Broyden fletcher goldfarb shann,BFGS)иМетод локальной оптимизации с ограниченным объемом памяти(LBFGS)
2.1 Регуляризация
2.1.1 Проблема переобучения
Первая модель — это линейная модель, которая недостаточно подходит и плохо согласуется с нашим обучающим набором; третья модель — это квадратичная модель, которая слишком много внимания уделяет подбору исходных данных и теряет суть алгоритма: предсказание новых данных. Мы можем видеть, что если для прогнозирования задано новое значение, оно будет работать очень плохо, оно является переоснащением, и хотя оно очень хорошо соответствует нашему обучающему набору, оно может плохо работать при прогнозировании новых входных переменных.Хорошо; и модель посередине кажется наиболее подходящей.
С точки зрения полиномиального понимания,Чем больше число раз, тем лучше соответствие, но соответствующая способность предсказания может быть хуже.
Вопрос в том, что нам делать, если мы обнаружим проблему переобучения?
-
Отбросьте некоторые функции, которые не помогают нам правильно прогнозировать. Это можно сделать вручную, выбрав, какие функции сохранить, или с помощью некоторого алгоритма выбора модели (например,PCA)
-
Регуляризация. Сохраните все функции, но уменьшите размер параметров (magnitude).
2.1.2 Функция стоимости
В приведенной выше задаче регрессии, если наша модель:Из предыдущего примера видно, что именно эти члены высокого порядка вызывают переоснащение, поэтому, если мы сможем сделать коэффициенты этих членов высокого порядка близкими к 0, мы сможем хорошо подобраться. Итак, что нам нужно сделать, это в некоторой степени уменьшить эти параметры., который является основным методом регуляризации.
У нас есть более простое предположение для предотвращения переобучения:
вТакже известен как параметр регуляризации (Regularization Parameter). Как показано на рисунке ниже, регулируемая — это кривая после регуляризации, которая лучше подходит.
Но если выбраны параметры регуляризацииЕсли он слишком велик, все параметры будут сведены к минимуму, в результате чего модель станет, что является ситуацией, показанной красной линией на рисунке выше, что приводит к недообучению.
Тогда зачем добавлять элементМожет сделатьснижение стоимости? потому что если мы сделаемЕсли значение , велико, для того, чтобыCost Functionкак можно меньше, всестоимость (исключая) несколько уменьшится. Но еслислишком велико, то(без учета) будет приближаться к 0, поэтому все, что мы получим, это линия, параллельнаяпрямая линия оси. Итак, для регуляризации мы должны принять разумноезначение, чтобы регуляризация могла быть лучше применена. Вспоминая функцию стоимости, чтобы использовать регуляризацию, давайте применим эти концепции к линейной регрессии и логистической регрессии, чтобы мы могли избежать переобучения.
2.1.3 Регулярная линейная регрессия
Функция стоимости для регуляризованной линейной регрессии:
Если бы мы использовали градиентный спуск, чтобы объявить эту функцию стоимости минимальной, потому что мы неВыполняется регуляризация, поэтому алгоритм градиентного спуска разделим на два случая:
{
}
Для приведенного выше алгоритмаФормулу обновления времени можно скорректировать, чтобы получить:Можно видеть, что изменение алгоритма градиентного спуска регуляризованной линейной регрессии заключается в том, что каждый раз на основе правил обновления исходного алгоритмазначение уменьшается на дополнительное значение.
Мы также можем использовать нормальное уравнение для решения регуляризованной модели линейной регрессии следующим образом:
Размеры матрицы на рисунке.
2.1.4 Модель регуляризованной логистической регрессии
Вычислите производную самостоятельно. Также для логистической регрессии мы также добавляем регуляризованное выражение к функции стоимости, чтобы получить функцию стоимости:
PythonКод:
import numpy as np
def costReg(theta, X, y, learningRate):
theta = np.matrix(theta)
X = np.matrix(X)
y = np.matrix(y)
first = np.multiply(-y, np.log(sigmoid(X*theta.T)))
second = np.multiply((1 - y), np.log(1 - sigmoid(X*theta.T)))
reg = (learningRate / (2 * len(X))* np.sum(np.power(theta[:,1:theta.shape[1]],2))
return np.sum(first - second) / (len(X)) + reg
Чтобы минимизировать эту функцию стоимости, путем вывода алгоритм градиентного спуска получается как:
{
}
Хотя выглядит так же ?, значит разные.