- fjroar
- 15 jun 2021
- 3 Min. de lectura
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.