Ng Enda MachineLearning-week3

машинное обучение

1.1 Введение в логистическую регрессию

Хотя слово «регрессия» решает проблему классификации, а не предсказывает непрерывное значение.

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

когда{h_\theta}\left( x \right)>=0.5при предсказанииy=1;когда{h_\theta}\left( x \right)<0.5при предсказанииy=0.

Хотя приведенное выше описание, кажется, решает проблему, когда y > 1, модель также изменится соответствующим образом.В настоящее время нецелесообразно использовать 0,5 в качестве порогового значения, что указывает на то, что линейная модель не подходит для решения такой проблемы. .

На этом этапе мы вводим новую модель, выходная переменная которой всегда находится в диапазоне от 0 до 1.h_\theta \left( x \right)=g\left(\theta^{T}X \right)в:Xрепрезентативный вектор признаковgпредставляет собой логическую функцию (logistic function) или называетсяSфункция формы (Sigmoid function), формула:g\left( z \right)=\frac{1}{1+{{e}^{-z}}}.

pythonКод:

import numpy as np

def sigmoid(z):

  return 1 / (1 + np.exp(-z))

Изображение функции:

h_\theta \left( x \right)Эффект заключается в том, что для данной входной переменной вероятность того, что выходная переменная = 1, рассчитывается на основе выбранных параметров (estimated probablity),который

h_\theta \left( x \right)=P\left( y=1|x;\theta \right)

Например, если для заданногоx, рассчитанный по определяемым параметрамh_\theta \left( x \right)=0.7, есть вероятность 70%yявляется форвардным классом, соответственноyВероятность оказаться в отрицательном классе 1-0,7=0,3.

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

У нас есть предположение h(θ), как показано ниже

Для моделей линейной регрессии функция стоимости, которую мы определяем, представляет собой сумму квадратов всех ошибок модели. Теоретически мы могли бы также использовать это определение для моделей логистической регрессии, но проблема в том, что когда мы используем{h_\theta}\left( x \right)=\frac{1}{1+{e^{-\theta^{T}x}}}При введении в функцию стоимости, определенную таким образом, функция стоимости, которую мы получаем, будет невыпуклой функцией (non-convexfunction).

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

