Machine learning
Premessa
Come visto nella lezione precedente il Machine Learning è una branca della IA che consente di creare modelli computazionali in grado di eseguire in automatico classificazioni o previsioni di dati a partire da un certo input. Classificazione o previsione sono due modi diversi di utilizzare lo stesso modello: entrambi si basano sul fatto che il modello è in grado di dare una rappresentazione generale dei dati che riceve in input e poi è in grado in base a questo di indicare l’etichetta associata a questi dati (classificazione), o produrre dati associati ai dati di input (regressione).
I modelli sono creati tramite apprendimento. Nella sua forma più comune, l’apprendimento supervisionato, esso consiste nel preparare un algoritmo che riceve dei set di dati di input ed una etichetta associata, tutti nella stessa forma (ad esempio possono essere vettori o numeri reali, oppure anche immagini, video, testi, ecc.). L’algoritmo internamente inserisce tutti gli esempi nel suo modello computazionale e cerca di creare una correlazione tra input ed output. Questa operazione viene ripetuta di norma molte volte, anche ripetendo gli stessi esempi, fino a quando il modello raggiunge una capacità di adattamento tale ai dati da poter essere in grado finalmente di ricevere dati mai visti, e produrre un output coerente col modello.
Facciamo un esempio: poniamo di voler creare un classificatore di recensioni di prodotti di un ecommerce. E’ un problema ad alta estensionalità, perché le recensioni sono scritte in linguaggio naturale.
Al sistema vogliamo passare un CSV in questa forma (i dati in un sistema reale sono molti di più nell’ordine delle migliaia o anche centinaia di migliaia di recensioni):
Discreto. Funziona bene;3
Molto soddisfatto. Bel prodotto;4
Perfetto. Consigliatissimo;5
tutto ok. Discreto;3
Non male. Funziona bene;3
Non mi piace. Spedizione nei tempi;2
Consigliato. Perfetto;5
Funziona bene. Non male;3
Bellissimo. Perfetto;5
Non male dai. Pensavo peggio;3Dove la prima colonna rappresenta il testo, nella seconda la classificazione numerica, da 1 a 5.
L’obiettivo è quello di fare in modo di addestrare il modello e poi di dargli un input non classificato:
Consigliato. Funziona in modo discreto.Il sistema deve capire da solo che punteggio associare a questa recensione.
Qui possiamo capire la differenza tra un essere umano ed una macchina. Una persona reale è in grado infatti di capire che valore dare alla parola “consigliato” ed alla frase “funziona in modo discreto”, in particolare i due aggettivi “consigliato” e “discreto” consentono di dare un punteggio di 3 o 4, in base all’accezione che diamo ai due aggettivi “consigliato” o “discreto”.
La macchina non ha però questo contesto di esperienza: va addrestrata a ricevere un flusso di parole che hanno potenziali contraddizioni tra loro, che non sono utili prese da sole (“in modo”), che possono avere significati molto diversi (“funziona” non ha senso compiuto da sola), e così via.
L’addestramento serve proprio a questo, e si basa su algoritmi di inferenza statistica, e funzioni matematiche/logiche che devono “ridurre la dimensionalità” di un vettore di parole, ovvero di lettere, ovvero di codici numerici, in un codice unico che sintetizza l’intero flusso di input.
Vedremo quindi un insieme di algoritmi che vanno ad affrontare questo tipo di problematica.
Regressione lineare
Prendiamo un insieme di coppie di valori, rappresentabili su un piano cartesiano, come il numero di ore studiate da uno studente per prendere un voto ad una interrogazione:
Studente,Ore_di_Studio,Voto
1,1.2,3.2
2,1.5,3.2
3,2.0,3.9
4,2.5,4.7
5,2.8,4.2
6,3.2,4.5
7,3.5,5.6
8,4.0,5.6
9,4.5,5.5
10,5.0,6.3
11,5.2,6.1
12,5.8,6.5
13,6.2,7.2
14,6.8,6.7
15,7.2,7.1
16,7.8,8.1
17,8.2,8.3
18,8.5,9.1
19,9.0,9.0
20,9.5,9.2Come possiamo vedere le ore di studio sono il dato di input, e il voto conseguito è il dato verificato. Andiamo a rappresentarli su un diagramma:

Vogliamo creare un modello che dato un certo numero di ore di studio, ci stima che voto potremmo prendere. In pratica occorre individuare una retta y = mx + q che ha una distanza media minima da ciascun punto rappresentato. Ovvero vogliamo trovare questa:

