Din postul nostru anterior, am aprofundat motivele care stau la baza utilizării unei funcții Sigmoid pentru Regresia logistică mai degrabă decât a unei funcții liniare normale. În această postare, vom continua să împărtășim despre funcția de cost.
Funcția de cost este importantă deoarece ne oferă erorile predicțiilor noastre și, ulterior, este necesară pentru algoritmul nostru de învățare. Concret, ne place să minimizăm erorile predicțiilor noastre, adică să minimizăm funcția de cost. În mod ideal, dacă toate erorile noastre sunt zero, este ca și cum am juca un joc de săgeți în care toate săgețile noastre ar nimeri în țintă. De cealaltă parte a argumentului, dacă erorile noastre sunt foarte mari, înseamnă că valorile noastre prezise ratează toate adevăratele valori observate, adică săgețile noastre ratează, în general, ținta.
În timp ce ne place să avem erori zero atunci când rulăm funcția noastră de cost cu valorile noastre ipotezate (predicție perfectă pentru fiecare valoare), acesta ar putea să nu fie un scenariu bun, având în vedere că ar putea duce la un fenomen numit „varianță ridicată”. Vom aborda mai multe despre acest aspect în scrierile ulterioare.
Revenind la formularea funcției de pierdere, o funcție de pierdere tipică ar fi minimizarea sumei erorilor pătratice, adică
Această funcție, cu toate acestea, poate da naștere la mai multe optimuri locale în timpul procesului de optimizare, ceea ce înseamnă că soluția dvs. optimizată ar putea să nu fie cea mai optimizată (există o șansă să existe o soluție mai bună). În mod ideal, dorim ca soluția optimizată să fie minimul global, mai degrabă decât minimul local.
După cum se vede în diagrama de mai sus, s-ar putea ca, din greșeală, să inițializăm parametrii și să îi optimizăm până la minimul local fără a ajunge la „adevăratul” minim global. Prin urmare, funcția de pierdere menționată mai sus nu ar fi ideală pentru noi să o folosim.
Ce ar putea fi atunci funcția noastră de pierdere?
O funcție de pierdere folosită în mod obișnuit pentru regresia logistică este aceasta:
Rețineți că am folosit costul și pierderea în mod interschimbabil, dar pentru cei obișnuiți cu prelegerile lui Andrew Ng, „funcția de pierdere” este pentru un singur exemplu de formare, în timp ce „funcția de cost” ia media tuturor exemplelor de formare.
Pentru a vedea de ce această funcție de pierdere are sens: Presupunând că y = 1 și concentrându-ne pe ecuația de sus, -log(h⊖(x)), dorim ca aceasta să fie foarte negativă, deoarece aceasta este o funcție de pierdere (Reamintim că dorim să minimizăm funcția de pierdere ca obiectiv). Ca urmare, h⊖(x) va fi mare. Acestea fiind spuse, reamintim că h⊖(x) este limitată la valoarea maximă de 1 datorită funcției Sigmoid care constrânge valoarea estimată a ipotezei între 0 și 1:
h⊖(x) = ŷ = σ(z)
În consecință, atunci când y=1, avem funcția de pierdere minimizată la extrem atunci când ŷ = 1. O predicție perfectă care are pierderi/costuri mici sau deloc suportate.
Conversa, dacă y = 0, și concentrându-ne pe partea de jos a ecuației, -log(1- h⊖(x)). Ne place ca aceasta să fie foarte negativă datorită obiectivului nostru de minimizare a pierderilor. Ca urmare, 1- h⊖(x) ar fi foarte mare, iar corolarul ar fi că h⊖(x) ar fi foarte mică. Cu toate acestea, reamintim că h⊖(x) este limitată la valoarea minimă de 0 datorită funcției Sigmoid care face ca valoarea estimată a ipotezei să fie cuprinsă între 0 și 1.
În consecință, atunci când y=0, avem funcția de pierdere minimizată la extrem atunci când ŷ = 0. O predicție perfectă care are pierderi/costuri mici sau inexistente.
Graficele corespunzătoare vor ilustra punctele de mai sus:
După cum se poate observa din graficul din stânga (y = -log(h⊖(x)), când y = 1, costul merge la 0 când valoarea ipotetică este 1 și merge la infinit când valoarea ipotetică este apropiată de 0.
În mod similar, graficul din dreapta (y = -log(1 – h⊖(x)), când y = 0, costul merge la 0 când valoarea ipotetică este 0 și merge la infinit când valoarea ipotetică este apropiată de 1.
Combinându-le pe amândouă într-o ecuație ordonată veți obține funcția de cost pentru regresia logistică cu m exemple de instruire:
unde i merge de la 1 la m pentru m exemple de instruire.
În inteligența artificială și în învățarea automată , vor fi multe notații aruncate în jur și ar fi util să ne facem o idee despre ele.
Când antrenăm modelul de regresie logistică, urmărim să găsim parametrii, „w” și „b” care minimizează funcția de cost global. În următorul articol, vom aborda următorul segment important, Gradient Descent.
În numpy, putem codifica funcția de cost după cum urmează:
import numpy as npcost = (-1/m) * np.sum(Y*np.log(A) + (1-Y)*(np.log(1-A)))
Pentru a explica:
- np.sum însumează elementele din array (Y*np.log(A) + (1-Y)*(np.log(1-A)), care în acest caz ar fi suma tuturor exemplelor de antrenament. Citiți mai multe aici.
- np.log ia log natural, element cu element, la elementele din matrice. Citiți mai multe aici.
- „*” ia elementele unui array și le înmulțește, element cu element, la elementele unui alt array. Aceasta nu este o înmulțire matricială, care are o cerință de formă din ambele array-uri: Numărul de coloane din prima matrice trebuie să fie egal cu numărul de rânduri din cea de-a doua matrice.
.