Машинное обучение Ng Enda-3-логистическая регрессия и проблема регуляризации

машинное обучение
Машинное обучение Ng Enda-3-логистическая регрессия и проблема регуляризации

Машинное обучение Ng Enda-3-логистическая регрессия и проблема регуляризации

Основное содержание третьей недели включает:

  • логистическая регрессия
  • функция стоимости
  • Сравнение линейной регрессии и логистической регрессии
  • проблема регуляризации

логистическая регрессия

проблема классификации

Гипотетическая прогнозируемая переменнаяyявляются дискретными значениями и должны использовать логистическую регрессиюLogistic Regression,LRалгоритм,На самом деле это алгоритм классификации

проблема бинарной классификации

зависимая переменнаяdependent variableДва класса, которые могут принадлежать, называются отрицательными классамиnegative classи вперед классpositive class, значение зависимой переменной y может быть только в0и1между, из которых0 означает отрицательный класс, 1 означает положительный класс

Гипотеза Представление

Выходное значение классификатора0и1, поэтому желательно найти гипотетическую функцию, удовлетворяющую некоторому свойству, котороеЕго прогнозируемое значение должно быть между 0 и 1

Представьте новую модель:逻辑回归, модельДиапазон выходной переменной всегда находится между 0 и 1.. Предположения модели логистической регрессии:h(θ)=g(θTX)h(\theta) = g(\theta^TX)вXпредставляет вектор признаковgЛогическая функция , обычно используемаяSтип функции (правая часть рисунка выше,sigmoid function) формулаg(z)=11+ezg(z)= \frac{1}{1+e^{-z}}Реализация кода Pythonsigmodфункция активации:

import numpy as np

def sigmod(z):
  return 1 / (1 + np.exp(-z))

hθ(x)=g(z)=11+eθTXh_\theta(x)=g(z)= \frac{1}{1+e^{{-\theta^T}X}}

hθ(x)h_{\theta}(x)Функция заключается в вычислении вероятности выходной переменной = 1 по выбранным параметрам для заданной входной переменной, а именно:hθ(x)=P(y=1x;θ)h_{\theta}(x)=P(y=1|x;\theta)

Например: для заданного x, рассчитанного на основе определенных параметровhθ(x)=0.7h_{\theta}(x)=0.7, это означает, что с вероятностью 70% y принадлежит к положительному классу

граница решения

Интерпретация логистической регрессии
  1. в логистической регрессииh0.5h \geq 0.5предсказыватьy=1y=1, иначе у=0
  2. в функции активацииg(z)g(z)середина:

когдаz0z \geq 0ноg(z)0.5g(z) \geq 0.5

когдаz<0z < 0ноg(z)<0.5g(z) < 0.5

Также из-заz=θTxz={\theta^{T}}x, потом, когдаθTx0{\theta^T}x \geq 0когда естьy=1y=1;Напротивy=0y=0

Также из-заz=θTxz={\theta^{T}}x,который:θTx>=0{\theta^{T}}x>=0при предсказанииy=1y=1;Напротив:θTx<0{\theta^{T}}x<0при предсказанииy=0y=0

пример демо

В примере на рисунке ниже параметрθ\thetaудовлетворить[-3,1,1],когда3+x1+x20-3+x_1+x_2 \geq0,Сейчасx1+x23x_1+x_2\geq3Когда , модель предсказывает y=1, указывая, что на этот раз: прямая линияx1+x2=3x_1+x_2=3граница решения

Краевые задачи сложной модели

Функция стоимости

Как подобрать параметры модели LRθ\theta

1. Линейная модельФункция стоимости - это ошибка моделисумма квадратов:

J(θ)=12mi=1m(hθ(x(i))y(i))2J(\theta)=\frac{1}{2m}\sum^m_{i=1}(h_{\theta}(x^{(i)})-y^{(i)})^2

