A költségfüggvény a logisztikus regresszióban

A “Bevezetés az osztályozásba és a logisztikus regresszióba” című előző cikkben felvázoltam a logisztikus regressziós algoritmus matematikai alapjait, amelynek feladata, hogy a döntési határ kiszámításával elkülönítse a dolgokat a gyakorló példában.

A döntési határ egy egyenlet segítségével írható le. A lineáris regresszióhoz hasonlóan a logisztikus regressziós algoritmus is képes lesz megtalálni a legjobb \thetas paramétereket ahhoz, hogy a döntési határ valóban helyesen válassza szét az adatpontokat. Ebben a cikkben megnézzük, hogyan lehet kiszámítani ezeket az \téteket.

Tegyük fel, hogy van egy általános gyakorlóhalmazunk

\{(x^{(1)}, y^{(1)}), (x^{(2)}, y^{(2)}), \pontok, (x^{(m)}, y^{(m)}) \}

m gyakorló példákból, ahol (x^{(1)}, y^{(1)}) az 1. példa és így tovább. Pontosabban, x^{(m)} az m-edik példa bemeneti változója, míg y^{(m)} a kimeneti változója. Mivel osztályozási problémáról van szó, minden példa y kimenete természetesen 0 és 1 közé van korlátozva. Más szóval y \in {0,1}.

Minden példát a szokásos módon a jellemzővektorával reprezentálunk

\vec{x} = \begin{bmatrix} x_0 \\\ x_1 \\\ \dots \\\\ x_n \end{bmatrix}

ahol x_0 = 1 (a régi trükk). Ez egy általános példa, nem ismerjük a jellemzők pontos számát.

Végül megvan a logisztikus regresszió hipotézisfüggvénye, ahogy az előző cikkben láttuk:

h_\\theta(x) = \frac{1}{1 + e^{\theta^{\\top} x}}}

A feladatunk most az, hogy a fenti egyenletben a hiba minimalizálása érdekében kiválasszuk a legjobb \theta paramétereket az aktuális tréninghalmaz mellett. Ne feledjük, hogy az \theta nem egyetlen paraméter: kibővül a döntési határ egyenletével, amely lehet egy egyenes vagy egy bonyolultabb képlet (több \theta kitalálásával).

Az eljárás hasonló ahhoz, amit a lineáris regresszió esetében végeztünk: definiáljunk egy költségfüggvényt, és próbáljuk megtalálni az egyes \theták lehető legjobb értékeit a költségfüggvény kimenetének minimalizálásával. A minimalizálást egy gradiens ereszkedő algoritmus végzi, amelynek az a feladata, hogy addig elemezze a költségfüggvény kimenetét, amíg meg nem találja a legalacsonyabb minimumpontot.

A lineáris regresszióban használt költségfüggvény itt nem fog működni

Elképzelhető, hogy emlékszik a lineáris regresszióban használt eredeti J(\theta) költségfüggvényre. Már most megmondhatom, hogy itt nem fog működni a logisztikus regresszióval. Ha megpróbálnád a lineáris regresszió költségfüggvényét használni a J(\theta) előállítására egy logisztikus regressziós problémában, akkor egy nem konvex függvényt kapnál: egy furcsa alakú gráfot, amelynek nincs könnyen megtalálható globális minimumpontja, ahogy az alábbi képen látható.

Nem konvex függvény

1. Egy példa a nem konvex függvényre. A jobb oldali szürke pont egy lehetséges lokális minimumot mutat.

Ez a furcsa eredmény annak köszönhető, hogy a logisztikus regresszióban a szigmoid függvényt vesszük körül, amely nem lineáris (azaz nem egyenes). Az 1. ábrán ábrázolt J(\theta) esetén a gradiens ereszkedési algoritmus megrekedhet egy lokális minimumpontban. Ezért továbbra is szükségünk van egy szép konvex függvényre, mint a lineáris regresszió esetében: egy tál alakú függvényre, amely megkönnyíti a gradiens süllyedés függvény munkáját, hogy az optimális minimumponthoz konvergáljon.

Egy jobb költségfüggvény logisztikus regresszióhoz

Hadd térjek vissza egy percre a lineáris regresszióban használt költségfüggvényhez:

