Funcția de cost în regresia logistică

În articolul anterior „Introducere în clasificare și regresie logistică” am prezentat bazele matematice ale algoritmului de regresie logistică, a cărui sarcină este de a separa lucrurile din exemplul de instruire prin calcularea limitei de decizie.

Limita de decizie poate fi descrisă printr-o ecuație. Ca și în cazul regresiei liniare, algoritmul de regresie logistică va fi capabil să găsească cei mai buni parametri \thetas pentru a face ca granița de decizie să separe de fapt corect punctele de date. În acest articol vom vedea cum să calculăm aceste \thetas.

Supunem că avem un set generic de antrenament

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

conținute din m exemple de antrenament, unde (x^{(1)}, y^{(1)}) este primul exemplu și așa mai departe. Mai exact, x^{(m)} este variabila de intrare a celui de-al m-lea exemplu, în timp ce y^{(m)} este variabila de ieșire a acestuia. Fiind vorba de o problemă de clasificare, fiecare exemplu are, bineînțeles, ieșirea y limitată între 0 și 1. Cu alte cuvinte, y \în {0,1}.

Care exemplu este reprezentat, ca de obicei, prin vectorul său caracteristic

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

unde x_0 = 1 (același truc vechi). Acesta este un exemplu generic, nu cunoaștem numărul exact de caracteristici.

În cele din urmă avem funcția de ipoteză pentru regresia logistică, așa cum am văzut în articolul anterior:

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

Sarcina noastră acum este de a alege cei mai buni parametri \thetas din ecuația de mai sus, având în vedere setul actual de instruire, pentru a minimiza erorile. Amintiți-vă că \theta nu este un singur parametru: se extinde la ecuația limitei de decizie care poate fi o linie sau o formulă mai complexă (cu mai multe \theta de ghicit).

Procedura este similară cu cea pe care am făcut-o pentru regresia liniară: definiți o funcție de cost și încercați să găsiți cele mai bune valori posibile ale fiecărui \theta prin minimizarea ieșirii funcției de cost. Minimizarea va fi realizată de un algoritm de coborâre a gradientului, a cărui sarcină este de a parcurge ieșirea funcției de cost până când găsește cel mai mic punct minim.

Funcția de cost utilizată în regresia liniară nu va funcționa aici

S-ar putea să vă amintiți funcția de cost originală J(\theta) utilizată în regresia liniară. Pot să vă spun chiar acum că nu va funcționa aici cu regresia logistică. Dacă încercați să folosiți funcția de cost a regresiei liniare pentru a genera J(\theta) într-o problemă de regresie logistică, veți obține o funcție neconvexă: un grafic cu o formă ciudată, fără un punct global minim ușor de găsit, așa cum se vede în imaginea de mai jos.

Funcție neconvexă

1. Un exemplu de funcție neconvexă. Punctul gri din partea dreaptă arată un potențial minim local.

Acest rezultat ciudat se datorează faptului că în regresia logistică avem în jur funcția sigmoidă, care este neliniară (adică nu este o dreaptă). Cu J(\theta) descrisă în figura 1. algoritmul de coborâre a gradientului ar putea rămâne blocat într-un punct de minim local. De aceea avem în continuare nevoie de o funcție convexă îngrijită, așa cum am făcut-o pentru regresia liniară: o funcție în formă de bol care ușurează munca funcției de coborâre a gradientului pentru a converge către punctul minim optim.

O funcție de cost mai bună pentru regresia logistică

Dați-mi voie să mă întorc pentru un minut la funcția de cost pe care am folosit-o în regresia liniară:

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

care poate fi rescrisă într-un mod ușor diferit:

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

Nu s-a întâmplat nimic înfricoșător: Am mutat doar \frac{1}{2} lângă partea de sumare. Acum haideți să o generalizăm definind o nouă funcție

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

Cu alte cuvinte, o funcție \mathrm{Cost} care primește în intrare doi parametri: h_\theta(x^{(i)}) ca funcție de ipoteză și y^{(i)} ca ieșire. Vă puteți gândi la aceasta ca la costul pe care algoritmul trebuie să îl plătească dacă face o predicție h_\theta(x^{(i)}) în timp ce eticheta reală a fost y^{(i)}.

Cu această nouă piesă din puzzle pot rescrie funcția de cost pentru regresia liniară după cum urmează:

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

Dar știm că funcția de cost a regresiei liniare nu poate fi folosită în probleme de regresie logistică. Așadar, despre ce este vorba? Ei bine, se pare că pentru regresia logistică trebuie doar să găsim o funcție \mathrm{Cost} diferită, în timp ce partea de însumare rămâne aceeași.

Funcția de cost a regresiei logistice

Pentru regresia logistică, funcția \mathrm{Cost} este definită astfel:

\mathrm{Cost}(h_\theta(x),y) =\begin{cases}-\log(h_\theta(x)) & \text{dacă y = 1} \\-\log(1-h_\theta(x)) & \text{dacă y = 0}\end{cases}

