Regressione lineare e logistica in Python
La regressione è la forma più semplice di machine learning. La regressione lineare prevede un numero con una retta; la regressione logistica fa passare quella retta per una sigmoid per prevedere la probabilità di una risposta sì/no.
Il concetto in parole semplici
La regressione è la forma più semplice di machine learning. La regressione lineare prevede un numero con una retta; la regressione logistica fa passare quella retta per una sigmoid per prevedere la probabilità di una risposta sì/no.
Adatta una retta con i minimi quadrati, poi trasforma un punteggio in probabilità con la regressione logistica.
Idee chiave
- La regressione lineare prevede valori continui come prezzi o temperature.
- La regressione logistica prevede una probabilità per due classi.
- Entrambe si possono addestrare con la discesa del gradiente invece che con una formula chiusa.
- Il percettrone è un classificatore simile che aggiorna i pesi solo quando sbaglia.
Quando si usa?
- Capire cosa succede dentro le reti neurali e le librerie di IA.
- Imparare l'idea prima di implementarla nelle sfide corrispondenti.
- Prepararti a corsi di machine learning, colloqui e progetti.
Guardalo in azione
Fai clic sul grafico a sinistra per aggiungere punti e guarda aggiornarsi la retta migliore. A destra, cambia w e b per spostare il confine di decisione.
Codice di esempio
import math
# Linear regression: find the line that best fits the points (least squares).
xs = [1, 2, 3, 4, 5]
ys = [2.1, 3.9, 6.2, 8.1, 9.8]
mean_x, mean_y = sum(xs) / len(xs), sum(ys) / len(ys)
slope = sum((x - mean_x) * (y - mean_y) for x, y in zip(xs, ys)) / sum((x - mean_x) ** 2 for x in xs)
intercept = mean_y - slope * mean_x
print(f"line: y = {slope:.2f}x + {intercept:.2f}")
print("predict x=6:", round(slope * 6 + intercept, 2))
# Logistic regression turns a score into a probability with the sigmoid.
def predict_pass(hours_studied, weight=1.5, bias=-4.0):
return 1 / (1 + math.exp(-(weight * hours_studied + bias)))
for hours in (1, 3, 5):
p = predict_pass(hours)
print(f"{hours} hours -> pass probability {p:.2f} -> {'pass' if p >= 0.5 else 'fail'}")
Output previsto
line: y = 1.96x + 0.14
predict x=6: 11.9
1 hours -> pass probability 0.08 -> fail
3 hours -> pass probability 0.62 -> pass
5 hours -> pass probability 0.97 -> pass
Come funziona
La formula dei minimi quadrati trova la pendenza e l'intercetta che rendono minima la distanza al quadrato dai punti, ottenendo y = 1.96x + 0.14. predict_pass() calcola un punteggio dalle ore di studio e la sigmoid lo trasforma in probabilità; 0.5 è la soglia tra bocciato e promosso.
Modifica i valori ed esegui il programma nel compilatore Python online CodeUtility senza installare Python.
Esercizi pratici
Modifica gli input e verifica i casi limite prima di usare dataset più grandi.
- Cambia gli input o i pesi e prevedi l'output prima di eseguire.
- Stampa i valori intermedi per seguire ogni passo del calcolo.
- Risolvi le sfide collegate qui sotto per implementare l'idea da solo.
Esercitati con una sfida
Usa ciò che questa lezione spiega per risolvere un problema reale. Ogni sfida gira nel browser, con test immediati e una revisione dell'IA.
- Regressione lineare semplice (minimi quadrati) Trova la retta che si adatta meglio ai punti dati con le formule dei minimi quadrati. Media
- Regressione lineare con discesa del gradiente Impara pendenza e intercetta di una retta scendendo passo dopo passo lungo l'errore quadratico medio. Media
- Previsione con regressione logistica Classifica gli esempi come 0 o 1 passando una somma pesata attraverso la sigmoide e confrontandola con una soglia. Facile
- Algoritmo di apprendimento del percettrone Addestra il percettrone originale, che aggiorna i pesi solo quando sbaglia. Media