Corso
Introduzione
L'apprendimento automatico supervisionato è un tipo di apprendimento automatico che impara la relazione tra input e output. Gli input sono noti come feature o "variabili X" e l'output è generalmente indicato come target o "variabile y". Il tipo di dati che contiene sia le feature sia il target è noto come dati etichettati. È la differenza chiave tra apprendimento supervisionato e non supervisionato, due tipologie di machine learning molto diffuse. In questo tutorial imparerai:
- Cos'è l'apprendimento automatico supervisionato
- Apprendimento supervisionato vs. non supervisionato
- Apprendimento semi-supervisionato
- Algoritmi di apprendimento supervisionato:
- Regressione lineare
- Albero decisionale
- K-nearest neighbors
- Random forest
- Naive Bayes
- Esempio di codice Python per l'apprendimento supervisionato
Cos'è l'apprendimento automatico supervisionato?
L'apprendimento automatico supervisionato impara schemi e relazioni tra dati di input e di output. È definito dal suo uso di dati etichettati. Un dato etichettato è un dataset che contiene molti esempi di Feature e Target. L'apprendimento supervisionato utilizza algoritmi che imparano la relazione tra Feature e Target a partire dal dataset. Questo processo è detto Training o Fitting.
Esistono due tipi di algoritmi di apprendimento supervisionato:
- Classificazione
- Regressione

Fonte immagine: https://www.mathworks.com/help/stats/machine-learning-in-matlab.html
Classificazione
La classificazione è un tipo di apprendimento supervisionato in cui gli algoritmi imparano dai dati a prevedere un risultato o un evento futuro. Per esempio:
Una banca può avere un dataset di clienti contenente cronologia creditizia, prestiti, dettagli sugli investimenti, ecc. e potrebbe voler sapere se un cliente andrà in default. Nei dati storici avremo Feature e Target.
- Le Feature saranno attributi di un cliente come cronologia creditizia, prestiti, investimenti, ecc.
- Il Target rappresenterà se un determinato cliente è andato in default in passato (di solito indicato con 1 o 0 / True o False / Sì o No).
Gli algoritmi di classificazione vengono utilizzati per prevedere esiti discreti; se l'esito può assumere due valori possibili come True o False, Default o No Default, Sì o No, si parla di classificazione binaria. Quando l'esito contiene più di due valori possibili, si parla di classificazione multiclasse. Esistono molti algoritmi di machine learning utilizzabili per compiti di classificazione. Alcuni di questi sono:
- Regressione logistica
- Classificatore ad albero decisionale
- Classificatore K-nearest neighbor
- Classificatore random forest
- Reti neurali
Regressione
La regressione è un tipo di apprendimento supervisionato in cui gli algoritmi imparano dai dati a prevedere valori continui come vendite, stipendio, peso o temperatura. Per esempio:
Dato un dataset contenente feature di una casa come dimensione del lotto, numero di camere da letto, numero di bagni, quartiere, ecc., e il prezzo della casa, un algoritmo di regressione può essere addestrato per imparare la relazione tra le feature e il prezzo dell'immobile.
Esistono molti algoritmi di machine learning utilizzabili per compiti di regressione. Alcuni di questi sono:
- Regressione lineare
- Regressore ad albero decisionale
- Regressore K-nearest neighbor
- Regressore random forest
- Reti neurali
Fonte immagine: https://static.javatpoint.com/tutorial/machine-learning/images/regression-vs-classification-in-machine-learning.png
Apprendimento supervisionato vs. non supervisionato
Tipo di dati
La principale differenza tra apprendimento supervisionato e apprendimento automatico non supervisionato è che l'apprendimento supervisionato utilizza dati etichettati. I dati etichettati sono dati che contengono sia le Feature (variabili X) sia il Target (variabile y).
Nell'apprendimento supervisionato, l'algoritmo impara iterativamente a prevedere la variabile target date le feature e si corregge per fornire la risposta corretta al fine di "imparare" dal dataset di training. Questo processo è detto Training o Fitting. I modelli supervisionati in genere producono risultati più accurati rispetto a quelli non supervisionati, ma richiedono un intervento umano iniziale per identificare correttamente i dati. Se le etichette nel dataset non sono corrette, gli algoritmi supervisionati impareranno le informazioni sbagliate.
I modelli non supervisionati, invece, lavorano in modo autonomo per identificare la struttura intrinseca di dati non etichettati. È importante tenere a mente che la validazione delle variabili di output richiede comunque un certo livello di coinvolgimento umano. Per esempio, un modello non supervisionato può determinare che i clienti che fanno acquisti online tendono a comprare più articoli della stessa categoria nello stesso momento. Tuttavia, un analista umano dovrebbe verificare che abbia senso che un motore di raccomandazione abbini l'Articolo X con l'Articolo Y.
Casi d'uso
Due casi d'uso rilevanti per l'apprendimento supervisionato sono la classificazione e la regressione. In entrambi i compiti un algoritmo supervisionato impara dai dati di training a prevedere qualcosa. Se la variabile prevista è discreta come "Sì" o "No", 1 o 0, "Frode" o "Nessuna frode", allora serve un algoritmo di classificazione. Se la variabile prevista è continua come vendite, costo, stipendio, temperatura, ecc., allora serve un algoritmo di regressione.
Il clustering e il rilevamento di anomalie sono due casi d'uso importanti nell'apprendimento non supervisionato. Per saperne di più sul clustering, dai un'occhiata a questo articolo. Se vuoi approfondire l'apprendimento non supervisionato, scopri questo interessante corso di DataCamp. Imparerai a raggruppare, trasformare, visualizzare ed estrarre insight da dataset non etichettati usando scikit-learn e scipy.
Obiettivi
L'obiettivo dell'apprendimento supervisionato è prevedere risultati su nuovi dati basandosi su un modello che ha imparato da un dataset di training etichettato. Il tipo di risultati che puoi aspettarti è noto in anticipo sotto forma di dati etichettati. L'obiettivo di un algoritmo non supervisionato è ricavare insight da grandi quantità di dati senza etichette esplicite. Anche gli algoritmi non supervisionati imparano dal dataset di training, ma i dati di training non contengono etichette.
Complessità
L'apprendimento automatico supervisionato è più semplice rispetto a quello non supervisionato. I modelli non supervisionati in genere richiedono un ampio set di training per ottenere i risultati desiderati, rendendoli computazionalmente complessi.

