Python API

This section includes information for using the Python API of bob.fusion.base.

Summary

Algorithms

bob.fusion.base.algorithm.Algorithm([...])

A class to be used in score fusion

bob.fusion.base.algorithm.AlgorithmBob([...])

A class to be used in score fusion using bob machines.

bob.fusion.base.algorithm.Weighted_Sum([weights])

weighted sum (default: mean)

bob.fusion.base.algorithm.GMM([...])

GMM Score fusion

Preprocessors

bob.fusion.base.preprocessor.Tanh([copy])

A tanh feature scaler:

bob.fusion.base.preprocessor.ZNorm([copy])

ZNorm feature scaler This scaler works just like sklearn.preprocessing.StandardScaler but only takes the zero effort impostors into account when estimating the mean and standard deviation.

Fusion Algorithms

class bob.fusion.base.algorithm.Algorithm(preprocessors=None, classifier=None, **kwargs)

Bases: object

A class to be used in score fusion

classifier
preprocessors
str

A dictionary that its content will printed in the __str__ method.

Type:

dict

__init__(preprocessors=None, classifier=None, **kwargs)[source]
Parameters:
fuse(scores)[source]
scores: numpy.ndarray

A numpy.ndarray with the shape of (n_samples, n_systems).

Returns:

fused_score: numpy.ndarray

The fused scores in shape of (n_samples,).

load(model_file)[source]

Load the algorithm the same way it was saved. A new instance will be returned.

Returns:

loaded_algorithm: Algorithm

A new instance of the loaded algorithm.

preprocess(scores)[source]

scores: numpy.ndarray with the shape of (n_samples, n_systems). returns the transformed scores.

save(model_file)[source]

Save the instance of the algorithm.

model_file: str

A path to save the file. Please note that file objects are not accepted. The filename MUST end with “.pkl”. Also, an algorithm may save itself in multiple files with different extensions such as model_file and model_file[:-3]+’hdf5’.

train(train_neg, train_pos, devel_neg=None, devel_pos=None)[source]

If you use development data for training you need to override this method.

train_neg: numpy.ndarray

Negatives training data should be numpy.ndarray with the shape of (n_samples, n_systems).

train_pos: numpy.ndarray

Positives training data should be numpy.ndarray with the shape of (n_samples, n_systems).

devel_neg, devel_pos: numpy.ndarray

Same as train but used for development (validation).

train_preprocessors(X, y=None)[source]

Train preprocessors in order. X: numpy.ndarray with the shape of (n_samples, n_systems).

class bob.fusion.base.algorithm.AlgorithmBob(preprocessors=None, classifier=None, **kwargs)

Bases: Algorithm

A class to be used in score fusion using bob machines.

custom_save(model_file)[source]
load(model_file)[source]

Load the algorithm the same way it was saved. A new instance will be returned.

Returns:

loaded_algorithm: Algorithm

A new instance of the loaded algorithm.

class bob.fusion.base.algorithm.Empty(**kwargs)

Bases: Algorithm

Empty algorithm This algorithm does not change scores by itself and only applies the preprocessors.

__init__(**kwargs)[source]
Parameters:
decision_function(scores)[source]
fit(X, y)[source]
class bob.fusion.base.algorithm.GMM(number_of_gaussians=None, gmm_training_iterations=25, training_threshold=0.0005, variance_threshold=0.0005, update_weights=True, update_means=True, update_variances=True, init_seed=5489, **kwargs)

Bases: AlgorithmBob

GMM Score fusion

__init__(number_of_gaussians=None, gmm_training_iterations=25, training_threshold=0.0005, variance_threshold=0.0005, update_weights=True, update_means=True, update_variances=True, init_seed=5489, **kwargs)[source]
Parameters:
decision_function(scores)[source]
train(train_neg, train_pos, devel_neg=None, devel_pos=None)[source]

If you use development data for training you need to override this method.

train_neg: numpy.ndarray

Negatives training data should be numpy.ndarray with the shape of (n_samples, n_systems).

train_pos: numpy.ndarray

Positives training data should be numpy.ndarray with the shape of (n_samples, n_systems).

devel_neg, devel_pos: numpy.ndarray

Same as train but used for development (validation).

