Optimización y Aprendizaje Automático: Algoritmos Avanzados y Técnicas de Clasificación
Algoritmos de Optimización y Clasificación: Una Visión General
Este documento presenta una descripción detallada de varios algoritmos clave utilizados en optimización y aprendizaje automático. Se exploran algoritmos de búsqueda de vecindad variable, enfriamiento estadístico, algoritmos de estimación de costes, GRASP, CGA, árboles de clasificación y otros métodos avanzados.
Búsqueda de Vecindad Variable (VNS)
La Búsqueda de Vecindad Variable (VNS) es un método de optimización que explora sistemáticamente diferentes vecindades de una solución para encontrar la mejor. El algoritmo se describe a continuación:
- Seleccionar el conjunto de sistemas de vecinos
Vk
, k = 1, . . . , kmax - Elegir una solución inicial
e0
- Repetir hasta que no se mejore
- Hacer k = 1
- Repetir hasta que k = kmax
- Encontrar la mejor solución
e
enVk(e0)
- Si
e
es mejor quee0
entoncese0 = e
y k = 1 //solución mejor la aceptamos y comenzamos por el primer sistema de vecinos. - else k = k + 1 //cambiamos al siguiente sistema de vecinos.
Simulated Annealing (Enfriamiento Estadístico)
Simulated Annealing (SA) es un algoritmo de optimización que acepta soluciones peores con cierta probabilidad, lo que permite escapar de óptimos locales. El algoritmo es el siguiente:
- Seleccionar una solución inicial
e0
de E - Inicializar iteraciones
num_iter=0
- Repetir
tam_cadena=0
- Repetir
- Elegir de forma aleatoria una solución
enew
enV(e0)
d = f(enew) - f(e0)
- si
d < 0
entonces //Si es mejor se aceptae0 = enew
- sino elegir un número aleatorio
aleat
en [0, 1] - si
e-d/ck > aleat
e0 = enew
//Si hay suerte se acepta a pesar de ser peor tam_cadena=tam_cadena+1
- hasta
tam_cadena > tam_max
ck +1 = w(ck)
//Se reduce el margen de aceptadosnum_iter=num_iter+1
- hasta
num_iter > iter_max
//Termina cuando no se aceptan soluciones peores.
Algoritmos de Estimación de Costes (EDAs)
Los Algoritmos de Estimación de Distribuciones (EDAs) son una clase de algoritmos evolutivos que aprenden y utilizan una distribución de probabilidad para generar nuevas soluciones. El algoritmo general es:
- Obtener una población inicial de individuos
D0
- Repetir hasta que se cumpla un criterio de parada
- Seleccionar de
Di
un conjunto de individuosDiS
- Aprender una distribución de prob.
pi(x)
a partir deDiS
- Muestrear
pi(x)
para obtenerDi+1/2
- Crear la nueva población
Di+1
a partir deDi
yDi+1/2
UMDA
El algoritmo UMDA (Univariate Marginal Distribution Algorithm) es un tipo específico de EDA.
D0
Generar M individuos (la población inicial) al azar- Repeat for l = 1, 2, . . . hasta que se verifique el criterio de parada
DSe l-1
Seleccionar N M individuos deDl-1
de acorde al método de selecciónpl(x) = p(x|DSe l-1) = Qn i=1 pl(xi) = Qn i=1 PN j=1 j (Xi=xi|DSe l-1)
- N Estimar la distribución de probabilidad conjunta
Dl
Muestrear M individuos (la nueva población) depl(x)
GRASP
GRASP (Greedy Randomized Adaptive Search Procedure) es un metaheurístico iterativo para problemas de optimización combinatoria. El algoritmo es:
- Elegir muestreando una distribución uniforme una ciudad i
- Repetir n .. 1
- Calcular las k ciudades más cercanas a la última añadida (dentro de las no añadidas)
- Seleccionar dentro de las k, una ciudad j con probabilidad inversamente proporcional a la distancia a la última ciudad elegida
CGA
El Algoritmo Genético Correlacionado (CGA) es un algoritmo evolutivo que utiliza una representación basada en probabilidades para guiar la búsqueda. El algoritmo es:
- Inicializar el vector de probabilidades
p0(x)
p0(x) = p0(x1, . . . , xi, . . . , xn) = (p0(x1), . . . , p0(xi), . . . , p0(xn)) = (0,5, . . . , 0,5, . . . , 0,5)
- l = l + 1. Muestrear
pl(x)
con l = 0, 1, . . . obtener dos individuos:xl1, xl2
- Evaluar y ordenar
xl1
yxl2
obteniendo:xl1:2
(el mejor de los dos) yxl2:2
(el peor de los dos) - Actualizar el vector de probabilidades
pl(x)
haciaxl1:2
- for i = 1 to n do
- if
xli,1:2 ≠ xli,2:2
then - if
xli,1:2 = 1
thenpl(xi) = pl-1(xi) + 1 K
- if
xli,1:2 = 0
thenpl(xi) = pl-1(xi) - 1 K
- Comprobar si el vector de probabilidades
pl(x)
ha convergido - for i = 1 to n do
- if
pl(xi) > 0
ypl(xi) < 1
then volver al Paso 2 pl(x)
representa la solución final
Árboles de Clasificación
Los árboles de clasificación son modelos predictivos que utilizan una estructura de árbol para clasificar datos. Se presentan dos variantes:
TDIDT
TDIDT (Top-Down Induction of Decision Trees) es un algoritmo para construir árboles de decisión. El algoritmo es:
- Begin
- if todos los patrones de D pertenecen a la misma clase C then resultado de la inducción es un nodo simple (nodo hoja) etiquetado como c
- else begin
- 1. Seleccionar la variable mas informativa Xr con valores xr1 , . . . , xrnr
- 2. Particionar D de acorde con los nr valores de Xr en D1 , . . . , Dnr
- 3. Construir nr subarboles T1 , . . . , Tnr para D1 , . . . , Dnr
- 4. Unir Xr y los nr subarboles T1 , . . . , Tnr con los valores xr1 , . . . , xrnr
- endif
- End
Variantes:
- ID3 – Basa su selección de variable mas informativa en I(Xi, C) (cantidad de información mutua).
- C4.5 – Basa su selección de variable mas informativa en I(Xi, C)/ H(Xi). – Realiza un poda (post pruning), para simplificar el árbol obtenido basándose en el número de bien clasificados.
BSEJ
BSEJ (Bayesian Search for Ensemble of Junctions) es un algoritmo que construye un clasificador combinando variables predictoras. El algoritmo es:
- Paso 1. Inicializar con el modelo naïves Bayes con todas las variables predictoras
- Paso 2. Repetir en cada paso la mejor opción entre:
- (a) Considerar reemplazar dos de las variables usadas por el clasificador por una nueva variable producto cartesiano de ambas
- (b) Considerar eliminar una variable usada por el clasificador.
- Evaluar cada posible opción por medio de la estimación del porcentaje de bien clasificados
- Hasta que ninguna opción produzca mejoras
TAN
Naïves Bayes aumentado a Árbol (TAN) utiliza una adaptación del algoritmo de Chow-Liu para generar un árbol de información mutua. El algoritmo es:
- Paso 1. Calcular I(Xi , Xj | C) con i < j, i, j = 1, . . . , n
- Paso 2. Construir un grafo no dirigido completo cuyos nodos corresponden a las variables predictoras: X1 , . . . , Xn . Asignar a cada arista conectando las variables Xi y Xj un peso dado por I(Xi , Xj | C)
- Paso 3. A partir del grafo completo anterior y siguiendo el algoritmo de Kruskall construir un árbol expandido de máximo peso
- Paso 4. Transformar el árbol no dirigido resultante en uno dirigido, escogiendo una variable como raíz, para a continuación direccionar el resto de aristas .
- Paso 5. Construir un modelo TAN añadiendo un nodo etiquetado como C y posteriormente un arco desde C a cada variable predictora Xi
PBIL
PBIL (Population-Based Incremental Learning) es un algoritmo de aprendizaje basado en poblaciones que utiliza un vector de probabilidades para representar las soluciones. El algoritmo es:
- Obtener un vector inicial de probabilidades
p0(x)
- while no convergencia do
- begin
- Usando
pl(x)
obtener M individuos:xl1, . . . , xlk, . . . , xlM
- Evaluar y ordenar
xl1, . . . , xlk, . . . , xlM
- Seleccionar los N (N M) mejores individuos:
xl1:M, . . . , xlk:M, . . . , xlN:M
- Actualizar el vector de probabilidades
pl+1(x) = (pl+1(x1), . . . , pl+1(xn))
- for i = 1, . . . n do
pl+1(xi) = (1 - α)pl(xi) + α/N ΣNk=1 xli,k:M
- end