Fonte immagine: https://www.sharpsightlabs.com/blog/supervised-vs-unsupervised-learning/
Apprendimento semi-supervisionato
L'apprendimento semi-supervisionato è un tipo relativamente nuovo e meno diffuso di machine learning che, durante l'addestramento, combina una grande quantità di dati non etichettati con una piccola quantità di dati etichettati. L'apprendimento semi-supervisionato si colloca tra l'apprendimento supervisionato (con dati di training etichettati) e quello non supervisionato (dati di training non etichettati).
L'apprendimento semi-supervisionato offre molte applicazioni reali. In molti settori c'è scarsità di dati etichettati. Poiché coinvolgono annotatori umani, attrezzature specializzate o studi costosi e dispendiosi in termini di tempo, le etichette (variabile target) possono essere difficili da ottenere.
L'apprendimento semi-supervisionato ha due tipologie:

Fonte immagine: https://www.enjoyalgorithms.com/blogs/supervised-unsupervised-and-semisupervised-learning
Algoritmi di apprendimento supervisionato
In questa sezione vedremo alcuni algoritmi comuni per l'apprendimento supervisionato:
Regressione lineare
La regressione lineare è uno degli algoritmi di machine learning più semplici disponibili; viene utilizzata per imparare a prevedere un valore continuo (variabile dipendente) in base alle feature (variabili indipendenti) nel dataset di training. Il valore della variabile dipendente, che rappresenta l'effetto, è influenzato dalle variazioni della variabile indipendente.
Se ricordi la "retta di regressione" dei tempi della scuola, è esattamente ciò che è la regressione lineare. Prevedere il peso di una persona in base alla sua altezza è un esempio semplice di questo concetto.

Fonte immagine: http://primo.ai/index.php?title=Linear_Regression
|
PRO |
CONTRO |
|
Semplice, facile da capire e interpretare |
Facile da overfittare |
|
Funziona molto bene per dati linearmente separabili |
Presuppone linearità tra feature e variabile target. |
Regressione logistica
La regressione logistica è un caso particolare della regressione lineare in cui la variabile target (y) è discreta/categorica, ad esempio 1 o 0, True o False, Sì o No, Default o No Default. Si usa il logaritmo degli odds come variabile dipendente. Usando una funzione logit, la regressione logistica fa previsioni sulla probabilità che si verifichi un evento binario.

