Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 1 addition & 7 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,9 @@ jobs:
strategy:
matrix:
include:
- os: ubuntu-latest
python-version: "3.7"
numpy-version: 1.21.4
- os: ubuntu-latest
python-version: "3.8"
numpy-version: 1.21.4
- os: ubuntu-latest
python-version: "3.9"
numpy-version: 1.21.4
numpy-version: 1.22.4
- os: ubuntu-latest
python-version: "3.10"
numpy-version: 1.22.4
Expand Down
4 changes: 2 additions & 2 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,8 @@ Implemented methods in **MAPIE** respect three fundamental pillars:
🔗 Requirements
===============

- **MAPIE** runs on Python 3.7+.
- **MAPIE** stands on the shoulders of giants. Its only internal dependencies are `scikit-learn <https://scikit-learn.org/stable/>`_ and `numpy=>1.21 <https://numpy.org/>`_.
- **MAPIE** runs on Python 3.9+.
- **MAPIE** stands on the shoulders of giants. Its only internal dependencies are `scikit-learn <https://scikit-learn.org/stable/>`_ and `numpy=>1.22 <https://numpy.org/>`_.


🛠 Installation
Expand Down
15 changes: 11 additions & 4 deletions doc/v1_migration_guide.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,14 @@ MAPIE v1 introduces several updates, enhancements, and structural changes that s

This guide outlines the differences between MAPIE v0.x and MAPIE v1 and provides instructions for migrating your code to the new API.

1. Overview of class restructuring
1. Python and NumPy versions support
-------------------------------------------------

We now support Python >= 3.9 (formerly >=3.7), and NumPy >= 1.22 (formerly >=1.21).

MAPIE v1 may run with Python < 3.9, but we do not recommend it.

2. Class restructuring
-----------------------------------

MAPIE v1 breaks down the ``MapieRegressor`` and ``MapieClassifier`` classes into 5 classes, each dedicated to a particular conformal prediction technique. ``MapieQuantileRegressor`` has also been revamped, and renamed ``ConformalizedQuantileRegressor``.
Expand Down Expand Up @@ -48,7 +55,7 @@ The ``cv`` parameter is key to understand what new class to use in the v1 API:

For more details regarding the difference between split and cross conformal types, see :doc:`split_cross_conformal`

2. Method changes
3. Method changes
-----------------

In MAPIE v1, the conformal prediction workflow is more streamlined and modular, with distinct methods for training, conformalization (named calibration in the scientific literature), and prediction. The conformalization process in v1 consists of four steps.
Expand Down Expand Up @@ -91,7 +98,7 @@ The ``.predict()`` method now focuses solely on producing point predictions.



3. Parameters change
4. Parameters change
------------------------

``alpha``
Expand Down Expand Up @@ -182,7 +189,7 @@ No more parameters with incorrect ``None`` defaults.
- **v1**: All parameters now have explicit defaults.


4. Migration example: MAPIE v0.x to MAPIE v1
5. Migration examples: MAPIE v0.x to MAPIE v1
----------------------------------------------------------------------------------------

Below is a side-by-side example of code in MAPIE v0.x and its equivalent in MAPIE v1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
from matplotlib import pyplot as plt
from sklearn.utils import check_random_state

from mapie._typing import NDArray
from numpy.typing import NDArray
from mapie.metrics import (cumulative_differences, kolmogorov_smirnov_p_value,
length_scale)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
from matplotlib import pyplot as plt
from sklearn.utils import check_random_state

from mapie._typing import NDArray
from numpy.typing import NDArray
from mapie.metrics import (kolmogorov_smirnov_p_value, kuiper_p_value,
spiegelhalter_p_value)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB

from mapie._typing import NDArray
from numpy.typing import NDArray
from mapie.classification import MapieClassifier
from mapie.metrics import (classification_coverage_score,
classification_mean_width_score)
Expand Down
2 changes: 1 addition & 1 deletion examples/classification/4-tutorials/plot_crossconformal.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
from sklearn.naive_bayes import GaussianNB
from typing_extensions import TypedDict

