Protected classification
This library contains the Python implementation of Protected probabilistic classification. The method is way of protecting probabilistic prediction models against changes in the data distribution, concentrating on the case of classification. This is important in applications of machine learning, where the quality of a trained prediction algorithm may drop significantly in the process of its exploitation under the presence of various forms of dataset shift.
Installation
pip install protected-classification
Installation (conda)
conda install conda-forge::protected-classification
The algorithm can be applied on top of an underlying scikit-learn algorithm for binary and multiclass classification problems.
Usage
from protected_classification import ProtectedClassification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import log_loss
from sklearn.datasets import make_classification
import numpy as np
np.random.seed(1)
X, y = make_classification(n_samples=1000, n_classes=2, n_informative=10, random_state=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
clf = RandomForestClassifier()
clf.fit(X_train, y_train)
p_test = clf.predict_proba(X_test)
# Initialise Protected classification
pc = ProtectedClassification(estimator=clf)
# Calibrate test output probabilities
pc.fit(X_train, y_train)
p_prime = pc.predict_proba(X_test)
# Compare log loss of underlying RF algorithm and Protected classification
print('Underlying classifier log_loss (no dataset shift) ' + f'{log_loss(y_test, p_test):.3f}')
print('Protected classification log loss (no dataset shift) ' + f'{log_loss(y_test, p_prime):.3f}')
# Assume a dataset shift where a random portion of the class labels is set to a single class
y_test[:100] = 0
ind = np.random.permutation(len(y_test))
X_test = X_test[ind]
y_test = y_test[ind]
p_test = clf.predict_proba(X_test)
# Generate protected output probabilities (assuming that test examples arrive sequentially)
pc = ProtectedClassification(estimator=clf)
p_prime = pc.predict_proba(X_test, y_test)
# Compare log loss of underlying RF algorithm and Protected classification
print('Underlying classifier log_loss (dataset shift) ' + f'{log_loss(y_test, p_test):.3f}')
print('Protected classification log loss (dataset shift) ' + f'{log_loss(y_test, p_prime):.3f}')
Examples
Further examples can be found in the github repository https://github.com/ip200/protected-calibration in the examples folder:
- protected-batch.ipynb for an example of the method appplied to calibrate the outputs of the underlying algorithm in batch mode
- protected_classification.ipynb for an example of the method used to protect the underlying algorithm under dataset shift
- protected_multiclass.ipynb the equivalent for multi-class problems
- protected_streaming.ipynb protected classification applied to streaming data problems
Citation
If you find this library useful please consider citing:
- Vovk, Vladimir, Ivan Petej, and Alex Gammerman. "Protected probabilistic classification." In Conformal and Probabilistic Prediction and Applications, pp. 297-299. PMLR, 2021. (arxiv version https://arxiv.org/pdf/2107.01726.pdf)
Release files for protected-classification 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| protected-classification-0.1.5.tar.gz | 12.6 kB | Details |
Release files / protected-classification-0.1.5.tar.gz
| Download URL | protected-classification-0.1.5.tar.gz |
|---|---|
| Size | 12.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2e37927fe1199db43817019ae0cc3a4c719a59a6d5406ebb09589ad4c888ce65
|
|
BLAKE2b-256 checksum How to use checksums |
aba0f482ec5c609d587509db82675691e34a6e11acfab2dc2bd865dfdb02bdc4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.11.4
|