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

глубокое обучение

Это 20-й день моего участия в августовском испытании обновлений. Узнайте подробности события:Испытание августовского обновления

Logistic Regression

В отличие от линейной регрессии, предсказываемый здесь y является дискретным значением. Используемый алгоритм логистической регрессии является одним из самых популярных и широко используемых алгоритмов обучения на сегодняшний день.

Помните классификацию обучения с учителем и без учителя? Классификация Эмай: спам/не спам? Онлайн-транзакции: мошенничество (да/нет)? Опухоль: злокачественная/доброкачественная

Электронная почта: это спам Онлайн-транзакции: есть ли мошенничество? Классификация опухоли: добросовестно злокачественная

Если вы помните, то знаете, что все вышеперечисленное — это дискретное контролируемое обучение. Три вышеперечисленные проблемы имеют общие черты:

у∈{0,1}

0: отрицательный класс"

1: «Положительный класс»

Конечно, не все дискретные задачи являются либо черными, либо белыми и имеют только два исхода, а также может быть конечное число y∈{0,1,3,...,n}.

Например

Начните с простого двухклассового дискретного:

Прогнозирование доброкачественной или злокачественной опухоли по ее размеру:

image.png

Если мы по-прежнему будем использовать метод линейной регрессии для подгонки, это не сработает. Например вот так:

image.png

Теперь мы предполагаем для этой подобранной линииh(x)>0.5h(x)>0.5Злокачественный, в противном случае доброкачественный. Вы можете сказать, что это не подходит.

А вдруг:

image.png

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

Таким образом, линейная регрессия не подходит для дискретных задач.

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

Как насчет дискретной регрессии? Сначала мы должны убедиться:

0hθ(x)10 \leq h_{\theta}(x) \leq 1

Таким образом, у вас не будет таких проблем, как линейная регрессия. Линейная регрессия не имеет значения, как вы к ней подходите. Пока он превышает определенный диапазон, он всегда будет отображатьсяh(x)>1h(x)>1Случай.

Как это улучшить?

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

g(z)=11+ezg(z) = \frac{1}{1+e^{-z}}

image.png

После применения формулы линейной регрессии к логистической функции мы получаем:

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

Теперь известно, какhθ(x)h_θ(x)Значение фиксировано между 0 и 1, так как же описать результат вывода?

Расчетная вероятность того, что y = 1 на входе x.

Описывает вероятность вывода, когда вход x равен y = 1.

Например, y = 1 представляет злокачественную опухоль, а результат, полученный пользователем при вводе x, равен 0,7.

Вместо того, чтобы говорить: «Поздравляем, у вас злокачественная опухоль», вы должны сказать: «Вероятность того, что у вас злокачественная опухоль, составляет 70%».

Нормальный результат, выраженный в вероятностных терминах:

hθ(x)=P(y=1x;θ)h_θ(x) = P(y=1|x;θ)

Из приведенной выше формулы также можно вывестиhθ(x)=P(y=1x;θ)+hθ(x)=P(y=0x;θ)=1h_θ(x) = P(y=1|x;θ)+h_θ(x) = P(y=0|x;θ) = 1

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

Только что упоминалось выше, чтобы описать результаты, чтобы сказать, что вход x возможность y=1. Но в строгом смысле не все считается возможным, когда y=1.

Предполагать:

  • predict y=1 if hθ(x)0.5h_{\theta}(x) \geq 0.5
  • predict y=0 if hθ(x)<0.5h_{\theta}(x) < 0.5

Вообще говоря,hθ(x)h_{\theta}(x)Больше или равно 0,5 означает заключение относительно y=1, а меньше 0,5 означает заключение относительно 0.

Обратите внимание, чтобы различать логику: например, после ввода x, y=0,2, вы не можете сказать, что у вас есть 20%-й шанс быть злокачественной опухолью, но что у вас есть 80%-й шанс быть доброкачественной опухолью. .

Приведенное выше утверждение также может быть эквивалентно

Предполагать:

  • predict y=1 if θTx0\theta^Tx \geq 0
  • predict y=0 if θTx<0\theta^Tx < 0

из-за вышеизложенногоg(z)=11+ezg(z) = \frac{1}{1+e^{-z}}Изображение положительное, когда z>0, и отрицательное, когда zhθ(x)=g(θTx)h_{\theta}(x) =g(\theta^Tx), поэтому приведенное выше преобразование может быть выполнено.

иГраница решенияθTx=0\theta^Tx = 0когда.

Нарисуйте изображение, чтобы понять более интуитивно:

image.png

На приведенном выше рисунке предполагается, что мы нашли функцию прогнозированияhθ(x)=θ0+θ1x1+θ2x2h_{\theta}(x) = \theta_0 + \theta_1x_1 + \theta_2x_2θ=[311]θ =\begin{bmatrix} -3 \\ 1 \\ 1 \end{bmatrix}, внесениеhθ(x)=3+x1+x2h_{\theta}(x) = -3 + x_1 + x_2

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

вθTx=3+x1+x2=0\theta^Tx = -3 + x_1 + x_2 =0этоx1+x2=3x_1 + x_2 = 3эту прямую. Эта прямая линия является границей решения. И область красного креста над этой линиейx1+x2>3 x_1 + x_2 > 3Площадь называется площадью y=1. И наоборот, синий кружок внизу — это область y=0.

image.png

The decision boundary is a property of the hypothesis.

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

Теперь более сложный пример:

image.png

Для этого изображения наша функция предсказанияhθ(x)=g(θ0+θ1x1+θ2x2+θ3x12+θ4x22)h_{\theta}(x)=g(\theta_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}\left.+\theta_{3} x_{1}^{2}+\theta_{4} x_{2}^{2}\right)θ=[10011]θ = \begin{bmatrix} -1 \\ 0 \\ 0 \\ 1 \\ 1 \end{bmatrix}

Когда у = 1, этоx12+x221x_{1}^{2}+x_{2}^{2} \geq 1

Когда у = 0, этоx12+x22<1x_{1}^{2}+x_{2}^{2} < 1

В этом примере граница решенияx12+x22=1x_{1}^{2}+x_{2}^{2} = 1

Как подобрать логистическую регрессию

Training set:

{(x(1),y(1)),(x(2),y(2)),,(x(m),y(m))}\left\{\left(x^{(1)}, y^{(1)}\right),\left(x^{(2)}, y^{(2)}\right), \cdots,\left(x^{(m)}, y^{(m)}\right)\right\}

m examples xе[x0x1xn]x0=1,yе{0,1}\quad x \in\left[\begin{array}{c}x_{0} \\ x_{1} \\ \ldots \\ x_{n}\end{array}\right] \quad x_{0}=1, y \in\{0,1\}

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

How to choose parameters θ\theta ?

Начнем с нашего тренировочного набора, который составляет m точек. Перечислите x как матрицу, как и раньше, и добавьтеx0=1x_0 = 1,θTx=θ0X0+θ1x1+...+θnxn\theta^Tx=\theta_0X_0+ \theta_1x_1+...+\theta_nx_n

Тогда как выбрать θ?

Чтобы рассчитать θ, нам сначала нужно найти функцию стоимости.

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

Помните функцию стоимости для линейной регрессии?

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

Чтобы написать это по-другому, используйтеCost(hθ(x),y)=12(hθ(x)y)2Cost(h_{\theta}(x), y)=\frac{1}{2}(h_{\theta}(x)-y)^{2}

Cost(hθ(x),y)Cost(h_{\theta}(x), y)Представляет разницу между функцией прогнозирования и фактическим значением, а функция стоимости J представляет среднее значение после суммирования затрат всех обучающих выборок и функции прогнозирования.

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

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

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

image.png

Итак, нам нужно найти выпуклую функцию как функцию стоимости логистической регрессии:

Logistic regression cost function

