Team I.A. Italia
6 min
L'apprendimento non supervisionato è una classe di tecniche di apprendimento automatico (ML) utilizzate per trovare modelli nei dati. I dati forniti agli algoritmi non supervisionati non sono etichettati, il che significa che vengono fornite solo le variabili di input ( x ) senza variabili di output corrispondenti. Nell'apprendimento non supervisionato, gli algoritmi sono lasciati soli a scoprire strutture interessanti nei dati.
Yan Lecun, vicepresidente e scienziato capo dell'intelligenza artificiale di Facebook, ha affermato che l'apprendimento non supervisionato - insegnare alle macchine ad apprendere da sole senza la necessità che gli venga detto esplicitamente se tutto ciò che fanno è giusto o sbagliato - è la chiave della "vera IA".
Se non sai cosa è il Machine Learning, clicca qui
Se non conosci le principali applicazioni Machine Learning, clicca qui
Se non conosci i diversi modelli di apprendimento del M.L. , clicca qui
Nell'apprendimento supervisionato , il sistema cerca di imparare dagli esempi precedenti forniti. Nell'apprendimento non supervisionato, il sistema tenta di trovare i modelli direttamente dall'esempio fornito. Quindi, se il set di dati è etichettato, si tratta di un problema supervisionato e se il set di dati non è etichettato, allora è un problema non supervisionato.
APPRENDIMENTO SENZA SUPERVISIONE
L'apprendimento non supervisionato è un algoritmo di apprendimento automatico che ricerca modelli precedentemente sconosciuti all'interno di un set di dati che non contiene risposte etichettate e senza interazione umana. I metodi più importanti di apprendimento non supervisionato sono l'analisi dei cluster e l'analisi delle componenti principali.
Di seguito è riportata una semplice rappresentazione grafica di come è possibile visualizzare l'apprendimento supervisionato e non supervisionato.
L'immagine a destra è un esempio di apprendimento supervisionato (usiamo tecniche di regressione per trovare la linea di adattamento migliore tra le caratteristiche).
Nell'apprendimento non supervisionato gli input sono separati in base alle caratteristiche e la previsione si basa sul cluster a cui apparteneva.
Terminologia importante nel Machine Learning
Caratteristica : una variabile di input utilizzata per fare previsioni.
Previsioni: l'output di un modello quando viene fornito un esempio di input.
Esempio : una riga di un set di dati. Un esempio contiene una o più funzioni ed eventualmente un'etichetta.
Etichetta: Risultato della funzione.
Per il nostro esempio, utilizzeremo il set di dati Iris per fare previsioni. Il set di dati contiene un set di 150 record con quattro attributi: lunghezza del petalo, larghezza del petalo, lunghezza del sepalo, larghezza del sepalo e tre classi di iris: setosa, virginica e versicolor. Daremo in pasto le quattro caratteristiche del nostro fiore all'algoritmo non supervisionato e predirà a quale classe appartiene l'iride.
Usiamo la libreria scikit-learn in Python per caricare il set di dati Iris e matplotlib per la visualizzazione dei dati. Di seguito è riportato il frammento di codice per esplorare il set di dati.
#Importiamo i moduli
from sklearn import datasets
import matplotlib.pyplot as plt
# Carchiamo il dataset
iris_df = datasets.load_iris()
# Metodi disponibili
print(dir(iris_df))
# Caratteristiche
print(iris_df.feature_names)
# Targets
print(iris_df.target)
# Etichette
print(iris_df.target_names)
label = {0: 'red', 1: 'blue', 2: 'green'}
# Separiamo il dataset
x_axis = iris_df.data[:, 0]
y_axis = iris_df.data[:, 2]
# Grafici
plt.scatter(x_axis, y_axis, c=iris_df.target)
plt.show()
Nel clustering, i dati sono divisi in diversi gruppi con caratteristiche simili.
Nell'immagine sopra, la sinistra è costituita da dati grezzi senza classificazione, mentre la destra è raggruppata in base alle sue caratteristiche. Quando viene fornito un input che deve essere previsto, controlla nel cluster a cui appartiene in base alle sue caratteristiche e viene effettuata la previsione.
Il clustering K-means è un algoritmo di clustering iterativo che mira a trovare i massimi locali in ogni iterazione. Inizialmente, viene scelto il numero desiderato di cluster. Nel nostro esempio, sappiamo che sono coinvolte tre classi, quindi programmiamo l'algoritmo per raggruppare i dati in tre classi passando il parametro "n_clusters" nel nostro modello k-means. Casualmente, tre punti (input) vengono assegnati in tre cluster. Sulla base della distanza del centroide tra ciascun punto, i successivi input dati vengono segregati in cluster rispettati e i centroidi vengono ricalcolati per tutti i cluster.
Ciascun centroide di un cluster è una raccolta di valori di funzionalità che definiscono i gruppi risultanti. L'esame dei pesi delle caratteristiche del centroide può essere utilizzato per interpretare qualitativamente il tipo di gruppo rappresentato da ciascun cluster.
Importiamo il modello k-means dalla libreria scikit-learn, allestiamo funzionalità e prevediamo.
#Importiamo le librerie
from sklearn import datasets
from sklearn.cluster import KMeans
# Carichiamo il dataset
iris_df = datasets.load_iris()
# Dichiariamo il Modello
model = KMeans(n_clusters=3)
# Alleniamo il Modello
model.fit(iris_df.data)
# Prediciamo il singolo input
predicted_label = model.predict([[7.2, 3.5, 0.8, 1.6]])
# Previsioni
all_predictions = model.predict(iris_df.data)
# Stampiamo le previsioni
print(predicted_label)
print(all_predictions)
Copia il codice e incollalo nel nostro editor online per provarlo, senza dover installare nulla
Come suggerisce il nome, il clustering gerarchico è un algoritmo che costruisce una gerarchia di cluster. Questo algoritmo inizia con tutti i dati assegnati a un cluster, quindi i due cluster più vicini vengono uniti nello stesso cluster. L'algoritmo termina quando rimane un solo cluster.
Il completamento del clustering gerarchico può essere mostrato usando il dendrogramma. Ora diamo un'occhiata a un esempio di clustering gerarchico che utilizza i dati granulari.
# Importing Modules
from scipy.cluster.hierarchy import linkage, dendrogram
import matplotlib.pyplot as plt
import pandas as pd
# Dataset
seeds_df = pd.read_csv("DatasetToy.csv")
varieties = list(seeds_df.pop('grain_variety'))
samples = seeds_df.values
mergings = linkage(samples, method='complete')
dendrogram(mergings,
labels=varieties,
leaf_rotation=90,
leaf_font_size=6,
)
plt.show()
Copia il codice e incollalo nel nostro editor online per provarlo, senza dover installare nulla
Il clustering gerarchico non è in grado di gestire i big data molto bene, ma il clustering k-mean sì. Questo perché la complessità temporale di k-medie è lineare, cioè O(n) mentre quella del clustering gerarchico è quadratica, cioè O(n2).
Il clustering K-means inizia con una scelta arbitraria di cluster e i risultati generati eseguendo l'algoritmo più volte potrebbero differire. I risultati sono riproducibili nel clustering gerarchico.
K-mean funziona bene quando la forma degli ammassi è ipersferica (come un cerchio in 2D o una sfera in 3D).
K-means non consente dati rumorosi, mentre il clustering gerarchico può utilizzare direttamente il set di dati rumoroso per il clustering.
Uno dei metodi di apprendimento non supervisionato per la visualizzazione è l'incorporamento stocastico del vicino distribuito t, o t-SNE. Mappa lo spazio ad alta dimensione in uno spazio bidimensionale o tridimensionale che può quindi essere visualizzato. In particolare, modella ogni oggetto ad alta dimensione da un punto bi o tridimensionale in modo tale che oggetti simili siano modellati da punti vicini e oggetti dissimili siano modellati da punti distanti con alta probabilità.
# Importiamo le librerie
from sklearn import datasets
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
# dataset
iris_df = datasets.load_iris()
# Model
model = TSNE(learning_rate=100)
# Fitting
transformed = model.fit_transform(iris_df.data)
# Grafico 2d t-Sne
x_axis = transformed[:, 0]
y_axis = transformed[:, 1]
plt.scatter(x_axis, y_axis, c=iris_df.target)
plt.show()
Copia il codice e incollalo nel nostro editor online per provarlo, senza dover installare nulla
Qui, il set di dati Iris ha quattro caratteristiche (4d) e viene trasformato e rappresentato nella figura bidimensionale. Allo stesso modo, il modello t-SNE può essere applicato a un set di dati che ha n-caratteristiche.
Il clustering spaziale basato sulla densità di applicazioni con rumore, o DBSCAN, è un popolare algoritmo di clustering utilizzato in sostituzione di k-mean nell'analisi predittiva. Per eseguirlo non richiede un input per il numero di cluster ma è necessario regolare altri due parametri.
L'implementazione di scikit-learn fornisce un'impostazione predefinita per i parametri eps e min_samples, ma in genere ci si aspetta che tu li metta a punto. Il parametro eps è la distanza massima tra due punti dati da considerare nello stesso vicinato. Il parametro min_samples è la quantità minima di punti dati in un quartiere per essere considerato un cluster.
# Importiamo le librerie
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
from sklearn.decomposition import PCA
# Dataset
iris = load_iris()
# Model
dbscan = DBSCAN()
# Fitting
dbscan.fit(iris.data)
# PCA
pca = PCA(n_components=2).fit(iris.data)
pca_2d = pca.transform(iris.data)
# Grafico
for i in range(0, pca_2d.shape[0]):
if dbscan.labels_[i] == 0:
c1 = plt.scatter(pca_2d[i, 0], pca_2d[i, 1], c='r', marker='+')
elif dbscan.labels_[i] == 1:
c2 = plt.scatter(pca_2d[i, 0], pca_2d[i, 1], c='g', marker='o')
elif dbscan.labels_[i] == -1:
c3 = plt.scatter(pca_2d[i, 0], pca_2d[i, 1], c='b', marker='*')
plt.legend([c1, c2, c3], ['Cluster 1', 'Cluster 2', 'Noise'])
plt.title('DBSCAN finds 2 clusters and Noise')
plt.show()
Copia il codice e incollalo nel nostro editor online per provarlo, senza dover installare nulla
Analisi delle componenti principali ( PCA )
Rilevamento di anomalie
Autoencoders
Reti di credenze profonde (DBN)
Generative adversarial networks (GAN)
Mappe auto-organizzanti
Letture consigliate su " Apprendimento non Supervisionato con Python " :
Riconoscimento facciale con Python, in meno di 25 righe di codice
Come preparare i dati per il Machine Learning o apprendimento automatico
Strumenti interattivi per imparare l'apprendimento automatico
200 Domande e Risposte al Colloqui Per Data Scientist e Data Engineer