Quali sono i problemi che possono essere affrontati e risolti attraverso algoritmi di apprendimento automatico, quindi utilizzando algoritmi di machine learning? Beh, possiamo individuare almeno tre diverse categorie: alla prima fanno riferimento i cosidetti problemi di classificazione; per problema di classificazione, intendiamo un problema che consiste nel dover assegnare un oggetto, un'istanza a una tra n possibili classi. Il numero di classi è finito, ed è noto a priori. Nel caso in cui le classi siano due, abbiamo problemi di classificazione binaria, e questo è il tipico caso dei problemi di diagnosi, in cui dobbiamo verificare se c'è la presenza o l'assenza di una patologia, o magari di un guasto. Possiamo però avere anche problemi di classificazione multiclasse, in questo caso il nostro oggetto, la nostra istanza che appunto va in ingresso nel nostro sistema, può essere assegnata a più di due classi. Questo è quello che accade quando dobbiamo riconoscere, ad esempio, una cifra; in questo caso, l'oggetto può essere attribuito a una tra dieci possibili classi, per l'appunto una delle cifre che vanno da zero a nove. Analogamente, anche nel caso del riconoscimento delle lettere, vale lo stesso discorso, in questo caso le classi potranno essere anche 26 nel caso dell'alfabeto inglese, o 21 nel caso dell'alfabeto italiano. Un altro caso invece, è quello in cui dobbiamo andare ad esprimere in uscita un valore di tipo numerico: in questo caso parliamo di problemi di predizione numerica; un esempio, potrebbe essere quello di andare a indovinare l'età di una persona. In questo caso, l'oggetto, l'istanza d'ingresso al nostro sistema, è ad esempio l'immagine di una persona, il nostro sistema deve andare a determinare l'età della persona medesima, e quindi di fatto andare a esprimere un valore di tipo numerico, in questo caso, un intero, o nell'ipotesi in cui volessimo essere più precisi, anche un numero reale, immaginando di andare a specificare anche il numero di mesi. La terza categoria di problemi che possono essere risolti attraverso l'apprendimento automatico, è quello legato ai cosidetti problemi di clustering, di raggruppamento: in questo caso, il discorso è diverso perché io non conosco a priori quelle che sono le possibili classi, non a caso, nel caso dei problemi di clustering, si parla anche di "apprendimento non supervisionato", nei casi precedenti invece, l'apprendimento è di tipo supervisionato. Cosa significa questo? Nel caso di apprendimento supervisionato, durante la fase di training, e quindi la fase di addestramento, al sistema viene fornita anche quella che è l'uscita desiderata: la classe, nel caso di quelli di classificazione, o il valore numerico, nel caso di problemi di predizione numerica. Nel caso invece del clustering, questa cosa non è più vera, nel senso che io voglio andare a trovare quelli che sono i raggruppamenti naturali degli oggetti che vengono messi in ingresso al mio sistema. Facciamo un esempio per comprendere il discorso in questo caso: supponiamo di avere un insieme di utenti di un sito web, in questo caso, a scopi magari pubblicitari, io vorrei capire quali utenti sono simili tra di loro, per proporre, ad esempio, delle pubblicità mirate a queste persone; in questo caso, io non so a priori qual è il numero di gruppi, ma vorrei avere un algoritmo che automaticamente determina il numero di gruppi e assegna un utente a uno di questi gruppi. Per fare questo, è necessario quindi avere un algoritmo di clustering che possa essere in grado di raggruppare utenti tra di loro simili, e quindi in questo caso, dovrò definire necessariamente una misura di similarità , in maniera tale da poter poi effettuare nel caso in questione, ad esempio come dicevo prima, delle pubblicità mirate, che possono essere più efficienti e possono quindi far aumentare in qualche modo il vantaggio del mio sito nell'utilizzare, per l'appunto, algoritmi basati sull'apprendimento.