Características deseables en un algoritmo de detección de patrones

11 de Julio de 2010

Una vez establecido que la detección de patrones se realiza a través del diseño de algoritmos que son finalmente ejecutados por computadores, conviene determinar cuáles son las características deseables en un algoritmo. Entre las más importantes cabe citar:

  • Eficiencia computacional: La detección de patrones en bases de datos es una tarea eminentemente práctica. En consecuencia, los algoritmos que se diseñen para este fin deben ser capaces de dar respuesta a los problemas que se planteen, más allá de cuál sea el tamaño particular de la base de datos sobre la que se vaya a aplicar el algoritmo. Dicho de otro modo, un algoritmo que funcione bien (es decir, que sea capaz de detectar patrones en un tiempo razonable) en bases de datos de reducido tamaño (con unas pocas decenas de filas y unas pocas columnas) pero fracase en bases de datos reales (por presentar tiempos de ejecución muy elevados) no resultará aceptable. De forma más precisa, debe exigirse que un algoritmo de detección de patrones sea eficiente desde el punto de vista computacional. Son muchas las formas de medir la eficiencia de un algoritmo pero, quizás, la más extendida sea la evaluación de su complejidad-temporal. La complejidad-temporal de un algoritmo es una expresión del tiempo de ejecución (o del número de operaciones) que precisa dicho algoritmo en función del tamaño del problema (medido, por ejemplo, a partir del número de filas o columnas de la base de datos analizada). Para expresar la complejidad-temporal de un algoritmo suele recurrirse a la llamada “notación de Landau” (o notación de la O mayúscula). Se dice que un problema es tratable cuando el algoritmo más eficiente para resolverlo tiene complejidad temporal polinómica o inferior, es decir, cuando la función que pone en relación el tiempo (o número de operaciones) que requiere el algoritmo para resolver el problema con el tamaño de éste pertenece a O(n^k) con k \in N. Este requisito es, en realidad, bastante laxo ya que complejidades polinómicas pueden suponer (si el grado del polinomio es alto) tiempos de ejecución que hoy en día (a pesar del rápido incremento en la velocidad de los procesadores) resultan inaceptables. Lamentablemente, muchos de los algoritmos que se diseñan para la detección de patrones presentan complejidades-temporales superiores a la polinómica y son, por tanto, intratables desde el punto de vista de la teoría de la complejidad algorítmica.
  • Robustez: Cualquier base de datos, y en mayor medida si es de gran tamaño, es susceptible de contener valores erróneos. En ocasiones, estos valores erróneos serán detectados (y convenientemente corregidos) por los procedimientos de detección de outliers, pero en ocasiones, aun a pesar de los mayores esfuerzos por parte de los analistas, los datos erróneos escaparán esta criba preliminar y pondrán en peligro la calidad de los análisis que se realicen tomando como materia prima la base de datos en la que se encuentran. Las fuentes de las que pueden provenir estos datos erróneos (a las que se les suele llamar fuentes de errores sistemáticos) son muchas y de diversa naturaleza. Entre otras cabe citar los problemas en los mecanismos de obtención de los datos (por ejemplo, errores en los instrumentos de medida, que pueden no estar correctamente calibrados), errores en la transmisión de los datos de unos soportes a otros (por ejemplo, al teclear manualmente los datos de un cuestionario en papel a una base de datos electrónica) o también errores en la preparación de los datos previa a la realización de algún análisis. Sin ninguna duda, el mejor antídoto contra este tipo de errores es un cuidado exquisito por parte del encargado de alimentar o manipular la base de datos en cada uno de los pasos descritos, pero, a pesar de los mejores esfuerzos por su parte, es imposible evitarlos por completo. De este modo, resulta evidente que una característica muy deseable en los algoritmos automáticos de detección de patrones es que éstos sean relativamente insensibles a la presencia de una cierta proporción de datos erróneos. A esta propiedad se le llama robustez. Así, se dice que un algoritmo de detección de patrones es robusto cuando los patrones detectados en una base de datos no se ven alterados (o al menos no de forma notable) cuando en ésta existe una proporción pequeña de datos erróneos. Lamentablemente, esta propiedad de robustez entra en conflicto con otra propiedad deseable: la sensibilidad, por la que un algoritmo debe detectar patrones diferentes en bases de datos diferentes.
  • Estabilidad: Si entendemos una base de datos como una manifestación concreta (particular) de un determinado mecanismo generador de datos, es cuando el concepto de estabilidad de un algoritmo cobra todo su significado. Dicho brevemente: los algoritmos de detección de patrones deberían detectar pautas en los mecanismos generadores de datos y no en la base de datos concreta que están analizando. Dicho de otra forma: diremos que un algoritmo de detección de patrones es estable si obtenidas dos bases de datos alternativas mediante el mecanismo generador (llamémoslas B1 y B2), el algoritmo detecta los mismos patrones en B1 y en B2. Así, un algoritmo estable es aquél que detecta los patrones que corresponden al mecanismo generador de los datos y que deja de lado las particularidades específicas de la base de datos que se está analizando.