Per calcolarla si usa il metodo dei minimi quadrati, che calcola la pendenza della retta a partire dalla dagli scostamenti (scarti) medi, con questa formula:
In pratica, con il dataset dei valori che conosciamo, calcoliamo la pendenza media (m) e lo scostamento (q) della retta che ha la distanza media minima da ciascun punto. Si usa il quadrato degli scostamenti perché essi possono essere negativi o positivi (al quadrato si misura il valore assoluto).
Un modello computazionale viene addestrato passando i valori conosciuti. Ad ogni valore aggiunto vengono ricalcolati m e q che stabiliscono la relazione media tra ore di studio e voto conseguito.
Al termine dell’addestramento, possiamo:
- stimare tramite regressione il voto in base ad un certo input (numero di ore);
- classificare il numero di ore in un insieme: ad esempio dire se il numero di ore studiate è sufficiente per prendere 6.
La regressione è uno strumento potente per analisi e stime di dati legati a coppie, non solo i voti ma i dati economici, di borsa, climatici, sanitari, ecc.
Rientra perfettamente nel contesto dell’intelligenza artificiale, perché si tratta della costruzione di un modello computazionale che in base ad una serie di dati di addestramento, è in grado di fare classificazioni o previsioni.
KNN
Ma cosa succede quando anziché avere un dato singolo, si ha una tupla (elenco di valori) e si vuole fare comunque classificazione/predizione?
Un esempio di applicazione è la capacità di predire se uno studente sarà promosso in base ai voti che ha conseguito nelle singole materie. In addestramento il sistema predisporrà un modello sulla base degli esempi di un certo numero di studenti di cui si conosce già l’esito:
italiano,storia,matematica,inglese,informatica,scienze,fisica,esito
5,8,5,8,5,7,4,0
6,6,5,5,4,5,7,0
8,6,6,5,4,7,6,1
8,4,8,6,4,5,7,1
8,8,7,8,5,6,7,1
8,6,5,4,5,6,5,0
7,5,6,8,4,8,7,1
6,8,8,5,4,4,8,1
5,7,6,7,7,6,7,1
5,4,4,8,8,5,6,0Dove l’esito è 0 (bocciato) o 1 (promosso). Evidentemente in questo caso non si può fare una regressione.
Il modello è progettato per rispondere a questa domanda: “che esito ho con questi voti [5,6,6,4,7,8,6]?”
In questo caso addestriamo un modello di tipo KNN (“K-Nearest Neighbor”). Questo modello prende l’intero dataset a disposizione, e li ordina in base alla distanza euclidea dallo studente che sta prendendo in esame. Ovvero applica questa funzione
Ottenendo quindi:
italiano,storia,matematica,inglese,informatica,scienze,fisica,esito,distanza
5,7,6,7,7,6,7,1,3.87
8,6,5,4,5,6,5,0,4.36
8,6,6,5,4,7,6,1,4.47
6,6,5,5,4,5,7,0,4.69
5,8,5,8,5,7,4,0,5.48
7,5,6,8,4,8,7,1,5.57
5,4,4,8,8,5,6,0,5.83
8,8,7,8,5,6,7,1,6.24
6,8,8,5,4,4,8,1,6.24
8,4,8,6,4,5,7,1,6.32In base alla distanza A questo punto si sceglie K dispari e si valuta i primi K vicini, come in questo grafico:

Siccome la maggioranza è stata bocciata, è più probabile che questo studente sarà bocciato.
Naturalmente questo modello funziona meglio con un dataset particolarmente numeroso, così da poter scegliere un valore K più grande. Ad esempio con K=7 e 50 studenti: con un campione più ampio lo studente verrebbe probabilmente promosso.

Come si può vedere questo modello è semplice da implementare, e la numerosità dei casi di input aiuta a fornire predizioni più precise, perché diminuisce la distanza media dai K studenti più vicini. Non tiene però conto di alcuni scenari reali, ovvero ad esempio che probabilmente alcune materie contano più di altre nella valutazione finale.
Considerazioni su machine learning
Nelle prossime lezioni vedremo altri modelli di machine learning, ma prima di esaminarli, ci sono alcuni aspetti generali del machine learning che vanno presi in considerazione.
I sistemi di apprendimento automatico, quando usano esempi presi dal mondo reale, non hanno mai una efficacia al 100%. Si possono ottenere risultati molto buoni, ma è impossibile raggiungere la certezza che il sistema di machine learning sia sempre perfetto.
Questo per diverse ragioni:
- i modelli computazionali sono sempre modelli statistici. Memorizzano esempi e sulla base di questi configurano i propri algoritmi di funzionamento sulla base di essi. Il set di dati (dataset) potrebbe essere scelto male o essere insufficiente e quindi il modello potrebbe quindi essere inefficace per dati che non ha mai visto e che non rientrano negli esempi visti;
- il modo in cui è organizzato il modello parte da un insieme di considerazioni preliminari sui dati: ad esempio nella regressione si suppone che i dati siano rappresentabili come gestiti da una retta. Ma siamo sicuri che sia così? Molti studenti potrebbero obiettare invece che per ottenere un voto molto alto bisogna studiare in proporzione molto di più, e quindi probabilmente ha più senso un modello a curva.
Analogamente, KNN presuppone che tutti i voti abbiano pari peso, ma sappiamo bene che non è così nella realtà, e quindi il calcolo della funzione di distanza dovrebbe essere in qualche modo pesato.
Questo tipo di problematica si chiama bias, ovvero “pregiudizio”, da parte di chi addestra il modello. Il bias non si riduce solo alla scelta del modello, ma anche nella scelta degli esempi, che potrebbero non rappresentare tutta la realtà di riferimento. Clamoroso fu l’errore di classificazione di Google che scambio delle persone di colore per delle scimmie! Il problema sta non tanto nei dati ma proprio nell’algoritmo di addestramento, inefficace a risolvere quel tipo di problema. - nella classificazione si può incorrere nel problema dei falsi positivi o i falsi negativi, dovuto al fatto che i dati possono anche essere ben scelti, ma essere strutturati in modo inefficace. Ad esempio si pensi ad un sistema che valuta da una TAC se una persona ha un tumore: il falso positivo può condurre ad un approfondimento per verificare quel caso specifico, ma un falso negativo potrebbe far scartare un potenziale tumore.
- va poi considerata la varianza, essa è invece legata al problema dell’overfitting: il modello si adatta molto bene ai dati di addestramento, ma si adatta male a dati che non ha mai visto. E’ il caso già noto del tacchino induttivista, che a partire un sottoinsieme di premesse arriva ad una conclusione logica, ma sbagliata, perché non ha avuto abbastanza esempi di da analizzare.
Questi problemi sono ad oggi aperti e non risolti, ed è uno dei settori di ricerca più importanti del machine learning.