Indicii i au fost eliminați pentru claritate. Cu alte cuvinte, acesta este costul pe care algoritmul îl plătește dacă prezice o valoare h_\theta(x) în timp ce eticheta de cost reală se dovedește a fi y. Prin utilizarea acestei funcții vom acorda convexitate funcției pe care algoritmul de coborâre a gradientului trebuie să o proceseze, așa cum s-a discutat mai sus. Există și o demonstrație matematică în acest sens, care iese din sfera de aplicare a acestui curs introductiv.

În cazul y = 1, rezultatul (adică costul de plătit) se apropie de 0 pe măsură ce h_\theta(x) se apropie de 1. Invers, costul de plătit crește până la infinit pe măsură ce h_\theta(x) se apropie de 0. Puteți vedea clar acest lucru în graficul 2. de mai jos, partea stângă. Aceasta este o proprietate de dorit: dorim o penalizare mai mare pe măsură ce algoritmul prezice ceva foarte departe de valoarea reală. Dacă eticheta este y = 1, dar algoritmul prezice h_\theta(x) = 0, rezultatul este complet greșit.

Conversa, aceeași intuiție se aplică atunci când y = 0, descrisă în graficul 2. de mai jos, partea dreaptă. Penalizări mai mari atunci când eticheta este y = 0, dar algoritmul prezice h_\theta(x) = 1.

Funcția de cost pentru regresie logistică

2. Cum arată funcția de cost pentru regresie logistică.

Optimizări suplimentare ale funcției de cost

Ceea ce tocmai am văzut este versiunea verbalizată a funcției de cost pentru regresie logistică. O putem face mai compactă într-o expresie de un singur rând: acest lucru ne va ajuta să evităm enunțurile plictisitoare if/else atunci când transformăm formula într-un algoritm.

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

Probă: încercați să înlocuiți y cu 0 și 1 și veți obține cele două bucăți ale funcției originale.

Cu optimizarea pusă la punct, funcția de cost a regresiei logistice poate fi rescrisă ca:

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

Am mutat semnul minus în exterior pentru a evita parantezele suplimentare.

Plugging the cost function and the gradient descent together

Ce a mai rămas? Avem funcția de ipoteză și funcția de cost: suntem aproape gata. Acum este timpul să găsim cele mai bune valori pentru parametrii \thetas din funcția de cost sau, cu alte cuvinte, să minimizăm funcția de cost prin rularea algoritmului de coborâre a gradientului. Procedura este identică cu cea pe care am făcut-o pentru regresia liniară.

Mai formal, dorim să minimizăm funcția de cost:

\min_{\theta} J(\theta)

Ceea ce va scoate un set de parametri \theta, cei mai buni (adică cu mai puține erori). Odată făcut acest lucru, vom fi gata să facem predicții pe noi exemple de intrare cu caracteristicile lor x, folosind noile \theta în funcția de ipoteză:

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

Unde h_\theta(x) este ieșirea, predicția, sau încă probabilitatea ca y = 1.

Modul în care vom minimiza funcția de cost este prin utilizarea coborârii gradientului. Vestea bună este că procedura este 99% identică cu ceea ce am făcut pentru regresia liniară.

Pentru a minimiza funcția de cost trebuie să rulăm funcția de coborâre a gradientului pe fiecare parametru:

\begin{align} \text{repetați până la convergență \{} \\\\theta_j & := \theta_j – \alpha \frac{\partial}{\partial \theta_j} J(\theta) \\\ \text{\}}\end{align}

Nu uitați să actualizați simultan toate \theta_j așa cum am făcut în omologul de regresie liniară: dacă aveți n caracteristici, adică un vector de caracteristici \vec{\theta} = , toți acești parametri trebuie să fie actualizați simultan la fiecare iterație:

\begin{align} \text{repetați până la convergență \{} \\\\\theta_0 & := \cdots \\\ \theta_1 & := \cdots \\cdots \cdots \\ \theta_n & := \cdots \\ \text{\}}\end{align}

Înapoi la algoritm, vă voi scuti de calculul descurajatoarei derivate \frac{\partial}{\partial \theta_j} J(\theta), care devine:

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

Deci bucla de mai sus poate fi rescrisă ca:

\begin{align} \text{repetați până la convergență \{} \\\\theta_j & := \theta_j – \alpha \dfrac{1}{m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) – y^{(i)}) x_j^{(i)} \\\ \text{\}}\end{align}

În mod surprinzător, arată identic cu ceea ce am făcut pentru regresia liniară multivariată. Ceea ce s-a schimbat însă este definiția ipotezei h_\theta(x): pentru regresia liniară aveam h_\theta(x) = \theta^{\top}{x}, în timp ce pentru regresia logistică avem h_\theta(x) = \frac{1}{1 + e^{\theta^{\top} x}}.

De acum încolo puteți aplica aceleași tehnici de optimizare a algoritmului de coborâre a gradientului pe care l-am văzut pentru regresia liniară, pentru a vă asigura că conversia la punctul minim funcționează corect. În capitolul următor voi aprofunda câteva trucuri avansate de optimizare, precum și definirea și evitarea problemei de supraajustare.

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.