scikit-learn

La regressione logistica

Dopo aver testato il modello Perceptron attraverso l’utilizzo di scikit-learn, abbiamo scoperto che non è adatto quando le classi del dataset non sono perfettamente separabili linearmente. Per questo semplice motivo l’algoritmo non converge ed ad in ogni epoch c’è sempre un campione erroneamente classificato.

Ci viene in aiuto così l’algoritmo di classificazione chiamato regressione logistica. Oltre ad essere uno degli algoritmi più utilizzato, permette di svolgere il compito di classificazione binaria e multiclasse tramite tecnica OvR, operando su classi che possono essere separate linearmente.

Per enunciare in maniera corretta gli elementi base della regressione logistica  dobbiamo enunciare la definizione di rapporto probabilistico, ovvero le probabilità favorevoli ad un determinato evento.

regressione logistica
Rapporto probabilistico

Nella formula del rapporto probabilistico, la variabile p è la probabilità dell’evento positivo. Quest’ultimo non è altro che l’evento che vogliamo prevedere, ad esempio la probabilità che un paziente di un’ospedale sia affetto da una determinata malattia.

Pensiamo a un evento positivo come l’etichetta della classe y = 1. 

La funzione logit

La funzione logit non è altro che il logaritmo dela rapporto probabilistico (log-odds).

regressione logistica

Essa accetta valori in input compresi nell’intervallo tra 0 e 1 e li trasforma in numeri reali da utilizzare per esprimere una relazione lineare fra i valori delle caratteristiche e log-odd :

regressione logistica

In questa equazione p(y = 1 | x) è la probabilità condizionale che un certo campione appartenga alla classe y = 1 in base alle caratteristiche X

La funzione sigmoid nella regressione logistica

Il nostro obbiettivo principale è quello di prevedere la probabilità che un determinato campione appartenga a una determinata classe. Ciò non è altro che la funzione inversa della funzione logit.

Essa è chiamata funzione logistica, talvolta abbreviata semplicemente come funzione sigmoid a causa della sua forma ad ‘S’.

regressione logistica

Qui z è l’input della rete, ovvero la combinazione lineare dei pesi e delle caratteristiche dei campioni e può essere calcolata attraverso la formula:

regressione logistica

Tracciamo il grafico della funzione sigmoid

Vediamo ora di tracciare il grafico della funzione sigmoid per alcuni valori compresi tra -7 e 7.

import matplotlib.pyplot as plt
import numpy as np

def sigmoid(z):
    return 1.0 / (1.0 + np.exp(-z))

z = np.arange(-7, 7, 0.1)
phi_z = sigmoid(z)
plt.plot(z, phi_z)
plt.axvline(0.0, color='k')
plt.axhspan(0.0, 1.0, facecolor='1.0', alpha=1.0, ls='dotted')
plt.axhline(y=0.5, ls='dotted', color='k')
plt.yticks([0.0, 0.5, 1.0])
plt.ylim(-0.1, 1.1)
plt.xlabel('z')
plt.ylabel('$\phi (z)$')
plt.show()

Il risultato del seguente codice è il grafico a S:

regressione logistica

Possiamo vedere come Ø(z) si avvicina a 1 se z tende all’infinito. Mentre si avvicina a 0 in caso di z tendente a – infinito.  Concludiamo col dire che questa funzione sigmod utile alla regressione logistica prende in input numeri naturali e li trasforma in valori compresi tra [0,1], con un’intercettazione a Ø(z) = 0.5 .

Questo tipo di algoritmo di classificazione permette di stimare la probabilità di appertenenza a una classe. Essa infatti, viene spesso utilizzata nelle previsioni metereologiche per prevedere la probabilità di pioggia in un determinato giorno.

I pesi della funzione di costo logistico

Per derivare la funzione del costo per la regressione logistica dobbiamo definire la probabilità L che vogliamo massimizzare supponendo che i singoli campioni del dataset siano indipendenti tra loro. La formula è la seguente:

E’ più facile massimizzare il logaritmo naturale di questa equazione, chiamata funzione di log-probabilità:

Applicando il logaritmo si riducono le possibilità di underflow numerico ed inoltre possiamo convertire il prodotto dei fattori in una semplice sommatoria. Ora possiamo utilizzare un algoritmo di ottimizzazione, come quello a discesa del gradiente, per massimizzare la funzione di log-probabilità.

Riscriviamo così la funzione di log-probabilità come una funzione di costo J che può essere minimizzata:

Per comprendere meglio la funzione di costo, analizziamo il costo che calcoliamo per un’unica istanza mono-campione:

Quindi, analizzando la precedente formula, possiamo vedere che il primo termine diventa 0 se y=0 e il secondo termine diventa 0 se y=1

Dal grafico possimo notare che il costo si avvicina allo 0 se prevediamo correttamente che un campione appartenga alla classe 1. Analogamente possima vedere sull’asse y che il costo si avvicina a 0 se prevediamo correttamente y=0. Se la previsione è erratta il costo tende all’infinito.

Penalizziamo le previsioni erratte con costi sempre più alti.

Condividi il post

Condividi su facebook
Condividi su google
Condividi su twitter
Condividi su email
Condividi su whatsapp