A este respecto resulta muy apropiado el comentario de John Allen Paulos en su obra Innumeracy (traducida al español como El Hombre Anumérico) quien cita a Plutarco cuando afirma “It is not great wonder if, in the long process of time, while fortune takes her course hither and thither, numerous coincidences should spontaneously occur”. Se trata de una advertencia sobre el riesgo de lo que dos mil años más tarde se ha dado en llamar overfitting: el riesgo de que un algoritmo de detección de patrones se ajuste en exceso a la realidad concreta de una base de datos detectando, de este modo, pautas que no corresponden al mecanismo generador de los datos sino que son particulares de la base de datos y, por tanto, no generalizables.

El mismo Paulos pone de manifiesto (en un ejemplo que luego recogen Christianini y Shawe-Taylor) cómo la única forma de protegerse del riesgo de overfitting es mediante la limitación de los patrones que cabe esperar encontrar en la base de datos. Si el analista de los datos está dispuesto a encontrar cualquier patrón y diseña el algoritmo con este criterio es seguro que encontrará algún patrón sorprendente: “The paradoxical conclusion is that it would be very unlikely for unlikely events not to occur”. El ejemplo al que recurren los mecionados autores para ilustrar este fenómeno es la muy conocida Paradoja del cumpleaños, que pone de manifiesto cómo son suficientes 23 personas reunidas en una sala para que al menos dos cumplan años en una misma fecha (una fecha cualquiera del año) mientras que son necesarias 253 personas para que alguna cumpla años en una fecha concreta establecida a priori. La clave está en el espacio de patrones que se está dispuesto a encontrar (un día concreto es mucho más restrictivo que cualquier día del año).

Otro ejemplo puede ayudar a ilustrar la idea de overfitting. En efecto, imaginemos que contamos con n parejas (xi,yi) de observaciones tales que todos los valores del primer elemento de la pareja son distintos . Imaginemos que buscamos un patrón que prediga el valor de y en función del valor de x. Pues bien, si el espacio de patrones es el conjunto de polinomios de grado k y estamos dispuestos a incrementar cuanto sea necesario el valor de k, será posible encontrar un patrón (un polinomio de grado n-1) que prediga de forma perfecta cada uno de los valores y en función del correspondiente x. Ahora bien, si mediante el mismo mecanismo de generación de datos obtuviéramos otro conjunto de observaciones y aplicáramos el patrón aprendido en la base original para tratar de efectuar predicciones en la nueva base, los resultados serían mucho menos espectaculares. El conjunto de patrones susceptible de ser analizado era excesivamente grande y, por tanto, ha ocurrido el fenómeno de overfitting.

En aprendizaje estadístico, la llamada complejidad de Rademacher mide la riqueza de una familia de funciones (posibles patrones), entendiendo esta riqueza como la capacidad de la familia de funciones a adaptarse (y detectar) ruido aleatorio. Cuanto mayor sea la complejidad de Rademacher de una familia de funciones, mayor es el riesgo de overfitting que se deriva de su utilización.

Como se ha mencionado ya, la única vía para evitar el problema del overfitting es a través de la limitación o restricción del espacio de búsqueda de posibles patrones. Con este fin, es necesario contar con conocimiento experto en la disciplina a la que se refiere la base de datos analizada. Sólo un experto en el ámbito de estudio (apoyado por el diseñador del algoritmo) puede decidir de manera informada cuál es la naturaleza de los patrones que cabe detectar en su ámbito de conocimiento así como señalar qué patrones no son razonables. De esta manera, el diseñador del algoritmo estará en las mejores condiciones para poder adaptar el algoritmo al ámbito al que se refiere la base de datos analizada. En este sentido, los algoritmos deben ser parametrizables para, a partir de una misma base, adaptarse a problemas de distinta naturaleza.

