Gourou,
Lors du choix du nombre de composants principaux (k), nous choisissons k comme étant la plus petite valeur de sorte que, par exemple, 99% de la variance soit conservée.
Cependant, dans le Python Scikit learn, je ne suis pas sûr à 100% pca.explained_variance_ratio_ = 0.99 est égal à "99% de la variance est conservée"? Quelqu'un pourrait-il éclairer? Merci.
Oui, vous avez presque raison. Le paramètre pca.explained_variance_ratio_
Renvoie un vecteur de la variance expliquée par chaque dimension. Ainsi pca.explained_variance_ratio_[i]
Donne la variance expliquée uniquement par la i + 1ère dimension.
Vous voulez probablement faire pca.explained_variance_ratio_.cumsum()
. Cela renverra un vecteur x
tel que x[i]
Renvoie la variance cumulative expliquée par les premières dimensions i + 1.
import numpy as np
from sklearn.decomposition import PCA
np.random.seed(0)
my_matrix = np.random.randn(20, 5)
my_model = PCA(n_components=5)
my_model.fit_transform(my_matrix)
print my_model.explained_variance_
print my_model.explained_variance_ratio_
print my_model.explained_variance_ratio_.cumsum()
[ 1.50756565 1.29374452 0.97042041 0.61712667 0.31529082]
[ 0.32047581 0.27502207 0.20629036 0.13118776 0.067024 ]
[ 0.32047581 0.59549787 0.80178824 0.932976 1. ]
Donc, dans mes données aléatoires sur les jouets, si je choisissais k=4
, Je conserverais 93,3% de la variance.
Bien que cette question date de plus de 2 ans, je souhaite fournir une mise à jour à ce sujet. Je voulais faire de même et il semble que sklearn propose désormais cette fonctionnalité hors de la boîte.
Comme indiqué dans le docs
si 0 <n_components <1 et svd_solver == ‘full’, sélectionnez le nombre de composants de telle sorte que la quantité de variance qui doit être expliquée soit supérieure au pourcentage spécifié par n_components
Donc, le code requis est maintenant
my_model = PCA(n_components=0.99, svd_solver='full')
my_model.fit_transform(my_matrix)