Dimensión de los datos antes y después de realizar PCA.

Estoy intentando la competencia de reconocimiento de dígitos de kaggle.com usando Python y scikit-learn.

Después de eliminar las tags de los datos de entrenamiento, agrego cada fila en CSV en una lista como esta:

for row in csv: train_data.append(np.array(np.int64(row))) 

Hago lo mismo para los datos de prueba.

Preproceso estos datos con PCA para realizar una reducción de dimensión (¿y extracción de características?):

 def preprocess(train_data, test_data, pca_components=100): # convert to matrix train_data = np.mat(train_data) # reduce both train and test data pca = decomposition.PCA(n_components=pca_components).fit(train_data) X_train = pca.transform(train_data) X_test = pca.transform(test_data) return (X_train, X_test) 

Luego creo un clasificador kNN y lo X_train con los datos de X_train y hago predicciones usando los datos de X_test .

Usando este método puedo obtener alrededor del 97% de precisión.

Mi pregunta es sobre la dimensionalidad de los datos antes y después de realizar la PCA

¿Cuáles son las dimensiones de train_data y X_train ?

¿Cómo influye el número de componentes en la dimensionalidad de la salida? ¿Son la misma cosa?

El algoritmo PCA encuentra los vectores propios de la matriz de covarianza de los datos. ¿Qué son los vectores propios? Nadie lo sabe, ya nadie le importa (¡es broma!). Lo importante es que el primer vector propio es un vector paralelo a la dirección a lo largo de la cual los datos tienen la mayor varianza (intuitivamente: propagación). La segunda denota la segunda mejor dirección en términos de la extensión máxima, y ​​así sucesivamente. Otro hecho importante es que estos vectores son ortogonales entre sí, por lo que forman una base .

El parámetro pca_components le dice al algoritmo cuántos vectores de base le interesan. Por lo tanto, si pasa 100 significa que quiere obtener 100 vectores de base que describen (el estadístico diría: explicar ) la mayor parte de la varianza de sus datos.

La función de transformación transforma (srsly ?;)) los datos de la base original a la base formada por los componentes de PCA elegidos (en este ejemplo, los primeros 100 mejores vectores). Puede visualizar esto como una nube de puntos que se rotan y se ignoran algunas de sus dimensiones. Como lo señaló Jaime en los comentarios, esto es equivalente a proyectar los datos sobre la nueva base.

Para el caso 3D, si desea obtener una base formada por los primeros 2 vectores propios, entonces nuevamente, la nube de puntos 3D se rotará primero, por lo que la mayor variación sería paralela a los ejes de coordenadas. Entonces, el eje donde la varianza es más pequeña se está descartando, lo que le deja datos en 2D.

Entonces, para responder a su pregunta directamente: sí, el número de componentes de PCA deseados es la dimensionalidad de los datos de salida (después de la transformación).