22 May 2018
Reducción de la dimensionalidad
Lectura: 11 mins.
|
Dificultad:

Reducción de la dimensionalidad (o por qué más datos no siempre es mejor)

La mayoría de los profesionales en el campo del Data Science coinciden en que, para la construcción de un modelo de data mining bueno, se debe invertir alrededor de un 75% del tiempo y esfuerzo en la fase de preprocesado de los datos —si aún no tienes claro qué es data mining (o minería de datos), te recomiendo pasarte por mi anterior post para resolver tus dudas—.

Una de las técnicas de preprocesado para modelos de aprendizaje supervisado es la reducción de la dimensionalidad, que no es más que la reducción del número de variables en una colección de datos. En este artículo vamos a explicar en qué consiste.

Beneficios de reducir la dimensionalidad

A menudo, el monstruo de Diógenes se nos aparece y nos dice que cuanta más información mejor, que da igual si no nos va a servir de mucho, que menos da una piedra y que mejor no tocar nada, por si nos cargamos algo.

Si no sabemos cómo hacerlo bien (y no tenemos intención de aprender) quizá sí es recomendable escuchar al monstruo Diógenes, pero en cualquier otro caso, deberíamos mandarlo a paseo y seguir leyendo este post.

Este data scientist no sabe lo que es la reducción de la dimensionalidad.

Las razones por las que nos interesa reducir la dimensionalidad son varias:

  • Porque interesa identificar y eliminar las variables irrelevantes.
  • Porque no siempre el mejor modelo es el que más variables tiene en cuenta.
  • Porque se mejora el rendimiento computacional, lo que se traduce en un ahorro en coste y tiempo.
  • Porque se reduce la complejidad, lo que lleva a facilitar la comprensión del modelo y sus resultados.
  • Porque el KISS (Keep It Simple, Stupid!) está de moda.

Técnicas, métodos y algoritmos para reducir la dimensionalidad

Vamos a ver algunas técnicas, métodos y algoritmos que se pueden aplicar para reducir la dimensionalidad de nuestro set de datos.

La técnica más sencilla y la que vamos a ver más a fondo en el post es la de selección de variables, que no es más que seleccionar el conjunto de variables óptimo. Otra técnica es la de análisis de componentes principales. Esta última es más complicada de entender, por lo que no profundizaremos tanto.

Selección de variables

Un conjunto de variables óptimo para un conjunto de datos será el que contiene las variables más significativas del conjunto de datos original. Para seleccionar las variables se siguen diferentes criterios.

Uno de los criterios que se utiliza es la dependencia o correlación. Por ejemplo, para un modelo de predicción de cáncer en individuos humanos, el conjunto de datos con el que se trabaje probablemente contenga variables como la edad, la existencia de cáncer en otros miembros de la familia, si es fumador o no… Pero no variables como el color de los ojos.

Ya bien sea por conocimiento en el campo o por lógica, podemos intuir cuáles son las variables más significativas. Pero no siempre podemos estar seguros de que el color de los ojos no influye en la probabilidad de padecer cáncer o quizá no queramos arriesgar a hacer tal afirmación.

Para eso existen métodos matemáticos para medir la asociación y correlación de una variable con respecto a la variable a predecir para que nos lo chiven. ¡Quizá nos llevemos alguna sorpresa!

Otro criterio es el de la consistencia. Puede ser que tengamos variables redundantes en nuestro conjunto que tuvieran una correlación entre ellas suficientemente fuerte como para que no merezca la pena tener las dos. Por ejemplo, siguiendo con nuestro ejemplo de predicción de cáncer, quizá teniendo la variable de capacidad pulmonar, no merece la pena tener también la variable que indica si es fumador o no, ya que puede que esta última esté, de una forma u otra, ya recogida en la primera.

Como no tengo conocimientos de medicina y no me sorprendería que esta afirmación que acabo de hacer haría tirarse de los pelos a más de un profesional sanitario, lo comprobaría una vez más con métodos matemáticos.

