Lo scopo di questo post è fornire una spiegazione completa e semplificata dell'analisi dei componenti principali (PCA). Tratteremo passo dopo passo come funziona, in modo che tutti possano capirlo e utilizzarlo, anche coloro che non hanno un forte background matematico.
Perchè studiare l'analisi dei componenti principali (PCA) ?
La PCA è un metodo ampiamente trattato sul Web e ci sono alcuni ottimi articoli a riguardo, ma molti trascorrono troppo tempo su aspetti superficiali e non realmente utili, quando la maggior parte di noi vuole solo sapere come funziona in modo semplice.
Come funziona l'analisi dei componenti principali (PCA) ?
L'analisi delle componenti principali può essere suddivisa in cinque fasi. Passerò attraverso ogni passaggio, fornendo spiegazioni logiche di ciò che sta facendo PCA e semplificando concetti matematici come standardizzazione, covarianza, autovettori e autovalori senza concentrarmi su come calcolarli.
Le 5 fasi per l'analisi dei componenti principali (PCA) :
Standardizzare l'intervallo di variabili iniziali continue
Calcola la matrice di covarianza per identificare le correlazioni
Calcola gli autovettori e gli autovalori della matrice di covarianza
Crea un vettore di funzionalità per decidere quali componenti principali mantenere
Riformula i dati lungo gli assi dei componenti principali
Spaventato ?
Non preoccuparti, ora semplificheremo il tutto, ma prima facciamo un piccolo passo inditro e capiamo bene cosa è l'analisi dei componenti principali o PCA.
Che cos'è l'analisi dei componenti principali o PCA ?
L'analisi dei componenti principali, o PCA, è un metodo di riduzione della dimensionalità che viene spesso utilizzato per ridurre la dimensionalità di grandi insiemi di dati, trasformando un grande insieme di variabili in uno più piccolo che contiene ancora la maggior parte delle informazioni nell'insieme di grandi dimensioni.
La riduzione del numero di variabili di un set di dati va naturalmente a scapito dell'accuratezza, ma il trucco nella riduzione della dimensionalità è scambiare un po' di precisione per semplicità. Perché set di dati più piccoli sono più facili da esplorare e visualizzare e rendono l'analisi dei dati molto più semplice e veloce per gli algoritmi di apprendimento automatico senza variabili estranee da elaborare.
Quindi, per riassumere, l'idea di PCA è semplice: ridurre il numero di variabili di un set di dati, preservando quante più informazioni possibili.
Naturalmente questa è una definizione ridotta all'osso che serve a darti un idea super semplificata dell'analisi dei componenti principali o PCA.
Spiegazione dell'analisi dei componenti principali o PCA
PASSAGGIO 1: STANDARDIZZAZIONE
Lo scopo di questo passaggio è standardizzare l'intervallo delle variabili iniziali continue in modo che ciascuna di esse contribuisca in egual modo all'analisi.
Nota : naturalmente se vogliamo stimare i prezzi di un appartamento, i metri quadrati ( es 90 mq^2 ) e il numero di balconi ( es 2 ) avranno pesi diversi e noi dobbiamo renderli omogenei...
Più specificamente, il motivo per cui è fondamentale eseguire la standardizzazione prima della PCA, è che quest'ultima è piuttosto sensibile per quanto riguarda le varianze delle variabili iniziali. Cioè, se ci sono grandi differenze tra gli intervalli delle variabili iniziali, quelle variabili con intervalli più grandi domineranno su quelle con intervalli piccoli (ad esempio, una variabile compresa tra 0 e 100 dominerà su una variabile compresa tra 0 e 1 ), che porterà a risultati distorti. Quindi, trasformare i dati in scale comparabili può prevenire questo problema.
Matematicamente, questo può essere fatto sottraendo la media e dividendo per la deviazione standard per ogni valore di ciascuna variabile.
Una volta completata la standardizzazione, tutte le variabili verranno trasformate nella stessa scala.
Voglio farti un esempio di un set di dati STANDARDIZZATO e uno no.
TABELLA NON NORMALIZZATA
Prezzo | Metri quadri | Numero di balconi |
100.000€ | 80 | 1 |
150.000€ | 120 | 1 |
200.000€ | 130 | 3 |
TABELLA NORMALIZZATA
Prezzo | Metri quadri | Numero di balconi |
0.5 | 0.61 | 0.3 |
0.75 | 0.92 | 0.3 |
1 | 1 | 1 |
PASSAGGIO 2: CALCOLO DELLA MATRICE DI COVARIANZA
Lo scopo di questo passaggio è capire come le variabili dell'insieme di dati di input variano dalla media l'una rispetto all'altra, o in altre parole, per vedere se esiste una relazione tra loro. Perché a volte, le variabili sono altamente correlate in modo tale da contenere informazioni ridondanti. Quindi, per identificare queste correlazioni, calcoliamo la matrice di covarianza.
La matrice di covarianza è una matrice simmetrica p × p (dove p è il numero di dimensioni) che ha come voci le covarianze associate a tutte le possibili coppie delle variabili iniziali. Ad esempio, per un set di dati tridimensionale con 3 variabili x , y e z , la matrice di covarianza è una matrice 3 × 3 di questo da:
Poiché la covarianza di una variabile con se stessa è la sua varianza (Cov(a,a)=Var(a)), nella diagonale principale (in alto da sinistra in basso a destra) abbiamo effettivamente le varianze di ciascuna variabile iniziale. E poiché la covarianza è commutativa (Cov(a,b)=Cov(b,a)), le voci della matrice di covarianza sono simmetriche rispetto alla diagonale principale, il che significa che le porzioni triangolari superiore e inferiore sono uguali.
Cosa ci dicono le covarianze che abbiamo come voci della matrice sulle correlazioni tra le variabili?
In realtà è il segno della covarianza che conta:
se positivo allora : le due variabili aumentano o diminuiscono insieme (correlate)
se negativo allora: uno aumenta quando l'altro diminuisce (correlato inversamente)
Ora che sappiamo che la matrice di covarianza non è altro che una tabella che riassume le correlazioni tra tutte le possibili coppie di variabili, passiamo al passaggio successivo.
PASSAGGIO 3: CALCOLARE GLI AUTOVETTORI E GLI AUTOVALORI DELLA MATRICE DI COVARIANZA PER IDENTIFICARE I COMPONENTI PRINCIPALI
Autovettori e autovalori sono i concetti di algebra lineare che dobbiamo calcolare dalla matrice di covarianza per determinare le componenti principali dei dati. Prima di arrivare alla spiegazione di questi concetti, capiamo prima cosa si intende per componenti principali.
Le componenti principali sono nuove variabili costruite come combinazioni lineari o miscele delle variabili iniziali.
Queste combinazioni sono fatte in modo tale che le nuove variabili (cioè le componenti principali) non siano correlate e la maggior parte delle informazioni all'interno delle variabili iniziali sia compressa o compressa nelle prime componenti. Quindi, l'idea è che i dati a 10 dimensioni forniscano 10 componenti principali, ma PCA cerca di inserire la massima informazione possibile nel primo componente, quindi il massimo delle informazioni rimanenti nel secondo e così via, fino a ottenere qualcosa di simile a quello mostrato nello scree plot sotto.
Organizzare le informazioni nei componenti principali in questo modo, ti consentirà di ridurre la dimensionalità senza perdere molte informazioni, e questo scartando i componenti con informazioni basse e considerando i componenti rimanenti come nuove variabili.
Una cosa importante da capire qui è che le componenti principali sono meno interpretabili e non hanno alcun significato reale poiché sono costruite come combinazioni lineari delle variabili iniziali.
Geometricamente parlando, le componenti principali rappresentano le direzioni dei dati che spiegano una quantità massima di varianza , vale a dire le linee che catturano la maggior parte delle informazioni dei dati. La relazione tra varianza e informazioni qui è che, maggiore è la varianza portata da una linea, maggiore è la dispersione dei punti dati lungo di essa e maggiore è la dispersione lungo una linea, maggiore è l'informazione che ha. Per dirla semplicemente, basti pensare ai componenti principali come a nuovi assi che forniscono l'angolo migliore per vedere e valutare i dati, in modo che le differenze tra le osservazioni siano meglio visibili.
Come PCA costruisce i componenti principali
Poiché ci sono tante componenti principali quante sono le variabili nei dati, le componenti principali sono costruite in modo tale che la prima componente principale tenga conto della maggiore varianza possibile nel set di dati.
Ad esempio, supponiamo che il grafico a dispersione del nostro set di dati sia come mostrato di seguito, possiamo indovinare il primo componente principale?
Sì, è approssimativamente la linea che corrisponde ai segni viola perché passa per l'origine ed è la linea in cui la proiezione dei punti (punti rossi) è più estesa. O matematicamente parlando, è la linea che massimizza la varianza (la media delle distanze al quadrato dai punti proiettati (punti rossi) all'origine).
La seconda componente principale è calcolata allo stesso modo, a condizione che non sia correlata (cioè perpendicolare alla) prima componente principale e che rappresenti la varianza successiva più alta.
Ciò continua fino a quando non è stato calcolato un totale di p componenti principali, pari al numero originario di variabili.
Ora che abbiamo capito cosa intendiamo per componenti principali, torniamo agli autovettori e agli autovalori. La prima cosa che devi sapere su di loro è che vengono sempre in coppia, in modo che ogni autovettore abbia un autovalore. E il loro numero è uguale al numero di dimensioni dei dati. Ad esempio, per un set di dati tridimensionale, ci sono 3 variabili, quindi ci sono 3 autovettori con 3 autovalori corrispondenti.
Senza ulteriori indugi, sono gli autovettori e gli autovalori alla base di tutta la magia spiegata sopra, perché gli autovettori della matrice di covarianza sono in realtà le direzioni degli assi dove c'è la maggior varianza (maggior parte delle informazioni) e che chiamiamo Componenti principali. E gli autovalori sono semplicemente i coefficienti associati agli autovettori, che danno la quantità di varianza trasportata in ogni componente principale .
Classificando i tuoi autovettori in ordine di autovalori, dal più alto al più basso, ottieni le componenti principali in ordine di significatività.
Esempio:
Supponiamo che il nostro set di dati sia bidimensionale con 2 variabili x,y e che gli autovettori e gli autovalori della matrice di covarianza siano i seguenti:
Se classifichiamo gli autovalori in ordine decrescente, otteniamo λ1>λ2, il che significa che l'autovettore che corrisponde alla prima componente principale (PC1) è v1 e quello che corrisponde alla seconda componente (PC2) è v2.
Dopo aver ottenuto le componenti principali, per calcolare la percentuale di varianza (informazione) contabilizzata da ciascuna componente, dividiamo l'autovalore di ciascuna componente per la somma degli autovalori. Se applichiamo questo all'esempio sopra, troviamo che PC1 e PC2 portano rispettivamente il 96% e il 4% della varianza dei dati.
PASSAGGIO 4: VETTORE DI FUNZIONALITÀ
Come abbiamo visto nel passaggio precedente, calcolare gli autovettori e ordinarli per i loro autovalori in ordine decrescente, ci permette di trovare le componenti principali in ordine di significato. In questo passaggio, quello che facciamo è scegliere se mantenere tutte queste componenti o scartare quelle di minor significato (di bassi autovalori), e formare con le restanti una matrice di vettori che chiamiamo Feature vector .
Quindi, il vettore delle caratteristiche è semplicemente una matrice che ha come colonne gli autovettori delle componenti che decidiamo di mantenere. Questo lo rende il primo passo verso la riduzione della dimensionalità, perché se scegliamo di mantenere solo p autovettori (componenti) da n , il set di dati finale avrà solo p dimensioni.
Esempio :
Continuando con l'esempio del passaggio precedente, possiamo formare un vettore di caratteristiche con entrambi gli autovettori v 1 e v 2:
Oppure scartare l'autovettore v 2, che è quello di minor significato, e formare un vettore di caratteristiche solo con v 1:
L'eliminazione dell'autovettore v2 ridurrà la dimensionalità di 1 e di conseguenza causerà una perdita di informazioni nel set di dati finale. Ma dato che v 2 conteneva solo il 4% delle informazioni, la perdita non sarà quindi importante e avremo ancora il 96% delle informazioni trasportate da v 1.
Quindi, come abbiamo visto nell'esempio, sta a te scegliere se conservare tutti i componenti o scartare quelli di minore importanza, a seconda di cosa stai cercando. Perché se vuoi solo descrivere i tuoi dati in termini di nuove variabili (componenti principali) che non sono correlate senza cercare di ridurre la dimensionalità, non è necessario tralasciare componenti meno significativi.
ULTIMO PASSAGGIO: RIFORMULARE I DATI LUNGO GLI ASSI DEI COMPONENTI PRINCIPALI
Nei passaggi precedenti, a parte la standardizzazione, non si apportano modifiche ai dati, si selezionano solo i componenti principali e si forma il vettore delle caratteristiche, ma il set di dati di input rimane sempre in termini di assi originali (ovvero in termini di le variabili iniziali).
In questo passaggio, che è l'ultimo, lo scopo è utilizzare il vettore di caratteristiche formato utilizzando gli autovettori della matrice di covarianza, per riorientare i dati dagli assi originali a quelli rappresentati dalle componenti principali (da cui il nome Analisi delle Componenti Principali ). Questo può essere fatto moltiplicando la trasposizione del set di dati originale per la trasposizione del vettore della caratteristica.
Analisi dei componenti principali con Python
Ricapitoliamo gli Usi dell'Analisi dei componenti principali :
Viene utilizzato per trovare l'interrelazione tra le variabili nei dati.
Viene utilizzato per interpretare e visualizzare i dati.
Il numero di variabili sta diminuendo e semplifica ulteriormente l'analisi.
Viene spesso utilizzato per visualizzare la distanza genetica e la parentela tra le popolazioni.
Questi sono fondamentalmente eseguiti su una matrice simmetrica quadrata. Può essere una pura somma di quadrati e matrice di prodotti incrociati o matrice di covarianza o matrice di correlazione. Una matrice di correlazione viene utilizzata se la varianza individuale differisce molto.
Ora, capiamo l'analisi dei componenti principali con Python.
Per ottenere il set di dati utilizzato nell'implementazione, fare clic qui e cercare nella cartella DATASET CSV il file "Wine.csv".
Passaggio 1: importazione delle librerie
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
Passaggio 2: importazione del set di dati
Importare il set di dati e distribuirlo nei componenti X e y per l'analisi dei dati.
dataset = pd.read_csv('wine.csv')
X = dataset.iloc[:, 0:13].values
y = dataset.iloc[:, 13].values
Passaggio 3: suddivisione del set di dati nel set di allenamento e nel set di test
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)
Passaggio 4: ridimensionamento delle funzionalità
Esecuzione della parte di pre-elaborazione sul set di formazione e test, ad esempio l'adattamento della scala standard.
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
Passaggio 5: Applicazione della funzione PCA
Applicazione della funzione PCA al set di training e test per l'analisi.
from sklearn.decomposition import PCA
pca = PCA(n_components = 2)
X_train = pca.fit_transform(X_train)
X_test = pca.transform(X_test)
explained_variance = pca.explained_variance_ratio_
Passaggio 6: adattamento della regressione logistica al set di allenamento
from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression(random_state = 0)
classifier.fit(X_train, y_train)
Passaggio 7: prevedere il risultato del set di test
y_pred = classifier.predict(X_test)
Passaggio 8: creare la matrice di confusione
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
Passaggio 9: prevedere il risultato del set di allenamento
from matplotlib.colors import ListedColormap
X_set, y_set = X_train, y_train
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1,
stop = X_set[:, 0].max() + 1, step = 0.01),
np.arange(start = X_set[:, 1].min() - 1,
stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(),
X2.ravel()]).T).reshape(X1.shape), alpha = 0.75,
cmap = ListedColormap(('yellow', 'white', 'aquamarine')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
c = ListedColormap(('red', 'green', 'blue'))(i), label = j)
plt.title('Logistic Regression (Training set)')
plt.xlabel('PC1') # Xlabel
plt.ylabel('PC2') # Ylabel
plt.legend() # to show legend
plt.show()
Passaggio 10: visualizzazione dei risultati del set di test
from matplotlib.colors import ListedColormap
X_set, y_set = X_test, y_test
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1,
stop = X_set[:, 0].max() + 1, step = 0.01),
np.arange(start = X_set[:, 1].min() - 1,
stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(),
X2.ravel()]).T).reshape(X1.shape), alpha = 0.75,
cmap = ListedColormap(('yellow', 'white', 'aquamarine')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
c = ListedColormap(('red', 'green', 'blue'))(i), label = j)
# title for scatter plot
plt.title('Logistic Regression (Test set)')
plt.xlabel('PC1') # Xlabel
plt.ylabel('PC2') # Ylabel
plt.legend()
# show
plt.show()
Riepilogo dell'analisi dei componenti principali
In questa sezione abbiamo discusso l'uso dell'analisi delle componenti principali per la riduzione della dimensionalità, per la visualizzazione di dati ad alta dimensione, per il filtraggio del rumore e per la selezione delle caratteristiche all'interno di dati ad alta dimensione. A causa della versatilità e dell'interpretabilità del PCA, si è dimostrato efficace in un'ampia varietà di contesti e discipline.
Dato qualsiasi set di dati ad alta dimensione, tendo a iniziare con PCA per visualizzare la relazione tra i punti (come abbiamo fatto con le cifre), per capire la varianza principale nei dati (come abbiamo fatto con le autofacce) e per capire la dimensionalità intrinseca (tracciando il rapporto di varianza spiegato).
Certamente PCA non è utile per ogni set di dati ad alta dimensione, ma offre un percorso semplice ed efficiente per ottenere informazioni dettagliate sui dati ad alta dimensione.