Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Stel dat we te maken hebben met een target variabele die in plaats van een continue waarde (bv. hoeveelheid fooi), binair is (bv. laat iemand een tip achter [1][1] of niet [0][0]). In een dergelijke situatie zouden we nog steeds predicties willen kunnen maken op basis van een lineaire combinatie van features/predictoren, maar we kunnen een standaard lineair regressie model niet zomaar toepassen. Dat model houdt enkel rekening met continue targetvariabele, dus met predicties die groter dan 1 of kleiner dan 0. Een oplossing hiervoor is om het lineaire model via een speciale niet-lineaire functie te linken aan de target waarden (0 of 1 in het binaire geval). Om predicties te mappen op binaire outputs wordt een sigmoid (S-vormige) functie gebruikt zoals de logistische functie. In dit laatste geval spreken we over logistische regressie. In het algemene geval waarbij we lineaire predicties mappen op niet-continue targetvariabelen via een welbepaalde link-functie spreekt men van generalized linear models (GLM). Hier gaan we enkel verder in op logistische regressie omdat het een aanzet geeft naar de parameter schattingen bij neurale netwerken.

Logistische regressie

Bij logistische regressie hebben te maken met binaire target variabelen:

yi∈{0,1}y_i \isin \{0, 1\}

De lineaire predicties worden in het interval (0,1)(0, 1) geprojecteerd door de logistische link functie.

Source
Source
<Figure size 1000x600 with 1 Axes>

Model

Het gekende lineaire regressie model wordt uitgebreid met een logistische link-functie zodat we voor de schatting van de target waarden volgende formulering krijgen:

y^=σ(Xb)=11+e−Xb\begin{align} \pmb{\hat{y}} &= \sigma(\pmb{X}\pmb{b}) \cr &= \frac{1}{1 + e^{-\pmb{X}\pmb{b}}} \end{align}

Zoals te zien in de illustratie hierboven, zorgt de logistische link-functie ervoor dat de voorspellingen binnen het interval (0,1)(0, 1) vallen. Om de voorspellingen echt binair te maken {0,1}\{0, 1\} wordt een decision boundary gebruikt - meestal bij het flexiepunt:

o^i={1y^i>0.50y^i≤0.5{\hat{o}_i} = \begin{cases} 1 & \hat{y}_i > 0.5 \\ 0 & \hat{y}_i \leq 0.5 \end{cases}

Data simulatie

We kunnen terugkijken naar de koffiehuis data simulatie met het volume van de bestelling als de predictor, maar in plaats van de hoeveelheid fooi voorspellen we of er al dan niet een fooi werd achtergelaten.

Source
COFFEE SHOP TIPPING ANALYSIS (BINARY)
Predicting: Does customer leave a tip? (Yes=1, No=0)
True relationship: P(tip) = σ(-2.00 + 0.25 × Order Total)
We collected data from 50 customers
Order range: $3.96 - $24.46
Tippers: 43 (86.0%)
Non-tippers: 7 (14.0%)
<Figure size 1600x600 with 2 Axes>

Log loss

Ook hier willen we optimale waarden b\pmb{b} vinden, maar om die optimaliteit te bepalen maken we geen gebruik van LSSE\mathcal{L}_{SSE} omdat die in deze context in een heel onregelmatig patroon kan resulteren met veel lokale minima - wat nefast is, zeker als we gradient descent willen toepassen. In plaats daarvan werken we met de binary cross-entropy loss functie (ook wel log loss genoemd).

Definitie

Voor een binair classificatieprobleem wordt de cross-entropy loss voor een enkel datapunt gedefinieerd als:

L(y^i,yi)=−[yilog⁡(y^i)+(1−yi)log⁡(1−y^i)]\mathcal{L}(\hat{y}_i, y_i) = -\left[ y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i) \right]

waarbij:

  • yi∈{0,1}y_i \in \{0, 1\} de werkelijke binaire target waarde is

  • y^i=σ(xiTb)\hat{y}_i = \sigma(\pmb{x}_i^T\pmb{b}) de voorspelde waarschijnlijkheid is dat yi=1y_i = 1

Voor de volledige dataset met nn observaties is de totale binary cross-entropy (BCE) loss:

LBCE(b)=−1n∑i=1n[yilog⁡(y^i)+(1−yi)log⁡(1−y^i)]\mathcal{L}_{BCE}(\pmb{b}) = -\frac{1}{n} \sum_{i=1}^{n} \left[ y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i) \right]

De belangrijkste eigenschappen zijn:

  • Straft foute voorspellingen (meer dan SSE loss)

  • Beloont juiste voorspellingen (meer dan SSE loss)

  • Convex

  • Elegante gradient (zie verder)

Source
<Figure size 1600x600 with 2 Axes>

Vergelijking met SSE

Source
<Figure size 1600x600 with 2 Axes>

Gradiënt van de cross-entropy loss

Een extra reden om de cross-entropy loss te gebruiken bij logistische regressie, is dat de gradiënt een zeer elegante vorm heeft.

Voor de binary cross-entropy loss:

LBCE(b)=−1n∑i=1n[yilog⁡(y^i)+(1−yi)log⁡(1−y^i)]\mathcal{L}_{BCE}(\pmb{b}) = -\frac{1}{n} \sum_{i=1}^{n} \left[ y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i) \right]

is de gradiënt ten opzichte van de parameters b\pmb{b}:

∂LBCE∂b=∇LBCE=1nXT(y^−y)\frac{\partial \mathcal{L}_{BCE}}{\partial \pmb{b}} = \nabla \mathcal{L}_{BCE} = \frac{1}{n} \pmb{X}^T(\pmb{\hat{y}} - \pmb{y})

waarbij

y^i=σ(xiTb)\hat{y}_i = \sigma(\pmb{x}_i^T\pmb{b})

Gradient descent

Er wijzigt niets aan de definitie van het gradient descent leeralgoritme. We gebruiken nu gewoon de gradiënt van de BCEBCE loss functie.

bk+1=bk−λ∇L(bk)=bk−λ∇LBCE(bk)\begin{align} \pmb{b}^{k+1} &= \pmb{b}^k - \lambda \nabla \mathcal{L}(\pmb{b}^k) \cr &= \pmb{b}^k - \lambda \nabla \mathcal{L}_{BCE}(\pmb{b}^k) \end{align}
Reached maximum iterations (50000)
Final parameters: b₀ = -1.909, b₁ = 0.336
True parameters:  b₀ = -2.000, b₁ = 0.250
Final loss: 0.2738
Number of iterations: 50000
Source
Loading...