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ó.
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.
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.