top of page
Team I.A. Italia

Analisi dei componenti principali (PCA) dalla spiegazione al codice python

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.


Analisi dei componenti principali (PCA) dalla spiegazione al codice python
Analisi dei componenti principali (PCA) dalla spiegazione al codice python


Le 5 fasi per l'analisi dei componenti principali (PCA) :

  1. Standardizzare l'intervallo di variabili iniziali continue

  2. Calcola la matrice di covarianza per identificare le correlazioni

  3. Calcola gli autovettori e gli autovalori della matrice di covarianza

  4. Crea un vettore di funzionalità per decidere quali componenti principali mantenere

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


Analisi dei componenti principali (PCA) dalla spiegazione al codice python
Analisi dei componenti principali (PCA) dalla spiegazione al codice python

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:


Analisi dei componenti principali (PCA) dalla spiegazione al codice python
Analisi dei componenti principali (PCA) dalla spiegazione al codice python

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.


Analisi dei componenti principali (PCA) dalla spiegazione al codice python
Analisi dei componenti principali (PCA) dalla spiegazione al codice python

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


Analisi dei componenti principali (PCA) dalla spiegazione al codice python
Analisi dei componenti principali (PCA) dalla spiegazione al codice python

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:


Analisi dei componenti principali (PCA) dalla spiegazione al codice python
Analisi dei componenti principali (PCA) dalla spiegazione al codice python

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:


Analisi dei componenti principali (PCA) dalla spiegazione al codice python
Analisi dei componenti principali (PCA) dalla spiegazione al codice python

Oppure scartare l'autovettore v 2, che è quello di minor significato, e formare un vettore di caratteristiche solo con v 1:


Analisi dei componenti principali (PCA) dalla spiegazione al codice python
Analisi dei componenti principali (PCA) dalla spiegazione al codice python

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 (PCA) dalla spiegazione al codice python
Analisi dei componenti principali (PCA) dalla spiegazione al codice python


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

Analisi dei componenti principali (PCA) dalla spiegazione al codice python
Analisi dei componenti principali (PCA) dalla spiegazione al codice python

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()
Analisi dei componenti principali (PCA) dalla spiegazione al codice python
Analisi dei componenti principali (PCA) dalla spiegazione al codice python


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()
Analisi dei componenti principali (PCA) dalla spiegazione al codice python
Analisi dei componenti principali (PCA) dalla spiegazione al codice python

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.

1 Comment

Rated 0 out of 5 stars.
No ratings yet

Add a rating
Software Hub
Software Hub
Jul 22, 2022

questi articoli sono oro per un appassionato di ML, complimenti

Like
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