UNIVERSIDAD DE SONORA MAESTRÍA EN INGENIERÍA EN INTERNET DE LAS COSAS E INTELIGENCIA ARTIFICIAL TAREA: Dimensionality Reduction MATERIA: Inteligencia Artificial PROFESOR: Federico Miguel Cirett Galán ALUMNOS: Alan Adalberto Ortiz Pérez Brian Harlán Samaniego Dávila Hermosillo, SON. 27 / NOV / 2022 INTRODUCCIÓN En esta actividad el objetivo es aplicar el PCA o Principal Component Analysis (análisis de componentes principales) para reducir las dimensiones de los datos utilizados en ejercicios previos, con el objetivo de comparar los resultados obtenidos antes y después de aplicar el PCA. PROCEDIMIENTO El primer paso fue preparar los datos para ser analizados. A partir del análisis inicial de los datos, se identificaron 10 usuarios y 8 gestos por usuario. Se obtuvo la cantidad de registros con los que se contaba, por usuario y por gesto. La cantidad de registros se muestra de la siguiente manera: Usuario 1 Gesto 1 16 Gesto 2 16 Gesto 3 17 Gesto 4 16 Gesto 5 1 Gesto 6 13 Gesto 7 17 Gesto 8 17 Muestras 113 Usuario 2 Gesto 1 35 Gesto 2 1 Gesto 3 32 Gesto 4 38 Gesto 5 1 Gesto 6 26 Gesto 7 32 Gesto 8 33 Muestras 198 Usuario 3 Gesto 1 30 Gesto 2 2 Gesto 3 30 Gesto 4 30 Gesto 5 2 Gesto 6 26 Gesto 7 30 Gesto 8 30 Muestras 180 Usuario 4 Gesto 1 31 Gesto 2 3 Gesto 3 35 Gesto 4 35 Gesto 5 2 Gesto 6 26 Gesto 7 34 Gesto 8 34 Muestras 200 Usuario 5 Gesto 1 30 Gesto 2 3 Gesto 3 30 Gesto 4 30 Gesto 5 2 Gesto 6 26 Gesto 7 30 Gesto 8 30 Muestras 181 Usuario 6 Gesto 1 30 Gesto 2 4 Gesto 3 28 Gesto 4 30 Gesto 5 3 Gesto 6 26 Gesto 7 30 Gesto 8 30 Muestras 181 Usuario 7 Gesto 1 21 Gesto 2 4 Gesto 3 22 Gesto 4 22 Gesto 5 21 Gesto 6 12 Gesto 7 22 Gesto 8 22 Muestras 146 Usuario 8 Gesto 1 30 Gesto 2 2 Gesto 3 30 Gesto 4 30 Gesto 5 30 Gesto 6 26 Gesto 7 30 Gesto 8 30 Muestras 208 Usuario 9 Gesto 1 22 Gesto 2 8 Gesto 3 22 Gesto 4 22 Gesto 5 22 Gesto 6 12 Gesto 7 22 Gesto 8 22 Muestras 152 Usuario 10 Gesto 1 22 Gesto 2 3 Gesto 3 21 Gesto 4 27 Gesto 5 20 Gesto 6 11 Gesto 7 19 Gesto 8 20 Muestras 143 Siendo en total 1,702 muestras con diferente número de registros. Muestras x Gesto Gesto 1 Gesto 2 Gesto 3 Gesto 4 Gesto 5 Gesto 6 Gesto 7 Gesto 8 267 46 267 280 104 204 266 268 Muestras 1,702 Se eliminó el gesto 5, muestra 7, por estar repetido. Se graficaron las muestras con el objetivo de identificar y descartar aquellas que no fueran representativas de la clase, y así quedarse sólo con las que si fuesen representativas. En la siguiente imagen podemos ver un ejemplo. En este ejemplo, la muestra m007 no corresponde con el gesto, por lo que se descarta. Las direcciones de los vectores de los gestos son las siguientes: Gesto Imagen de Vector Gesto 1 Gesto 2 Gesto 3 Gesto 4 Dirección Gesto 5 Gesto 6 Gesto 7 Gesto 8 Cantidad de elementos descartados (eliminados) por no ser representativos de la clase: Muestras eliminadas x Gesto Gesto 1 Gesto 2 Gesto 3 Gesto 4 Gesto 5 Gesto 6 Gesto 7 Gesto 8 22 5 24 22 28 136 138 101 Muestras 476 Que representan el 27.98% del total de muestras. En total nos quedamos con 1,226 vectores de gestos para el análisis. Las muestras quedaron repartidas de la siguiente manera: Muestras x Gesto Gesto 1 Gesto 2 Gesto 3 Gesto 4 Gesto 5 Gesto 6 Gesto 7 Gesto 8 245 41 243 258 76 68 128 167 Muestras 1,226 Al analizar los puntos por muestra, se observó que no todas las muestras contaban con puntos suficientes para realizar el análisis, lo que nos dejaba con una disparidad. Para resolverlo, se utilizó el método de interpolación de datos para estandarizar a 12 puntos de datos por muestra. Después se procedió a clasificar los datos por gestos en vectores de “x” y “y” de 12 puntos por muestra, los que nos dejó con una representación más sustanciosa y representativa para el algoritmo de machine learning. Para la elaboración del dataset, lo que se hizo fue calcular las deltas ∆x y ∆y, es decir, la razón de cambio de “x” y “y”, además del ángulo de “y” con respecto a “x”, quedando el dataset de la siguiente manera: Este dataset es el que utilizaremos para las pruebas. Las fórmulas utilizadas fueron las siguientes: Para dy: ∆𝑦 = 𝑦𝑓𝑖𝑛𝑎𝑙 − 𝑦𝑖𝑛𝑖𝑐𝑖𝑎𝑙 = 𝑓(𝑥 + ∆𝑥) − 𝑓(𝑥) Para dx: ∆𝑥 = 𝑥𝑓𝑖𝑛𝑎𝑙 − 𝑥𝑖𝑛𝑖𝑐𝑖𝑎𝑙 = (𝑥 + ∆𝑥) − 𝑥 Razón de cambio (rc): 𝑟𝑐 = ∆𝑦 ∆𝑥 Ángulo (ang): 𝑦 𝑎𝑛𝑔 = 𝑡𝑎𝑛−1 ( ) 𝑥 CÓDIGO Caso 1: PCA + pivot Importamos las librerías: Cargamos los datos (archivo .csv): Mostramos los datos: Pivoteamos los datos: Aplicamos PCA: Aplicamos K-Means: Mostramos la gráfica: CASO 2: PCA + pivot + normalización Normalizamos los datos: Pivoteamos la tabla: Aplicamos PCA: Aplicamos K-Means: Graficamos los resultados: Ahora veremos qué pasa si aplicamos PCA a los datos en crudo, sin normalizar y sin la función pivot_table. Caso 3: PCA sin pivot ni normalización Cargamos los datos crudos: Aplicamos PCA: Aplicamos K-Means: Generamos la gráfica para analizar los resultados: Podemos ver que el resultado empeoró, demostrando que el PCA no funciona bien sin normalización. Ahora analizaremos los datos con K-Means sin normalizar y sin PCA. CASO 4: K-Means sin PCA Cargamos los datos: Aplicamos K-Means: Graficamos: Podemos observar que el resultado es muy similar al del caso 3, pero con un orden diferente. Ahora probaremos con el algoritmo de SVM. CASO 5: SVM + PCA Importamos la librería para SVM: Cargamos el archivo y preparamos las variables: Aplicamos SVM: Calculamos la precisión del modelo: Podemos ver que se obtuvo una buena precisión. Generamos una matriz de confusión: Ahora aplicamos SVA con 4 componentes: Mostramos la gráfica de la relación entre el componente 1 y 2: Relación entre el componente 3 y 4: Podemos ver que en este caso es capaz de separar el tercer y cuarto componente en dos clases fácilmente diferenciables, sin embargo, una de las desventajas de PCA es que es difícil saber lo que esos dos componentes representan en realidad. CONCLUSIONES El PCA nos ayuda a reducir las dimensiones de un set de datos, a la vez que reduce a lo mínimo posible la pérdida de información o de certeza. Esto lo hace tomando las variables de mayor varianza y creando nuevos componentes a partir de ellas. Esto es especialmente útil cuando trabajamos con datasets compuestos por un gran número de variables, y también nos puede ayudar a identificar las variables más relevantes de nuestro dataset y concentrar nuestra atención hacia ellas. El reducir la dimensionalidad también facilita el análisis de los datos y reduce los tiempos de entrenamiento.