V předchozím článku „Úvod do klasifikace a logistické regrese“ jsem nastínil matematické základy algoritmu logistické regrese, jehož úkolem je oddělit věci v trénovacím příkladu výpočtem rozhodovací hranice.
Rozhodovací hranici lze popsat rovnicí. Stejně jako v lineární regresi bude algoritmus logistické regrese schopen najít nejlepší parametry \thetas, aby rozhodovací hranice skutečně správně oddělila datové body. V tomto článku si ukážeme, jak tyto \thetas vypočítat.
Předpokládejme, že máme obecnou trénovací množinu
\{ (x^{(1)}, y^{(1)}), (x^{(2)}, y^{(2)}), \dots, (x^{(m)}, y^{(m)}). \}
z m trénovacích příkladů, kde (x^{(1)}, y^{(1)}) je 1. příklad atd. Přesněji řečeno, x^{(m)} je vstupní proměnná m-tého příkladu, zatímco y^{(m)} je jeho výstupní proměnná. Jelikož se jedná o klasifikační problém, každý příklad má samozřejmě výstupní hodnotu y vázanou mezi 0 a 1. Jinými slovy, y \v {0,1}.
Každý příklad je jako obvykle reprezentován svým příznakovým vektorem
\vec{x} = \begin{bmatrix} x_0 \\ x_1 \\ \\ \dots \\ x_n \end{bmatrix}
kde x_0 = 1 (stejný starý trik). Toto je obecný příklad, neznáme přesný počet funkcí.
Nakonec máme funkci hypotézy pro logistickou regresi, jak jsme viděli v předchozím článku:
h_\theta(x) = \frac{1}{1 + e^{\theta^{\top} x}}
Naším úkolem je nyní vybrat nejlepší parametry \thetas ve výše uvedené rovnici vzhledem k aktuální trénovací množině tak, aby byly minimalizovány chyby. Nezapomeňte, že \theta není jediný parametr: rozšiřuje se na rovnici rozhodovací hranice, kterou může být přímka nebo složitější vzorec (s více \thety k odhadu).
Postup je podobný tomu, který jsme provedli u lineární regrese: definujeme nákladovou funkci a snažíme se najít nejlepší možné hodnoty jednotlivých \thet minimalizací výstupu nákladové funkce. Minimalizaci provede algoritmus gradientního sestupu, jehož úkolem je analyzovat výstup nákladové funkce, dokud nenajde nejnižší minimální bod.
Nákladová funkce použitá v lineární regresi zde nebude fungovat
Možná si vzpomenete na původní nákladovou funkci J(\theta) použitou v lineární regresi. Hned vám mohu říci, že zde nebude fungovat s logistickou regresí. Pokud byste se pokusili použít nákladovou funkci lineární regrese k vytvoření J(\theta) v problému logistické regrese, skončili byste s nekonvexní funkcí: podivně tvarovaným grafem bez snadno nalezitelného globálního minimálního bodu, jak je vidět na obrázku níže.
Tento zvláštní výsledek je způsoben tím, že v logistické regresi máme kolem sebe sigmoidní funkci, která je nelineární (tj. není přímkou). S J(\theta) znázorněnou na obrázku 1. by se gradientový sestupný algoritmus mohl zaseknout v bodě lokálního minima. Proto stále potřebujeme úhlednou konvexní funkci jako u lineární regrese: miskovitou funkci, která usnadňuje práci gradientní sestupné funkci při konvergenci k optimálnímu minimálnímu bodu.
Lepší nákladová funkce pro logistickou regresi
Nechte mě na chvíli vrátit se k nákladové funkci, kterou jsme použili u lineární regrese:
J(\vec{\theta}) = \frac{1}{2m}. \sum_{i=1}^{m} (h_\theta(x^{(i)}) – y^{(i)})^2
což lze přepsat trochu jinak:
J(\vec{\theta}) = \frac{1}{m} \sum_{i=1}^{m} \frac{1}{2}(h_\theta(x^{(i)}) – y^{(i)})^2
Nic strašného se nestalo: Jen jsem přesunul \frac{1}{2} vedle součtové části. Nyní ji zobecníme definováním nové funkce
\mathrm{Cost}(h_\theta(x^{(i)}),y^{(i)}) = \frac{1}{2}(h_\theta(x^{(i)}) – y^{(i)})^2
Slovy funkce \mathrm{Cost}, která na vstupu přijímá dva parametry: h_\theta(x^{(i)}) jako funkci hypotézy a y^{(i)} jako výstup. Můžete si ji představit jako náklady, které musí algoritmus zaplatit, pokud provede předpověď h_\theta(x^{(i)}), zatímco skutečné označení bylo y^{(i)}.
S tímto novým kouskem skládačky mohu přepsat nákladovou funkci pro lineární regresi takto:
J(\theta) = \dfrac{1}{m} \sum_{i=1}^m \mathrm{Cost}(h_\theta(x^{(i)}),y^{(i)})
Víme však, že nákladovou funkci lineární regrese nelze použít v úlohách logistické regrese. O co tedy jde? No, ukazuje se, že pro logistickou regresi stačí najít jinou \mathrm{Cost} funkci, přičemž sumační část zůstává stejná.
Nákladová funkce logistické regrese
Pro logistickou regresi je funkce \mathrm{Cost} definována takto:
\mathrm{Cost}(h_\theta(x),y) =\begin{cases}-\log(h_\theta(x)). & \text{pokud y = 1} \\-\log(1-h_\theta(x)) & \text{pokud y = 0}\konec{případů}
Indexy i byly pro přehlednost odstraněny. Slovy se jedná o náklady, které algoritmus zaplatí, pokud předpovídá hodnotu h_\theta(x), zatímco skutečná značka nákladů se ukáže být y. Použitím této funkce přiznáme konvexitu funkci, kterou musí algoritmus gradientního sestupu zpracovat, jak bylo uvedeno výše. Existuje pro to i matematický důkaz, který je mimo rámec tohoto úvodního kurzu.
V případě y = 1 se výstup (tj. náklady, které je třeba zaplatit) blíží k 0, jak se h_\theta(x) blíží k 1. V případě y = 1 se výstup (tj. náklady, které je třeba zaplatit) blíží k 0, jak se h_\theta(x) blíží k 1. A naopak, náklady na zaplacení rostou do nekonečna, jak se h_\theta(x) blíží k 0. Jasně to vidíte na grafu 2. níže, na levé straně. To je žádoucí vlastnost: chceme větší pokutu, protože algoritmus předpovídá něco, co je daleko od skutečné hodnoty. Pokud je značka y = 1, ale algoritmus předpovídá h_\theta(x) = 0, je výsledek zcela chybný.
Naopak stejná intuice platí, když je y = 0, což je znázorněno na grafu 2. níže, pravá strana. Větší penalizace, když je značka y = 0, ale algoritmus předpovídá h_\theta(x) = 1.
Další optimalizace nákladové funkce
To, co jsme právě viděli, je slovní verze nákladové funkce pro logistickou regresi. Můžeme ji zestručnit do jednořádkového výrazu: to nám pomůže vyhnout se nudným příkazům if/else při převodu vzorce na algoritmus.
\mathrm{Cost}(h_\theta(x),y) = -y \log(h_\theta(x)) – (1 – y) \log(1-h_\theta(x))
Důkaz: Zkuste nahradit y čísly 0 a 1 a dostanete dvě části původní funkce.
S provedenou optimalizací lze nákladovou funkci logistické regrese přepsat takto:
\begin{align}J(\theta) & = \dfrac{1}{m} \sum_{i=1}^m \mathrm{Cost}(h_\theta(x^{(i)}),y^{(i)}) \\& = – \dfrac{1}{m} \\\{konec{zarovnání}
Přesunul jsem znaménko minus ven, abych se vyhnul dalším závorkám.
Spojení nákladové funkce a gradientního sestupu dohromady
Co zbývá? Máme funkci hypotézy a nákladovou funkci: jsme téměř hotovi. Nyní je čas najít nejlepší hodnoty parametrů \thetas v nákladové funkci, nebo jinými slovy minimalizovat nákladovou funkci spuštěním algoritmu gradientního sestupu. Postup je totožný s tím, který jsme provedli pro lineární regresi.
Formálněji řečeno, chceme minimalizovat nákladovou funkci:
\min_{\theta} J(\theta)
Který nám dá na výstup sadu parametrů \theta, těch nejlepších (tj. s menší chybou). Po dokončení budeme připraveni provádět předpovědi na nových vstupních příkladech s jejich vlastnostmi x pomocí nových \theta ve funkci hypotézy:
h_\theta(x) = \frac{1}{1 + e^{\theta^{\top} x}}
Kde h_\theta(x) je výstup, předpověď, nebo ještě pravděpodobnost, že y = 1.
Způsob, jakým budeme minimalizovat nákladovou funkci, je pomocí gradientního sestupu. Dobrou zprávou je, že postup je na 99 % totožný s tím, který jsme provedli u lineární regrese.
Pro minimalizaci nákladové funkce musíme na každém parametru spustit funkci gradientního sestupu:
\begin{align} \text{opakujte až do konvergence \{} \\\theta_j & := \theta_j – \alfa \frac{\partial}{\partial \theta_j} J(\theta) \\ \text{\}}\end{align}
Nezapomeňte současně aktualizovat všechny \theta_j, jak jsme to udělali v protějšku lineární regrese: pokud máte n rysů, tj. vektor rysů \vec{\theta} = , všechny tyto parametry musí být aktualizovány současně při každé iteraci:
\begin{align} \text{opakujte až do konvergence \{} \\\theta_0 & := \cdots \\ \theta_1 & := \cdots \\ \cdots \\ \theta_n & := \cdots \\ \text{\}}\end{align}
Zpět k algoritmu, ušetřím vás výpočtu skličující derivace \frac{\partial}{\partial \theta_j}. J(\theta), který je:
\frac{\partial}{\partial \theta_j} J(\theta) = \dfrac{1}{m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) – y^{(i)}) x_j^{(i)}
Výše uvedený cyklus lze tedy přepsat takto:
\begin{align} \text{opakujte až do konvergence \{} \\\theta_j & := \theta_j – \alfa \dfrac{1}{m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) – y^{(i)}) x_j^{(i)} \\ \text{\}}\end{align}
Překvapivě to vypadá stejně jako u vícerozměrné lineární regrese. Co se však změnilo, je definice hypotézy h_\theta(x): pro lineární regresi jsme měli h_\theta(x) = \theta^{\top}{x}, zatímco pro logistickou regresi máme h_\theta(x) = \frac{1}{1 + e^{\theta^{\top}}. x}}.
Od nynějška můžete použít stejné techniky k optimalizaci algoritmu sestupu po gradientu, který jsme viděli u lineární regrese, abyste se ujistili, že převod na minimální bod funguje správně. V příští kapitole se budu zabývat některými pokročilými optimalizačními triky a také definicí a předcházením problému overfittingu.