# Optimize by Generation (YAGGA) (RapidMiner Studio Core)

## Synopsis

This operator may select some attributes from the original attribute set and it may also generate new attributes from the original attribute set. YAGGA (Yet Another Generating Genetic Algorithm) does not change the original number of attributes unless adding or removing (or both) attributes prove to have a better fitness.## Description

Sometimes the selection of features alone is not sufficient. In these cases other transformations of the feature space must be performed. The generation of new attributes from the given attributes extends the feature space. Maybe a hypothesis can be easily found in the extended feature space. This operator can be considered to be a blend of attribute selection and attribute generation procedures. It may select some attributes from the original set of attributes and it may also generate new attributes from the original attributes. The (generating) mutation can do one of the following things with different probabilities:

- Probability p/4: Add a newly generated attribute to the feature vector.
- Probability p/4: Add a randomly chosen original attribute to the feature vector.
- Probability p/2: Remove a randomly chosen attribute from the feature vector.

A genetic algorithm (GA) is a search heuristic that mimics the process of natural evolution. This heuristic is routinely used to generate useful solutions to optimization and search problems. Genetic algorithms belong to the larger class of evolutionary algorithms (EA), which generate solutions to optimization problems using techniques inspired by natural evolution, such as inheritance, mutation, selection, and crossover. For studying the basic algorithm of a genetic algorithm please study the description of the Optimize Selection (Evolutionary) operator.

This operator is a nested operator i.e. it has a subprocess. The subprocess must return a performance vector. You need to have basic understanding of subprocesses in order to apply this operator. Please study the documentation of the Subprocess operator for basic understanding of subprocesses.

## Differentiation

### Optimize by Generation (YAGGA2)

The YAGGA2 operator is an improved version of the usual YAGGA operator, this operator allows more feature generators and provides several techniques for redundancy prevention. This leads to smaller ExampleSets containing less redundant features.## Input

- example set in (IOObject)
This input port expects an ExampleSet. This ExampleSet is available at the first port of the nested chain (inside the subprocess) for processing in the subprocess.

## Output

- example set out (IOObject)
The genetic algorithm is applied on the input ExampleSet. The resultant ExampleSet is delivered through this port.

- attribute weights out (Average Vector)
The attribute weights are delivered through this port.

- performance out (Performance Vector)
This port delivers the Performance Vector for the selected attributes. A Performance Vector is a list of performance criteria values.

## Parameters

- limit_max_total_number_of_attributesThis parameter indicates if the total number of attributes in all generations should be limited. If set to true, the maximum number is specified by the
*max total number of attributes*parameter. Range: boolean - max_total_number_of_attributesThis parameter is only available when the
*limit max total number of attributes*parameter is set to true. This parameter specifies the maximum total number of attributes in all generations. Range: integer - use_local_random_seedThis parameter indicates if a
*local random seed*should be used for randomization. Using the same value of*local random seed*will produce the same randomization. Range: boolean - local_random_seedThis parameter specifies the
*local random seed*. This parameter is available only if the*use local random seed*parameter is set to true. Range: integer - show_stop_dialogThis parameter determines if a dialog with a
*stop*button should be displayed which stops the search for the best feature space. If the search for best feature space is stopped, the best individual found till then will be returned. Range: boolean - maximal_fitnessThis parameter specifies the maximal fitness. The optimization will stop if the fitness reaches this value. Range: real
- population_sizeThis parameter specifies the population size i.e. the number of individuals per generation. Range: integer
- maximum_number_of_generationsThis parameter specifies the number of generations after which the algorithm should be terminated. Range: integer
- use_plusThis parameter indicates if the summation function should be applied for generation of new attributes. Range: boolean
- use_diffThis parameter indicates if the difference function should be applied for generation of new attributes. Range: boolean
- use_multThis parameter indicates if the multiplication function should be applied for generation of new attributes. Range: boolean
- use_divThis parameter indicates if the division function should be applied for generation of new attributes. Range: boolean
- use_reciprocalsThis parameter indicates if the reciprocal function should be applied for generation of new attributes. Range: boolean
- use_early_stoppingThis parameter enables early stopping. If not set to true, always the maximum number of generations are performed. Range: boolean
- generations_without_improvalThis parameter is only available when the
*use early stopping*parameter is set to true. This parameter specifies the stop criterion for early stopping i.e. it stops after*n*generations without improvement in the performance.*n*is specified by this parameter. Range: integer - tournament_sizeThis parameter specifies the fraction of the current population which should be used as tournament members. Range: real
- start_temperatureThis parameter specifies the scaling temperature. Range: real
- dynamic_selection_pressureIf this parameter is set to true, the selection pressure is increased to maximum during the complete optimization run. Range: boolean
- keep_best_individual If set to true, the best individual of each generation is guaranteed to be selected for the next generation. Range: boolean
- p_initializeThe initial probability for an attribute to be switched on is specified by this parameter. Range: real
- p_crossoverThe probability for an individual to be selected for crossover is specified by this parameter. Range: real
- crossover_typeThe type of the crossover can be selected by this parameter. Range: selection
- use_heuristic_mutation_probabilityIf this parameter is set to true, the probability for mutations will be chosen as
*1/n*where*n*is the number of attributes. Otherwise the probability for mutations should be specified through the*p mutation*parameter Range: boolean - p_mutationThe probability for an attribute to be changed is specified by this parameter. If set to -1, the probability will be set to
*1/n*where*n*is the total number of attributes. Range: real

## Tutorial Processes

### Applying YAGGA on the Polynomial data set

The 'Polynomial' data set is loaded using the Retrieve operator. A breakpoint is inserted here so that you can have a look at the ExampleSet. You can see that the ExampleSet has 5 regular attributes other then the label attribute. The Optimize by Generation (YAGGA) operator is applied on the ExampleSet. Optimize by Generation (YAGGA) is a nested operator i.e. it has a subprocess. It is necessary for the subprocess to deliver a performance vector. This performance vector is used by the underlying Genetic Algorithm. Have a look at the subprocess of this operator. The Split Validation operator is used which itself is a nested operator. Have a look at the subprocesses of the Split Validation operator. The Linear Regression operator is used in the 'Training' subprocess to train a model. The trained model is applied using the Apply Model operator in the 'Testing' subprocess. The performance is measured through the Performance (Regression) operator and the resultant performance vector is used by the underlying algorithm. Run the process and switch to the Results Workspace. You can see that the ExampleSet that had 5 attributes now has 6 attributes. The attributes 'a1' and 'a2' were selected from the original attribute set and the attributes 'gensym2', 'gensym35', 'gensym63' and 'gensym72' were generated. The number of resultant attributes is not less than the number of original attributes because YAGGA is not an attribute reduction operator. It may (or may not) increase or decrease the number of attributes depending on what proves to have a better fitness.