Cost(hθ(x),y)={log(hθ(x)) if y=1log(1hθ(x)) if y=0\operatorname{Cost}\left(h_{\theta}(x), y\right)=\left\{\begin{aligned} -\log \left(h_{\theta}(x)\right) & \text { if } y=1 \\ -\log \left(1-h_{\theta}(x)\right) & \text { if } y=0 \end{aligned}\right.

Если y=1, изображение выглядит следующим образом:

image.png

Мы знаем, что диапазон значений h(x) находится в диапазоне от 0 до 1. В сочетании с характеристиками изображения журнала мы можем понять, как выглядит приведенное выше изображение.

У этой функции есть несколько интересных приятных свойств:

Cost=0:ify=1,hθ(x)=1Cost = 0:\quad if \quad y=1,h_θ(x)=1

Когда функция стоимости равна 0, это функция нашей гипотезы.hθ(x)=1h_θ(x)=1, То есть мы прогнозируем злокачественную опухоль, а фактические данныеy=1y=1, то есть у больного действительно злокачественная опухоль. То есть функция стоимости равна 0, и мы предсказываем правильно.

Butashθ(x)0,CostНо \quad as \quad h_θ(x)→0,Cost→∞

Но если наша гипотетическая функциякак правилоКогда 0, функция стоимости стремится к положительной бесконечности.

Captures intuition that if hθ(x)=0h_θ(x)=0(предсказыватьP(y=1x;θ)=0P(y=1|x;θ)=0), но y=1, мы очень дорого накажем алгоритм обучения.

Если взять на себя функциюравный0 эквивалентно утверждению, что для y=1, то есть злокачественной опухоли пациента, наша предсказанная вероятность равна 0.

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

Рассмотрим случай y=0:

image.png

Cost=0:ify=0,hθ(x)=0Cost = 0:\quad if \quad y=0,h_θ(x)=0

Функция стоимости равна 0, y=0 означает, что у пациента доброкачественная опухоль, и мы прогнозируем функциюhθ(x)=0h_θ(x)=0Это означает, что предсказанная нами опухоль доброкачественная, и прогноз полностью верный, поэтому функция стоимости равна 0.

Butashθ(x)0,CostНо \quad as \quad h_θ(x)→0,Cost→∞

Captures intuition that if hθ(x)=1h_θ(x)=1(предсказыватьP(y=0x;θ)=1P(y=0|x;θ)=1)

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

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

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

Logistic regression cost function

J(θ)=1mi=1mCost(hθ(x(i)),y(i))J(\theta)=\frac{1}{m} \sum_{i=1}^{m} \operatorname{Cost}\left(h_{\theta}\left(x^{(i)}\right), y^{(i)}\right)

Cost(hθ(x),y)={log(hθ(x)) if y=1log(1hθ(x)) if y=0\operatorname{Cost}\left(h_{\theta}(x), y\right)=\left\{\begin{aligned}-\log \left(h_{\theta}(x)\right) & \text { if } y=1 \\-\log \left(1-h_{\theta}(x)\right) & \text { if } y=0 \end{aligned}\right.

Note: y=0y=0 or 1 always

Теперь упростим:

cost(hθ(x),y)=ylog(hθ(x))(1y)log(1hθ(x))cost(h_{θ}(x), y)=-y \log (h_{θ}(x))-(1-y) \log (1-h_{\theta}(x))

Почему эта формула после упрощения?

Просто возьмите число непосредственно в формулу выше.

  • y = 1:cost(hθ(x),1)=1log(hθ(x))(11)log(1hθ(x))=log(hθ(x))cost(h_{θ}(x), 1)=-1 \log (h_{θ}(x))-(1-1) \log (1-h_{\theta}(x)) = - \log (h_{θ}(x))
  • y = 0:cost(hθ(x),0)=0log(hθ(x))(10)log(1hθ(x))=log(1hθ(x))cost(h_{θ}(x), 0)=0 \log (h_{θ}(x))-(1-0) \log (1-h_{\theta}(x)) = -\log (1-h_{\theta}(x))

Поэтому две приведенные выше формулы напрямую объединяются в одну формулу, и нет необходимости снова судить о значении y.

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

Logistic regression cost function

J(θ)=1mi=1mCost(hθ(x(i)),y(i))=1m[i=1my(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]\begin{aligned} J(\theta) &=\frac{1}{m} \sum_{i=1}^{m} \operatorname{Cost}\left(h_{\theta}\left(x^{(i)}\right), y^{(i)}\right) \\ &=-\frac{1}{m}\left[\sum_{i=1}^{m} y^{(i)} \log h_{\theta}\left(x^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right] \end{aligned}

Согласно этой функции стоимости, мы должны найтиminθJ(θ)\min_{\theta} J(\theta), то есть параметр θ, который позволяет функции стоимости достичь минимального значения.

Затем нам снова нужно сделать градиентный спуск.

градиентный спуск

Gradient Descent

J(θ)=1m[i=1my(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]J(\theta)=-\frac{1}{m}\left[\sum_{i=1}^{m} y^{(i)} \log h_{\theta}\left(x^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right]

Want minθJ(θ):\min _{\theta} J(\theta): Repeat {

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

} (simultaneously update all θj\theta_{j} )

к вышеизложенномуJ(θ)J(\theta)Найдя частную производную, подведем ее к формуле градиентного спуска и окончательно получим следующий вид:

Gradient Descent

J(θ)=1m[i=1my(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]J(\theta)=-\frac{1}{m}\left[\sum_{i=1}^{m} y^{(i)} \log h_{\theta}\left(x^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right]

Want minθJ(θ):\min _{\theta} J(\theta): Repeat {

θj:=θjαi=1m(hθ(x(i))y(i))xj(i)\theta_{j}:=\theta_{j}-\alpha \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)}
}\}

(simultaneously update all θj\theta_{j} )

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

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

hθ(x)=θTxhθ(x)=11+eθTx\begin{aligned} &h_{\theta}(x)=\theta^{T} x \\ &h_{\theta}(x)=\frac{1}{1+e^{-\theta^{T} x}} \end{aligned}

Так что, хотя это выглядит одинаково, на самом деле это совсем другое.

Расширенная оптимизация

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

  • Conjugate gradient
  • BFGS
  • L-BFGS

Преимущества:

  • No need to manually pick α
  • Часто быстрее, чем градиентный спуск. Недостатки:
  • More complex

По сравнению с градиентным спуском эти три алгоритма не требуют выбора скорости обучения α и работают быстрее, чем градиентный спуск. Недостатком является более сложный алгоритм.

Конечно, большая сложность вовсе не является недостатком, потому что вам не нужно знать принцип, вы можете просто использовать то, что написали другие. Оригинальные слова Учителя Ву Энда: «Я использую их более десяти лет, но я узнал о некоторых деталях только несколько лет назад».

На ум приходит забавный стебель: у дорогих вещей есть только один недостаток, то есть они дорогие, но это не вина вещей, это моя вина.

Octave и MATLAB имеют такую ​​библиотеку, просто используйте ее напрямую. Что касается вашего использования C, C++, python и т. д., то вам, возможно, придется попробовать еще несколько библиотек, чтобы найти лучшую реализацию.

Как применить к логистической регрессии?

theta =[θ0θ1θn]=\left[\begin{array}{c}\theta_{0} \\ \theta_{1} \\ \vdots \\ \theta_{n}\end{array}\right]

function [jVal, gradient] == costFunction (theta)

jVal=[\mathrm{jVal}=[ code to compute J(θ)];J(\theta)] ;

gradient (1)=[(1)=\left[\right. code to compute θ0J(θ)]\left.\frac{\partial}{\partial \theta_{0}} J(\theta)\right]

gradient (2)=[(2)=\left[\right. code to compute θ1J(θ)]\left.\frac{\partial}{\partial \theta_{1}} J(\theta)\right]

...

gradient (n+1)=[(n+1)=\left[\right. code to compute θnJ(θ)]\left.\frac{\partial}{\partial \theta_{n}} J(\theta) \quad\right]

Например:

 Example: θ=[θ1θ2]J(θ)=(θ15)2+(θ25)2θ1J(θ)=2(θ15)θ2J(θ)=2(θ25)\begin{aligned} &\text { Example: }\\ &\theta=\left[\begin{array}{l} \theta_{1} \\ \theta_{2} \end{array}\right]\\ &J(\theta)=\left(\theta_{1}-5\right)^{2}+\left(\theta_{2}-5\right)^{2}\\ &\frac{\partial}{\partial \theta_{1}} J(\theta)=2\left(\theta_{1}-5\right)\\ &\frac{\partial}{\partial \theta_{2}} J(\theta)=2\left(\theta_{2}-5\right) \end{aligned}

Теперь есть пример с двумя параметрами, и невооруженным глазом видно, что оба θ равны 5, когда функция стоимости минимальна (равна 0). Ну а теперь, чтобы узнать алгоритм, делаем вид, что не знаем результат.

function [j,gradient] = costFunction(theta)
  %代价函数J
  j = (theta(1)-5)^2 + (theta(2)-5)^2;
  
  gradient = zeros(2,1);
  
  %偏导
  gradient(1) = 2*(theta(1)-5);
  gradient(2) = 2*(theta(2)-5);
  
 endfunction

Функция costFunction имеет два возвращаемых значения. Одна из них — функция стоимости J, а другая — частная производная от J, которая используется для хранения вектора результата.

%octave中输入:
options = optimset ('GradObj','on','MaxIter','100');
initheta = zeros(2,1);
[Theta,J,Flag] = fminunc (@costFunction,initheta,options)
  • optimset: сделать настройки с четырьмя параметрами:
    • GradObj: установка целевых параметров градиента
    • Убедитесь, что предыдущая настройка включена
    • Максимальное количество итераций
    • Установите значение максимального количества итераций
  • fminunc: функция неограниченной минимизации Octave, которая должна передавать три параметра.
    • Функции, написанные вами, должны начинаться с @
    • Ваша предустановка θ должна быть двумерным вектором и выше. Если это действительное число, функция завершится ошибкой.
    • настройки этой функции

image.png

Окончательный результат выполнения настолько длинный, что Theta сохраняет значение θ, когда конечная функция стоимости минимизируется. J указывает на оптимальное решение функции стоимости, а Flag = true указывает на то, что оно сошлось.

Мультиклассовая классификация

Что такое мультиклассовая классификация?

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

image.png

Как быть с этой классификацией?

Using an idea called one-versus-all classification, we can then take this and make it work for muti-class classification, as well.

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

Here's how one-versus-alll classiffication works. And, this is also sometimes called one-versus-rest.

Теперь представьте состязательный метод множественной классификации (один к одному остатку):

Let's say, we have a training set

image.png

Используйте треугольник для 1, квадрат для 2 и крест для 3

Теперь измените его на три отдельные бинарные классификации:

image.png

hθ(i)(x)=P(y=ix;θ)(i=1,2,3)h_{\theta}^{(i)}(x)=P(y=i \mid x ; \theta) \quad(i=1,2,3)

Здесь таблица i=1 — это время, когда треугольник является положительным классом. Классификаторы i выше обучены для каждого из этих случаев.

в классификации один ко многим

One-vs-all Train a logistic regression classifier hθ(i)(x)h_{\theta}^{(i)}(x) for each class ii to predict the probability that y=iy=i

On a new input xx, to make a prediction, pick the class ii that maximizes

maxihθ(i)(x)\max _{i} h_{\theta}^{(i)}(x)

Мы получаем классификатор логистической регрессии,hθ(i)(x)h_{\theta}^{(i)}(x)Предсказать вероятность класса i, когда y=i. Наконец, чтобы сделать прогноз, мы даем новое входное значение x, чтобы получить результат прогноза, все, что нам нужно сделать, это запустить входные данные x в каждом классификаторе и, наконец, выбрать категорию с наибольшей функцией прогнозирования, которая является результатом y мы хотим предсказать.