Es probable que estéis otra vez tentados de hacer caso del monstruo de Diógenes y de mandarme a paseo con tantas matemáticas. Pero antes dejadme que os diga que no se necesita ni lápiz, ni papel, ni calculadora. Existe software, gratis por cierto, como WEKA, que con un par de clics te dice con qué variables se quedaría y con cuáles no. Tan solo hay que cargarle la colección de datos, contarle qué criterios y estrategias quieres llevar a cabo, y darle a un botón mágico. No tarda nada, por lo que puedes probar distintas configuraciones e incluso ver que tal rinde un modelo de aprendizaje con la nueva colección reducida de datos y comparar. Guay, ¿no?

Ejemplo práctico con Weka

Siempre se nos queda la información mejor grabada en el cerebro cuando vemos un ejemplo, así que aquí tenéis uno.

Vamos a trabajar con una colección de datos que contiene diferentes características de vehículos junto al precio de cada uno. El objetivo es establecer, mediante aprendizaje automático, el precio de nuevos vehículos que no tengamos ya en esta colección. Es decir, la clase a predecir es el precio y, al tener ya ejemplos con la clase establecida, podemos decir que se trata de un caso de aprendizaje automático supervisado, por lo que es recomendable plantearse aplicar un preprocesado de reducción de la dimensionalidad.

Por supuesto, habría que considerar aplicar adicionalmente otras técnicas de preprocesado, pero para poder centrarnos en la reducción de la dimensionalidad y sus resultados, vamos a limitarnos a esto y obviar el resto.

Utilizaremos el software WEKA mencionado en el apartado anterior. Si os animáis a seguir los pasos o queréis investigar por vuestra cuenta, podéis descargarlo aquí.

Los archivos de colección de datos para Weka tienen la extensión .arff y un formato específico para este software. La colección que vamos a usar es esta. Si os fijáis, la primera parte del documento son explicaciones sobre los datos, y la segunda los datos en sí.

Ejemplo práctico de reducción de la dimensionalidad

Nada más abrir Weka, os aparecerá una ventanita pequeña. Haced clic en Explorer.

Ejemplo práctico de reducción de la dimensionalidad en un set de datos

Para cargar los datos en Weka, simplemente hay que hacer clic en Open file, en la pestaña Preprocess, y seleccionar el archivo .arff que vamos a procesar.

Ejemplo práctico de reducción de la dimensionalidad en un set de datos

Comprobarás que, al cargar los datos, se llenará la ventana del Weka Explorer de información. Fijaros como en la sección Attributes aparece la lista de variables (o atributos) de la colección.

Ejemplo práctico de reducción de la dimensionalidad en un set de datos

Tenemos 16 variables o atributos. Entre ellas están la marca del coche, el número de puertas, el nivel de peligrosidad, las dimensiones, el tipo de combustible, la cantidad de combustible que consume en ciudad y en carretera, los caballos… y por supuesto, nuestra clase del modelo: el precio.

Antes de reducir el número de variables, vamos a aplicar a los datos originales el clasificador RandomForest, para luego volver a aplicarlo cuando hayamos seleccionado las variables, y así poder comparar.

Notas:

  • Un clasificador es un algoritmo de aprendizaje automático que sirve para clasificar o poner una etiqueta o dar un valor a la variable clase. Es decir, en nuestro caso será el algoritmo que decida el precio de los coches.
  • El clasificador RandomForest es un clasificador basado en los árboles de decisión. No vamos a entrar en detalle de cómo se comporta, porque no es la finalidad de este post.

En Weka, para aplicar un clasificador, hay que hacer click en la pestaña Classify. Ahí podremos elegir el clasificador que queramos y el método de testing.

En nuestro caso, podemos encontrar el clasificador RandomForest dentro de la carpeta trees; como método de testing, elegiremos Cross-validation, ya que no disponemos de ninguna colección .arff de testing.

Ejemplo práctico de reducción de la dimensionalidad en un set de datos

Hacemos clic en Start y el clasificador comenzará a hacer su trabajo. En mi caso, ha tardado 0,12 segundos y ha tenido un error relativo de 35,88%. Digo en mi caso, porque el clasificador tiene elementos aleatorios y, por tanto, los resultados no son exactamente iguales en cada ejecución (aunque sí deberían ser parecidos).