Per approfondire l'argomento, dai un'occhiata a questo ottimo articolo di DataCamp: Understanding Logistic Regression in Python Tutorial.
|
PRO |
CONTRO |
|
Semplice, facile da capire e interpretare |
Overfitting |
|
Ben calibrata per le probabilità in output |
Fa fatica a catturare relazioni complesse |
Albero decisionale
Gli algoritmi ad albero decisionale sono un tipo di modello strutturato ad albero di probabilità che separa iterativamente i dati per classificare o fare previsioni in base ai risultati del set di domande precedente. Il modello analizza i dati e fornisce risposte alle domande per aiutarti a prendere decisioni più informate.
Potresti, per esempio, usare un albero decisionale in cui le risposte Sì o No servono per scegliere una determinata specie di uccello in base a elementi come il piumaggio, la capacità di volare o nuotare, il tipo di becco, e così via.

Fonte immagine: https://aigraduate.com/decision-tree-visualisation---quick-ml-tutorial-for-beginners/
|
PRO |
CONTRO |
|
Molto intuitivo e facile da spiegare |
Instabile: un piccolo cambiamento nei dati di training può causare grandi differenze nelle previsioni. |
|
Gli alberi decisionali non richiedono molta preparazione dei dati come alcuni modelli lineari. |
Soggetti a overfitting |
Per saperne di più sul Machine Learning con modelli basati su alberi in Python, dai un'occhiata a questo corso interessante di DataCamp. In questo corso imparerai a usare modelli basati su alberi e ensemble per regressione e classificazione con scikit-learn.
K-nearest neighbors
K-nearest neighbors è un metodo statistico che valuta la vicinanza di un punto dati a un altro per decidere se i due punti possono essere raggruppati insieme. La vicinanza dei punti dati rappresenta il grado in cui sono simili tra loro.
Per esempio, supponiamo di avere un grafico con due gruppi distinti di punti dati posizionati vicino tra loro e chiamati rispettivamente Gruppo A e Gruppo B. Ciascuno di questi gruppi sarebbe rappresentato da un insieme di punti sul grafico. Quando aggiungiamo un nuovo punto, l'appartenenza di quell'istanza dipenderà da quale gruppo è più vicino al nuovo punto.

Fonte: https://towardsdatascience.com/getting-acquainted-with-k-nearest-neighbors-ba0a9ecf354f
|
PRO |
CONTRO |
|
Non fa assunzioni sui dati |
Richiede molto tempo per l'addestramento |
|
Intuitivo e semplice |
KNN funziona bene con un numero ridotto di feature ma, man mano che il numero di feature cresce, fatica a prevedere con precisione. |
Random forest
La random forest è un altro esempio di algoritmo basato su alberi, proprio come gli alberi decisionali. A differenza dell'albero decisionale, che consiste di un singolo albero, la random forest utilizza più alberi decisionali per prendere decisioni, creando di fatto una foresta di alberi.
Lo fa combinando diversi modelli per produrre previsioni e può essere usata sia per classificazione sia per regressione.

Fonte: https://blog.tensorflow.org/2021/05/introducing-tensorflow-decision-forests.html
|
PRO |
CONTRO |
|
Le random forest gestiscono facilmente relazioni non lineari nei dati. |
Difficili da interpretare a causa dei molteplici alberi. |
|
Le random forest effettuano implicitamente la selezione delle feature |
Le random forest sono computazionalmente costose per dataset di grandi dimensioni. |
Naive Bayes
Il teorema di Bayes è una formula matematica utilizzata per calcolare le probabilità condizionate, e Naive Bayes è un'applicazione di quella formula. La probabilità che un esito si verifichi dato che un altro evento è già avvenuto è detta probabilità condizionata.
Prevede che le probabilità per ciascuna classe appartengano a una specifica classe e che la classe con la probabilità più alta sia considerata la più probabile.

