Apprendimento supervisionato
# Apprendimento supervisionato

L'apprendimento supervisionato è una tecnica di apprendimento automatico che mira a istruire un sistema informatico in modo da consentirgli di elaborare automaticamente previsioni sui valori di uscita di un sistema rispetto ad un input sulla base di una serie di esempi ideali, costituiti da coppie di input e di output, che gli vengono inizialmente forniti.

Algoritmi di apprendimento supervisionato possono essere utilizzati nei più disparati settori. Degli esempi riguardano il campo medico in cui si può prevedere lo scatenarsi di particolari crisi sulla base dell'esperienza di passati dati biometrici, l'identificazione vocale che migliora sulla base degli ascolti audio passati, l'identificazione della scrittura manuale che si perfeziona sulle osservazioni degli esempi sottoposti dall'utente.

## Descrizione

L'obiettivo di un sistema basato sull'apprendimento supervisionato è quello di produrre un'ipotesi induttiva, ossia una funzione in grado di "apprendere" dai risultati forniti durante la fase di esempio e in grado di avvicinarsi a dei risultati desiderati per tutti gli esempi non forniti. La casistica degli output può essere molto varia; ciononostante, differenzia l'apprendimento di valori quantitativi (comunemente chiamata "regressione") da valori qualitativi (chiamata "classificazione").

### Componenti logici

Dal punto di vista logico, una classica implementazione di apprendimento supervisionato è costituita da:

* Un insieme esperienza E che contiene esempi del comportamento che si desidera nel sistema. È rappresentato come un insieme di coppie di input-output.
* Degli input I che rappresentano gli input al sistema e che tipicamente sono forniti sotto forma di vettori.
* Degli output O che rappresentano le risposte del sistema e che possono assumere forma di valori continui o di etichetta numerica.
* Una funzione $h_a,$ chiamata ipotesi induttiva, che ad ogni dato in ingresso I associa l'ipotetica risposta corretta del sistema O. $h_a$ rappresenta la parte di sistema che deve cambiare per ottimizzare l'efficienza del suo comportamento.
* Un'ipotetica funzione $h_b,$ chiamata funzione obiettivo, che ad ogni dato in ingresso I associa la risposta corretta desiderata dal progettista-utilizzatore. È una formalizzazione teorica dei voleri del progettista-utilizzatore.
* Un parametro di efficienza F che rappresenta l'efficienza del sistema. Generalmente, a parità di input, consiste nella differenza di output tra $h_a$ e $h_b.$

### Funzionamento generale

Tutti gli algoritmi di apprendimento supervisionato partono dal presupposto che, se forniamo al sistema un numero adeguato di esempi, questo accumulerà un'esperienza E sufficiente da permettergli di creare una funzione $h_a$ adeguata ad approssimare la funzione $h_b$ (e quindi il comportamento desiderato da chi ha fornito gli esempi). Data la similitudine tra le funzioni $h_a$ e $h_b,$ quando proporremo al sistema dei dati in ingresso non presenti nella sua esperienza E, la funzione $h_a$ dovrebbe essere in grado di approssimare in maniera sufficientemente precisa la funzione $h_b$ e fornire delle risposte O sufficientemente soddisfacenti.

Per raggiungere questo obiettivo il sistema sfrutta spesso due principi, che sono quello della distribuzione (matematica) e quello della funzione di verosimiglianza. Una volta identificata la distribuzione matematica che lega il variare dei valori degli input ai valori degli output desiderati, il sistema sceglie i parametri che massimizzano la probabilità dei dati ed esprime la funzione di verosimiglianza appropriata.

## Considerazioni

Molti di questi algoritmi funzionano in maniera efficiente se lavorano in un mondo lineare, presupponendo che ad ingressi simili corrispondano uscite simili. Esistono molte condizioni in cui una simile approssimazione è accettabile, ma non sempre è così. La stima della funzione di verosimiglianza serve ad attenuare le problematiche che derivano dalla trattazione di problemi non completamente lineari.

Si può facilmente intuire che il funzionamento corretto ed efficiente di questi algoritmi dipende in modo significativo dall'esperienza; se si fornisce poca esperienza, l'algoritmo potrebbe non creare una funzione interna efficiente, mentre con un'esperienza eccessiva la funzione interna potrebbe divenire molto complessa tanto da rendere lenta l'esecuzione dell'algoritmo.

Questi algoritmi sono molto sensibili al rumore: anche pochi dati errati potrebbero rendere l'intero sistema non affidabile e condurlo a decisioni errate. Una soluzione a questo problema è quello di associarli a controllori che si basano sulla logica fuzzy.

Tradizionalmente i principali algoritmi sono stati:

* albero di decisione;
* regole di decisione;
* sistemi esperti.

La ricerca oggi si concentra su quelle che sono considerate le due classi principali di algoritmi possibili:

* metodi generativi;
* metodi discriminativi.

I metodi generativi si basano sulla creazione di un modello dei dati che poi viene utilizzato per predire le risposte desiderate (o dati di uscita). Esempi sono le reti bayesiane o più in generale i modelli grafici.

I metodi discriminativi, al contrario, cercano di modellare direttamente la relazione tra dati in entrata e quelli in uscita, in modo da minimizzare una funzione obiettivo (loss function in letteratura). Esempi di questo tipo di modello sono le macchine a vettori di supporto (Support Vector Machines) e più in generale i metodi basati su funzioni di kernel.

