Concetti di IA in Python

Basi della classificazione: softmax e k-nearest neighbors in Python

Classificare significa scegliere un'etichetta, come gatto o cane. Un modello può dare un punteggio per classe e lasciare che softmax lo trasformi in probabilità, oppure un metodo semplice come k-nearest neighbors può far votare gli esempi noti più vicini.

Il concetto in parole semplici

Classificare significa scegliere un'etichetta, come gatto o cane. Un modello può dare un punteggio per classe e lasciare che softmax lo trasformi in probabilità, oppure un metodo semplice come k-nearest neighbors può far votare gli esempi noti più vicini.

Trasforma i punteggi in probabilità di classe con softmax, valutali con la cross-entropy e classifica punti con i k vicini più prossimi.

Idee chiave

  • Softmax mantiene l'ordine dei punteggi e li fa sommare a 1.
  • La cross-entropy categoriale penalizza soprattutto le risposte sbagliate date con sicurezza.
  • k-NN non ha una fase di addestramento: confronta un nuovo punto con gli esempi memorizzati.
  • Naive Bayes e gli alberi decisionali (impurità di Gini, guadagno di informazione) sono altri classificatori classici.

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 in un punto qualsiasi del grafico a sinistra per classificare un nuovo punto con il voto dei suoi k vicini più prossimi. Cambia i punteggi a destra per vedere reagire softmax.

Codice di esempio

Esegui codice →
main.py
import math
from collections import Counter

# Softmax turns raw scores into probabilities that add up to 1.
def softmax(scores):
    exps = [math.exp(s - max(scores)) for s in scores]
    total = sum(exps)
    return [e / total for e in exps]

probs = softmax([2.0, 1.0, 0.1])
print("softmax:", [round(p, 3) for p in probs])
# Cross-entropy is small when the true class gets a high probability.
print("cross-entropy if class 0 is right:", round(-math.log(probs[0]), 3))

# k-nearest neighbours: label a point by a vote of the closest examples.
examples = [((1, 1), "cat"), ((1, 2), "cat"), ((5, 5), "dog"), ((6, 5), "dog"), ((5, 6), "dog")]
def knn(point, k=3):
    nearest = sorted(examples, key=lambda e: math.dist(point, e[0]))[:k]
    return Counter(label for _, label in nearest).most_common(1)[0][0]

print("(2, 1) ->", knn((2, 1)))
print("(5, 4) ->", knn((5, 4)))

Output previsto

softmax: [0.659, 0.242, 0.099]
cross-entropy if class 0 is right: 0.417
(2, 1) -> cat
(5, 4) -> dog

Come funziona

softmax() applica l'esponenziale ai punteggi e divide per la loro somma, quindi le tre probabilità sommano a 1; sottrarre prima il massimo evita l'overflow. La cross-entropy è −log della probabilità della classe corretta. knn() ordina gli esempi per distanza e fa votare i 3 più vicini.

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