J(\vec{\theta}) = \frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) – y^{(i)})^2

amit egy kicsit másképp is átírhatunk:

J(\vec{\theta}) = \frac{1}{m} \sum_{i=1}^{m} \frac{1}{2}(h_\theta(x^{(i)}) – y^{(i)})^2

Nem történt semmi ijesztő: Csak áthelyeztem a \frac{1}{2}-t az összegző rész mellé. Most tegyük általánosabbá, definiáljunk egy új függvényt

\mathrm{Cost}(h_\theta(x^{(i)}),y^{(i)}) = \frac{1}{2}(h_\theta(x^{(i)}) – y^{(i)})^2

Szóval egy \mathrm{Cost} függvényt, amely két paramétert vesz fel bemenetként: h_\\theta(x^{(i)}) mint hipotézisfüggvényt és y^{(i)} mint kimenetet. Úgy is elképzelhetjük, hogy ez az a költség, amit az algoritmusnak fizetnie kell, ha h_\\theta(x^{(i)}) előrejelzést ad, miközben a tényleges címke y^{(i)} volt.

A kirakós ezen új darabjával a lineáris regresszió költségfüggvényét a következőképpen tudom átírni:

J(\theta) = \dfrac{1}{m} \sum_{i=1}^m \mathrm{Cost}(h_\theta(x^{(i)}),y^{(i)})

Mégis tudjuk, hogy a lineáris regresszió költségfüggvénye nem használható logisztikus regressziós problémákban. Miről van tehát szó? Nos, kiderül, hogy a logisztikus regresszióhoz csak egy másik \mathrm{Költség} függvényt kell találnunk, miközben az összegző rész ugyanaz marad.

Logisztikus regresszió költségfüggvénye

A logisztikus regresszió esetében az \mathrm{Költség} függvényt a következőképpen definiáljuk:

\mathrm{Költség}(h_\theta(x),y) =\begin{esetek}-\log(h_\theta(x)) & \text{if y = 1} \\-\log(1-h_\theta(x)) & \text{if y = 0}\end{cases}

Az i indexeket az áttekinthetőség kedvéért eltávolítottuk. Szavakkal ez az a költség, amit az algoritmus fizet, ha egy h_\theta(x) értéket jósol, miközben a tényleges költségcímke y-nak bizonyul. Ennek a függvénynek a használatával biztosítjuk a konvexitást annak a függvénynek, amit a gradiens süllyedéses algoritmusnak feldolgoznia kell, ahogy azt fentebb tárgyaltuk. Erre is van egy matematikai bizonyítás, ami nem tartozik ennek a bevezető kurzusnak a keretébe.

Az y = 1 esetben a kimenet (azaz a fizetendő költség) 0-hoz közelít, ahogy h_\theta(x) 1 felé közelít. Fordítva, a fizetendő költség a végtelenbe nő, ahogy h_\theta(x) közelít a 0-hoz. Jól látható az alábbi 2. ábrán, a bal oldalon. Ez egy kívánatos tulajdonság: nagyobb büntetést akarunk, mivel az algoritmus a tényleges értéktől távol eső értéket jósol. Ha a címke y = 1, de az algoritmus h_\theta(x) = 0-t jósol, akkor az eredmény teljesen rossz.

Megfordítva, ugyanez az intuíció érvényes, ha y = 0, amit az alábbi 2. diagram jobb oldala mutat. Nagyobb büntetések, ha a címke y = 0, de az algoritmus h_\theta(x) = 1-t jósol.

Költségfüggvény logisztikus regresszióhoz

2. Így néz ki a logisztikus regresszió költségfüggvénye.

Kiegészítő költségfüggvény-optimalizálás

Az imént látott logisztikus regresszió költségfüggvényének szóbeli változata. Kompaktabbá tehetjük egysoros kifejezéssé: ez segít elkerülni az unalmas if/else utasításokat, amikor a képletet algoritmussá alakítjuk.

\mathrm{Cost}(h_\theta(x),y) = -y \log(h_\theta(x)) – (1 – y) \log(1-h_\theta(x))

