I 4 Migliori Grafici nel Machine Learning

Top 4 Graphics in Machine Learning

MACHINE LEARNING | PLOTS | PYTHON

Una guida pratica alle visualizzazioni più importanti da padroneggiare nel machine learning

Foto di Firmbee.com su Unsplash

Nel mondo dinamico del machine learning, le visualizzazioni svolgono un ruolo vitale. Sono i narratori silenziosi delle storie complesse che i dati raccontano.

In particolare, nel mondo del machine learning, la visualizzazione dei dati gioca un ruolo ancora più critico per consentirci di comprendere le strutture sottostanti dei nostri modelli e aiutarci a interpretare meglio la qualità dei nostri risultati.

In questo articolo, esploreremo cinque grafici cruciali che ogni appassionato di machine learning deve conoscere.

Grafico 1: Curva del gomito

La Curva del gomito è uno strumento eccellente utilizzato per determinare il numero ottimale di cluster in un algoritmo di clustering come K-Means.

Come suggerisce il nome, il grafico ha spesso una curva brusca (cioè il gomito), che indica il “punto dolce” in cui l’aggiunta di più cluster porta a una peggiore separazione dei cluster e risultati inferiori.

Questo grafico è indispensabile per assicurarsi che stiamo estraendo cluster significativi dai nostri dati, senza sopra-adattamento o sotto-adattamento.

In algoritmi non supervisionati che richiedono di specificare un numero predefinito di cluster (come K-Means), il metodo del gomito è fondamentale per aiutarci a identificare il numero ottimale di cluster da selezionare.

Ecco un semplice snippet di codice Python per generare una curva del gomito:

from sklearn.cluster import KMeansfrom sklearn.datasets import make_blobsimport matplotlib.pyplot as plt# Generare dati di esempio data, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)distortions = []for i in range(1, 11):    km = KMeans(n_clusters=i, random_state=0)    km.fit(data)    distortions.append(km.inertia_)# Plot the elbowplt.plot(range(1, 11), distortions, marker='o')plt.xlabel('Numero di cluster')plt.ylabel('Distorsione')plt.title('Il metodo del gomito mostra il numero ottimale di cluster')plt.show()
Immagine dell'autore

Nel grafico sopra, possiamo vedere che stiamo tracciando la distorsione in funzione del numero di cluster.

La distorsione è la distanza euclidea tra i punti dati specifici e il centro del loro cluster. È anche comune utilizzare invece l’inerzia (cioè la somma delle distanze quadrate).

Lo scopo qui è scegliere il trade-off perfetto.

Vogliamo un valore di distorsione/inerzia basso per ottenere una forte similarità intra-cluster. Ma allo stesso tempo, vogliamo che ogni singolo cluster sia il più unico possibile.

Quindi, lo scenario perfetto sarebbe una similarità intra-cluster molto bassa ma una similarità inter-cluster molto alta.

Cerchiamo di approssimare questo punto dolce prendendo il punto della curva del gomito. Nel grafico sopra, possiamo scegliere 3 o 4 cluster.

Il punto della curva del gomito garantisce che abbiamo un valore di distorsione basso senza avere un numero di cluster saturato.

Grafico 2: Curva AUROC

L’Area Under the Receiver Operating Characteristic (AUROC) Curve è un grafico fondamentale principalmente utilizzato in compiti di classificazione binaria.

Misura l’intera area bidimensionale sotto l’intera curva ROC, che traccia la sensibilità (tasso di veri positivi) contro l’1-specificità (tasso di falsi positivi) per diversi valori di soglia.

I valori di AUROC variano da 0,5 (essenzialmente un modello casuale) a 1,0 (modello perfettamente discriminativo), aiutandoci a quantificare le prestazioni del modello indipendentemente dalla soglia.

from sklearn.metrics import roc_curve, aucfrom sklearn.datasets import make_classificationfrom sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LogisticRegressionimport matplotlib.pyplot as plt# Generare un dataset di classificazione binaria.X, y = make_classification(n_samples=1000, n_classes=2, weights=[1,1], random_state=1)# Suddividi in set di addestramento/testX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=2)# Addestra un modello di regressione logistica.model = LogisticRegression(solver='liblinear')model.fit(X_train, y_train)# Prevedi le probabilitàprobs = model.predict_proba(X_test)# Mantieni le probabilità solo per l'esito positivoprobs = probs[:, 1]# Calcola la curva ROCfpr, tpr, thresholds = roc_curve(y_test, probs)# Calcola l'Area Under the Receiver Operating Characteristic Curve (AUROC)roc_auc = auc(fpr, tpr)# Traccia la curva ROCplt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % roc_auc)plt.plot([0, 1], [0, 1], 'k--')  # curva delle previsioni casualiplt.xlim([0.0, 1.0])plt.ylim([0.0, 1.0])plt.xlabel('Tasso di falsi positivi o (1 - Specificità)')plt.ylabel('Tasso di veri positivi o (Sensibilità)')plt.title('Caratteristica di funzionamento del ricevitore')plt.legend(loc="lower right")plt.show()
Immagine dell'autore

