apsis.models package

Submodules

apsis.models.candidate module

class apsis.models.candidate.Candidate(params, worker_information=None)

Bases: object

A Candidate is a dictionary of parameter values, which should - or have been - evaluated.

A Candidate object can be seen as a single iteration of the experiment. It is first generated as a suggestion of which parameter set to evaluate next, then updated with the result and cost of the evaluation.

Attributes

Methods

cost = None
params = None
result = None
to_csv_entry(delimiter=', ', key_order=None)

Returns a csv entry representing this candidate.

It is delimited by delimiter, and first consists of all parameters in the order defined by key_order, followed by the cost and result.

Parameters:

delimiter : string, optional

The string delimiting csv entries

key_order : list of param names, optional

A list defining the order of keys written to csv. If None, the order will be set by sorting the keys.

Returns:

string : string

The (one-line) string representing this Candidate as a csv line

to_dict()

EXPERIMENTAL

worker_information = None
apsis.models.candidate.from_dict(dict)

EXPERIMENTAL

apsis.models.experiment module

class apsis.models.experiment.Experiment(name, parameter_definitions, minimization_problem=True)

Bases: object

An Experiment is a set of parameter definitions and multiple candidate evaluations thereon.

Attributes

Methods

add_finished(candidate)

Announces a Candidate instance to be finished evaluating.

This moves the Candidate instance to the candidates_finished list and updates the best_candidate.

Parameters:

candidate : Candidate

The Candidate to be added to the finished list.

Raises:

ValueError : :

Iff candidate is not a Candidate object.

add_pausing(candidate)

Updates the experiment that work on candidate has been paused.

This updates candidates_pending list and the candidates_working list if it contains the candidate.

Parameters:

candidate : Candidate

The Candidate instance that is currently paused.

Raises:

ValueError : :

Iff candidate is no Candidate object.

add_pending(candidate)

Adds a new pending Candidate object to be evaluated.

This function should be used when a new pending candidate is supposed to be evaluated. If an old Candidate should be updated as just pausing, use the add_pausing function.

Parameters:

candidate : Candidate

The Candidate instance that is supposed to be evaluated soon.

Raises:

ValueError : :

Iff candidate is no Candidate object.

add_working(candidate)

Updates the experiment to now start working on candidate.

This updates candidates_working list and the candidates_pending list if candidate is in the candidates_pending list.

Parameters:

candidate : Candidate

The Candidate instance that is currently being worked on.

Raises:

ValueError : :

Iff candidate is no Candidate object.

best_candidate = None
better_cand(candidateA, candidateB)

Determines whether CandidateA is better than candidateB in the context of this experiment. This is done as follows: If candidateA’s result is None, it is not better. If candidateB’s result is None, it is better. If it is a minimization problem and the result is smaller than B’s, it is better. Corresponding for being a maximization problem.

Parameters:

candidateA : Candidate

The candidate which should be better.

candidateB : Candidate

The baseline candidate.

Returns:

result : bool

True iff A is better than B.

Raises:

ValueError : :

If candidateA or candidateB are no Candidates.

candidates_finished = None
candidates_pending = None
candidates_working = None
clone()

Create a deep copy of this experiment and return it.

Returns:

copied_experiment : Experiment

A deep copy of this experiment.

minimization_problem = None
name = None
parameter_definitions = None
to_csv_results(delimiter=', ', line_delimiter='\n', key_order=None, wHeader=True, fromIndex=0)

Generates a csv result string from this experiment.

Parameters:

delimiter : string, optional

The column delimiter

line_delimiter : string, optional

The line delimiter

key_order : list of strings, optional

The order in which the parameters should be written. If None, the order is defined by sorting the parameter names.

wHeader : bool, optional

Whether a header should be written. Defaults to true.

from_index : int, optional

Beginning from which result the csv should be generated.

Returns:

csv_string : string

The corresponding csv string

steps_included : int

The number of steps included in the csv.

warp_pt_in(params)

Warps in a point.

Parameters:

params : dict of string keys

The point to warp in

Returns:

warped_in : dict of string keys

The warped-in parameters.

warp_pt_out(params)

Warps out a point.

Parameters:

params : dict of string keys

The point to warp out

Returns:

warped_out : dict of string keys

The warped-out parameters.

apsis.models.parameter_definition module

class apsis.models.parameter_definition.AsymptoticNumericParamDef(asymptotic_border, border)

Bases: apsis.models.parameter_definition.NumericParamDef

This represents an asymptotic parameter definition.

It consists of a fixed border - represented at 0 - and an asymptotic border - represented at 1.

In general, multiplying the input parameter by 1/10th means a multiplication of the warped-in value by 1/2. This means that each interval between 10^-i and 10^-(i-1) is represented by an interval of length 1/2^i on the hypercube.

For example, assume that you want to optimize over a learning rate. Generally, they are close to 0, with parameter values (and therefore possible optimization values) like 10^-1, 10^-4 or 10^-6. This could be done by initializing this class with asymptotic_border = 0 and border = 1.

Trying to optimize a learning rate decay - which normally is close to 1 - one could initialize this class with asymptotic_border = 1 and border = 0.

Attributes

Methods

asymptotic_border = None
border = None
warp_in(value_in)