class bob.fusion.base.algorithm.Weighted_Sum(weights=None, **kwargs)

Bases: Algorithm

weighted sum (default: mean)

__init__(weights=None, **kwargs)[source]
Parameters:
decision_function(scores)[source]
fit(X, y)[source]

Fusion Preprocessors

class bob.fusion.base.preprocessor.Tanh(copy=True, **kwargs)

Bases: StandardScaler

A tanh feature scaler:

\[0.5 \left( \tanh\left( 0.01 \cdot \frac{X - \mu}{\sigma}\right) + 1 \right)\]

This scaler is both efficient and is robust to outliers.

The original implementation in Hampel, Frank R., et al. "Robust statistics: the approach based on influence functions." (1986). uses an influence function but this is not used here.

__init__(copy=True, **kwargs)[source]

Initialize self. See help(type(self)) for accurate signature.

fit(X, y=None)[source]

Estimates the mean and standard deviation of samples. Only positive samples are used in estimation.

inverse_transform(X, copy=None)[source]

Perform inverse scaling.

set_inverse_transform_request(*, copy: bool | None | str = '$UNCHANGED$') Tanh

Request metadata passed to the inverse_transform method.

Note that this method is only relevant if enable_metadata_routing=True (see sklearn.set_config()). Please see User Guide on how the routing mechanism works.

The options for each parameter are:

  • True: metadata is requested, and passed to inverse_transform if provided. The request is ignored if metadata is not provided.

  • False: metadata is not requested and the meta-estimator will not pass it to inverse_transform.

  • None: metadata is not requested, and the meta-estimator will raise an error if the user provides it.

  • str: metadata should be passed to the meta-estimator with this given alias instead of the original name.

The default (sklearn.utils.metadata_routing.UNCHANGED) retains the existing request. This allows you to change the request for some parameters and not others.

Added in version 1.3.

Note

This method is only relevant if this estimator is used as a sub-estimator of a meta-estimator, e.g. used inside a Pipeline. Otherwise it has no effect.

Parameters:

copy (str, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED) – Metadata routing for copy parameter in inverse_transform.

Returns:

self – The updated object.

Return type:

object

set_partial_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') Tanh

Request metadata passed to the partial_fit method.

Note that this method is only relevant if enable_metadata_routing=True (see sklearn.set_config()). Please see User Guide on how the routing mechanism works.

The options for each parameter are:

  • True: metadata is requested, and passed to partial_fit if provided. The request is ignored if metadata is not provided.

  • False: metadata is not requested and the meta-estimator will not pass it to partial_fit.

  • None: metadata is not requested, and the meta-estimator will raise an error if the user provides it.

  • str: metadata should be passed to the meta-estimator with this given alias instead of the original name.

The default (sklearn.utils.metadata_routing.UNCHANGED) retains the existing request. This allows you to change the request for some parameters and not others.

Added in version 1.3.

Note

This method is only relevant if this estimator is used as a sub-estimator of a meta-estimator, e.g. used inside a Pipeline. Otherwise it has no effect.

Parameters:

sample_weight (str, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED) – Metadata routing for sample_weight parameter in partial_fit.

Returns:

self – The updated object.

Return type:

object

set_transform_request(*, copy: bool | None | str = '$UNCHANGED$') Tanh

Request metadata passed to the transform method.

Note that this method is only relevant if enable_metadata_routing=True (see sklearn.set_config()). Please see User Guide on how the routing mechanism works.

The options for each parameter are:

  • True: metadata is requested, and passed to transform if provided. The request is ignored if metadata is not provided.

  • False: metadata is not requested and the meta-estimator will not pass it to transform.

  • None: metadata is not requested, and the meta-estimator will raise an error if the user provides it.

  • str: metadata should be passed to the meta-estimator with this given alias instead of the original name.

The default (sklearn.utils.metadata_routing.UNCHANGED) retains the existing request. This allows you to change the request for some parameters and not others.

Added in version 1.3.

Note

This method is only relevant if this estimator is used as a sub-estimator of a meta-estimator, e.g. used inside a Pipeline. Otherwise it has no effect.

Parameters:

copy (str, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED) – Metadata routing for copy parameter in transform.

Returns:

self – The updated object.

