Este operador realiza los dos algoritmos deterministas greedy (codiciosos) de selección de características: selección forward (hacia delante) y eliminación backguard (hacia atrás). Sin embargo, se han añadido algunas mejoras a los algoritmos estándar, las que se describen a continuación:
Selección Forward
1. Crea una población inicial con n individuos donde n es la cantidad de atributos del conjunto de ejemplos de entrada. Cada individuo utilizará exactamente una de las características.
2. Evalúa los atributos del conjunto y selecciona sólo los k mejores.
3. Para cada uno de los k atributos del conjunto realiza: Si hay j atributos no utilizados, hace j copias del conjunto de atributos y agrega exactamente uno de los atributos anteriormente no utilizados al conjunto de atributos.
4. Mientras mejore la performance en las últimas p iteraciones se volverá al paso 2.
Eliminación Backward
1. Comienza con un conjunto de atributos con todas las características.
2. Evalúa todos atributos del conjunto y selecciona los k mejores.
3. Si hay j atributos utilizados, hace j copias del conjunto de atributos y elimina exactamente uno de los atributos utilizados anteriormente del conjunto de atributos.
4. Mientras mejore la performance en las últimas p iteraciones se volverá al paso 2.
El parámetro k puede ser especificado por el parámetro keep_best, el parámetro p puede ser especificado por el parámetro generations_without_improval. Estos parámetros tienen valores por defecto 1, lo que significa que se utilizan los algoritmos de selección estándar. Utilizando otros valores aumenta el tiempo de ejecución, pero podría ayudar a evitar extremos locales en la búsqueda del óptimo global.
Otro parámetro inusual es maximum_number_of_generations. Este parámetro limita el número de iteraciones a un máximo de selecciones/deselecciones de características. En combinación con generations_without_improval permite varios esquemas de selección diferentes (que se describen para la selección forward, la eliminación backward trabaja de forma análoga):
- maximum_number_of_generations = m y generations_without_improval = p: Selecciona un máximo de m características. La selección se detiene si no mejora la performance medida en las últimas p generaciones.
- maximum_number_of_generations = -1 y generations_without_improval = p: Trata de seleccionar nuevas características hasta que no haya mejoras en la performance medida en las últimas p generaciones.
- maximum_number_of_generations = m y generations_without_improval = -1: Selecciona un máximo de m características. La selección no se detiene hasta que todas las combinaciones con un máximo de m fueron probadas. Sin embargo, el resultado podría contener menos características que éstas.
- maximum_number_of_generations = -1 y generations_without_improval = -1: Prueba todas las combinaciones de atributos (fuerza bruta, esto podría tomar un tiempo muy largo y sólo debe aplicarse a los pequeños conjuntos de atributos).