La regressione logistica è uno degli algoritmi di machine learning più popolari per la classificazione binaria. Questo perché è un semplice algoritmo che funziona molto bene su un'ampia gamma di problemi.
In questo post scoprirai passo passo l'algoritmo di regressione logistica per la classificazione binaria. Dopo aver letto questo post saprai:
Come calcolare la funzione logistica.
Come apprendere i coefficienti per un modello di regressione logistica utilizzando la discesa del gradiente stocastico.
Come fare previsioni usando un modello di regressione logistica.
Questo post è stato scritto per gli sviluppatori e non presuppone un background in statistiche o probabilità.
Set di dati dell'esercitazione sulla Regressione Logistica
In questo tutorial useremo un set di dati inventato.
Questo set di dati ha due variabili di input (X1 e X2) e una variabile di output (Y). Nelle variabili di input sono numeri casuali con valori reali estratti da una distribuzione gaussiana. La variabile di output ha due valori, rendendo il problema un problema di classificazione binaria.
I dati grezzi sono elencati di seguito.
X1 X2 Y
2.7810836 2.550537003 0
1.465489372 2.362125076 0
3.396561688 4.400293529 0
1.38807019 1.850220317 0
3.06407232 3.005305973 0
7.627531214 2.759262235 1
5.332441248 2.088626775 1
6.922596716 1.77106367 1
8.675418651 -0.2420686549 1
7.673756466 3.508563011 1
Di seguito è riportato un grafico del set di dati. Puoi vedere che è completamente artificioso e che possiamo facilmente tracciare una linea per separare le classi.
Questo è esattamente ciò che faremo con il modello di regressione logistica.
Funzione logistica
Prima di addentrarci nella regressione logistica, diamo un'occhiata alla funzione logistica, il cuore della tecnica di regressione logistica.
La funzione logistica è definita come:
funzione = 1 / (1 + e^-x)
Dove e è la costante numerica del numero di Eulero e x è un input che inseriamo nella funzione.
Inseriamo una serie di numeri da -5 a +5 e vediamo come la funzione logistica li trasforma:
X Transformed
-5 0.006692850924
-4 0.01798620996
-3 0.04742587318
-2 0.119202922
-1 0.2689414214
0 0.5
1 0.7310585786
2 0.880797078
3 0.9525741268
4 0.98201379
5 0.9933071491
Puoi vedere che tutti gli input sono stati trasformati nell'intervallo [0, 1] e che i numeri negativi più piccoli hanno prodotto valori vicini a zero e i numeri positivi più grandi hanno prodotto valori vicini a uno. Puoi anche vedere quello 0 trasformato in 0,5 o nel punto medio del nuovo intervallo.
Da ciò possiamo vedere che finché il nostro valore medio è zero, possiamo inserire valori positivi e negativi nella funzione e ottenere sempre una trasformazione coerente nel nuovo intervallo.
Modello di regressione logistica
Il modello di regressione logistica prende input a valori reali e fa una previsione sulla probabilità che l'input appartenga alla classe di default (classe 0).
Se la probabilità è > 0,5 possiamo prendere l'output come una previsione per la classe predefinita (classe 0), altrimenti la previsione è per l'altra classe (classe 1).
Per questo set di dati, la regressione logistica ha tre coefficienti proprio come la regressione lineare, ad esempio:
uscita = b0 + b1*x1 + b2*x2
Il compito dell'algoritmo di apprendimento sarà quello di scoprire i valori migliori per i coefficienti (b0, b1 e b2) in base ai dati di addestramento.
A differenza della regressione lineare, l'output viene trasformato in una probabilità utilizzando la funzione logistica:
p(classe=0) = 1 / (1 + e^(-output))
Nel tuo foglio di lavoro questo sarebbe scritto come:
p(classe=0) = 1 / (1 + EXP(-uscita))
Regressione logistica per discesa stocastica a gradiente
Possiamo stimare i valori dei coefficienti usando la discesa del gradiente stocastico.
Questa è una procedura semplice che può essere utilizzata da molti algoritmi nell'apprendimento automatico. Funziona utilizzando il modello per calcolare una previsione per ogni istanza nel set di addestramento e calcolando l'errore per ogni previsione.
Possiamo applicare la discesa stocastica del gradiente al problema di trovare i coefficienti per il modello di regressione logistica come segue:
Data ogni istanza di formazione:
Calcola una previsione utilizzando i valori correnti dei coefficienti.
Calcola nuovi valori di coefficiente in base all'errore nella previsione.
Il processo viene ripetuto finché il modello non è sufficientemente accurato (ad es. l'errore scende a un livello desiderabile) o per iterazioni di un numero fisso. Continui ad aggiornare il modello per le istanze di addestramento e la correzione degli errori fino a quando il modello non è sufficientemente accurato. Orc non può essere reso più accurato. Spesso è una buona idea randomizzare l'ordine delle istanze di addestramento mostrate al modello per confondere le correzioni apportate.
Aggiornando il modello per ogni modello di formazione, chiamiamo questo apprendimento online. È anche possibile raccogliere tutte le modifiche al modello su tutte le istanze di addestramento ed effettuare un aggiornamento di grandi dimensioni. Questa variazione è chiamata apprendimento in batch e potrebbe essere una bella estensione a questo tutorial se ti senti avventuroso.
Regressione logistica per discesa stocastica a gradiente
Iniziamo assegnando 0,0 a ciascun coefficiente e calcolando la probabilità della prima istanza di addestramento che appartiene alla classe 0.
B0 = 0,0
B1 = 0,0
B2 = 0,0
La prima istanza di addestramento è: x1=2,7810836, x2=2,550537003, Y=0
Usando l'equazione sopra possiamo inserire tutti questi numeri e calcolare una previsione:
previsione = 1 / (1 + e^(-(b0 + b1*x1 + b2*x2)))
previsione = 1 / (1 + e^(-(0.0 + 0.0*2.7810836 + 0.0*2.550537003)))
previsione = 0,5
Calcola nuovi coefficienti
Possiamo calcolare i nuovi valori dei coefficienti usando una semplice equazione di aggiornamento.
b = b + alfa * (y – previsione) * previsione * (1 – previsione) * x
Dove b è il coefficiente che stiamo aggiornando e la previsione è l'output di una previsione utilizzando il modello.
Alpha è il parametro che è necessario specificare all'inizio dell'esecuzione dell'addestramento. Questo è il tasso di apprendimento e controlla quanto i coefficienti (e quindi il modello) cambiano o apprendono ogni volta che viene aggiornato. Tassi di apprendimento più elevati vengono utilizzati nell'apprendimento online (quando aggiorniamo il modello per ogni istanza di formazione). I buoni valori potrebbero essere compresi tra 0,1 e 0,3. Usiamo un valore di 0,3.
Noterai che l'ultimo termine nell'equazione è x, questo è il valore di input per il coefficiente. Noterai che il B0 non ha un input. Questo coefficiente è spesso chiamato bias o intercetta e possiamo presumere che abbia sempre un valore di input di 1,0. Questa ipotesi può aiutare quando si implementa l'algoritmo utilizzando vettori o array.
Aggiorniamo i coefficienti utilizzando i valori di previsione (0,5) e coefficiente (0,0) della sezione precedente.
b0 = b0 + 0,3 * (0 – 0,5) * 0,5 * (1 – 0,5) * 1,0
b1 = b1 + 0,3 * (0 – 0,5) * 0,5 * (1 – 0,5) * 2,7810836
b2 = b2 + 0,3 * (0 – 0,5) * 0,5 * (1 – 0,5) * 2,550537003
Quindi
b0 = -0,0375
b1 = -0,104290635
b2 = -0,09564513761
Ripetere il processo
Possiamo ripetere questo processo e aggiornare il modello per ogni istanza di training nel set di dati.
Una singola iterazione del set di dati di addestramento è chiamata epoch. È comune ripetere la procedura di discesa del gradiente stocastico per un numero fisso di epoche.
Alla fine dell'epoca è possibile calcolare i valori di errore per il modello. Poiché si tratta di un problema di classificazione, sarebbe utile avere un'idea di quanto sia accurato il modello ad ogni iterazione.
Il grafico sottostante mostra un grafico della precisione del modello su 10 epoche.
Puoi vedere che il modello raggiunge molto rapidamente una precisione del 100% sul set di dati di addestramento.
I coefficienti calcolati dopo 10 epoch di discesa stocastica del gradiente sono:
b0 = -0,4066054641
b1 = 0,8525733164
b2 = -1.104746259
Fare previsioni
Ora che abbiamo addestrato il modello, possiamo usarlo per fare previsioni.
Possiamo fare previsioni sul set di dati di addestramento, ma potrebbero benissimo trattarsi di nuovi dati.
Utilizzando i coefficienti sopra appresi dopo 10 epoche, possiamo calcolare i valori di output per ciascuna istanza di addestramento:
0.2987569857
0.145951056
0.08533326531
0.2197373144
0.2470590002
0.9547021348
0.8620341908
0.9717729051
0.9992954521
0.905489323
Queste sono le probabilità di ogni istanza appartenente a class=0. Possiamo convertirli in valori di classe nitidi usando:
previsione = SE (uscita < 0,5) Allora 0 Altrimenti 1
Con questa semplice procedura possiamo convertire tutti gli output in valori di classe:
0
0
0
0
0
1
1
1
1
1
Infine, possiamo calcolare l'accuratezza per il modello sul set di dati di addestramento:
accuratezza = (previsioni corrette / num previsioni effettuate) * 100 precisione = (10/10) * 100 precisione = 100%
Riepilogo
In questo post hai scoperto come implementare la regressione logistica da zero, passo dopo passo. Hai imparato:
Come calcolare la funzione logistica.
Come apprendere i coefficienti per un modello di regressione logistica utilizzando la discesa del gradiente stocastico.
Come fare previsioni usando un modello di regressione logistica.
Hai domande su questo post o sulla regressione logistica? Lascia un commento e fai la tua domanda, faremo del nostro meglio per rispondere.
Kommentare