PCA con sklearn

Última modificación: 28/7/2019

El 24/7 Andrea y yo hablamos en el seminario sobre el método no supervisado PCA, basándonos en el capítulo 10 del libro de Gareth et al., “An Introduction to Statistical Learning”, usando los datos de “USArrests”.

Hay una versión de la impresión (no edición) 7 del libro en http://faculty.marshall.usc.edu/gareth-james/ISL/.

En el seminario también me atreví a mencionar el cociente de Rayleigh-Ritz, que se usa en distintos lugares en matemáticas.

Según Wikipedia, el nombre “cociente de Rayleigh-Ritz” es incorrecto, y debe llamarse directamente “cociente de Rayleigh”.

Aunque en el artículo hay mucha información y referencias como para engancharse y perderse, a nosotros nos interesa especialmente la parte de “covarianza”, donde se hacen de dos formas las cuentas que vimos.

Andrea trabajó con R y yo trabajé con Scikit-learn, usando también otros paquetes de Python organizados alrededor de Sci-Py:

  • Matplotlib es el paquete de gráficos.
  • NumPy implementa vectores y matrices eficientemente: Python tiene listas cuyos elementos pueden ser de cualquier tipo, y no son apropiadas para cálculos numéricos intensos.
  • Pandas es para el manejo de bases de datos.

SciPy implementa algoritmos en forma eficiente, y no lo usé explícitamente sino que es llamado por el mismo scikit-learn.

Si bien ya lo mencioné en alguna otra parte, no está de más repetir que para mí SciPy es suficiente para trabajar en los cursos de estadística de grado.

En la página inicial de scikit-learn están enunciados los temas que aborda ese paquete. PCA figura en “dimensionality reduction”, separado de los algoritmos de “clustering”, a diferencia de la presentación en el libro.

Observar que la implementación del método PCA de scikit-learn automáticamente centra los datos pero sólo cambia la varianza a 1 con la opción whiten.

Archivos en internet

Modifiqué un poco los archivos de Python (“scripts”) que presenté en el seminario y los puse en una carpeta/directorio de Google Drive. En la misma carpeta puse el archivo csv que usé.

Por supuesto, no son “scripts” hechos por un profesional, sino hechos por alguien que está empezando a estudiar los paquetes que mencioné. Cualquier propuesta de mejora será más que bienvenida.

Si van a trabajar con esos archivos, para evitar problemas lo mejor es ponerlos en una misma carpeta/directorio, aunque dependiendo del soft con el que trabajen puede no ser esencial. Por ejemplo, en Spyder se puede cambiar el directorio de trabajo usando un menú que está arriba a la derecha.

Finalmente, recuerden que el menú que aparece abajo a la izquierda en los gráficos de Python es sólo para gráficos en dos dimensiones y no siempre funciona correctamente. En tres dimensiones se puede usar un ratón “haciendo click y arrastrándolo” para mirar distintas perspectivas y con la rueda se pueden hacer “zooms”.

Como son las doce y la papa no se coce, y el movimiento se demuestra andando, andemos y vayamos a los bifes.

  • USArrests.csv es el archivo csv de datos que usé.

    Es una modificación del que me envió Andrea, USArrests (Andrea).csv, que incluyo por si quieren cambiar la base de datos en los ejemplos, así ven las modificaciones que hice para trabajar con pandas (y scikit-learn).

    Como saben, los archivos csv son archivos de texto, y se pueden abrir y modificar con cualquier editor de textos.

  • pandas_intro.py muestra algunos comandos de pandas, usando los datos en USArrests.csv.

    La idea es ejecutar los comandos de a uno, tratando de entender qué hace cada instrucción.

    Idealmente esto podría hacerse en un “notebook” de IPython o Jupyter, pero no lo hice por si (como yo) no usan Anaconda: si alguien lo pasa a “notebook” podemos ponerlo junto con los otros archivos.

  • pca-usarrests-1.py trabaja con los comandos de pandas y la versión PCA de sklearn, enfocados en la parte numérica y no gráfica.

    Como en el caso de pandas-intro.py, la idea es ir ejecutando los comandos de a uno para ver qué hacen, y si alguien lo pasa a “notebook” lo ponemos junto a los otros archivos.

  • pca-usarrests-biplot.py es un intento de hacer el gráfico “biplot” en la página 378 del libro.

    Seguramente hay paquetes mejores para hacerlo, pero por un lado no los encontré en internet (aunque ví cosas similares llamadas también “biplot”), y por otro lado me pareció interesante hacerlo usando únicamente Matplotlib (y lo ya hecho en pca-usarrests-1.py).

  • pca-usarrests-2.py presenta distintos gráficos de las proyecciones en las dos primeras componentes principales, basándose en lo hecho en pca-usarrests-1.py.

    Otra vez, seguramente hay paquetes más sofisticados para hacer los gráficos, pero no he tenido tiempo de explorar exhaustivamente internet y me pareció interesante ver cómo hacerlos usando Matplotlib únicamente.