Edellisessä artikkelissa ”Johdatus luokitteluun ja logistiseen regressioon” hahmottelin matemaattiset perusteet logistisesta regressioalgoritmista, jonka tehtävänä on erotella asioita harjoitusesimerkissä laskemalla päätösraja.
Päätösraja voidaan kuvata yhtälöllä. Kuten lineaarisessa regressiossa, logistinen regressioalgoritmi pystyy löytämään parhaat \thetas-parametrit, jotta päätösraja todella erottaa datapisteet oikein. Tässä artikkelissa katsotaan, miten nämä \thetas-parametrit lasketaan.
Esitellään, että meillä on yleinen harjoitusjoukko
\{(x^{(1)}, y^{(1)}), (x^{(2)}, y^{(2)}), \pisteet, (x^{(m)}, y^{(m)}) \}
tehty m harjoitusesimerkistä, jossa (x^{(1)}, y^{(1)}) on ensimmäinen esimerkki ja niin edelleen. Tarkemmin sanottuna x^{(m)} on m:nnen esimerkin tulomuuttuja, kun taas y^{(m)} on sen lähtömuuttuja. Koska kyseessä on luokitusongelma, jokaisen esimerkin ulostulomuuttuja y on tietysti rajattu välille 0 ja 1. Toisin sanoen, y \ on {0,1}.
Jokaista esimerkkiä edustaa tavalliseen tapaan sen ominaisvektori
\vec{x} = \begin{bmatrix} x_0 \\\ x_1 \\\ \dots \\\\ x_n \end{bmatrix}
jossa x_0 = 1 (sama vanha temppu). Tämä on yleinen esimerkki, emme tiedä piirteiden tarkkaa lukumäärää.
Loppujen lopuksi meillä on logistisen regression hypoteesifunktio, kuten edellisessä artikkelissa nähtiin:
h_\\theta(x) = \frac{1}{1 + e^{\theta^{\top} x}}
Tehtävämme on nyt valita yllä olevasta yhtälöstä parhaat parametrit \theta, kun otetaan huomioon nykyinen harjoitusjoukko, jotta virheet saadaan minimoitua. Muista, että \theta ei ole yksittäinen parametri: se laajenee päätöksentekorajan yhtälöksi, joka voi olla viiva tai monimutkaisempi kaava (jossa on useampia \theta-arvoja arvattavaksi).
Menettelytapa on samankaltainen kuin mitä teimme lineaarisen regression kohdalla: määrittele kustannusfunktio ja pyri löytämään parhaat mahdolliset arvot kullekin \thetalle minimoimalla kustannusfunktion ulostulo. Minimointi suoritetaan gradienttilaskeutumisalgoritmilla, jonka tehtävänä on jäsentää kustannusfunktion ulostuloa, kunnes se löytää alimman minimipisteen.
Lineaarisessa regressiossa käytetty kustannusfunktio ei toimi tässä
Mahdollisesti muistat alkuperäisen lineaarisessa regressiossa käytetyn kustannusfunktion J(\theta). Voin kertoa heti, että se ei tule toimimaan tässä logistisella regressiolla. Jos yrität käyttää lineaarisen regression kustannusfunktiota tuottamaan J(\theta) logistisessa regressio-ongelmassa, tuloksena on ei-konveksinen funktio: oudon muotoinen kuvaaja, josta ei ole helppo löytää globaalia minimipistettä, kuten alla olevassa kuvassa näkyy.
Tämä outo lopputulos johtuu siitä, että logistisessa regressiossa meillä on sigmoidifunktio ympärillä, joka on epälineaarinen (eli ei suora). Kuvassa 1. esitetyllä J(\theta):lla gradienttilaskeutumisalgoritmi saattaa juuttua paikalliseen minimipisteeseen. Siksi tarvitsemme edelleen siistin koveran funktion kuten lineaarisessa regressiossa: kulhonmuotoisen funktion, joka helpottaa gradienttilaskeutumisfunktion työtä konvergoidakseen optimaaliseen minimipisteeseen.
parempi kustannusfunktio logistiselle regressiolle
Palaamme hetkeksi takaisin kustannusfunktioon, jota käytimme lineaarisessa regressiossa:
J(\vec{\theta}) = \frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) – y^{(i)})^2
joka voidaan kirjoittaa uudelleen hieman eri tavalla:
J(\vec{\theta}) = \frac{1}{m} \sum_{i=1}^{m} \frac{1}{2}(h_\theta(x^{(i)}) – y^{(i)})^2
Mitään pelottavaa ei tapahtunut: Olen vain siirtänyt \frac{1}{2} yhteenlaskuosan viereen. Tehdään nyt yleisemmäksi määrittelemällä uusi funktio
\mathrm{Cost}(h_\theta(x^{(i)}),y^{(i)}) = \frac{1}{2}(h_\theta(x^{(i)}) – y^{(i)})^2
Sanalla sanoen funktio \mathrm{Cost}, joka ottaa syötteeksi kaksi parametria: h_\theta(x^{(i)}) hypoteesifunktiona ja y^{(i)} tulosteena. Voit ajatella sitä kustannuksena, jonka algoritmi joutuu maksamaan, jos se tekee ennusteen h_\theta(x^{(i)}), vaikka todellinen etiketti oli y^{(i)}.
Tämän uuden palapelin palasen avulla voin kirjoittaa lineaarisen regression kustannusfunktion uudelleen seuraavasti:
J(\theta) = \dfrac{1}{m} \sum_{i=1}^m \mathrm{Cost}(h_\theta(x^{(i)}),y^{(i)})
Tiedämme kuitenkin, että lineaarisen regression kustannusfunktiota ei voi käyttää logistisen regression ongelmissa. Mistä tässä siis on kyse? No, käy ilmi, että logistista regressiota varten meidän on vain löydettävä erilainen \mathrm{Cost}-funktio, kun taas summausosa pysyy samana.
Logistisen regression kustannusfunktio
Logistiselle regressiolle \mathrm{Kustannus}-funktio määritellään seuraavasti:
\mathrm{Kustannus}(h_\theta(x),y) =\begin{cases}-\log(h_\theta(x)) & \text{jos y = 1} \\-\log(1-h_\theta(x)) & \text{jos y = 0}\end{cases}
I-indeksit on poistettu selkeyden vuoksi. Toisin sanoen tämä on kustannus, jonka algoritmi maksaa, jos se ennustaa arvon h_\theta(x), vaikka todellinen kustannusmerkki osoittautuukin y:ksi. Käyttämällä tätä funktiota annamme koveruuden funktiolle, jota gradienttilaskeutumisalgoritmin on käsiteltävä, kuten edellä on käsitelty. Siitä on myös matemaattinen todistus, joka ei kuulu tämän johdantokurssin piiriin.
Tapauksessa y = 1, tuotos (eli maksettava kustannus) lähestyy 0:ta, kun h_\theta(x) lähestyy 1:tä. Kääntäen maksettavat kustannukset kasvavat äärettömään, kun h_\theta(x) lähestyy 0:a. Sen näkee selvästi alla olevassa kuvaajassa 2. vasemmalla puolella. Tämä on toivottava ominaisuus: haluamme suuremman sakon, kun algoritmi ennustaa jotain, joka on kaukana todellisesta arvosta. Jos merkintä on y = 1, mutta algoritmi ennustaa h_\theta(x) = 0, lopputulos on täysin väärä.
Käänteisesti sama intuitio pätee, kun y = 0, joka on esitetty alla olevassa kuvaajassa 2., oikea puoli. Suuremmat rangaistukset, kun merkintä on y = 0, mutta algoritmi ennustaa h_\theta(x) = 1.
Lisäkustannusfunktioiden optimoinnit
Juuri näkemämme on logistisen regression kustannusfunktio sanatarkka versio. Voimme tehdä siitä tiiviimmän yksiriviseksi lausekkeeksi: tämä auttaa välttämään tylsiä if/else-lausekkeita, kun kaava muunnetaan algoritmiksi.
\mathrm{Cost}(h_\theta(x),y) = -y \log(h_\theta(x)) – (1 – y) \log(1-h_\theta(x))
Todistus: yritä korvata y:t 0:lla ja 1:llä, niin päädyt alkuperäisen funktion kahteen osaan.
Kun optimointi on tehty, logistisen regression kustannusfunktio voidaan kirjoittaa uudelleen seuraavasti:
\begin{align}J(\theta) & = \dfrac{1}{m}{m} \sum_{i=1}^m \mathrm{Cost}(h_\theta(x^{(i)}),y^{(i)}) \\& = – \dfrac{1}{m} \\\\end{align}
Olen siirtänyt miinusmerkin ulkopuolelle ylimääräisten sulkujen välttämiseksi.
Kustannusfunktion ja gradienttilaskeutumisen liittäminen yhteen
Mitä on jäljellä? Meillä on hypoteesifunktio ja kustannusfunktio: olemme melkein valmiita. Nyt on aika löytää parhaat arvot \thetas-parametreille kustannusfunktiossa, tai toisin sanoen minimoida kustannusfunktio ajamalla gradienttilaskeutumisalgoritmi. Menettely on identtinen sen kanssa, mitä teimme lineaarista regressiota varten.
Ammattisemmin sanottuna haluamme minimoida kustannusfunktion:
\min_{\theta} J(\theta)
Jolloin tuloksena on joukko parametreja \theta, jotka ovat parhaita parametreja (eli joissa on vähemmän virheitä). Kun tämä on tehty, olemme valmiita tekemään ennusteita uusille syöttöesimerkeille ja niiden ominaisuuksille x käyttämällä uusia \thetoja hypoteesifunktiossa:
h_\theta(x) = \frac{1}{1 + e^{\theta^{\top} x}}
Jossa h_\\theta(x) on ulostulo, ennuste tai vielä todennäköisyys sille, että y = 1.
Tapa, jolla minimoimme kustannusfunktion, on gradienttilaskeutuminen. Hyvä uutinen on, että menettely on 99-prosenttisesti identtinen sen kanssa, mitä teimme lineaariselle regressiolle.
Kustannusfunktion minimoimiseksi meidän on ajettava gradienttilaskeutumisfunktio jokaiselle parametrille:
\begin{align} \text{toistetaan kunnes konvergenssi on saavutettu \{} \\\\theta_j & := \theta_j – \alpha \frac{\partial}{\partial \theta_j} J(\theta) \\ \ \text{\}}\end{align}
Muista päivittää kaikki \theta_j samanaikaisesti, kuten teimme lineaarisen regression vastineessa: jos sinulla on n piirrettä, eli piirrevektori \vec{\theta} = , kaikki nuo parametrit on päivitettävä samanaikaisesti jokaisella iteraatiolla:
\begin{align} \text{toistetaan konvergenssiin asti \{} \\\\theta_0 & := \cdots \\\ \theta_1 & := \cdots \\\ \cdots \\\ \theta_n & := \cdots \\\ \text{\}}\end{align}
Takaisin algoritmiin, säästän teidät pelottavan derivaatan \frac{\partial}{\partial \theta_j} laskemiselta. J(\theta), josta tulee:
\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)}
Siten yllä oleva silmukka voidaan kirjoittaa uudelleen seuraavasti:
\begin{align} \{teksti{toistetaan kunnes konvergenssi \{} \\\\theta_j & := \theta_j – \alpha \dfrac{1}{m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) – y^{(i)}) x_j^{(i)} \\ \ \text{\}}\end{align}
Yllättäen se näyttää identtiseltä sen kanssa, mitä teimme monimuuttujaiselle lineaariselle regressiolle. Se, mikä on kuitenkin muuttunut, on hypoteesin h_\\theta(x) määritelmä: lineaarista regressiota varten meillä oli h_\theta(x) = \theta^{\top}{x}, kun taas logistista regressiota varten meillä on h_\theta(x) = \frac{1}{1 + e^{\theta^{\top} x}}.
Jatkossa voit soveltaa samoja tekniikoita gradienttilaskeutumisalgoritmin optimointiin, joita olemme nähneet lineaarisen regression kohdalla, varmistaaksemme, että muunnos minimipisteeseen toimii oikein. Seuraavassa luvussa syvennyn joihinkin edistyneempiin optimointitemppuihin sekä ylisovituksen ongelman määrittelyyn ja välttämiseen.