top of page

COSAS VEREDES

  • fjroar
  • 7 jul 2021
  • 2 Min. de lectura

Dado que hasta ahora Verano, ha habido pocos días sin nubes en la alegre Comunidad de Madrid, me he decidido, cámara en mano a tratar de hacer fotografía desde la misma ciudad de Madrid a pesar de su enorme contaminación lumínica. Un cielo que prácticamente no deja entrever estrellas de magnitud más allá de la 3. A pesar de todo insistí y esto es lo que obtuve:


La foto está tomada desde el suelo de mi terraza en Manoteras, donde tengo muchos edificios en frente, las correspondientes farolas de la zona para que la gente no tropiece y eso, y vecinos alrededor que enciende y apagan continuamente sus lucecitas, ...


Pues bien, si os fijáis en la foto veréis un punto verde casi en el centro, de hecho, si ampliais la foto veréis como ese punto verde crece y deja entrever como un anillo verde, ... Se trata de una nebulosa denominada M57 de magnitud 8.8 es decir, que ni de coña la podéis ver con vuestros ojitos.


En fotos buenas con más aumentos y no en Madrid, veríais tonalidades más rojizas y cálidas que las verdes, pero vamos, qué ibais a esperar de un cielo Bortle 7 como el que tenemos aquí.


Esta nebulosa está en la constelación de Lyra que es una constelación típica del verano cuya estrella más brillante Vega, es básicamente mi estrella preferida. Una constelación pequeña pero llena de objetos interesantes como este muy fácil de encontrar, de hecho, el punto verde este de m57 se encuentra en el extremo del pequeño trapecio que constituye la constelación y entre las estrellas beta y gamma de dicha constelación, muy fácil de encontrar con la cámara.


Para sacar esta foto me he valido de los mismos elementos que el anterior post de Astrofotografía: cámara reflex, montura star tracker, teleobjetivo de 300 mm sigma apo, y trípode, lo que sí he usado para limpiar de "caquita" la foto ha sido el programa pixinsight además se hacer un apilado sencillo de sólo 7 imágenes de 20 segundos de exposición, 5 darks, 10 flats y 10 bias. Con eso obtengo el resultado anterior, frente al resultado de una única foto con un mínimo tratamiento, que da una imagen triste tal y como se muestra a continuación:


Esta última visión capta la auténtica contaminación lumínica que no nos deja ver nada, una única toma e 20 segundos que si no se trata, ná de ná

 
 
 


Uno de los modelos que más me fascinan, y no por su potencia predictiva, son los conocidos en español como Máquinas de Vectores Soportes. Lo me fascina de estos modelos son las ideas geométricas que subyacen en su entrenamiento y en el algoritmo que lo soportan, pero no voy a escribir sobre esto en esta entrada, ya que me quiero referir más a los outputs, es decir, qué handicaps ofrece la interpretación de un modelo de este tipo cuando se desea aplicar en problemas de datos.


Antes de nada hay que comentar que los SVM estuvieron muy de moda en kaggle hace más de un lustro porque ofrecían de un modo rápido predicciones muy potentes, de hecho, su origen se remonta a los años 90, en los que fueron usado por Vapnik para reconocimiento de escritura manual, ofreciendo un gran ajuste y ahorro de recursos frente a las Redes Neuronales que en aquella época estaban un poco de capa caída.


Cortes, C.; Vapnik, V. Support-vector networks Machine Learning, 20(3), 273-297




Mi primer acercamiento a estos modelos venían del "antiguo mundo de la minería de datos", donde ya por el año 2008, podían utilizarse en herramientas de minería de datos como SAS Enterprise Miner. En aquella época se abogaba por el uso de estos modelos en Riesgo de Crédito en aras de su potencia como alternativa los clásicos Credit Scoring, pero no llegó a prosperar la idea en el mundo bancario, donde los reguladores, en materia de riesgo, van con mucha prudencia a la hora de elegir modelos para temas donde se juega con enormes cantidades de dinero y no les falta razón, porque sin duda ellos si saben de las consecuencias de aplicar un mal modelo cuando se conceden préstamos, o que nadie pueda dar una explicación sólida cuando ocurran sucesos extraños derivados de los modelos que se aplican.