Если вы напрямую используете функцию стоимости в линейной модели, то есть сумму квадратов ошибок, результирующая функция стоимости будет **"невыпуклой функцией"**, но на самом деле мы ожидаем увидеть выпуклую функцию (справа )

  1. Переопределение функции стоимости логистической регрессии

    hθ(x)=g(θTX)=11+eθTXh_\theta(x)=g(\theta^TX)= \frac{1}{1+e^{-\theta^TX}}

    J(θ)=1mi=1mCost(hθ(x(i)),y(i))J(\theta)=\frac{1}{m}\sum^m_{i=1}Cost(h_\theta(x^{(i)}),y^{(i)})

    Cost(hθ(x),y)={log(hθ(x)),y=1 log(1hθ(x)),y=0 Cost(h_\theta(x), y) = \begin{cases} -\log(h_\theta(x)), & \text{y=1} \ -\log(1-h_\theta(x)), & \text{y=0} \ \end{cases}

Объедините два приведенных выше уравнения:

Cost(hθ(x),y)=ylog(hθ(x))(1y)log(1hθ(x))Cost(h_\theta(x), y)=-y\log(h_\theta(x))-(1-y)\log(1-h_\theta(x))

MzVxGn.png

  1. hθ(x)h_\theta(x)иCost(hθ(x),y)Cost(h_\theta(x),y)Отношения между

По разным значениям у суд производится отдельно, при этом следует отметить, что значение функции h предполагается лежащим только между [0, 1].

Случай y=1

MzPSB9.png

Случай y=0

MzP8gS.png

Код Python реализует функцию стоимости

использоватьPythonРеализуйте следующую функцию стоимости

  • firstозначает первый элемент справа
  • secondУказывает на второй элемент справа

Cost(hθ(x),y)=ylog(hθ(x))(1y)log(1hθ(x))Cost(h_\theta(x), y)=-y\log(h_\theta(x))-(1-y)\log(1-h_\theta(x))

import numpy as np

def cost(theta, X, y):
  # 实现代价函数
  
  theta=np.matrix(theta)
  X = np.matrix(X)
  y = np.matrxi(y)
  
  first = np.multiply(-y, np.log(sigmod(X * theta.T)))
  second = np.multiply((1 - y), np.log(1-sigmod(X * theta.T)))
  
  return np.sum(first - second) / (len(X))

Использование градиентного спуска для решения минимальных параметров LR

1. Функция стоимости в LR

J(θ)=1mi=1m[y(i)log(hθ(x(i)))(1y(i))log(1hθ(xi))]J(\theta)=-\frac{1}{m}\sum^m_{i=1}[-y^{(i)}\log(h_\theta(x^{(i)}))-(1-y^{(i)})\log(1-h_\theta(x^{i}))]

2. Окончательный результат

J(θ)θj=1mi=1m[hθ(x(i))y(i)]xj(i)\frac{\partial J(\theta)}{\partial \theta_j}=\frac{1}{m}\sum^m_{i=1}[h_\theta(x^{(i)})-y^{(i)}]x_j^{(i)}

3. Конкретный процесс

Итеративно обновляетсяθj:\тета_{j}:

θj:=θjαJ(θ)θj\theta_{j} := \theta_j-\alpha\frac{\partial J(\theta)}{\partial \theta_j}

θj:=θjα1mi=1m[hθ(x(i))y(i)]xj(i)\theta_{j} := \theta_j-\alpha\frac{1}{m}\sum^m_{i=1}[h_\theta(x^{(i)})-y^{(i)}]x_j^{(i)}

Если есть n признаков, то естьθ=[θ0,θ1,,θn]T\тета=[\тета_0,\тета_1,…,\тета_n]^T. Тогда по приведенной выше формуле из0 n0~nобновить всеθ\theta

Линейная регрессия против логистической регрессии

  1. Изменение правил гипотетического определения

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

hθ(x)=θTX=θ0x0+...+θnxnh_{\theta}{(x)}=\theta^TX=\theta_0x_0+...+\theta_nx_n

Логистическая регрессия:

hθ(x)=11+eθTXh_\theta{(x)}= \frac{1}{1+e^{-\theta^{T}X}}

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

Другие алгоритмы решения функции минимальной стоимости

  • Сопряженный градиентconjugate gradient
  • локальная оптимизацияBroyden fletcher goldfarb shann,BFGS
  • Метод локальной оптимизации с ограниченной памятьюLBFGS

Мультиклассовая классификация «один против всех»

Давайте возьмем практический пример, чтобы проиллюстрировать:

Если вам теперь нужен алгоритм обучения, который может автоматически классифицировать электронные письма по разным папкам или может автоматически добавлять метки, то для этого вам понадобятся несколько разных папок или разных меток, чтобы отличать электронные письма от работы, друзей, семьи или об увлечениях, а затем , есть такая проблема с классификацией: есть 4 категории, соответственно используяy=1,2,3,4y=1,2,3,4представлять.

](

Проблема регуляризации

Основы регуляризации

Методы регуляризации в основном предназначены для решения проблемы переобучения.Переоснащение относится к: У него хорошая способность оценивать выборочные данные, но плохая способность прогнозирования для новых данных.

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

Если это полиномиальная подгонка,xЧем больше число раз, тем лучше эффект подгонки, но соответствующая способность предсказания может быть хуже.Работа с переоснащением:

  1. Отбросить некоторые функции, которые нельзя правильно предсказать. Это может быть ручной выбор того, какие функции сохранить, или использовать какой-либо алгоритм выбора модели, например.PCA
  2. Регуляризация. Сохранить все функции, но уменьшить размер параметраmagnitude*

Добавить параметр регуляризации

в моделиhθ(x)=θ0+θ1x1+θ2x2+θ3x3+θ4x4h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_3+\theta_4x_4в основномПроблемы переобучения, вызванные терминами высокого порядка:

Добавление параметров регуляризации может предотвратить проблемы переобучения.λ\lambdaпараметр регуляризацииRegularization Parameter

Тогда соответствующая функция затрат принимает вид:

image-20201011163124462

J(θ)=12mi=1m(hθ(x(i))y(i))2+λj=1nθj2J(\theta)=\frac{1}{2m}\sum^m_{i=1}(h_{\theta}(x^{(i)})-y^{(i)})^2+\lambda \sum^n_{j=1}\theta^2_{j}

Attention:

  • Как правило, нетθ0\theta_0наказывать; добавление параметра регуляризации на самом делеθ\thetaнаказывать. Сравнение между регуляризованной моделью и исходной моделью:

  • еслиλ\lambdaслишком велик, все параметры минимизируются, и модель становитсяhθ(x)=θ0h_\theta(x)=\theta_0, что приводит к переоснащению

Регулярная линейная регрессия

Функция стоимости для регуляризованной линейной регрессии:

J(θ)=12mi=1m[(hθ(x(i))y(i))2+λj=1nθj2]J(\theta)=\frac{1}{2m}\sum^m_{i=1}[(h_{\theta}(x^{(i)})-y^{(i)})^2+\lambda \sum^n_{j=1}\theta^2_{j}]

Attention: в линейной регрессии неправильноθ0\theta_0Упорядочить:

θ0:=θ0a1mi=1m((hθ(x(i))y(i))x0(i){\theta_0}:={\theta_0}-a\frac{1}{m}\sum\limits_{i=1}^{m}{(({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})x_{0}^{(i)}}

когдаj=1,2,,nj=1,2,…,nВремя:

θj:=θja[1mi=1m((hθ(x(i))y(i))xj(i)+λmθj];j=1,2,...,n{\theta_j}:={\theta_j}-a[\frac{1}{m}\sum\limits_{i=1}^{m}{(({h_\theta}({{x}^{( i)}})-{{y}^{(i)}})x_{j}^{\left(i\right)}}+\frac{\lambda}{m}{\theta_j}] ;j =1,2,...,n

приспособлен, чтобы стать:

θj:=θj(1λm)a1mi=1m((hθ(x(i))y(i))xj(i){\theta_j}:={\theta_j}(1-\frac{\lambda }{m})-a\frac{1}{m}\sum\limits_{i=1}^{m}{(({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})x_{j}^{\left( i \right)}}

Регулярная логистическая регрессия

LRСуществует два метода оптимизации задачи:

  • Градиентный спуск
  • Более продвинутые алгоритмы оптимизации

Функция стоимости после добавления обычного штрафного члена:

J(θ)=1mi=1m[y(i)log(hθ(x(i)))(1y(i))log(1hθ(xi))]+λ2mj=1nθj2J(\theta)=\frac{1}{m}\sum^m_{i=1}[-y^{(i)}\log(h_\theta(x^{(i)}))-(1-y^{(i)})\log(1-h_\theta(x^{i}))]+\frac{\lambda}{2m}\sum^n_{j=1}\theta^2_j

реализация кода на питоне

import numpy as np

# 实现代价函数
def costReg(theta, X, y, lr):
  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 = (lr / (2 * len(X)) * np.sum(np.power(theta[:, 1:theta.shape[1]], 2))   # theta[:, 1:theta.shape[1]] 代表的是 \theta_j 
  return np.sum(first - second) / len((X)) + reg

По выводу получаемАлгоритм градиентного спуска, что в принципе верноθ\thetaПостоянные обновления:

θ0:=θ0a1mi=1m((hθ(x(i))y(i))x0(i)){\theta_0}:={\theta_0}-a\frac{1}{m}\sum\limits_{i=1}^{m}{(({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})x_{0}^{(i)}})

θj:=θja[1mi=1m(hθ(x(i))y(i))xj(i)+λmθj];j=1,2,...,n{\theta_j}:={\theta_j}-a[\frac{1}{m}\sum\limits_{i=1}^{m}{({h_\theta}({{x}^{(i )}})-{{y}^{(i)}})x_{j}^{\left( i \right)}}+\frac{\lambda}{m}{\theta_j}] ; j= 1,2,...,н