Regressione logistica usando Pytorch

Regressione logistica usando Pytorch
La regressione logistica è un noto algoritmo di apprendimento automatico che viene utilizzato per risolvere i problemi di classificazione binaria. È derivato dall'algoritmo di regressione lineare, che ha una variabile di output continua e la regressione logistica può persino classificare più di due classi modificandolo leggermente. Esamineremo il concetto di regressione logistica e come è implementata in Pytorch, una biblioteca utile per la creazione di modelli di apprendimento automatico e apprendimento profondo.

Concetto di regressione logistica

La regressione logistica è un algoritmo di classificazione binaria. È un algoritmo decisionale, il che significa che crea confini tra due classi. Estende il problema di regressione lineare che utilizza un funzione di attivazione sulle sue uscite per limitarlo tra 1 e 0. Di conseguenza, questo viene utilizzato per i problemi di classificazione binaria. Il grafico della regressione logistica sembra la figura seguente:

Possiamo vedere che il grafico è limitato tra 0 e 1. La regressione lineare normale può dare il valore target come numero reale, ma non è così con la regressione logistica dovuta alla funzione sigmoideo. La regressione logistica si basa sul concetto di stima della massima verosimiglianza (MLE). La massima probabilità sta semplicemente prendendo una distribuzione di probabilità con un determinato set di parametri e chiedendo: “Quanto è probabile che vedrei questi dati se i miei dati fossero generati da questa distribuzione di probabilità?"Funziona calcolando la probabilità per ogni singolo punto dati e quindi moltiplicando tutte quelle probabilità insieme. In pratica, aggiungiamo i logaritmi delle probabilità.

Se abbiamo bisogno di creare un modello di apprendimento automatico, ogni punto dati variabile indipendente sarà x1 * w1 + x2 * w2 ... e così via, producendo un valore tra 0 e 1 quando è passato attraverso la funzione di attivazione. Se prendiamo 0.50 come fattore o soglia decisiva. Quindi, qualsiasi risultato maggiore di 0.5 è considerato come 1, mentre qualsiasi risultato inferiore a quello è considerato come 0.

Per più di 2 classi, utilizziamo l'approccio unico per tutti. One-VS-All, noto anche come REST a VS, è un processo di classificazione ML multilabel e multiclasse. Funziona prima allenando un classificatore binario per ciascuna categoria, quindi adattando ogni classificatore a ciascun input per determinare a quale classe appartiene. Se il tuo problema ha nzioni N, un VS-tutti convertirà il tuo set di dati di formazione in n problemi di classificazione binaria.

La funzione di perdita associata alla regressione logistica è Entropia incrociata binaria che è il contrario del guadagno delle informazioni. Questo è anche noto come il nome Perdita di registro. La funzione di perdita è data dall'equazione:

Qual è la funzione di perdita?

Una funzione di perdita è una metrica matematica che vogliamo ridurre. Vogliamo costruire un modello in grado di prevedere accuratamente ciò che vogliamo e un modo per misurare le prestazioni del modello è guardare la perdita poiché sappiamo cosa produce il modello e cosa dovremmo ottenere. Possiamo addestrare e migliorare il nostro modello utilizzando questa perdita e regolando i parametri del modello di conseguenza. Le funzioni di perdita variano a seconda del tipo di algoritmo. Per la regressione lineare, l'errore medio quadrato e l'errore assoluto medio sono funzioni di perdita popolari, mentre l'intropia è appropriata per i problemi di classificazione.

Qual è la funzione di attivazione?

Le funzioni di attivazione sono semplicemente funzioni matematiche che modificano la variabile di input per fornire un nuovo output. Questo di solito viene fatto nell'apprendimento automatico per standardizzare i dati o limitare l'input a un determinato limite. Le funzioni di azione popolare sono sigmoidee, unità lineare rettificata (RELU), tan (H), ecc.

Cos'è Pytorch?

