Concetti di IA in Python

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

Esegui codice →
main.py
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.

  1. Cambia gli input o i pesi e prevedi l'output prima di eseguire.
  2. Stampa i valori intermedi per seguire ogni passo del calcolo.
  3. Risolvi le sfide collegate qui sotto per implementare l'idea da solo.
Esegui nell’IDE Python →

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.

Tutte le sfide