Nel grafico sopra, vediamo la nostra linea di base (la linea tratteggiata nera).

Ogni modello dovrebbe idealmente essere il più lontano possibile dalla linea di base e verso la metà superiore del grafico (cioè, avere un alto tasso di veri positivi ma un basso tasso di falsi positivi).

Grafico 3: Varianza spiegata cumulativa

Il grafico della varianza spiegata cumulativa è fondamentale nell’Analisi delle Componenti Principali (PCA) – una tecnica utilizzata per la riduzione della dimensionalità.

Questo grafico ci aiuta a determinare il numero di componenti che dovremmo scegliere di mantenere pur preservando una parte sostanziale della varianza originale.

from sklearn.decomposition import PCAfrom sklearn.datasets import load_irisimport matplotlib.pyplot as pltimport numpy as np# Carica i datiiris = load_iris()X = iris.datay = iris.target# Calcola la PCApca = PCA(n_components=4)X_pca = pca.fit_transform(X)# Grafica le varianze spiegatefeatures = range(pca.n_components_)explained_variance = np.cumsum(pca.explained_variance_ratio_)plt.bar(features, explained_variance, alpha=0.5,        align='center', label='varianza spiegata individuale')plt.step(features, explained_variance, where='mid',         label='varianza spiegata cumulativa')plt.ylabel('Rapporto di varianza spiegata')plt.xlabel('Componenti principali')plt.legend(loc='best')plt.tight_layout()plt.show()
Immagine dell'autore

Non c’è un valore specifico da scegliere qui, ma una regola pratica tipica è quella di cercare di mantenere almeno un rapporto di varianza spiegata di 0,8.

Questo processo sarebbe simile a quello del metodo del gomito nel grafico 1. Eseguiamo varie iterazioni incrementando ogni volta il numero di componenti principali.

Quindi, utilizzando il grafico della varianza spiegata, possiamo determinare il numero minimo di componenti principali necessarie per mantenere la varianza originale.

Grafico 4: Curva di precisione-richiamo

La curva di precisione-richiamo è un’altra importante strumento per le attività di classificazione binaria, simile all’AUROC.

Illustra il compromesso tra precisione (la capacità del classificatore di non etichettare un campione negativo come positivo) e richiamo (la capacità del classificatore di trovare tutti i campioni positivi).

Questo grafico è particolarmente utile quando si lavora con set di dati sbilanciati.

from sklearn.metrics import precision_recall_curvefrom sklearn.metrics import aucfrom sklearn.datasets import make_classificationfrom sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LogisticRegressionimport matplotlib.pyplot as plt# Genera un set di dati di classificazione binaria.X, y = make_classification(n_samples=5000, n_classes=2, weights=[1,1], random_state=1)# Dividi in set di addestramento/testX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=2)# Addestra un modello di regressione logistica.model = LogisticRegression(solver='liblinear')model.fit(X_train, y_train)# Prevedi le probabilitàprobs = model.predict_proba(X_test)# Mantieni solo le probabilità per l'outcome positivoprobs = probs[:, 1]# Calcola la curva di precisione-richiamo.precision, recall, thresholds = precision_recall_curve(y_test, probs)# Calcola l'area sotto la curva di precisione-richiamo.pr_auc = auc(recall, precision)plt.plot(recall, precision, label='curva PRC (area = %0.2f)' % pr_auc)plt.xlabel('Richiamo')plt.ylabel('Precisione')plt.title('Curva di precisione-richiamo')plt.legend(loc="lower right")plt.show()
Immagine dell'autore

Considerazioni finali

In conclusione, questi quattro grafici sono strumenti potenti nell’arsenale di un data scientist.

Utilizzando queste visualizzazioni in modo saggio, è possibile estrarre informazioni significative dai dati, diagnosticare le prestazioni dei modelli e comunicare efficacemente i risultati.

Padroneggiare queste rappresentazioni non solo aiuta a comprendere i dati a disposizione, ma anche a prendere decisioni ponderate riguardo la selezione del modello e la messa a punto degli iperparametri. Quindi, tieni a portata di mano questi strumenti di visualizzazione e lascia che la tua storia di apprendimento automatico si svolga.

Ti è piaciuto questo post? Con $5/mese, puoi diventare un membro per sbloccare l’accesso illimitato a Nisoo. Stai sostenendo direttamente me e tutti gli altri scrittori preferiti su Nisoo. Quindi, un enorme grazie per questo!

Ottieni accesso esclusivo a tutti i miei contenuti premium e a tutto il resto di Nisoo senza limiti. Supporta il mio lavoro comprandomi un…

david-farrugia.medium.com

Vuoi metterti in contatto?

Mi piacerebbe sentire i tuoi pensieri sull’argomento, o su qualsiasi cosa riguardi l’AI e i dati.

Scrivimi una mail a [email protected] se desideri metterti in contatto.

Linkedin