Bizonyítás: próbáljuk meg y-t 0-val és 1-gyel helyettesíteni, és az eredeti függvény két darabját kapjuk.

Az optimalizálással a logisztikus regresszió költségfüggvénye átírható a következőképpen:

\begin{align}J(\theta) & = \dfrac{1}{m} \sum_{i=1}^m \mathrm{Cost}(h_\theta(x^{(i)}),y^{(i)}) \\& = – \dfrac{1}{m} \\\\end{align}

A mínusz jelet kívülre helyeztem, hogy elkerüljem a további zárójeleket.

A költségfüggvény és a gradiens ereszkedés összeillesztése

Mi maradt? Megvan a hipotézisfüggvény és a költségfüggvény: majdnem készen vagyunk. Most itt az ideje, hogy megtaláljuk a legjobb értékeket a \thetas paramétereknek a költségfüggvényben, vagy más szóval, hogy minimalizáljuk a költségfüggvényt a gradiens süllyedés algoritmus futtatásával. Az eljárás megegyezik azzal, amit a lineáris regresszió esetében végeztünk.

Formálisabban a költségfüggvényt akarjuk minimalizálni:

\min_{\theta} J(\theta)

Az \theta paraméterek legjobb (azaz kisebb hibával rendelkező) halmazát adja ki. Ha ez megtörtént, készen állunk arra, hogy előrejelzéseket készítsünk új bemeneti példákra azok x jellemzőivel, az új \thetákat a hipotézisfüggvényben használva:

h_\theta(x) = \frac{1}{1 + e^{\theta^{\\top} x}}

Ahol h_\\theta(x) a kimenet, az előrejelzés, vagy mégis annak a valószínűsége, hogy y = 1.

A költségfüggvény minimalizálásának módja a gradiens ereszkedés. A jó hír az, hogy az eljárás 99%-ban megegyezik azzal, amit a lineáris regresszió esetében végeztünk.

A költségfüggvény minimalizálásához minden paraméteren le kell futtatnunk a gradiens ereszkedés függvényt:

\begin{align} \text{ismétlés a konvergenciáig \{} \\\\theta_j & := \theta_j – \alpha \frac{\partial}{\partial \theta_j} J(\theta) \\\ \text{\}}\end{align}

Ne feledjük, hogy az összes \theta_j-t egyszerre kell frissíteni, ahogy a lineáris regresszió megfelelőjénél tettük: ha n jellemzőnk van, azaz egy jellemzővektor \vec{\theta} = , akkor ezeket a paramétereket minden egyes iteráción egyszerre kell frissíteni:

\begin{align} \text{ismétlés a konvergenciáig \{} \\\\theta_0 & := \cdots \\\ \theta_1 & := \cdots \\\ \cdots \\\ \theta_n & := \cdots \\\ \text{\}}\end{align}

Visszatérve az algoritmushoz, megkíméllek az ijesztő \frac{\partial}{\partial \theta_j} derivált kiszámításától. J(\theta), amely a következő lesz:

\frac{\partial}{\partial \theta_j} J(\theta) = \dfrac{1}{m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) – y^{(i)}) x_j^{(i)}) x_j^{(i)}

A fenti hurok tehát átírható:

\begin{align} \text{ismétlés a konvergenciáig \{} \\\\theta_j & := \theta_j – \alpha \dfrac{1}{m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) – y^{(i)}) x_j^{(i)} \\ \\ \text{\}}}\end{align}

Meglepő módon ugyanúgy néz ki, mint amit a többváltozós lineáris regresszió esetében csináltunk. Ami azonban megváltozott, az a h_\\theta(x) hipotézis definíciója: a lineáris regresszió esetében h_\theta(x) = \theta^{\top}{x}, míg a logisztikus regresszió esetében h_\theta(x) = \frac{1}{1 + e^{\theta^{\top} x}}.

A továbbiakban ugyanazokat a technikákat alkalmazhatjuk a gradiens ereszkedési algoritmus optimalizálására, amelyeket a lineáris regresszió esetében láttunk, hogy a minimumpontra való átváltás helyesen működjön. A következő fejezetben elmélyedek néhány haladó optimalizálási trükkben, valamint a túlillesztés problémájának meghatározásában és elkerülésében.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.