Функция стоимости линейной регрессии:J\left( \theta  \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{\frac{1}{2}{{\left( {h_\theta}\left({x}^{\left( i \right)} \right)-{y}^{\left( i \right)} \right)}^{2}}}; затем мы переопределяем функцию стоимости логистической регрессии как:

J\left( \theta  \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{{Cost}\left( {h_\theta}\left( {x}^{\left( i \right)} \right),{y}^{\left( i \right)} \right)}

{h_\theta}\left( x \right)иCost\left( {h_\theta}\left( x \right),y \right)Связь между ними показана на следующем рисунке:

построен такCost\left( {h_\theta}\left( x \right),y \right)Особенностями функции являются:

  • когда фактическоеy=1и{h_\theta}\left( x \right)Также 1, ошибка равна 0, когдаy=1но{h_\theta}\left( x \right)Если не 1, ошибка следует{h_\theta}\left( x \right)становиться меньше и больше;
  • когда фактическоеy=0и{h_\theta}\left( x \right)тоже 0, стоимость 0, когдаy=0но{h_\theta}\left( x \right)Если не 0, ошибка следует{h_\theta}\left( x \right)становится все больше и больше.

будет строитьCost\left( {h_\theta}\left( x \right),y \right)Упрощено следующим образом:Cost\left( {h_\theta}\left( x \right),y \right)=-y\times log\left( {h_\theta}\left( x \right) \right)-(1-y)\times log\left( 1-{h_\theta}\left( x \right) \right)Ввести функцию стоимостиJ(\theta)После получения:J\left( \theta  \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{[-{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)-\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]}Отрицательный знак:J\left( \theta  \right)=-\frac{1}{m}\sum\limits_{i=1}^{m}{[{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)+\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]}

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 {

\theta_j := \theta_j - \alpha \frac{\partial}{\partial\theta_j} J(\theta)

(simultaneously update all )

}

После вывода получаем:

Repeat {

\theta_j := \theta_j - \alpha \frac{1}{m}\sum\limits_{i=1}^{m}{{\left( {h_\theta}\left( \mathop{x}^{\left( i \right)} \right)-\mathop{y}^{\left( i \right)} \right)}}\mathop{x}_{j}^{(i)}

(simultaneously update all )

}

Итак, если у вас естьnхарактеристики, то есть:

, вектор параметров\thetaвключают{\theta_{0}} {\theta_{1}} {\theta_{2}}до того как{\theta_{n}}, то вам нужно использовать эту формулу.

Процесс получения:

J\left( \theta  \right)=-\frac{1}{m}\sum\limits_{i=1}^{m}{[{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)+\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]}учитывать:{h_\theta}\left( {{x}^{(i)}} \right)=\frac{1}{1+{{e}^{-{\theta^T}{{x}^{(i)}}}}}но:{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)+\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right) ={{y}^{(i)}}\log \left( \frac{1}{1+{{e}^{-{\theta^T}{{x}^{(i)}}}}} \right)+\left( 1-{{y}^{(i)}} \right)\log \left( 1-\frac{1}{1+{{e}^{-{\theta^T}{{x}^{(i)}}}}} \right) =-{{y}^{(i)}}\log \left( 1+{{e}^{-{\theta^T}{{x}^{(i)}}}} \right)-\left( 1-{{y}^{(i)}} \right)\log \left( 1+{{e}^{{\theta^T}{{x}^{(i)}}}} \right)

так:\frac{\partial }{\partial {\theta_{j}}}J\left( \theta  \right)=\frac{\partial }{\partial {\theta_{j}}}[-\frac{1}{m}\sum\limits_{i=1}^{m}{[-{{y}^{(i)}}\log \left( 1+{{e}^{-{\theta^{T}}{{x}^{(i)}}}} \right)-\left( 1-{{y}^{(i)}} \right)\log \left( 1+{{e}^{{\theta^{T}}{{x}^{(i)}}}} \right)]}] =-\frac{1}{m}\sum\limits_{i=1}^{m}{[-{{y}^{(i)}}\frac{-x_{j}^{(i)}{{e}^{-{\theta^{T}}{{x}^{(i)}}}}}{1+{{e}^{-{\theta^{T}}{{x}^{(i)}}}}}-\left( 1-{{y}^{(i)}} \right)\frac{x_j^{(i)}{{e}^{{\theta^T}{{x}^{(i)}}}}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}}}] =-\frac{1}{m}\sum\limits_{i=1}^{m}{{y}^{(i)}}\frac{x_j^{(i)}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}}-\left( 1-{{y}^{(i)}} \right)\frac{x_j^{(i)}{{e}^{{\theta^T}{{x}^{(i)}}}}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}}] =-\frac{1}{m}\sum\limits_{i=1}^{m}{\frac{{{y}^{(i)}}x_j^{(i)}-x_j^{(i)}{{e}^{{\theta^T}{{x}^{(i)}}}}+{{y}^{(i)}}x_j^{(i)}{{e}^{{\theta^T}{{x}^{(i)}}}}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}}} =-\frac{1}{m}\sum\limits_{i=1}^{m}{\frac{{{y}^{(i)}}\left( 1\text{+}{{e}^{{\theta^T}{{x}^{(i)}}}} \right)-{{e}^{{\theta^T}{{x}^{(i)}}}}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}}x_j^{(i)}} =-\frac{1}{m}\sum\limits_{i=1}^{m}{({{y}^{(i)}}-\frac{{{e}^{{\theta^T}{{x}^{(i)}}}}}{1+{{e}^{{\theta^T}{{x}^{(i)}}}}})x_j^{(i)}} =-\frac{1}{m}\sum\limits_{i=1}^{m}{({{y}^{(i)}}-\frac{1}{1+{{e}^{-{\theta^T}{{x}^{(i)}}}}})x_j^{(i)}} =-\frac{1}{m}\sum\limits_{i=1}^{m}{[{{y}^{(i)}}-{h_\theta}\left( {{x}^{(i)}} \right)]x_j^{(i)}} =\frac{1}{m}\sum\limits_{i=1}^{m}{[{h_\theta}\left( {{x}^{(i)}} \right)-{{y}^{(i)}}]x_j^{(i)}}

Примечание. Хотя результирующий алгоритм градиентного спуска внешне выглядит так же, как алгоритм градиентного спуска для линейной регрессии,{h_\theta}\left( x \right)=g\left( {\theta^T}X \right)В отличие от линейной регрессии, так что на самом деле это не то же самое. Кроме того, по-прежнему необходимо выполнять масштабирование признаков перед запуском алгоритма градиентного спуска.