Fonte immagine: https://www.kdnuggets.com/2019/10/introduction-artificial-neural-networks.html
|
PRO |
CONTRO |
|
L'algoritmo è molto veloce. |
Assume che tutte le feature siano indipendenti. |
|
È semplice e facile da implementare |
L'algoritmo incontra il "problema della frequenza zero", per cui assegna probabilità zero a una variabile categoriale se la sua categoria non era presente nel dataset di training. |
Esempio di codice Python per l'apprendimento supervisionato
In questa parte useremo scikit-learn in Python per addestrare un modello di regressione logistica (classificazione) su un dataset fittizio. Trovi il Notebook completo qui.
```
# create fake binary classification dataset with 1000 rows and 10 features
from sklearn.datasets import make_classification
X, y = make_classification(n_samples = 1000, n_features = 10, n_classes = 2)
# check shape of X and y
X.shape, y.shape
# train test split
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)
# import and initialize logistic regression model
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
# fit logistic regression model
lr.fit(X_train, y_train)
# generate hard predictions on test set
y_pred = lr.predict(X_test)
y_pred
# evaluate accuracy score of the model
from sklearn.metrics import accuracy_score
accuracy_score(y_test, y_pred)
```
Se vuoi imparare l'apprendimento supervisionato in R, dai un'occhiata a questo corso di DataCamp: Supervised Learning in R. In questo corso imparerai le basi del machine learning per la classificazione nel linguaggio R.
Conclusione
Negli ultimi anni il machine learning ha cambiato radicalmente il modo in cui facciamo business. Un'innovazione radicale che distingue il machine learning da altre strategie di automazione è l'abbandono della programmazione basata su regole. Grazie alle tecniche di apprendimento supervisionato, gli ingegneri possono sfruttare i dati senza addestrare esplicitamente le macchine a risolvere i problemi in un modo specifico.
Nell'apprendimento supervisionato, la soluzione attesa a un problema potrebbe non essere nota per i dati futuri, ma può essere nota e catturata in un dataset storico; il compito degli algoritmi di apprendimento supervisionato è imparare quella relazione dai dati storici per prevedere un esito, un evento o un valore in futuro.
In questo articolo abbiamo costruito una comprensione di base di cosa sia l'apprendimento supervisionato e di come differisca da quello non supervisionato. Abbiamo anche rivisto alcuni algoritmi comuni nell'apprendimento supervisionato. Tuttavia, ci sono molte cose di cui non abbiamo parlato, come la valutazione dei modelli, la cross-validation o l'ottimizzazione degli iperparametri. Se vuoi approfondire uno di questi argomenti e potenziare ulteriormente le tue competenze, dai un'occhiata a questi corsi interessanti:
Domande frequenti
Quali sono due tipi comuni di apprendimento supervisionato?
Classificazione e regressione sono due tipi comuni di apprendimento supervisionato. La classificazione si usa per prevedere esiti discreti come "Promosso" o "Bocciato", "True" o "False", "Default" o "No Default". La regressione, invece, si usa per prevedere quantità o valori continui come vendite, stipendio, costo, ecc.
Qual è la differenza principale tra apprendimento supervisionato e non supervisionato?
La differenza principale tra apprendimento supervisionato e non supervisionato riguarda i dati. Per l'apprendimento supervisionato devi avere dati etichettati, mentre per quello non supervisionato non servono dati etichettati.
La previsione di serie storiche è apprendimento supervisionato?
Sì, la previsione di serie storiche è apprendimento supervisionato, dove si prevede il valore successivo data una sequenza di numeri. È un compito di apprendimento supervisionato.
Il Natural Language Processing (NLP) è apprendimento supervisionato o non supervisionato?
Può essere entrambe le cose. Dipende da come è formulato il problema. Per esempio, prevedere il tipo di documento testuale è con tutta probabilità un compito supervisionato; d'altra parte, se il caso d'uso è raggruppare documenti simili in base al testo contenuto nel documento, questo caso specifico è noto come Topic Modeling ed è completamente non supervisionato.
Il clustering è apprendimento supervisionato o non supervisionato?
Per i compiti di clustering non servono dati etichettati, quindi è apprendimento non supervisionato.
Esistono algoritmi diversi per l'apprendimento supervisionato e non supervisionato?
Sì, gli algoritmi sono completamente diversi.
Quali sono alcuni algoritmi comuni per l'apprendimento supervisionato?
Regressione lineare, albero decisionale, reti neurali, support vector machine sono alcuni algoritmi comuni per l'apprendimento supervisionato.


