Este equipo especializado luego de algunos días de investigación y de juntar de datos, hemos dado con la respuesta, deseamos que te sea de utilidad para tu trabajo.
Solución:
Sí, tienes casi razón. los pca.explained_variance_ratio_
parámetro devuelve un vector de la varianza explicada por cada dimensión. De este modo pca.explained_variance_ratio_[i]
da la varianza explicada únicamente por la i+1ª dimensión.
probablemente quieras hacer pca.explained_variance_ratio_.cumsum()
. Eso devolverá un vector. x
tal que x[i]
devuelve el acumulativo varianza explicada por las primeras i+1 dimensiones.
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. ]
Entonces, en mis datos aleatorios de juguetes, si elegí k=4
Retendría el 93,3% de la varianza.
Aunque esta pregunta tiene más de 2 años, quiero proporcionar una actualización sobre esto. Quería hacer lo mismo y parece que sklearn ahora ofrece esta función lista para usar.
Como se indica en los documentos
si 0 < n_components < 1 y svd_solver == 'completo', seleccione el número de componentes tal que la cantidad de varianza que debe explicarse sea mayor que el porcentaje especificado por n_components
Así que el código requerido es ahora
my_model = PCA(n_components=0.99, svd_solver='full')
my_model.fit_transform(my_matrix)
Aquí tienes las reseñas y puntuaciones
Si haces scroll puedes encontrar las interpretaciones de otros administradores, tú además tienes la libertad de dejar el tuyo si lo deseas.