Warps value_in in.

Parameters:

value_in : float

Should be between (including) border and asymptotic_border. If outside the corresponding interval, it is automatically translated to 0 and 1 respectively.

Returns:

value_in : float

The [0, 1]-translated value.

warp_out(value_out)

Warps value_in out.

Parameters:

value_out : float

Should be between (including) 0 and 1. If bigger than 1, it is translated to border. If smaller than 0, it is translated to asymptotic_border.

Returns:

value_out : float

The translated value.

class apsis.models.parameter_definition.ComparableParamDef

Bases: object

This class defines an ordinal parameter definition subclass, that is a
parameter definition in which the values are comparable.

It additionally implements the compare_values_function.

Methods

compare_values(one, two)

Compare values one and two of this datatype.

It has to follow the same return semantics as the Python standard __cmp__ methods, meaning it returns negative integer if one < two, zero if one == two, a positive integer if one > two.

Parameters:

one : object in parameter definition

The first value used in comparison.

two : object in parameter definition

The second value used in comparison.

Returns:

comp: integer :

comp < 0 iff one < two. comp = 0 iff one = two. comp > 0 iff one > two.

class apsis.models.parameter_definition.FixedValueParamDef(values)

Bases: apsis.models.parameter_definition.PositionParamDef

Extension of PositionParamDef, in which the position is equal to the value of each entry from values.

Attributes

Methods

class apsis.models.parameter_definition.MinMaxNumericParamDef(lower_bound, upper_bound)

Bases: apsis.models.parameter_definition.NumericParamDef

Defines a numeric parameter definition defined by a lower and upper bound.

Attributes

Methods

is_in_parameter_domain(value)
warp_in(value_in)
warp_out(value_out)
x_max = None
x_min = None
class apsis.models.parameter_definition.NominalParamDef(values)

Bases: apsis.models.parameter_definition.ParamDef

This defines a nominal parameter definition.

A nominal parameter definition is defined by the values as given in the init function. These are a list of possible values it can take.

Attributes

Methods

is_in_parameter_domain(value)

Tests whether value is in self.values as defined during the init function.

values = None
class apsis.models.parameter_definition.NumericParamDef(warping_in, warping_out)

Bases: apsis.models.parameter_definition.ParamDef, apsis.models.parameter_definition.ComparableParamDef

This class defines a numeric parameter definition.

It is characterized through the existence of a warp_in and a warp_out function. The warp_in function squishes the whole parameter space to the unit space [0, 1], while the warp_out function reverses this. Note that it is necessary that

x = warp_in(warp_out(x)) for x in [0, 1] and x = warp_out(warp_in(x)) for x in allowed parameter space.

Attributes

Methods

compare_values(one, two)
distance(valueA, valueB)
is_in_parameter_domain(value)

Uses the warp_out function for tests.

warp_in(value_in)

Warps value_in into the [0, 1] space.

Parameters:

value_in : float

The input value

Returns:

value_in_scaled: float in [0, 1] :

The scaled output value.

warp_out(value_out)

Warps value_out out of the [0, 1] space.

Parameters:

value_out : float in [0, 1]

The output value.

Returns:

value_out_unscaled : float

The unscaled value in the parameter space.

warping_in = None
warping_out = None
class apsis.models.parameter_definition.OrdinalParamDef(values)

Bases: apsis.models.parameter_definition.NominalParamDef, apsis.models.parameter_definition.ComparableParamDef

Defines an ordinal parameter definition.

This class inherits from NominalParamDef and ComparableParameterDef, and consists of basically a list of possible values with a defined order. This defined order is simply the order in which the elements are in the list.

Attributes

Methods

compare_values(one, two)

Compare values of this ordinal data type. Return is the same semantic as in __cmp__.

Comparison takes place based on the index the given values one and two have in the values list in this object. Meaning if this ordinal parameter definition has a values list of [3,5,1,4]’, then ‘5’ will be considered smaller than ‘1’ and ‘1’ bigger than ‘5’ because the index of ‘1’ in this list is higher than the index of ‘5’.

distance(valueA, valueB)

This distance is defined as the absolute difference between the values’ position in the list, normed to the [0, 1] hypercube.

class apsis.models.parameter_definition.ParamDef

Bases: object

This represents the base class for a parameter definition.

Every member of this class has to implement at least the is_in_parameter_domain method to check whether objects are in the parameter domain.

Methods

distance(valueA, valueB)

Returns the distance between valueA and valueB. In this case, it’s 0 iff valueA == valueB, 1 otherwise.

is_in_parameter_domain(value)

Should test whether a certain value is in the parameter domain as defined by this class.

Parameters:

value : object

Tests whether the object is in the parameter domain.

Returns:

is_in_parameter_domain : bool

True iff value is in the parameter domain as defined by this instance.

class apsis.models.parameter_definition.PositionParamDef(values, positions)

Bases: apsis.models.parameter_definition.OrdinalParamDef

Defines positions for each of its values.

Attributes

Methods

distance(valueA, valueB)
positions = None
warp_in(value_in)

Warps in the value to a [0, 1] hypercube value.

warp_out(value_out)

Warps out a value from a [0, 1] hypercube to one of the values.

Module contents