scikit-learn
Riduzione della dimensionalità (selezione delle caratteristiche)
Ricerca…
Riduzione della dimensione con analisi dei componenti principali
Principal Component Analysis trova sequenze di combinazioni lineari delle caratteristiche. La prima combinazione lineare massimizza la varianza delle caratteristiche (soggetto a un vincolo di unità). Ognuna delle seguenti combinazioni lineari massimizza la varianza delle caratteristiche nel sottospazio ortogonale a quella estesa dalle precedenti combinazioni lineari.
Una tecnica di riduzione delle dimensioni comune consiste nell'usare solo le k prima di tali combinazioni lineari. Supponiamo che le caratteristiche siano una matrice X di n righe e m colonne. Le prime k combinazioni lineari formano una matrice β k di m righe e k colonne. Il prodotto X β ha n righe e k colonne. Pertanto, la matrice risultante β k può essere considerata una riduzione da m a k dimensioni, mantenendo le parti ad alta varianza della matrice originale X.
In scikit-learn
, PCA viene eseguito con sklearn.decomposition.PCA
. Ad esempio, supponiamo di iniziare con una matrice 100 X 7, costruita in modo che la varianza sia contenuta solo nelle prime due colonne (ridimensionando le ultime 5 colonne):
import numpy as np
np.random.seed(123) # we'll set a random seed so that our results are reproducible
X = np.hstack((np.random.randn(100, 2) + (10, 10), 0.001 * np.random.randn(100, 5)))
Eseguiamo una riduzione a 2 dimensioni:
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
pca.fit(X)
Ora controlliamo i risultati. Innanzitutto, ecco le combinazioni lineari:
pca.components_
# array([[ -2.84271217e-01, -9.58743893e-01, -8.25412629e-05,
# 1.96237855e-05, -1.25862328e-05, 8.27127496e-05,
# -9.46906600e-05],
# [ -9.58743890e-01, 2.84271223e-01, -7.33055823e-05,
# -1.23188872e-04, -1.82458739e-05, 5.50383246e-05,
# 1.96503690e-05]])
Si noti come i primi due componenti di ciascun vettore siano diversi ordini di grandezza più grandi degli altri, mostrando che l'PCA ha riconosciuto che la varianza è contenuta principalmente nelle prime due colonne.
Per verificare il rapporto tra la varianza spiegata da questo PCA, possiamo esaminare pca.explained_variance_ratio_
:
pca.explained_variance_ratio_
# array([ 0.57039059, 0.42960728])