Ahora vamos a hacer lo que hemos venido a hacer, a reducir la dimensionalidad. Veréis lo increíblemente fácil que es con Weka. A pesar de tratarse de una técnica de preprocesado, tenemos que ir a la pestaña Select attributes. y elegir el tipo de algoritmos y métodos que queremos aplicar.

Vamos a dejar todos las opciones como están por defecto. Así que solo necesitamos hacer clic en Start y veremos como en la ventana inferior derecha se muestran los resultados y se listan los atributos (o variables) seleccionadas.

Ejemplo práctico de reducción de la dimensionalidad en un set de datos

De 16 variables que hay en la colección original, nos proponen quedarnos solo con 6. Eso sería reducir el tamaño de datos a menos de la mitad. ¿Creéis que el clasificador rendirá igual de bien? ¡Vamos a comprobarlo!

Para guardar una copia de la colección de datos reducida, solo hay que hacer clic con el botón derecho del ratón sobre el elemento subrayado en azul de la ventana Result list y seleccionar Save Result Buffer. Pero además, habrá que cargar esta copia reducida de la colección en la pestaña Preprocess, para poder trabajar con ella.

Vamos a aplicar el mismo clasificador que a la colección original, para que sea justo comparar el rendimiento de los modelos.

Ejemplo práctico de reducción de la dimensionalidad en un set de datos

Como vemos, de 0,12 segundos ha pasado a tardar menos que la mitad, 0,05 segundos. Y además, el error se ha reducido unas décimas (de 35,88% a 32,02%).

Vale, he de decir que no siempre se consigue reducir el error y que reducir el tiempo de ejecución de 0,12 segundos a 0,05 segundos o no, da un poco igual. Pero imaginad una colección de datos de millones de casos (en el ejemplo solo teníamos 159), donde el tiempo de ejecución del clasificador es de horas, tal vez días. En este caso, sí que importaría reducir el tiempo a la mitad, ¿verdad? Y si además el error no aumenta demasiado e incluso podemos llegar a reducirlo. ¡yo firmo!

Análisis de componentes principales

Pasemos a ver la siguiente técnica que os proponemos. La técnica de análisis de componentes principales requiere unos conocimientos avanzados de matemáticas que no todos los que estáis leyendo tendréis; aún así, vamos a conocer en qué consiste de forma teórica.

La idea básicamente es construir una dimensión (o variable) nueva a partir de la fusión de dos ya existentes. Vamos a ver un ejemplo con variables geográficas porque es más fácil de visualizar, pero se puede aplicar a cualquier tipo de variables, aunque sea más abstracto.

Vivimos en un punto del mapa, que tendremos como referencia, y observamos que hay un Pikachu a 12 m al Norte y a 20 m al Este. Estamos usando dos variables para describir dónde está el Pikachu, pero ¿podríamos combinarlas para así usar solo una variable?

Si nos inventamos nuestra propia coordenada J, que sería una combinación de la coordenada N y de la coordenada E, podemos describir en qué posición se encuentra el Pikachu con tan solo una variable. Habremos combinado dos dimensiones para crear una ficticia en su lugar.

Creación de dimensión

Cuando solo tenemos un elemento es muy fácil. Cuando hay varios, debemos tener en cuenta la correlación entre las variables a fusionar, ya que a menor correlación, es más la información que se pierde.

Creación de dimensión

En nuestro ejemplo, N y E están correlacionadas cuando los elementos están alineados, ya que se puede trazar una línea recta pasando por todos sin mucho error. En cambio, cuando la casa, Charmander y Pikachu no están alineados (imagen de la derecha), la nueva dimensión J ya no les representa.

 

Si queréis seguir investigando sobre reducción de la dimensionalidad, os sugiero ver el vídeo del youtuber Sitaj Raval (recomiendo mucho su canal) que habla sobre este tema.

Recordad: Keep it Simple, Stupid!