from mapie._typing import NDArray
from numpy.typing import NDArray
from mapie.classification import MapieClassifier
from mapie.metrics import (classification_coverage_score,
classification_mean_width_score)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB

from mapie._typing import NDArray
from numpy.typing import NDArray
from mapie.classification import MapieClassifier
from mapie.metrics import (classification_coverage_score,
classification_mean_width_score)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
from sklearn.preprocessing import PolynomialFeatures
from sklearn.model_selection import train_test_split

from mapie._typing import NDArray
from numpy.typing import NDArray
from mapie_v1.regression import (
CrossConformalRegressor,
JackknifeAfterBootstrapRegressor,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
from sklearn.model_selection import train_test_split


from mapie._typing import NDArray
from numpy.typing import NDArray
from mapie_v1.regression import (
CrossConformalRegressor,
JackknifeAfterBootstrapRegressor,
Expand Down
2 changes: 1 addition & 1 deletion examples/regression/1-quickstart/plot_prefit.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
from matplotlib import pyplot as plt
from sklearn.neural_network import MLPRegressor

from mapie._typing import NDArray
from numpy.typing import NDArray
from mapie.metrics import regression_coverage_score
from mapie_v1.regression import SplitConformalRegressor, ConformalizedQuantileRegressor
from mapie_v1.utils import train_conformalize_test_split
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
from sklearn.preprocessing import PolynomialFeatures
from sklearn.model_selection import train_test_split

from mapie._typing import NDArray
from numpy.typing import NDArray
from mapie_v1.regression import (
CrossConformalRegressor,
ConformalizedQuantileRegressor,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
from lightgbm import LGBMRegressor
from sklearn.model_selection import train_test_split

from mapie._typing import NDArray
from numpy.typing import NDArray
from mapie.conformity_scores import (GammaConformityScore,
ResidualNormalisedScore)
from mapie.metrics import (hsic, regression_coverage_score_v2, regression_ssc,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import RandomizedSearchCV, TimeSeriesSplit

from mapie._typing import NDArray
from numpy.typing import NDArray
from mapie.metrics import (regression_coverage_score,
regression_mean_width_score)
from mapie.regression import MapieTimeSeriesRegressor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
from matplotlib import pyplot as plt
from sklearn.linear_model import LinearRegression

from mapie._typing import NDArray
from numpy.typing import NDArray
from mapie.metrics import (regression_coverage_score,
regression_mean_width_score)
from mapie_v1.regression import CrossConformalRegressor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
from sklearn.linear_model import Ridge
from sklearn.model_selection import train_test_split

from mapie._typing import ArrayLike, NDArray
from numpy.typing import ArrayLike, NDArray
from mapie.metrics import (regression_coverage_score,
regression_mean_width_score)
from mapie_v1.regression import (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import PredefinedSplit

from mapie._typing import NDArray
from numpy.typing import NDArray
from mapie.conformity_scores import AbsoluteConformityScore
from mapie.time_series_regression import MapieTimeSeriesRegressor

Expand Down
58 changes: 0 additions & 58 deletions mapie/_compatibility.py

This file was deleted.

3 changes: 0 additions & 3 deletions mapie/_typing.py

This file was deleted.

2 changes: 1 addition & 1 deletion mapie/aggregation_functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import numpy as np

from ._typing import NDArray
from numpy.typing import NDArray


def phi1D(
Expand Down
2 changes: 1 addition & 1 deletion mapie/calibration.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from sklearn.utils.validation import (_check_y, _num_samples, check_is_fitted,
indexable)

from ._typing import ArrayLike, NDArray
from numpy.typing import ArrayLike, NDArray
from .utils import (check_estimator_classification,
check_estimator_fit_predict, check_n_features_in,
check_null_weight, fit_estimator, get_calib_set)
Expand Down
2 changes: 1 addition & 1 deletion mapie/classification.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from sklearn.utils import check_random_state
from sklearn.utils.validation import (_check_y, check_is_fitted, indexable)

from mapie._typing import ArrayLike, NDArray
from numpy.typing import ArrayLike, NDArray
from mapie.conformity_scores import BaseClassificationScore
from mapie.conformity_scores.sets.raps import RAPSConformityScore
from mapie.conformity_scores.utils import (
Expand Down
2 changes: 1 addition & 1 deletion mapie/conformity_scores/bounds/absolute.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import numpy as np

from mapie._typing import ArrayLike, NDArray
from numpy.typing import ArrayLike, NDArray
from mapie.conformity_scores import BaseRegressionScore


Expand Down
2 changes: 1 addition & 1 deletion mapie/conformity_scores/bounds/gamma.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import numpy as np

from mapie._typing import ArrayLike, NDArray
from numpy.typing import ArrayLike, NDArray
from mapie.conformity_scores import BaseRegressionScore


Expand Down
2 changes: 1 addition & 1 deletion mapie/conformity_scores/bounds/residuals.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from sklearn.utils.validation import (check_is_fitted, check_random_state,
indexable)

from mapie._typing import ArrayLike, NDArray
from numpy.typing import ArrayLike, NDArray
from mapie.conformity_scores import BaseRegressionScore


Expand Down
2 changes: 1 addition & 1 deletion mapie/conformity_scores/classification.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from mapie.conformity_scores.interface import BaseConformityScore
from mapie.estimator.classifier import EnsembleClassifier

from mapie._typing import ArrayLike, NDArray
from numpy.typing import ArrayLike, NDArray


class BaseClassificationScore(BaseConformityScore, metaclass=ABCMeta):
Expand Down
2 changes: 1 addition & 1 deletion mapie/conformity_scores/conformity_scores.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

from mapie.conformity_scores.regression import BaseConformityScore
from mapie._machine_precision import EPSILON
from mapie._typing import NDArray
from numpy.typing import NDArray


@deprecated(
Expand Down
5 changes: 2 additions & 3 deletions mapie/conformity_scores/interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@
import numpy as np
from sklearn.base import BaseEstimator

from mapie._compatibility import np_nanquantile
from mapie._typing import NDArray
from numpy.typing import NDArray


class BaseConformityScore(metaclass=ABCMeta):
Expand Down Expand Up @@ -155,7 +154,7 @@ def get_quantile(
# Otherwise, the quantile is calculated as the corrected lower quantile
# of the signed conformity scores.
quantile = signed * np.column_stack([
np_nanquantile(
np.nanquantile(
signed * conformity_scores, _alpha_cor,
axis=axis, method="lower"
) if not (unbounded and _alpha >= 1) else np.inf * np.ones(n_ref)
Expand Down
7 changes: 3 additions & 4 deletions mapie/conformity_scores/regression.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,8 @@
from mapie.conformity_scores.interface import BaseConformityScore
from mapie.estimator.regressor import EnsembleRegressor

from mapie._compatibility import np_nanquantile
from mapie._machine_precision import EPSILON
from mapie._typing import NDArray
from numpy.typing import NDArray


class BaseRegressionScore(BaseConformityScore, metaclass=ABCMeta):
Expand Down Expand Up @@ -238,13 +237,13 @@ def _beta_optimize(
num=len(lower_bounds),
endpoint=True,
)
one_alpha_beta = np_nanquantile(
one_alpha_beta = np.nanquantile(
upper_bounds.astype(float),
1 - _alpha + betas,
axis=1,
method="higher",
)
beta = np_nanquantile(
beta = np.nanquantile(
lower_bounds.astype(float),
betas,
axis=1,
Expand Down
2 changes: 1 addition & 1 deletion mapie/conformity_scores/sets/aps.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from mapie.estimator.classifier import EnsembleClassifier

from mapie._machine_precision import EPSILON
from mapie._typing import ArrayLike, NDArray
from numpy.typing import ArrayLike, NDArray
from mapie.utils import compute_quantiles


Expand Down
2 changes: 1 addition & 1 deletion mapie/conformity_scores/sets/lac.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from mapie.estimator.classifier import EnsembleClassifier

from mapie._machine_precision import EPSILON
from mapie._typing import NDArray
from numpy.typing import NDArray
from mapie.utils import compute_quantiles


Expand Down
Loading
Loading