Pytorch è una popolare alternativa di apprendimento profondo che funziona con la torcia. È stato creato dal dipartimento di intelligenza artificiale di Facebook, ma può essere utilizzato in modo simile ad altre opzioni. Viene utilizzato per sviluppare una varietà di modelli, ma è ampiamente applicato nei casi d'uso di elaborazione del linguaggio naturale (NLP). Pytorch è sempre un'ottima opzione se si desidera creare modelli con pochissime risorse e desideri una libreria intuitiva, facile da usare e light per i tuoi modelli. Si sente anche naturale, il che aiuta nel completamento del processo. Useremo Pytorch per l'implementazione dei nostri modelli per le ragioni menzionate. Tuttavia, l'algoritmo rimane lo stesso con altre alternative come Tensorflow.

Implementazione della regressione logistica in Pytorch

Useremo i passaggi seguenti per l'implementazione del nostro modello:

  1. Crea una rete neurale con alcuni parametri che verranno aggiornati dopo ogni iterazione.
  2. Iterare attraverso i dati di input forniti.
  3. L'input passerà attraverso la rete utilizzando la propagazione in avanti.
  4. Ora calcoliamo la perdita usando l'intropia binaria.
  5. Per ridurre al minimo la funzione di costo, aggiorniamo i parametri utilizzando la discesa gradiente.
  6. Ancora una volta esegui gli stessi passaggi utilizzando i parametri aggiornati.

Classificheremo il Set di dati mnist cifre. Questo è un popolare problema di apprendimento profondo insegnato ai principianti.

Per prima cosa importa le librerie e i moduli richiesti.

Torcia di importazione
dalla torcia.variabile di importazione autograda
Importa Torchvision.trasforma come trasformazioni
Importa Torchvision.set di dati come dset

Il prossimo passo è importare il set di dati.

treno = dset.Mnist (root = './Data ', treno = true, trasform = trasformazioni.Totensor (), download = false)
test = dset.Mnist (root = './Data ', treno = false, trasformi = trasformazioni.Totensor ())

Utilizza il caricatore di dati per rendere i tuoi dati

train_loader = torcia.utils.dati.DataLoader (DataSet = Train, batch_size = batch_size, shuffle = true)
test_loader = torcia.utils.dati.DataLoader (DataSet = Test, batch_size = batch_size, shuffle = false)

Definire il modello.

Modello di classe (torcia.nn.Modulo):
def __init __ (self, inp, out):
super (modello, sé).__dentro__()
se stesso.lineare = torcia.nn.Lineare (inp, fuori)
def forward (self, x):
output = self.lineare (x)
Output di restituzione

Specificare iperparametri, ottimizzatore e perdita.

batch = 50
n_iters = 1500
epochs = n_iters / (len (train_dataset) / batch)
INP = 784
out = 10
alfa = 0.001
Model = LogisticRegression (INP, Out)
perdita = torcia.nn.Crosstropiloss ()
ottimizzatore = torcia.Ottima.SGD (modello.parametri (), lr = alfa)

Allena finalmente il modello.

ITR = 0
per epoca nell'intervallo (int (epoche)):
Per i, (immagini, etichette) in enumerate (train_loader):
Immagini = variabile (immagini.Visualizza (-1, 28 * 28))
Etichette = variabile (etichette)
ottimizzatore.zero_grad ()
outputs = modello (immagini)
LossFunc = perdita (output, etichette)
Lossfunc.all'indietro ()
ottimizzatore.fare un passo()
ITR+= 1
Se ITR%500 == 0:
corretto = 0
totale = 0
Per immagini, etichette in test_loader:
Immagini = variabile (immagini.Visualizza (-1, 28*28))
outputs = modello (immagini)
_, previsto = torcia.max (output.dati, 1)
totale+= etichette.dimensione (0)
corretto+= (previsto == etichette).somma()
precisione = 100 * corretto/totale
print ("iterazione è . La perdita è . La precisione è .".Formato (ITR, Lossfunc.articolo (), precisione))

Conclusione

Abbiamo esaminato la spiegazione della regressione logistica e la sua implementazione usando Pytorch, che è una biblioteca popolare per lo sviluppo di modelli di apprendimento profondo. Abbiamo implementato il problema della classificazione del set di dati MNIST in cui abbiamo riconosciuto le cifre in base ai parametri delle immagini.