![]() |
Multinomial Classification |
Was, wenn wir mehr als 2 Klassen haben?
Erster Schritt: Wie stellen wir die Klassen in $y$ dar?
One-hot encoding: \[ y = [0, 0, \ldots, 0, 1, 0, \ldots, 0] \]
Wenn es $k$ Klassen gibt (Menge aller Klassen ist $K$), dann ist $y \in \{0, 1\}^k$
\[ y_{\color{red} \bigcirc} = \left[ {\begin{array}{c} 1 \\ 0 \\ 0 \end{array}} \right] \quad y_{\color{green} \square} = \left[ {\begin{array}{c} 0 \\ 1 \\ 0 \end{array}} \right] \quad y_{\color{blue} \triangle} = \left[ {\begin{array}{c} 0 \\ 0 \\ 1 \end{array}} \right] \quad \\[3mm] K = \{ {\color{red} \bigcirc}, {\color{green} \square}, {\color{blue} \triangle} \} \]
Idee: Jede Klasse bekommt ihre eigenen Parameter \[ w_i \in \mathbb{R}^m \quad i \in K \quad \text{(je Klasse)} \]
Quasi ein eigener Classifier für jede Klasse
Wir können die Vektoren $w_i$ zu einer Matrix
$W \in \mathbb{R}^{k \times m}$ kombinieren:
\[
W = \left[ {\begin{array}{c}
w_1 \\ \vdots \\ w_k
\end{array}} \right]
\]
Im Beispiel könnte $W$ sein: \[ W = \left[ {\begin{array}{ccc} {\color{red} -29} & {\color{red} 1} & {\color{red} 3} \\ {\color{green} 9} & {\color{green} 3} & {\color{green} -7} \\ {\color{blue} 17} & {\color{blue} -5} & {\color{blue} 1} \\ \end{array}} \right] \]
Wie klassifizieren wir nun einen neuen Punkt $\color{magenta} x$?
Wir berechnen $W \phi(x)$:
\[ \left[ {\begin{array}{ccc} {\color{red} -29} & {\color{red} 1} & {\color{red} 3} \\ {\color{green} 9} & {\color{green} 3} & {\color{green} -7} \\ {\color{blue} 17} & {\color{blue} -5} & {\color{blue} 1} \\ \end{array}} \right] \cdot \left[ {\begin{array}{c} 1 \\ 14 \\ 6 \end{array}} \right] = \left[ {\begin{array}{c} {\color{red} 3} \\ {\color{green} 9} \\ {\color{blue} -47} \end{array}} \right] \]
$W \phi(x)$ gibt uns ein Logit für jede Klasse:
Als nächstes Suchen wir eine Operation, um aus den Logits eine Wahrscheinlichkeitsverteilung zu
machen
(alle positiv und in der Summe 1)
![]() |
$\Rightarrow$ | ![]() |
Softmax Funktion
\[ g(\left[ {\begin{array}{c} z_1 \\ \vdots \\ z_i \\ \vdots \\ z_k \end{array}} \right] ) = \left[ {\begin{array}{c} \vdots \\ \frac{e^{z_i}}{\sum_{j=1}^k e^{z_j}} \\ \vdots \end{array}} \right] \]
Beispiel
\[ g(\left[ {\begin{array}{c} 1 \\ 2 \\ -1 \end{array}} \right] ) = \left[ {\begin{array}{c} \frac{2.718}{2.718 + 7.389 + 0.368} \\[2mm] \frac{7.389}{2.718 + 7.389 + 0.368} \\[2mm] \frac{0.368}{2.718 + 7.389 + 0.368} \end{array}} \right] = \left[ {\begin{array}{c} 0.259 \\[2mm] 0.705 \\[2mm] 0.035 \end{array}} \right] \]Beispiel
\[ g(\left[ {\begin{array}{c} {\color{red} 3} \\ {\color{green} 9} \\ {\color{blue} -47} \end{array}} \right] ) = \left[ {\begin{array}{c} {\color{red} 0.0025} \\ {\color{green} 0.998} \\ {\color{blue} 4.77 \cdot 10^{-25}} \end{array}} \right] \]Multinomial Logistic Regression
\[ h_W (x) = g(W \phi(x)) \]
Loss Funktion ist weiterhin Cross Entropy
In sklearn:
sklearn.linear_model.LogisticRegressionGeht davon aus, dass die Labels $y$ nicht one-hot encoded sind, sondern Zahlen $\{0, 1, 2, \ldots\}$