El cuarto paradigma

9 de Julio de 2010

Si bien es cierto que las pioneras en detectar el valor que reside en los datos que acumulaban en sus bases fueron las organizaciones empresariales, el mundo científico no ha sido ajeno a esta realidad. A mediados de los noventa, el desaparecido Jim Gray -científico estadounidense galardonado en 1988 con el premio Turing- fue capaz de anticipar esta nueva situación. Gray acuñó el término eScience para referirse al nuevo paradigma imperante en la investigación científica: la investigación intensiva en datos (data-intensive scientific rersearch). En opinión de este autor, la investigación científica ha atravesado cuatro estadios (paradigmas):

  • El paradigma empírico. En los albores de la ciencia, ésta era puramente empírica y su objetivo no era otro que el de tratar de describir los fenómenos naturales. En particular, los científicos no pretendían generar modelos o leyes que rigieran comportamientos universales sino tan solo explicar aquello que veían.

  • El paradigma teórico. La ciencia evolucionó y sus objetivos se tornaron más ambiciosos. La ciencia no se limitaba ya a tratar de explicar aquello que veía. Los científicos deseaban formular modelos de aplicación general: modelos universales. En otras palabras, a pesar de que la ciencia continuó siendo empírica, adquirió un carácter teórico. Las leyes de Kepler, las leyes de Newton o las ecuaciones de Maxwell son ejemplos apropiados de este estadio de la ciencia.

  • El paradigma de la simulación. Los modelos teóricos universales que formulaban los científicos en su esfuerzo por explicar el funcionamiento de la realidad se fueron volviendo más y más complejos, hasta el punto de que pronto resultó evidente que estas formulaciones eran demasiado complicadas como para poder ser resueltas de modo analítico (exacto). Los científicos recurrieron entonces a la simulación. La Física, la Biología o la Química (en el ámbito de las Ciencias Experimentales) o la Economía y la Psicología (entre las Ciencias Sociales) son ejemplos de disciplinas que han adoptado la simulación (normalmente apoyada en el recurso intensivo a los ordenadores) con el fin de valorar el desempeño de sistemas excesivamente complejos para ser evaluados mediante un enfoque analítico.

  • El paradigma intensivo en datos. En la actualidad, el progresivamente mayor recurso a la simulación ha generado grandes volúmenes de datos. A éstos se une el aluvión proveniente de las observaciones empíricas de las Ciencias Experimentales (que cuentan con instrumentos cada vez más precisos y potentes). Todos esos datos, captados o generados, se acumulan en bases de datos a la espera de ser analizados mediante potentes programas de ordenador que persiguen la detección de patrones o pautas de regularidad. Según este nuevo paradigma, estas pautas permitirán a los científicos aventurar nuevas conjeturas acerca de cómo funciona el mundo. Esta forma de entender la ciencia recibe el nombre de El Cuarto Paradigma.

I Conferencia Hispana R-project

30 de Diciembre de 2009

Los días 26 y 27 del mes de noviembre se celebró en la Universidad de Murcia la I Conferencia Hispana R-project. Lamentablemente no pude acercarme a Murcia para este evento pero los organizadores han puesto a nuestra disposición los vídeos de las jornadas. ¡Disfrutadlos!

Más información de cara a la organización de próximas jornadas aquí.

El modelo de ajuste con restricciones “pasa por la media”

23 de Diciembre de 2009

Consideremos el modelo teórico lineal

Y=X \beta + \epsilon

El modelo de ajuste correspondiente a este modelo teórico es

Y=X B + e

Este modelo de ajuste cumple

\bar{Y}=\bar{X} B

Este hecho se suele expresar diciendo que “el modelo de ajuste pasa por la media”. Este hecho resulta de gran utilidad práctica ya que permite el cálculo del término independiente en el caso de que el ajuste del modelo se esté efectuando mediante el método de datos centrados mediante el empleo de la siguiente fórmula:

a= \bar{y} - b_{1} \bar{X_1} - \ldots - b_{k} \bar{X_k}

Pero, ¿qué ocurre cuando al modelo teórico se le añaden restricciones lineales? ¿sigue pasando por la media? Dicho de otra forma: ¿se cumple la siguiente expresión?

\bar{Y}=\bar{X} B_C

Bajo ciertas condiciones, la respuesta es afirmativa y la demostración sumamente sencilla

