Mínimos en data mining: mínimo local y global

| Última modificación: 19 de julio de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

Existen dos tipos de mínimos en data mining y, en general, en las matemáticas: el mínimo local y el mínimo global.

En este post, hablaremos un poco de ambos mínimos en data mining y veremos algunos ejemplos.

Mínimos en data mining: contextualización

¿Qué ocurre cuando tenemos una función con varios mínimos en data mining que son locales?

Las funciones que trataremos de minimizar muchas veces no serán funciones convexas como la que hemos visto, sino que podrán tener varios mínimos en data mining que son locales.

Es imposible garantizar que nuestro algoritmo de optimización acabará en un mínimo global, pero por lo menos nos tenemos que asegurar de que cae en un mínimo local con un valor lo suficientemente cercano al del mínimo global.

Veamos un ejemplo con la siguiente función:

In [31]: myfunc2<- function (x) {0.05*x^2+sin(x)}
x<-seq(-10,10, length.out = 100)
y<-myfunc2(x)
plot(x,y,t="l")
In [32]: library(plotrix)
derivada_myfunc<-function (x, h, func) { (func(x+h)-func(x))/h }

x_0<--20
delta <- 1
#delta <- 3 #Cambiar delta
h<-0.001
criterio_convergencia<-0.5
x_historico<-c()
In [ ]: x_new <- x_0 - derivada_myfunc(x_0, h, myfunc2) *delta
x 0 <- x_new
x_0
x_historico<-c(x_historico,x_0)

plot(x,y,t="l")
points (x_historico,myfunc2(x_historico),col="red")
color.scale.lines (x_historico, myfunc2 (x_historico), c(1,1,0) ,0,c(0,1,1), colvar=1:length(x_historico), lwd=2)
In [ ]: Library(plotrix)
derivada_myfunc<-function(x, h, func) { (func(x+h) - func(x))/h}

x_0 <- -20
delta <- 1
#delta <- 3 #Cambiar delta
h <- 0.001
criterio_convergencia <- 0.5
x historico<-c()
x_new <- x_0 - derivada_myfunc(x_0,h,myfunc2)*delta 
x_0 <- x_new

x_0
x_historico<-c(x_historico,x_0)


plot(x,y,t="l")
points (x historico, myfunc2(x_historico), col="red")
color.scale.lines (x_historico, myfunc2(x_historico), c(1,1,0), 0.c(0,1,1), colvar=1:length(x_historico), lwd=2)

-18,4085884663898
mínimos en data mining: gráfica inicial

La función tiene la siguiente progresión:

  • -18,4085884663898
  • -17,4719052243017
  • -15,91622094432
  • -13,3461530005463
  • -12,723005708795
  • -12,4385907550803
  • -12,1865650538608
  • -11,8965097633672
  • -11,4905062858255
  • -10,8160373883828
  • -9,55541778067513
punto 2 en la gráfica

El siguiente punto se forma en este último valor.

¿Cómo va a calcular? Pues calcula la derivada, la proyecta y coloca el punto en función del delta que se haya puesto y del valor de la derivada.

  • El siguiente punto sería el -7,60838228533476, expuesto en la gráfica:
punto 3 en la gráfica
  • A continuación, estaría el -7,09121674379974:
punto 4 en la gráfica

En este caso, la derivada ya sería muy pequeña. Esto se puede apreciar porque la línea se torna más horizontal que vertical.

Después de ahí, la línea no avanza más. Esto se debe a que ha convergido en un mínimo local. Después de esto, poco se puede hacer. Podríamos volver a ejecutarlo de dos formas:

  1. O bien cambiándole el x_0 y poniéndole otro valor.
  2. O bien podríamos intentar cambiar el delta.

Si le cambiamos el delta, el código quedaría así:

In [ ]: Library(plotrix)
derivada_myfunc<-function(x, h, func) { (func(x+h) - func(x))/h}

x_0 <- -20
delta <- 1
delta <- 3 #Cambiar delta
h <- 0.001
criterio_convergencia <- 0.5
x historico<-c()

Al código anterior simplemente le quitamos el # que tenía en el segundo delta y con eso ya solucionamos el problema de manera parcial. Decimos parcial porque, aunque avanza, le cuesta encontrar el mínimo; esto sucede cuando tenemos deltas muy grandes:

rebote en gráfica

Cuando estaba atascado, el gráfico pintaba así:

gráfica con delta 1

Pero cuando se cambia el delta a 3, pinta así:

gráfica con delta 3

Como podemos observar, por muchas iteraciones que haga, nunca va a converger. Se ha quedado en ese punto y no hay mucho que hacer; es lo que sucede cuando tienes deltas muy grandes.

Todo está en prueba y error, por lo que debes seguir intentándolo hasta que te funcione.

¿Qué tal si, mientras sigues entendiendo de qué va esto de los mínimos en data mining, pides ayuda a los expertos? En Keepcoding tenemos para ti nuestro Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, en el que puedes aprender en poco tiempo todo lo necesario para incursionar en el mercado laboral. ¡Apúntate y conviértete en todo un experto!

Sandra Navarro

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado