GAC#

class mlquantify.methods.aggregative.GAC(learner: BaseEstimator | None = None, train_size: float = 0.6, random_state: int | None = None)[source]#

Generalized Adjusted Count (GAC).

GAC is a quantification method that applies a classifier to estimate the distribution of class labels in the test set by solving a system of linear equations. This system is constructed using a conditional probability matrix derived from training data and is solved via constrained least-squares regression.

Parameters:
learnerBaseEstimator

A scikit-learn-compatible model used for classification.

train_sizefloat, optional

Proportion of the dataset to include in the training split, by default 0.6.

random_stateint, optional

Random seed for reproducibility of data splits, by default None.

Attributes:
learnerBaseEstimator

Returns the learner_ object.

cond_prob_matrixnp.ndarray

Conditional probability matrix, representing P(yi|yj).

train_sizefloat, optional

Proportion of the dataset to include in the training split, by default 0.6.

random_stateint, optional

Random seed for reproducibility of data splits, by default None.

References

Firat, Aykut. Unified framework for quantification. arXiv preprint arXiv:1606.00868, 2016. Available at: https://arxiv.org/abs/1606.00868

Examples

>>> from mlquantify.utils.general import get_real_prev
>>> from mlquantify.methods.aggregative import GAC
>>> from sklearn.ensemble import RandomForestClassifier
>>> from sklearn.datasets import load_wine
>>> from sklearn.model_selection import train_test_split
>>>
>>> features, target = load_wine(return_X_y=True)
>>>
>>> X_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.4, random_state=32)
>>>
>>> gac = GAC(RandomForestClassifier())
>>> gac.fit(X_train, y_train)
>>> y_pred = gac.predict(X_test)
>>> y_pred
{0: 0.4305555555555556, 1: 0.2916666666666667, 2: 0.2777777777777778}
>>> get_real_prev(y_test)
{0: 0.4166666666666667, 1: 0.3194444444444444, 2: 0.2638888888888889}
delayed_fit(class_, X, y)[source]#

Delayed fit method for one-vs-all strategy, with parallel execution.

Parameters:
class_Any

The class for which the model is being fitted.

Xarray-like

Training features.

yarray-like

Training labels.

Returns:
selfobject

Fitted binary quantifier for the given class.

delayed_predict(class_, X)[source]#

Delayed predict method for one-vs-all strategy, with parallel execution.

Parameters:
class_Any

The class for which the model is making predictions.

Xarray-like

Test features.

Returns:
float

Predicted prevalence for the given class.

fit(X, y, learner_fitted=False, cv_folds: int = 10, n_jobs: int = 1)[source]#

Fit the quantifier model.

Parameters:
Xarray-like

Training features.

yarray-like

Training labels.

learner_fittedbool, default=False

Whether the learner is already fitted.

cv_foldsint, default=10

Number of cross-validation folds.

n_jobsint, default=1

Number of parallel jobs to run.

Returns:
selfobject

The fitted quantifier instance.

Notes

The model dynamically determines whether to perform one-vs-all classification or to directly fit the data based on the type of the problem: - If the data is binary or inherently multiclass, the model fits directly using

_fit_method without creating binary quantifiers.

  • For other cases, the model creates one binary quantifier per class using the one-vs-all approach, allowing for dynamic prediction based on the provided dataset.

fit_learner(X, y)[source]#

Fit the learner to the training data.

Parameters:
Xarray-like

Training features.

yarray-like

Training labels.

classmethod get_cond_prob_matrix(classes: list, y_labels: ndarray, predictions: ndarray) ndarray[source]#

Computes the conditional probability matrix P(yi|yj).

Parameters:
classeslist

List of class labels.

y_labelsnp.ndarray

True labels from the validation set.

predictionsnp.ndarray

Predicted labels from the classifier.

Returns:
np.ndarray

Conditional probability matrix.

get_metadata_routing()[source]#

Get metadata routing of this object.

Please check User Guide on how the routing mechanism works.

Returns:
routingMetadataRequest

A MetadataRequest encapsulating routing information.

get_params(deep=True)[source]#

Get parameters for this estimator.

Parameters:
deepbool, default=True

If True, will return the parameters for this estimator and contained subobjects that are estimators.

Returns:
paramsdict

Parameter names mapped to their values.

property is_probabilistic: bool[source]#

Check if the learner is probabilistic or not.

Returns:
bool

True if the learner is probabilistic, False otherwise.

property learner[source]#

Returns the learner_ object. Returns ——- learner_ : object

The learner_ object stored in the class instance.

predict(X) dict[source]#

Predict class prevalences for the given data.

Parameters:
Xarray-like

Test features.

Returns:
dict

A dictionary where keys are class labels and values are their predicted prevalences.

Notes

The prediction approach is dynamically chosen based on the data type: - For binary or inherently multiclass data, the model uses _predict_method to directly

estimate class prevalences.

  • For other cases, the model performs one-vs-all prediction, where each binary quantifier estimates the prevalence of its respective class. The results are then normalized to ensure they form valid proportions.

predict_learner(X)[source]#

Predict the class labels or probabilities for the given data.

Parameters:
Xarray-like

Test features.

Returns:
array-like

The predicted class labels or probabilities.

set_fit_request(*, cv_folds: bool | None | str = '$UNCHANGED$', learner_fitted: bool | None | str = '$UNCHANGED$', n_jobs: bool | None | str = '$UNCHANGED$') GAC[source]#

Request metadata passed to the 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 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 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:
cv_foldsstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

Metadata routing for cv_folds parameter in fit.

learner_fittedstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

Metadata routing for learner_fitted parameter in fit.

n_jobsstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

Metadata routing for n_jobs parameter in fit.

Returns:
selfobject

The updated object.

set_params(**params)[source]#

Set the parameters of this estimator. The method allows setting parameters for both the model and the learner. Parameters that match the model’s attributes will be set directly on the model. Parameters prefixed with ‘learner__’ will be set on the learner if it exists. Parameters: ———– **params : dict

Dictionary of parameters to set. Keys can be model attribute names or ‘learner__’ prefixed names for learner parameters.

Returns:#

selfQuantifier

Returns the instance of the quantifier with updated parameters itself.

classmethod solve_adjustment(cond_prob_matrix: ndarray, predicted_prevalences: ndarray) ndarray[source]#

Solves the linear system Ax = B to adjust predicted prevalences.

Parameters:
cond_prob_matrixnp.ndarray

Conditional probability matrix (A).

predicted_prevalencesnp.ndarray

Predicted class prevalences (B).

Returns:
np.ndarray

Adjusted class prevalences.