2.9 KiB
Ovviamente non possiamo usare la sigmoide, ci serve qualcos'altro. Possiamo usare la SoftMax, che è definita così:
$$\text{softmax}(z_i) =\frac{ e^{z_i}}{\sum_{j=1}^{n}e^{z_{j}}}
Per cui otteniamo:
f_{\theta}(x_i)=softmax(\theta^Tx_i)
\theta^Tx_i
corrisponde al logit, o score.
x_i
è un vettore di dimensione[d*1]
che rappresenta le features del samplei
- può anche essere una feature sola ovviamente, ma possono essere 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26...
\theta
è la matrice dei parametri (pesi) di dimensione[c*d]
- con due classi era un vettore perché in quel caso consideravamo solamente la probabilità di cadere nella classe 1. Stavolta invece consideriamo la probabilità di cadere in ogni singola classe. Per cui abbiamo un vettore di pesi diverso per ogni classe, con come sempre, un peso per ogni feature.
Esempio stupido che mi sono inventato ora: i sample sono case e le feature sono dimensione e numero di piani, le classi da predire sono: appartamento, villa in campagna, villetta in città
Definiamo
f(x)
: codifica la distribuzione di probabilità su tutte le classif(x)_i
: rappresenta la probabilità per la singola classe i- con probabilità
f(x)_i
, ci si trova nella classe i
- con probabilità
La probabilità di cadere in una certa classe la definiamo in modo simile alla volta scorsa. Ma dobbiamo chiaramente considerare che le classi non sono 2. Sia c
il numero di classi, otteniamo:
P(Y|f(X))= \prod_{i=1}^c[f(X)_i]^{Y_i}
Y è un vettore cosiddetto "one-hot", ovvero solo uno degli elementi vale 1 e tutti gli altri 0.
Possiamo togliere la produttoria e considerare solo uno degli elementi: quello per cui y_i
vale 1. Otteniamo così: P(Y_i|f(X_i))= f(X_i)_Y
Definiamo ora in modo analogo la Likelihood:
L = \prod_{i=1}^{n} P(Y_i \mid f(X_i))
(come sempre, P(Y_i \mid f(X_i))
è la probabilità che il valore reale sia Yi dato il valore predetto con il sample x_i
)
Come sempre, la Likelihood può essere difficile da calcolare, è molto più facile calcolare il logaritmo di essa, per cui lo definiamo:
log(L)=LL=\sum_{i=0}^nlog(P(y_i|f(x_i)))=\sum_{i=0}^nlog(f(x^i)_{y_i})
(con n = numero di sample)
Analogamente, definiamo la NLL aggiungendo il -
davanti:
NLL = -\sum_{i=0}^nf(x^i)_{y_i}=-\sum_{i=0}^n\sum_{j=0}^clog(f(x^i)_j)
Questa viene anche detta Cross Entropy (CE)
Definiamo un esempio: classi
- gatto [1, 0, 0]
- cane [0, 1, 0]
- giraffa [0, 0, 1] sample x1 e x2
f(x1)=[0.4, 0.2, 0.4]
(il modello è indeciso, non riesce a decidere sex1
è un gatto o una giraffa, però il modello dice che probabilmente non è un cane)f(x2)=[0.01, 0.98, 0.01]
(il modello per questo sample invece è molto sicuro)
Calcoliamo la Cross Entropy!
-[[1(-0.91)+0(-1.6)+0(-0.91)]+[0(-4.6)+0(-0.02)+0(-4.6)]] = 0.93
quei numeri strani sono semplicemente i logaritmi di 0.4, 0.2 ecc., abbiamo semplicemente applicato la formula sopra!