eckity.sklearn_compatible.classification_evaluator
This module implements the fitness evaluation class, which delivers the fitness function. You will need to implement such a class to work with your own problem and fitness function.
1""" 2This module implements the fitness evaluation class, which delivers the fitness function. 3You will need to implement such a class to work with your own problem and fitness function. 4""" 5import numpy as np 6from sklearn.metrics import accuracy_score 7 8from eckity.evaluators.simple_individual_evaluator import SimpleIndividualEvaluator 9 10CLASSIFICATION_THRESHOLD = 0 11 12 13class ClassificationEvaluator(SimpleIndividualEvaluator): 14 """ 15 Class to compute the fitness of an individual in classification problems. 16 """ 17 18 def __init__(self, X=None, y=None, metric=accuracy_score): 19 super().__init__() 20 self.X = X 21 self.y = y 22 self.metric = metric 23 24 def set_context(self, context): 25 """ 26 Receive X and y values and assign them to X and y fields. 27 28 Parameters 29 ---------- 30 context: tuple. first element is a numpy array of size (n_samples, n_features), 31 and the second element is a numpy array of size (n_samples, 1) or (n_samples,) 32 X matrix and y vector, either (X_train, y_train) or (X_test, y_test), depending on the evolution stage 33 34 Returns 35 ------- 36 None. 37 """ 38 self.X = context[0] 39 self.y = context[1] 40 41 def evaluate_individual(self, individual): 42 """ 43 Compute the fitness value by comparing the program tree execution result to the result vector y 44 45 Parameters 46 ---------- 47 individual: Tree 48 An individual program tree in the GP population, whose fitness needs to be computed. 49 Makes use of GPTree.execute, which runs the program. 50 Calling `GPTree.execute` must use keyword arguments that match the terminal-set variables. 51 For example, if the terminal set includes `x` and `y` then the call is `GPTree.execute(x=..., y=...)`. 52 53 Returns 54 ------- 55 float: 56 computed fitness value 57 """ 58 y_pred = self.classify_individual(individual) 59 return self.metric(y_true=self.y, y_pred=y_pred) 60 61 def classify_individual(self, individual): 62 return np.where(individual.execute(self.X) > CLASSIFICATION_THRESHOLD, 1, 0)
CLASSIFICATION_THRESHOLD =
0
class
ClassificationEvaluator(eckity.evaluators.simple_individual_evaluator.SimpleIndividualEvaluator):
14class ClassificationEvaluator(SimpleIndividualEvaluator): 15 """ 16 Class to compute the fitness of an individual in classification problems. 17 """ 18 19 def __init__(self, X=None, y=None, metric=accuracy_score): 20 super().__init__() 21 self.X = X 22 self.y = y 23 self.metric = metric 24 25 def set_context(self, context): 26 """ 27 Receive X and y values and assign them to X and y fields. 28 29 Parameters 30 ---------- 31 context: tuple. first element is a numpy array of size (n_samples, n_features), 32 and the second element is a numpy array of size (n_samples, 1) or (n_samples,) 33 X matrix and y vector, either (X_train, y_train) or (X_test, y_test), depending on the evolution stage 34 35 Returns 36 ------- 37 None. 38 """ 39 self.X = context[0] 40 self.y = context[1] 41 42 def evaluate_individual(self, individual): 43 """ 44 Compute the fitness value by comparing the program tree execution result to the result vector y 45 46 Parameters 47 ---------- 48 individual: Tree 49 An individual program tree in the GP population, whose fitness needs to be computed. 50 Makes use of GPTree.execute, which runs the program. 51 Calling `GPTree.execute` must use keyword arguments that match the terminal-set variables. 52 For example, if the terminal set includes `x` and `y` then the call is `GPTree.execute(x=..., y=...)`. 53 54 Returns 55 ------- 56 float: 57 computed fitness value 58 """ 59 y_pred = self.classify_individual(individual) 60 return self.metric(y_true=self.y, y_pred=y_pred) 61 62 def classify_individual(self, individual): 63 return np.where(individual.execute(self.X) > CLASSIFICATION_THRESHOLD, 1, 0)
Class to compute the fitness of an individual in classification problems.
def
set_context(self, context):
25 def set_context(self, context): 26 """ 27 Receive X and y values and assign them to X and y fields. 28 29 Parameters 30 ---------- 31 context: tuple. first element is a numpy array of size (n_samples, n_features), 32 and the second element is a numpy array of size (n_samples, 1) or (n_samples,) 33 X matrix and y vector, either (X_train, y_train) or (X_test, y_test), depending on the evolution stage 34 35 Returns 36 ------- 37 None. 38 """ 39 self.X = context[0] 40 self.y = context[1]
Receive X and y values and assign them to X and y fields.
Parameters
- context (tuple. first element is a numpy array of size (n_samples, n_features),): and the second element is a numpy array of size (n_samples, 1) or (n_samples,) X matrix and y vector, either (X_train, y_train) or (X_test, y_test), depending on the evolution stage
Returns
- None.
def
evaluate_individual(self, individual):
42 def evaluate_individual(self, individual): 43 """ 44 Compute the fitness value by comparing the program tree execution result to the result vector y 45 46 Parameters 47 ---------- 48 individual: Tree 49 An individual program tree in the GP population, whose fitness needs to be computed. 50 Makes use of GPTree.execute, which runs the program. 51 Calling `GPTree.execute` must use keyword arguments that match the terminal-set variables. 52 For example, if the terminal set includes `x` and `y` then the call is `GPTree.execute(x=..., y=...)`. 53 54 Returns 55 ------- 56 float: 57 computed fitness value 58 """ 59 y_pred = self.classify_individual(individual) 60 return self.metric(y_true=self.y, y_pred=y_pred)
Compute the fitness value by comparing the program tree execution result to the result vector y
Parameters
- individual (Tree):
An individual program tree in the GP population, whose fitness needs to be computed.
Makes use of GPTree.execute, which runs the program.
Calling
GPTree.execute
must use keyword arguments that match the terminal-set variables. For example, if the terminal set includesx
andy
then the call isGPTree.execute(x=..., y=...)
.
Returns
- float:: computed fitness value