top of page

Apprendimento non Supervisionato con Python

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".


Apprendimento non Supervisionato con Python
Apprendimento non Supervisionato con Python

Prerequisiti :

  • 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


Apprendimento supervisionato vs non supervisionato

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.

Apprendimento supervisionato vs non supervisionato
Apprendimento supervisionato vs 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.


Preparazione dei dati per l'apprendimento non supervisionato con python

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()


Clustering e Apprendimento non supervisionato con python

Nel clustering, i dati sono divisi in diversi gruppi con caratteristiche simili.


Clustering e Apprendimento non supervisionato con python
Clustering e Apprendimento non supervisionato con python

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.

K-MEANS CLUSTERING IN PYTHON

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


CLUSTERING GERARCHICO IN PYTHON

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



DIFFERENZA TRA K-MEANS E CLUSTERING GERARCHICO

  • 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.


CLUSTERING T-SNE IN PYTHON

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.

CLUSTERING DBSCAN IN PYTHON

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


Applicazioni dell'apprendimento senza supervisione

  • 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 " :























PCR (5).gif
PCR (4).gif
PCR.gif
PCR.gif
PCR.gif
PCR.gif
PCR (5).gif
3.gif
Vediamo se riesci a cliccarmi ! Nascondo una Sorpresa... (2).png

Ciao 

🤗 Articoli consigliati dalla nostra
Intelligenza Artificiale in base ai tuoi interessi

Correlazione Alta

Correlazione Media

Correlazione Bassa

Iscriviti

VUOI DIVENTARE UN MEMBRO DI INTELLIGENZA ARTIFICIALE ITALIA GRATUITAMENTE E TRARNE I SEGUENTI BENEFICI?

Corsi Gratis

più di 150 lezioni online

Dataset Gratis

più di 150o dataset

Ebook Gratis

più di 10 libri da leggere

Editor Gratis

un editor python online

Progetti Gratis

più di 25 progetti python

App Gratis

4 servizi web con I.A.

Unisciti Ora a oltre
1.000.000
di lettori e appassionanti d'I.A.

Tutto ciò che riguarda l'intelligenza Artificiale, in unico posto, in italiano e gratis.

MEGLIO DI COSI' NON SI PUO' FARE

Dopo l'iscrizione riceverai diversi Regali

VUOI SCRIVERE ARTICOLI INSIEME A NOI.

Grazie

bottom of page