Bajo mi punto de vista, este tipo de modelos, en su versión más sencilla, ofrecen una falsa visión de interpretabilidad, que claro, cuando hay 2 variables como se muestra en la figura anterior, al final lo que se genera es, en los SVM de tipo lineal, una inecuación que separa las regiones del tipo a1 · x1 + a2 · x2 > 0, de modo que se puede saber qué, aparte de generarse una ecuación de ligadura entre todas las variables explicativas, el signo de los coeficientes a1 y a2 indica de si la variable favorece hacia una región u otra. Incluso en el caso de tener un número n de variables y crear fronteras del tipo: a1 · x1 + a2 · x2 + ... + an · xn> 0; se llegan a interpretaciones más o menos entendibles donde se tiene información no sólo del signo de cada una de las variables, sino incluso de grupos de variables entre sí, eso sí, sin darnos cuenta, hemos casi perdido el tema de la importancia de la variable aunque con un "poco de maña", se puede recuperar el concepto.


Pues bien, entonces ¿Qué problema ofrecen estos modelos? Estos modelos adolecen de lo que se conoce como Curse of Dimensionality de lo que se tratará en otro momento, pero ofrecen en mi opinión otro tipo de debilidades y es que en su versión lineal, no se va a poder hacer mucho para los casos generales de poblaciones no separables, es decir, en general los datos no van a estar agrupados en 2 subpoblaciones como en la figura anterior y se tendrá un lío enorme difícil de graficar. Incluso en situaciones de 2 variables, puede ocurrir que nos encontremos ante la necesidad de separar una población simulada como la siguiente:


En este caso, la versión lineal no dará ningún resultado satisfactorio, sin embargo es aquí donde los SVM a través del concepto de kernel y de lo que en geometría se conoce como "embedimiento", son capaces de generar fronteras capaces de curvarse cuando se proyectan en el plano y lograr así la separación, pero claro, el problema ahora está en ¿A qué precio se logra eso? El precio que hay que pagar es que no se va a obtener una ligadura claramente interpretable como en el caso anterior. Es decir, en el caso más general, donde alguien use un kernel genérico ante un número relativamente alto de variables 5 o más, prácticamente, no va a tener control sobre la frontera que crean los SVM y cómo dicha frontera podrá ser finalmente representada en el espacio original de 5 o más variables.

Ante una población como la de la anterior figura, en R se podría resolver del siguiente modo, mediante una búsqueda de un kernel radial (no lineal):


tune.out = tune(svm,factor(y)~.,data=xtrain,kernel="radial",sacale=FALSE,type='C-classification', ranges=list(cost=c(0.001, 0.01, 0.1, 1)))


Que lugar a la siguiente frontera, que gracias a que se está en dimensión 2, hasta podría dibujarse:

Sin embargo, se observa que ahora no hay 2 sino 3 regiones, con lo que se necesitan 2 inecuaciones posiblemente de tipo no lineal (lo cual complica aún más el tema), la interpretación además se complica incluso si se quiere plasmar algebraicamente la representación anterior. Se puede también buscar entre los vectores soporte que generan la frontera a ver si ofrecen algo de luz, pero en casos generales, no tendremos más que a lo sumo (y con suerte dependiendo de los datos) alguna que otra representación bonita de difícil interpretación.


En este sentido los SVM apelan a la continua lucha simplicidad vs interpretabilidad y seguramente en kaggle, los SVM de carácter no lineal habrían ganado concursos frente a regresiones logísticas sencillas, pero el problema está en ¿Quién entiende el modelo? ¿Hasta dónde hay que sacrificar la interpretabilidad en aras a la predictividad? Son preguntas sobre las que hay que tomar decisiones conjuntas entre los DS que aplican conocimientos y aterrizan conceptos complejos y la gente de negocio que son los que tienen la pasta y toman la decisión de aplicarlos o no.

 
 
 

Hoy toca hablar de algo un poco más teórico que particularmente me gusta al ser creo que sencillo de entender, trataré de hacerlo de un modo algo superficial, porque creo que para problemas de corte aplicado puede tener su importancia o más bien tener un poco la visión de lo que hay por detrás de los algoritmos, esa idea geométrica que sólo aparece si uno lee un paper, pero que aparece de modo muy enmarrañado y difícil de entender en ocasiones.



