1
0
Fork 0

adding M.Bunse's reference for the solver='minimize' option of ACC, PACC

This commit is contained in:
Alejandro Moreo Fernandez 2024-01-25 18:03:35 +01:00
parent 74efa9751d
commit e6dcfbced1
3 changed files with 17 additions and 2 deletions

View File

@ -13,7 +13,7 @@ for facilitating the analysis and interpretation of the experimental results.
### Last updates: ### Last updates:
* Version 0.1.8 is released! major changes can be consulted [here](quapy/CHANGE_LOG.txt). * Version 0.1.8 is released! major changes can be consulted [here](CHANGE_LOG.txt).
* A detailed documentation is now available [here](https://hlt-isti.github.io/QuaPy/) * A detailed documentation is now available [here](https://hlt-isti.github.io/QuaPy/)
* The developer API documentation is available [here](https://hlt-isti.github.io/QuaPy/build/html/modules.html) * The developer API documentation is available [here](https://hlt-isti.github.io/QuaPy/build/html/modules.html)

View File

@ -355,8 +355,11 @@ class ACC(AggregativeCrispQuantifier):
binary) and `B` is the vector of prevalence values estimated via CC, as $x=A^{-1}B$. This solution binary) and `B` is the vector of prevalence values estimated via CC, as $x=A^{-1}B$. This solution
might not exist for degenerated classifiers, in which case the method defaults to classify and count might not exist for degenerated classifiers, in which case the method defaults to classify and count
(i.e., does not attempt any adjustment). (i.e., does not attempt any adjustment).
Another option is to search for the prevalence vector that minimizes the loss |Ax-B|. The latter is Another option is to search for the prevalence vector that minimizes the L2 norm of |Ax-B|. The latter is
achieved by indicating solver='minimize'. This one generally works better, and is the default parameter. achieved by indicating solver='minimize'. This one generally works better, and is the default parameter.
More details about this can be consulted in `Bunse, M. "On Multi-Class Extensions of Adjusted Classify and
Count", on proceedings of the 2nd International Workshop on Learning to Quantify: Methods and Applications
(LQ 2022), ECML/PKDD 2022, Grenoble (France) <https://lq-2022.github.io/proceedings/CompleteVolume.pdf>`_.
""" """
def __init__(self, classifier: BaseEstimator, val_split=5, n_jobs=None, solver='minimize'): def __init__(self, classifier: BaseEstimator, val_split=5, n_jobs=None, solver='minimize'):
@ -471,6 +474,18 @@ class PACC(AggregativeSoftQuantifier):
for `k`). Alternatively, this set can be specified at fit time by indicating the exact set of data for `k`). Alternatively, this set can be specified at fit time by indicating the exact set of data
on which the predictions are to be generated. on which the predictions are to be generated.
:param n_jobs: number of parallel workers :param n_jobs: number of parallel workers
:param solver: indicates the method to be used for obtaining the final estimates. The choice
'exact' comes down to solving the system of linear equations `Ax=B` where `A` is a
matrix containing the class-conditional probabilities of the predictions (e.g., the tpr and fpr in
binary) and `B` is the vector of prevalence values estimated via CC, as $x=A^{-1}B$. This solution
might not exist for degenerated classifiers, in which case the method defaults to classify and count
(i.e., does not attempt any adjustment).
Another option is to search for the prevalence vector that minimizes the L2 norm of |Ax-B|. The latter is
achieved by indicating solver='minimize'. This one generally works better, and is the default parameter.
More details about this can be consulted in `Bunse, M. "On Multi-Class Extensions of Adjusted Classify and
Count", on proceedings of the 2nd International Workshop on Learning to Quantify: Methods and Applications
(LQ 2022), ECML/PKDD 2022, Grenoble (France) <https://lq-2022.github.io/proceedings/CompleteVolume.pdf>`_.
""" """
def __init__(self, classifier: BaseEstimator, val_split=5, n_jobs=None, solver='minimize'): def __init__(self, classifier: BaseEstimator, val_split=5, n_jobs=None, solver='minimize'):