Некоторые альтернативы алгоритмам градиентного спуска: В дополнение к алгоритмам градиентного спуска существуют другие алгоритмы, которые часто используются для минимизации функции стоимости.Эти алгоритмы более сложны и совершенны, обычно не требуют ручного выбора скорости обучения и обычно быстрее, чем алгоритмы градиентного спуска. Эти алгоритмы:Сопряженный градиент(Conjugate Gradient),локальная оптимизация(Broyden fletcher goldfarb shann,BFGSМетод локальной оптимизации с ограниченным объемом памяти(LBFGS)

2.1 Регуляризация

2.1.1 Проблема переобучения

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

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

Вопрос в том, что нам делать, если мы обнаружим проблему переобучения?

  1. Отбросьте некоторые функции, которые не помогают нам правильно прогнозировать. Это можно сделать вручную, выбрав, какие функции сохранить, или с помощью некоторого алгоритма выбора модели (например,PCA)

  2. Регуляризация. Сохраните все функции, но уменьшите размер параметров (magnitude).

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

В приведенной выше задаче регрессии, если наша модель:{h_\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}^2}+{\theta_{3}}{x_{3}^3}+{\theta_{4}}{x_{4}^4}Из предыдущего примера видно, что именно эти члены высокого порядка вызывают переоснащение, поэтому, если мы сможем сделать коэффициенты этих членов высокого порядка близкими к 0, мы сможем хорошо подобраться. Итак, что нам нужно сделать, это в некоторой степени уменьшить эти параметры.\theta, который является основным методом регуляризации.

У нас есть более простое предположение для предотвращения переобучения:J\left( \theta  \right)=\frac{1}{2m}[\sum\limits_{i=1}^{m}{{{({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})}^{2}}+\lambda \sum\limits_{j=1}^{n}{\theta_{j}^{2}}]}

в\lambdaТакже известен как параметр регуляризации (Regularization Parameter). Как показано на рисунке ниже, регулируемая — это кривая после регуляризации, которая лучше подходит.

Но если выбраны параметры регуляризации\lambdaЕсли он слишком велик, все параметры будут сведены к минимуму, в результате чего модель станет{h_\theta}\left( x \right)={\theta_{0}}, что является ситуацией, показанной красной линией на рисунке выше, что приводит к недообучению.

Тогда зачем добавлять элемент\lambda =\sum\limits_{j=1}^{n}{\theta_j^{2}}Может сделать\thetaснижение стоимости? потому что если мы сделаем\lambdaЕсли значение , велико, для того, чтобыCost Functionкак можно меньше, все\thetaстоимость (исключая{\theta_{0}}) несколько уменьшится. Но если\lambdaслишком велико, то\theta(без учета{\theta_{0}}) будет приближаться к 0, поэтому все, что мы получим, это линия, параллельнаяxпрямая линия оси. Итак, для регуляризации мы должны принять разумное\lambdaзначение, чтобы регуляризация могла быть лучше применена. Вспоминая функцию стоимости, чтобы использовать регуляризацию, давайте применим эти концепции к линейной регрессии и логистической регрессии, чтобы мы могли избежать переобучения.

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

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

J\left( \theta  \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{[({{({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})}^{2}}+\lambda \sum\limits_{j=1}^{n}{\theta _{j}^{2}})]}

Если бы мы использовали градиентный спуск, чтобы объявить эту функцию стоимости минимальной, потому что мы не\theta_0Выполняется регуляризация, поэтому алгоритм градиентного спуска разделим на два случая:

Repeat until convergence{

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

{\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}]

for j=1,2,...n

}

Для приведенного выше алгоритмаj=1,2,...,nФормулу обновления времени можно скорректировать, чтобы получить:{\theta_j}:={\theta_j}(1-a\frac{\lambda }{m})-a\frac{1}{m}\sum\limits_{i=1}^{m}{({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})x_{j}^{\left( i \right)}}Можно видеть, что изменение алгоритма градиентного спуска регуляризованной линейной регрессии заключается в том, что каждый раз на основе правил обновления исходного алгоритма\thetaзначение уменьшается на дополнительное значение.

Мы также можем использовать нормальное уравнение для решения регуляризованной модели линейной регрессии следующим образом:

Размеры матрицы на рисунке(n+1)*(n+1).

2.1.4 Модель регуляризованной логистической регрессии

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

J\left( \theta  \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{[-{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)-\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]}+\frac{\lambda }{2m}\sum\limits_{j=1}^{n}{\theta _{j}^{2}}

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

Чтобы минимизировать эту функцию стоимости, путем вывода алгоритм градиентного спуска получается как:

Repeat until convergence{

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

{\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}]

for j=1,2,...n

}

Хотя выглядит так же ?{h_\theta}\left( x \right)=g\left( {\theta^T}X \right), значит разные.