Implementazione di PCA in Python con scikit-learn
Introduzione
L'estrazione di informazioni utili da set di dati ad alta dimensionalità è resa più semplice dall'analisi delle componenti principali (PCA), un popolare metodo di riduzione della dimensionalità. Lo fa riproiettando i dati su un asse diverso, dove è possibile catturare la varianza più elevata. La complessità del set di dati viene ridotta mentre la sua struttura di base viene preservata dalla PCA. Aiuta con aspetti come la selezione delle funzionalità, la compressione dei dati e la riduzione del rumore nell'analisi dei dati e può persino ridurre la dimensionalità dei dati analizzati. L'elaborazione delle immagini, la bioinformatica, l'economia e le scienze sociali sono solo alcuni dei settori in cui la PCA è stata utilizzata.
Ha diverse applicazioni, tra cui il riconoscimento delle immagini (sia umane che non umane), la genetica, la finanza, la segmentazione dei consumatori, i sistemi di raccomandazione e l'analisi del sentiment. In sintesi, l’analisi delle componenti principali è un metodo flessibile che può essere utilizzato in un’ampia varietà di contesti.
Comprendere la teoria alla base della PCA
Che cos'è l'analisi delle componenti principali (PCA)?
L'analisi delle componenti principali (PCA) è una tecnica di riduzione della dimensionalità utilizzata per trasformare i dati ad alta dimensionalità in una rappresentazione a dimensione inferiore preservando le informazioni più importanti. Individua le direzioni (componenti principali) lungo le quali i dati variano maggiormente.
Concetti matematici in PCA
La PCA prevede operazioni di algebra lineare e matriciali. Utilizza concetti come autovettori e autovalori per calcolare le componenti principali. Gli autovettori rappresentano le direzioni della massima varianza e gli autovalori rappresentano la quantità di varianza spiegata da ciascun autovettore.
Rapporto di varianza spiegato
Il rapporto di varianza spiegata rappresenta la proporzione della varianza totale nei dati spiegata da ciascuna componente principale. Aiuta a determinare quanti componenti principali conservare per un compromesso ottimale tra riduzione della dimensionalità e conservazione delle informazioni.
Implementazione di PCA con scikit-learn
Installazione di scikit-learn
Per installare scikit-learn, puoi utilizzare il seguente comando −
Codice Python
pip install scikit-learn
Caricamento delle librerie necessarie
In Python, è necessario importare le librerie richieste per l'implementazione PCA −
Codice Python
from sklearn.decomposition import PCA
import numpy as np
Preelaborazione dei dati
Ridimensionare le funzionalità
Prima di applicare la PCA, si consiglia di ridimensionare le caratteristiche per avere media e varianza unitaria pari a zero. Ciò può essere ottenuto utilizzando StandardScaler − di scikit-learn
Codice Python
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)
Gestione dei valori mancanti (se applicabile)
Se i tuoi dati contengono valori mancanti, potrebbe essere necessario gestirli prima di eseguire la PCA. A seconda della natura dei dati mancanti, possono essere utilizzate tecniche come l'imputazione o la rimozione.
Esecuzione della PCA
Per eseguire PCA sui dati ridimensionati, creare un'istanza della classe PCA e adattarla ai dati −
Codice Python
pca = PCA()
pca.fit(scaled_data)
Scelta del numero di componenti
È possibile scegliere il numero di componenti in base al rapporto di varianza spiegato. Ad esempio, per mantenere il 95% della varianza, puoi utilizzare −
Codice Python
n_components = np.argmax(np.cumsum(pca.explained_variance_ratio_) >= 0.95) + 1
Interpretazione dei componenti principali
È possibile accedere ai componenti principali utilizzando pca.components. I componenti principali sono combinazioni lineari delle caratteristiche originali e ciascuna rappresenta un asse unico di variazione dei dati. I coefficienti delle componenti principali possono essere analizzati per rivelare la loro importanza relativa nello spiegare la varianza totale.
Visualizzazione dei risultati PCA
Biploma
Un biplot è un tipo di grafico a dispersione che mostra contemporaneamente sia i punti che i PC. Si può quindi vedere la connessione tra i dati e le componenti primarie. Matplotlib e scikit-learn sono due esempi di librerie che possono essere utilizzate per generare un biplot −
Codice Python
import matplotlib.pyplot as plt
# Assuming X is the original data matrix
X_pca = pca.transform(scaled_data)
plt.scatter(X_pca[:, 0], X_pca[:, 1]) # Replace 0 and 1 with the desired principal components
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.show()
Trama dello schermo
Gli autovalori (o varianze spiegate) delle componenti principali sono tracciati in uno screeplot dal più alto al più basso. E' utile per capire quanti pezzi tenere. Matplotlib può essere utilizzato per creare la trama dello schermo −
Codice Python
plt.plot(range(1, len(pca.explained_variance_ratio_) + 1), pca.explained_variance_ratio_, marker='o')
plt.xlabel('Principal Components')
plt.ylabel('Explained Variance Ratio')
plt.show()
Queste visualizzazioni forniscono approfondimenti sulla struttura dei dati e sull'importanza di ciascun componente principale nel catturare la variabilità dei dati originali.
Valutazione delle prestazioni della PCA
Valutazione del rapporto di varianza spiegato
È fondamentale valutare la quantità di variazione dei dati spiegata da ciascun componente principale dopo aver applicato la PCA. Questi dati sono utili per decidere quante parti conservare. È possibile accedere al rapporto di varianza spiegato in Python utilizzando il campo "explained_variance_ratio_" dell'oggetto PCA di scikit-learn. Ecco un esempio di codice −
Codice Python
from sklearn.decomposition import PCA
# Assume 'X' is your preprocessed data
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# Accessing the explained variance ratio
explained_variance_ratio = pca.explained_variance_ratio_
print("Explained Variance Ratio:", explained_variance_ratio)
Ricostruire i dati originali
Mappando i dati su uno spazio a dimensione inferiore, la PCA è in grado di ridurre la dimensionalità dei dati. Usando la funzione 'inverse_transform()', puoi tornare ai dati originali dalla rappresentazione compressa. Ecco un esempio di codice −
Codice Python
# Reconstructing the original data
X_reconstructed = pca.inverse_transform(X_pca)
Valutazione dell'impatto della riduzione della dimensionalità sulle prestazioni del modello
Dopo aver utilizzato PCA, devi capire in che modo la riduzione delle dimensioni influisce sul successo dei tuoi modelli di machine learning. Prima e dopo l'applicazione della PCA, puoi confrontare misure di prestazione come l'accuratezza o l'errore quadratico medio. Ecco uno snippet di codice di esempio -
Codice Python
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
# Assume 'y' is your target variable
X_train, X_test, y_train, y_test = train_test_split(X_pca, y, test_size=0.2, random_state=42)
# Train and evaluate a logistic regression model on the reduced data
model = LogisticRegression()
model.fit(X_train, y_train)
accuracy_pca = model.score(X_test, y_test)
# Train and evaluate a logistic regression model on the original data
model_original = LogisticRegression()
model_original.fit(X_train_original, y_train)
accuracy_original = model_original.score(X_test_original, y_test)
print("Accuracy with PCA:", accuracy_pca)
print("Accuracy without PCA:", accuracy_original)
Confrontando il funzionamento del modello con e senza PCA, è possibile capire in che modo la riduzione della dimensionalità influisce sul lavoro specifico.
Conclusione
In conclusione, la riduzione della dimensionalità e l'estrazione delle caratteristiche possono essere realizzate con grande efficienza utilizzando la PCA implementata in Python con scikit-learn. Se adeguatamente compresa, implementata e valutata, la PCA apre la strada a un'analisi, una visualizzazione e una modellazione dei dati più efficaci in un'ampia gamma di aree applicative.