Sabemos que

B_C = B + (X^t X)^{-1} C^t [C (X^t X)^{-1} C^t]^{-1} (\gamma - C B)

y por tanto

\bar{X} B_C = \bar{X} B +\bar{X} (X^t X)^{-1} C^t [C (X^t X)^{-1} C^t]^{-1} (\gamma - C B)

Para que \bar{Y}=\bar{X} B_C debe ocurrir que

\bar{X} (X^t X)^{-1} C^t [C (X^t X)^{-1} C^t]^{-1} (\gamma - C B) = 0

ya que \bar{Y}=\bar{X} B

Consideremos la matriz

\bar{X} (X^t X)^{-1} C^t

Demostraremos que, bajo ciertas condiciones muy generales, dicha matriz es nula y, en consecuencia, que

\bar{X} (X^t X)^{-1} C^t [C (X^t X)^{-1} C^t]^{-1} (\gamma - C B) = 0

por lo que

\bar{Y}=\bar{X} B_C

En efecto,

\bar{X} (X^t X)^{-1} C^t = H_1 X (X^t X)^{-1} C^t

donde H_1 es la matriz que proyecta los vectores de R^n en la dirección del vector formado por unos.

H_1 = 1 (1^t 1)^{-1} 1^t = \frac {1}{n} 1 1^t

El resultado de premultiplicar cualquier vector de R^n por la matriz H_1 es un vector de R^n cuyos componentes son todos iguales e iguales a la media de los componentes del vector original.

Consideremos ahora la matriz

X (X^t X)^{-1}

Si premultiplicamos esta matriz por X^t, el resultado es la matriz identidad, por lo que todas las columnas de X (X^t X)^{-1} excepto la primera son ortogonales al vector de R^n formado por unos -la primera columna de la matriz X-. Si no fuera así, (X^t X) (X^t X)^{-1} no sería la matriz identidad, lo cual es absurdo. Dicho de otro modo, las sumas de los elementos de todas y cada una de las columnas de la matriz  X (X^t X)^{-1} -excepto la primera- son nulas y, en consecuencia, las medias son nulas.

Como consecuencia de este hecho,

\bar{X} (X^t X)^{-1} = H_1 X (X^t X)^{-1}

es una matriz cuyos componentes son nulos salvo los de la primera columna.

¿Qué debe ocurrir para que la matriz \bar{X} (X^t X)^{-1} C^t sea nula?

Es suficiente con que la primera columna de la matriz C sea nula. En ese caso, al postmultiplicar \bar{X} (X^t X)^{-1} por C^t se obtendrán combinaciones lineales de columnas de ceros, ya que la primera columna de \bar{X} (X^t X)^{-1} -la única que puede no tener ceros- no forma parte de las combinaciones lineales.

¿Cómo podemos expresar la idea de que la primera columna de la matriz C sea nula de una forma más intuitiva? La primera columna de la matriz C recoge los coeficientes del término independiente en las restricciones lineales que se añaden al modelo teórico. Decir que la primera columna de C es nula es lo mismo que decir que las restricciones añadidas al modelo teórico no involucran al término independiente.

En resumen, hemos demostrado que si las restricciones lineales que se añaden a un modelo teórico no incluyen al término independiente -lo que, en la práctica es la situación más habitual- entonces el modelo de ajuste con restricciones “pasa por la media”, es decir, satisface la ecuación

\bar{Y}=\bar{X} B_C

Finalmente, este hecho resulta de gran utilidad práctica para calcular el término independiente en el modelo de ajuste con restricciones si es que se está trabajando con datos centrados ya que se cumple que

a_C= \bar{y} - b_{1C} \bar{X_1} - \ldots - b_{kC} \bar{X_k}

Hierarchical Clustering on Principal Components

30 de Julio de 2009

Al final no me pude acercar a Rennes para asistir a la conferencia uSER2009!. Pero los organizadores han hecho un gran trabajo y han publicado con gran diligencia los resúmenes de las ponencias que allí se presentaron.

Esto me reafirma en mi opinión de que el equipo de agrocampus ouest sigue siendo el mejor en lo que a análisis multivariante se refiere. Ahora “amenazan” con mejorar su paquete FactoMineR incluyendo en él funciones que permiten realizar análisis cluster jerárquicos a partir de los resultados obtenidos de un análisis de componentes principales.

Estaré atento a la publicación de la nueva versión.