En cualquier rama aplicada, donde se haga uso de modelos, con frecuencia se olvida que en la estimación de los parámetros existe una superficie en la que se aspira a encontrar su correspondiente mínimo. Es curioso cómo se olvida lo más bello de estos modelos como es la geometría subyacente ...


Así pues, en un modelo de regresión lineal, donde se cumpla al menos la condición de multicolinealidad, la superficie será una especie de paraboloide, bastante lisa, totalmente derivable en todos sus puntos y con la existencia y unidad de un mínimo que garantiza la existencia de parámetros óptimos, dado un conjunto de entrenamiento al partir del cual se desea inferir una generalidad. Claro está el dibujo superior que precede a esta entrada es uno de estos casos, donde con sólo 2 variables w1 y w2, permite una visualización como la anterior donde se ha utilizado código R muy sencillo, donde cualquiera con algún estudio de estadística, sin tener que ser DS, puede seguir lo que se hace:


# Se genera una rejilla cuadrada desde -2 hasta 2 con 50 puntos intermedios por fila

w1 = seq(-2,2,length=50)

w2 = w1


# Se crea una función de error cuadrática análoga a la que se usaría en un problema de este # estilo, pero con 5 puntos (que son los sumando que la componen)

f1 = function(w1,w2)

{(1 - (2*w1 + w2*3))^2+ (1 -(w1 + w2*4))^2 + (0 - ((-1)*w1 + w2))^2 +

(0 - ((-1)*w1 + (-1)*w2))^2 + (0 - (2*w1 + (-1)*w2))^2}

# Se crea la superficie

z = outer(w1,w2,f1)


# Se obtiene el anterior gráfico

persp(w1,w2,z, theta = 30, phi = 30, expand = 0.5, col = "lightblue")



Pues bien, ahora que está tan de moda los algoritmos de corte más avanzados, como los random forest, xgb, svm, ... conviene tener en cuenta que existen funciones de coste que pueden generar situaciones no tan claras como la figura anterior.


Supóngase que el código anterior, donde se pone f1, se cambia el interior de los sumandos al cuadrado, por una función de tipo logístico tal como sigue:


f1 = function(w1,w2)

{(1 - 1/(1+exp(2*w1 + w2*3)))^2+ (1 - 1/(1+exp(w1 + w2*4)))^2 + (0 - 1/(1+exp((-1)*w1 + w2)))^2 +

(1 - 1/(1+exp((-1)*w1 + (-1)*w2)))^2 + (0 - 1/(1+exp(2*w1 + (-1)*w2)))^2}


La superficie que se genera cambia radicalmente su forma:

Ahora no queda tan claro dónde está el mínimo, ni tampoco si ese mínimo es o no único y ni tan siquiera si existirá o no.


Aquí está un poco la razón por lo que hay que fijar semillas de aleatorización en la mayoría de los algoritmos de Machine Learning, porque dependiendo de donde se empiece, uno puede llegar a un mínimo relativo (que no sea absoluto) o quién sabe al absoluto. En el caso anterior, habría tan solo una función, pero imaginarios que hago la función, de la función, ... entonces la forma de la superficie anterior puede ser aún más retorcida y compleja, eso es justamente lo que sucede, por ejemplo, con las redes neuronales, que al poder elegirse funciones, no lineales y en ocasiones muy complejas, la probabilidad de que los algoritmos conduzcan a mínimos relativos es bastante elevada y es por lo que fuera de los problemas de visión artificial, reconocimiento de imágenes, ... cuando se tratan de aplicar a problemas con no muchos datos para temas predictivos, no siempre ofrecen los resultados que uno espera. Aunque hay que tener en cuenta que hoy en día muchos de estos algoritmos suelen mejorar los modelos tradicionales, no obstante, como sucede en la estadística, "no existen los siempres" y no hay que olvidar que a veces algoritmos sencillos pueden ser efectivos y sobre todo, rápidos en convergencia cuando hay enormes cantidades de datos también.

 
 
 

© 2021 by Francisco J. Rodríguez Aragón. Proudly created with Wix.com

bottom of page