Return type:

object

transform(X, copy=None)[source]

Perform scaling.

class bob.fusion.base.preprocessor.ZNorm(copy=True, **kwargs)

Bases: StandardScaler

ZNorm feature scaler This scaler works just like sklearn.preprocessing.StandardScaler but only takes the zero effort impostors into account when estimating the mean and standard deviation. You should not use this scaler when PAD scores are present.

__init__(copy=True, **kwargs)[source]

Initialize self. See help(type(self)) for accurate signature.

fit(X, y=None)[source]

Estimates the mean and standard deviation of samples. Only positive samples are used in estimation.

set_inverse_transform_request(*, copy: bool | None | str = '$UNCHANGED$') ZNorm

Request metadata passed to the inverse_transform method.

Note that this method is only relevant if enable_metadata_routing=True (see sklearn.set_config()). Please see User Guide on how the routing mechanism works.

The options for each parameter are:

  • True: metadata is requested, and passed to inverse_transform if provided. The request is ignored if metadata is not provided.

  • False: metadata is not requested and the meta-estimator will not pass it to inverse_transform.

  • None: metadata is not requested, and the meta-estimator will raise an error if the user provides it.

  • str: metadata should be passed to the meta-estimator with this given alias instead of the original name.

The default (sklearn.utils.metadata_routing.UNCHANGED) retains the existing request. This allows you to change the request for some parameters and not others.

Added in version 1.3.

Note

This method is only relevant if this estimator is used as a sub-estimator of a meta-estimator, e.g. used inside a Pipeline. Otherwise it has no effect.

Parameters:

copy (str, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED) – Metadata routing for copy parameter in inverse_transform.

Returns:

self – The updated object.

Return type:

object

set_partial_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') ZNorm

Request metadata passed to the partial_fit method.

Note that this method is only relevant if enable_metadata_routing=True (see sklearn.set_config()). Please see User Guide on how the routing mechanism works.

The options for each parameter are:

  • True: metadata is requested, and passed to partial_fit if provided. The request is ignored if metadata is not provided.

  • False: metadata is not requested and the meta-estimator will not pass it to partial_fit.

  • None: metadata is not requested, and the meta-estimator will raise an error if the user provides it.

  • str: metadata should be passed to the meta-estimator with this given alias instead of the original name.

The default (sklearn.utils.metadata_routing.UNCHANGED) retains the existing request. This allows you to change the request for some parameters and not others.

Added in version 1.3.

Note

This method is only relevant if this estimator is used as a sub-estimator of a meta-estimator, e.g. used inside a Pipeline. Otherwise it has no effect.

Parameters:

sample_weight (str, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED) – Metadata routing for sample_weight parameter in partial_fit.

Returns:

self – The updated object.

Return type:

object

set_transform_request(*, copy: bool | None | str = '$UNCHANGED$') ZNorm

Request metadata passed to the transform method.

Note that this method is only relevant if enable_metadata_routing=True (see sklearn.set_config()). Please see User Guide on how the routing mechanism works.

The options for each parameter are:

  • True: metadata is requested, and passed to transform if provided. The request is ignored if metadata is not provided.

  • False: metadata is not requested and the meta-estimator will not pass it to transform.

  • None: metadata is not requested, and the meta-estimator will raise an error if the user provides it.

  • str: metadata should be passed to the meta-estimator with this given alias instead of the original name.

The default (sklearn.utils.metadata_routing.UNCHANGED) retains the existing request. This allows you to change the request for some parameters and not others.

Added in version 1.3.

Note

This method is only relevant if this estimator is used as a sub-estimator of a meta-estimator, e.g. used inside a Pipeline. Otherwise it has no effect.

Parameters:

copy (str, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED) – Metadata routing for copy parameter in transform.

Returns:

self – The updated object.

Return type:

object

Fusion Scripts

bob.fusion.base.script.routine_fusion(algorithm, model_file, scores_train_lines, scores_train, train_neg, train_pos, fused_train_file, scores_dev_lines=None, scores_dev=None, dev_neg=None, dev_pos=None, fused_dev_file=None, scores_eval_lines=None, scores_eval=None, fused_eval_file=None, force=False, min_file_size=1000, do_training=True)[source]