From 65f1f6bcf51684827c458f3626b879eaebb47eaa Mon Sep 17 00:00:00 2001 From: pat-alt Date: Tue, 29 Nov 2022 13:43:28 +0100 Subject: [PATCH 01/10] hmmm --- .../inductive_classification.jl | 9 ++-- src/ConformalModels/score_functions.jl | 47 +++++++++++++++++++ 2 files changed, 51 insertions(+), 5 deletions(-) create mode 100644 src/ConformalModels/score_functions.jl diff --git a/src/ConformalModels/inductive_classification.jl b/src/ConformalModels/inductive_classification.jl index 6a1bc6a..071c952 100644 --- a/src/ConformalModels/inductive_classification.jl +++ b/src/ConformalModels/inductive_classification.jl @@ -115,9 +115,9 @@ function MMI.fit(conf_model::AdaptiveInductiveClassifier, verbosity, X, y) L = p̂.decoder.classes ŷ = pdf(p̂, L) # compute probabilities for all classes scores = map(eachrow(ŷ),eachrow(ycal)) do ŷᵢ, ycalᵢ - ranks = sortperm(.-ŷᵢ) # rank in descending order - index_y = findall(L[ranks].==ycalᵢ)[1] # index of true y in sorted array - scoreᵢ = last(cumsum(ŷᵢ[ranks][1:index_y])) # sum up until true y is reached + ranks = sortperm(.-ŷᵢ) # rank in descending order + index_y = findall(L[ranks].==ycalᵢ)[1] # index of true y in sorted array + scoreᵢ = last(cumsum(ŷᵢ[ranks][1:index_y])) # sum up until true y is reached return scoreᵢ end conf_model.scores = scores @@ -152,5 +152,4 @@ function MMI.predict(conf_model::AdaptiveInductiveClassifier, fitresult, Xnew) return pp end return p̂ -end - +end \ No newline at end of file diff --git a/src/ConformalModels/score_functions.jl b/src/ConformalModels/score_functions.jl new file mode 100644 index 0000000..83c3674 --- /dev/null +++ b/src/ConformalModels/score_functions.jl @@ -0,0 +1,47 @@ +"Abstract base type for scorers. Scorers are just structs that implement specific scoring rules. Scores relate to nonconformity scores." +abstract type AbstractScorer end + +""" + score(conf_model::ConformalModel, X, y) + +Wrapper function that applies the scoring rule defined by the scorer `conf_model.scorer` to the conformal model. +""" +function score(conf_model::ConformalModel, fitresult, X, y) + return score(conf_model, conf_model.scorer, fitresult, X, y) +end + +""" + form_set(conf_model::ConformalModel, Xnew, q̂) + +Wrapper function that forms the predictions set according to the scoring rule defined by the scorer `conf_model.scorer`. +""" +function form_set(conf_model::ConformalModel, fitresult, Xnew, q̂) + return form_set(conf_model, conf_model.scorer, fitresult, Xnew, q̂) +end + +struct ResidualScorer <: AbstractScorer end + +function score(conf_model::ConformalInterval, score_fun::ResidualScorer, X, y) + ŷ = MMI.predict(conf_model.model, fitresult, X) + return abs(y - ŷ) +end + +function form_set(score_fun::ResidualScorer, ŷ, q̂) + return (ŷ - q̂, ŷ + q̂) +end + +struct SoftmaxResidualScorer <: AbstractScorer end + +function score(score_fun::SoftmaxResidualScorer, y, ŷ) + return 1.0 - ŷ +end + +function form_set(score_fun::SoftmaxResidualScorer, ŷ, q̂) + return 1.0 - q̂ +end + +struct PredictiveDensityScorer <: AbstractScorer end + +function score(score_fun::PredictiveDensityScorer, y, ŷ) + +end \ No newline at end of file From 7dd1b4ba884bde71e29a3489be209ccbc86220a0 Mon Sep 17 00:00:00 2001 From: pat-alt Date: Tue, 29 Nov 2022 16:28:54 +0100 Subject: [PATCH 02/10] uff --- docs/src/intro.qmd | 2 +- src/ConformalModels/inductive_bayes.jl | 74 ++++++++++++++++++++++++++ src/ConformalModels/score_functions.jl | 47 ---------------- 3 files changed, 75 insertions(+), 48 deletions(-) create mode 100644 src/ConformalModels/inductive_bayes.jl delete mode 100644 src/ConformalModels/score_functions.jl diff --git a/docs/src/intro.qmd b/docs/src/intro.qmd index 5ff0e97..ec4c99e 100644 --- a/docs/src/intro.qmd +++ b/docs/src/intro.qmd @@ -97,7 +97,7 @@ Predictions can then be computed using the generic `predict` method. The code be ```{julia} #| output: true -n = 10 +n = 5 Xtest = selectrows(X, first(test,n)) ytest = y[first(test,n)] predict(mach, Xtest) diff --git a/src/ConformalModels/inductive_bayes.jl b/src/ConformalModels/inductive_bayes.jl new file mode 100644 index 0000000..82e720a --- /dev/null +++ b/src/ConformalModels/inductive_bayes.jl @@ -0,0 +1,74 @@ +# Simple +"The `SimpleInductiveBayes` is the simplest approach to Inductive Conformalized Bayes." +mutable struct SimpleInductiveBayes{Model <: Supervised} <: ConformalModel + model::Model + coverage::AbstractFloat + scores::Union{Nothing,AbstractArray} + heuristic::Function + train_ratio::AbstractFloat +end + +function SimpleInductiveBayes(model::Supervised; coverage::AbstractFloat=0.95, heuristic::Function=f(y, ŷ)=-ŷ, train_ratio::AbstractFloat=0.5) + return SimpleInductiveBayes(model, coverage, nothing, heuristic, train_ratio) +end + +@doc raw""" + MMI.fit(conf_model::SimpleInductiveBayes, verbosity, X, y) + +For the [`SimpleInductiveBayes`](@ref) nonconformity scores are computed as follows: + +`` +S_i^{\text{CAL}} = s(X_i, Y_i) = h(\hat\mu(X_i), Y_i), \ i \in \mathcal{D}_{\text{calibration}} +`` + +A typical choice for the heuristic function is ``h(\hat\mu(X_i), Y_i)=1-\hat\mu(X_i)_{Y_i}`` where ``\hat\mu(X_i)_{Y_i}`` denotes the softmax output of the true class and ``\hat\mu`` denotes the model fitted on training data ``\mathcal{D}_{\text{train}}``. The simple approach only takes the softmax probability of the true label into account. +""" +function MMI.fit(conf_model::SimpleInductiveBayes, verbosity, X, y) + + # Data Splitting: + train, calibration = partition(eachindex(y), conf_model.train_ratio) + Xtrain = selectrows(X, train) + ytrain = y[train] + Xtrain, ytrain = MMI.reformat(conf_model.model, Xtrain, ytrain) + Xcal = selectrows(X, calibration) + ycal = y[calibration] + Xcal, ycal = MMI.reformat(conf_model.model, Xcal, ycal) + + # Training: + fitresult, cache, report = MMI.fit(conf_model.model, verbosity, Xtrain, ytrain) + + # Nonconformity Scores: + ŷ = pdf.(MMI.predict(conf_model.model, fitresult, Xcal), ycal) # predict returns a vector of distributions + conf_model.scores = @.(conf_model.heuristic(ycal, ŷ)) + + return (fitresult, cache, report) +end + +@doc raw""" + MMI.predict(conf_model::SimpleInductiveBayes, fitresult, Xnew) + +For the [`SimpleInductiveBayes`](@ref) prediction sets are computed as follows, + +`` +\hat{C}_{n,\alpha}(X_{n+1}) = \left\{y: s(X_{n+1},y) \le \hat{q}_{n, \alpha}^{+} \{S_i^{\text{CAL}}\} \right\}, \ i \in \mathcal{D}_{\text{calibration}} +`` + +where ``\mathcal{D}_{\text{calibration}}`` denotes the designated calibration data. +""" +function MMI.predict(conf_model::SimpleInductiveBayes, fitresult, Xnew) + p̂ = MMI.predict(conf_model.model, fitresult, MMI.reformat(conf_model.model, Xnew)...) + v = conf_model.scores + q̂ = Statistics.quantile(v, conf_model.coverage) + p̂ = map(p̂) do pp + L = p̂.decoder.classes + probas = pdf.(pp, L) + is_in_set = 1.0 .- probas .<= q̂ + if !all(is_in_set .== false) + pp = UnivariateFinite(L[is_in_set], probas[is_in_set]) + else + pp = missing + end + return pp + end + return p̂ +end \ No newline at end of file diff --git a/src/ConformalModels/score_functions.jl b/src/ConformalModels/score_functions.jl deleted file mode 100644 index 83c3674..0000000 --- a/src/ConformalModels/score_functions.jl +++ /dev/null @@ -1,47 +0,0 @@ -"Abstract base type for scorers. Scorers are just structs that implement specific scoring rules. Scores relate to nonconformity scores." -abstract type AbstractScorer end - -""" - score(conf_model::ConformalModel, X, y) - -Wrapper function that applies the scoring rule defined by the scorer `conf_model.scorer` to the conformal model. -""" -function score(conf_model::ConformalModel, fitresult, X, y) - return score(conf_model, conf_model.scorer, fitresult, X, y) -end - -""" - form_set(conf_model::ConformalModel, Xnew, q̂) - -Wrapper function that forms the predictions set according to the scoring rule defined by the scorer `conf_model.scorer`. -""" -function form_set(conf_model::ConformalModel, fitresult, Xnew, q̂) - return form_set(conf_model, conf_model.scorer, fitresult, Xnew, q̂) -end - -struct ResidualScorer <: AbstractScorer end - -function score(conf_model::ConformalInterval, score_fun::ResidualScorer, X, y) - ŷ = MMI.predict(conf_model.model, fitresult, X) - return abs(y - ŷ) -end - -function form_set(score_fun::ResidualScorer, ŷ, q̂) - return (ŷ - q̂, ŷ + q̂) -end - -struct SoftmaxResidualScorer <: AbstractScorer end - -function score(score_fun::SoftmaxResidualScorer, y, ŷ) - return 1.0 - ŷ -end - -function form_set(score_fun::SoftmaxResidualScorer, ŷ, q̂) - return 1.0 - q̂ -end - -struct PredictiveDensityScorer <: AbstractScorer end - -function score(score_fun::PredictiveDensityScorer, y, ŷ) - -end \ No newline at end of file From 6ccd88fe34a776d8c0ee34d5a686486a1fa8fba3 Mon Sep 17 00:00:00 2001 From: pat-alt Date: Wed, 30 Nov 2022 09:14:28 +0100 Subject: [PATCH 03/10] some stuff on docs. Moving to a dedicated brnach for docs --- docs/make.jl | 6 ++++- docs/src/classification.qmd | 6 +++++ docs/src/regression.qmd | 48 +++++++++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 docs/src/regression.qmd diff --git a/docs/make.jl b/docs/make.jl index 3f5b8f5..16c4ba2 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -32,8 +32,12 @@ makedocs(; ), pages=[ "🏠 Home" => "index.md", + "🤔 Tutorials" => [ + "Classification" => "classification.md", + "Regression" = "regression.md", + ], + "📖 Reference" => "reference.md", "🛠 Contribute" => "contribute.md", - "📖 Library" => "reference.md", ], ) diff --git a/docs/src/classification.qmd b/docs/src/classification.qmd index 0dc31b7..9eec225 100644 --- a/docs/src/classification.qmd +++ b/docs/src/classification.qmd @@ -1,3 +1,9 @@ +# Classification + +```@meta +CurrentModule = ConformalPrediction +``` + ```{julia} #| echo: false using Pkg; Pkg.activate("docs") diff --git a/docs/src/regression.qmd b/docs/src/regression.qmd new file mode 100644 index 0000000..d32b2df --- /dev/null +++ b/docs/src/regression.qmd @@ -0,0 +1,48 @@ +# Regression + +```@meta +CurrentModule = ConformalPrediction +``` + +```{julia} +#| echo: false +using Pkg; Pkg.activate("docs") +using Plots +theme(:wong) +``` + +```{julia} +# Regression data: +N = 150 +xmax = 8.0 +noise = 0.3 +X = rand(N) * xmax +ε = randn(N) .* noise +y = @.(sin(X)) + ε + +using Plots +scatter(X, y, label="Observed") +xrange = range(0,xmax,length=50) +plot!(xrange, sin.(xrange), lw=4, label="Ground truth") +``` + +```{julia} +using MLJ +EvoTreeRegressor = @load EvoTreeRegressor pkg=EvoTrees +model = EvoTreeRegressor() +``` + +```{julia} +using ConformalPrediction +conf_model = conformal_model(model) +mach = machine(conf_model, X, y) +fit!(mach, rows=train) +``` + +```{julia} +#| output: true +rows = rand(test, 10) +Xtest = selectrows(X, rows) +ytest = y[rows] +predict(mach, Xtest) +``` \ No newline at end of file From 3092f766abca1580a31d4e6fa739f7f241cf311f Mon Sep 17 00:00:00 2001 From: pat-alt Date: Wed, 30 Nov 2022 12:00:31 +0100 Subject: [PATCH 04/10] some early work on regression --- Project.toml | 1 + dev/plot_main-tutorial-regression.ipynb | 521 ++++++++++++++++++ docs/Manifest.toml | 225 +++++++- docs/Project.toml | 3 + docs/src/regression.qmd | 40 +- src/ConformalModels/ConformalModels.jl | 2 + src/ConformalModels/inductive_regression.jl | 1 + src/ConformalModels/plotting.jl | 102 ++++ .../transductive_regression.jl | 5 + src/ConformalModels/utils.jl | 3 + test/classification.jl | 4 + test/regression.jl | 4 + 12 files changed, 865 insertions(+), 46 deletions(-) create mode 100644 dev/plot_main-tutorial-regression.ipynb create mode 100644 src/ConformalModels/plotting.jl create mode 100644 src/ConformalModels/utils.jl diff --git a/Project.toml b/Project.toml index 97640a6..b2918fd 100644 --- a/Project.toml +++ b/Project.toml @@ -7,6 +7,7 @@ version = "0.1.3" MLJ = "add582a8-e3ab-11e8-2d5e-e98b27df1bc7" MLJBase = "a7f614a8-145f-11e9-1d2a-a57a1082229d" MLJModelInterface = "e80e1ace-859a-464e-9ed9-23947d8ae3ea" +Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" [compat] diff --git a/dev/plot_main-tutorial-regression.ipynb b/dev/plot_main-tutorial-regression.ipynb new file mode 100644 index 0000000..2174e1b --- /dev/null +++ b/dev/plot_main-tutorial-regression.ipynb @@ -0,0 +1,521 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n# Tutorial for tabular regression\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this tutorial, we compare the prediction intervals estimated by MAPIE on a\nsimple, one-dimensional, ground truth function\n$f(x) = x \\times \\sin(x)$.\n\nThroughout this tutorial, we will answer the following questions:\n\n- How well do the MAPIE strategies capture the aleatoric uncertainty\n existing in the data?\n\n- How do the prediction intervals estimated by the resampling strategies\n evolve for new *out-of-distribution* data ?\n\n- How do the prediction intervals vary between regressor models ?\n\nThroughout this tutorial, we estimate the prediction intervals first using\na polynomial function, and then using a boosting model, and a simple neural\nnetwork.\n\n**For practical problems, we advise using the faster CV+ or\nJackknife+-after-Bootstrap strategies.\nFor conservative prediction interval estimates, you can alternatively\nuse the CV-minmax strategies.**\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import os\nimport subprocess\nimport warnings\n\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport pandas as pd\n\nfrom mapie.metrics import regression_coverage_score\nfrom mapie.regression import MapieRegressor\nfrom mapie.quantile_regression import MapieQuantileRegressor\nfrom mapie.subsample import Subsample\nfrom sklearn.linear_model import LinearRegression, QuantileRegressor\nfrom sklearn.pipeline import Pipeline\nfrom sklearn.preprocessing import PolynomialFeatures\n\nos.environ[\"TF_CPP_MIN_LOG_LEVEL\"] = \"3\"\nwarnings.filterwarnings(\"ignore\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. Estimating the aleatoric uncertainty of homoscedastic noisy data\n\nLet's start by defining the $x \\times \\sin(x)$ function and another\nsimple function that generates one-dimensional data with normal noise\nuniformely in a given interval.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def x_sinx(x):\n \"\"\"One-dimensional x*sin(x) function.\"\"\"\n return x*np.sin(x)\n\n\ndef get_1d_data_with_constant_noise(funct, min_x, max_x, n_samples, noise):\n \"\"\"\n Generate 1D noisy data uniformely from the given function\n and standard deviation for the noise.\n \"\"\"\n np.random.seed(59)\n X_train = np.linspace(min_x, max_x, n_samples)\n np.random.shuffle(X_train)\n X_test = np.linspace(min_x, max_x, n_samples*5)\n y_train, y_mesh, y_test = funct(X_train), funct(X_test), funct(X_test)\n y_train += np.random.normal(0, noise, y_train.shape[0])\n y_test += np.random.normal(0, noise, y_test.shape[0])\n return (\n X_train.reshape(-1, 1), y_train, X_test.reshape(-1, 1), y_test, y_mesh\n )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We first generate noisy one-dimensional data uniformely on an interval.\nHere, the noise is considered as *homoscedastic*, since it remains constant\nover $x$.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "min_x, max_x, n_samples, noise = -5, 5, 600, 0.5\nX_train, y_train, X_test, y_test, y_mesh = get_1d_data_with_constant_noise(\n x_sinx, min_x, max_x, n_samples, noise\n)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's visualize our noisy function.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "plt.xlabel(\"x\")\nplt.ylabel(\"y\")\nplt.scatter(X_train, y_train, color=\"C0\")\n_ = plt.plot(X_test, y_mesh, color=\"C1\")\nplt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As mentioned previously, we fit our training data with a simple\npolynomial function. Here, we choose a degree equal to 10 so the function\nis able to perfectly fit $x \\times \\sin(x)$.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "degree_polyn = 10\npolyn_model = Pipeline(\n [\n (\"poly\", PolynomialFeatures(degree=degree_polyn)),\n (\"linear\", LinearRegression())\n ]\n)\npolyn_model_quant = Pipeline(\n [\n (\"poly\", PolynomialFeatures(degree=degree_polyn)),\n (\"linear\", QuantileRegressor(\n solver=\"highs\",\n alpha=0,\n ))\n ]\n)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We then estimate the prediction intervals for all the strategies very easily\nwith a\n`fit` and `predict` process. The prediction interval's lower and upper bounds\nare then saved in a DataFrame. Here, we set an alpha value of 0.05\nin order to obtain a 95% confidence for our prediction intervals.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "STRATEGIES = {\n \"naive\": dict(method=\"naive\"),\n \"jackknife\": dict(method=\"base\", cv=-1),\n \"jackknife_plus\": dict(method=\"plus\", cv=-1),\n \"jackknife_minmax\": dict(method=\"minmax\", cv=-1),\n \"cv\": dict(method=\"base\", cv=10),\n \"cv_plus\": dict(method=\"plus\", cv=10),\n \"cv_minmax\": dict(method=\"minmax\", cv=10),\n \"jackknife_plus_ab\": dict(method=\"plus\", cv=Subsample(n_resamplings=50)),\n \"jackknife_minmax_ab\": dict(\n method=\"minmax\", cv=Subsample(n_resamplings=50)\n ),\n \"conformalized_quantile_regression\": dict(\n method=\"quantile\", cv=\"split\", alpha=0.05\n )\n}\ny_pred, y_pis = {}, {}\nfor strategy, params in STRATEGIES.items():\n if strategy == \"conformalized_quantile_regression\":\n mapie = MapieQuantileRegressor(polyn_model_quant, **params)\n mapie.fit(X_train, y_train, random_state=1)\n y_pred[strategy], y_pis[strategy] = mapie.predict(X_test)\n else:\n mapie = MapieRegressor(polyn_model, **params)\n mapie.fit(X_train, y_train)\n y_pred[strategy], y_pis[strategy] = mapie.predict(X_test, alpha=0.05)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let\u2019s now compare the target confidence intervals with the predicted\nintervals obtained with the Jackknife+, Jackknife-minmax, CV+, CV-minmax,\nJackknife+-after-Boostrap, and conformalized quantile regression (CQR)\nstrategies. Note that for the Jackknife-after-Bootstrap method, we call the\n:class:`~mapie.subsample.Subsample` object that allows us to train\nbootstrapped models. Note also that the CQR method is called with\n:class:`~mapie.quantile_regression.MapieQuantileRegressor` with a\n\"split\" strategy.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def plot_1d_data(\n X_train,\n y_train,\n X_test,\n y_test,\n y_sigma,\n y_pred,\n y_pred_low,\n y_pred_up,\n ax=None,\n title=None\n):\n ax.set_xlabel(\"x\")\n ax.set_ylabel(\"y\")\n ax.fill_between(X_test, y_pred_low, y_pred_up, alpha=0.3)\n ax.scatter(X_train, y_train, color=\"red\", alpha=0.3, label=\"Training data\")\n ax.plot(X_test, y_test, color=\"gray\", label=\"True confidence intervals\")\n ax.plot(X_test, y_test - y_sigma, color=\"gray\", ls=\"--\")\n ax.plot(X_test, y_test + y_sigma, color=\"gray\", ls=\"--\")\n ax.plot(\n X_test, y_pred, color=\"blue\", alpha=0.5, label=\"Prediction intervals\"\n )\n if title is not None:\n ax.set_title(title)\n ax.legend()\n\n\nstrategies = [\n \"jackknife_plus\",\n \"jackknife_minmax\",\n \"cv_plus\",\n \"cv_minmax\",\n \"jackknife_plus_ab\",\n \"conformalized_quantile_regression\"\n]\nn_figs = len(strategies)\nfig, axs = plt.subplots(3, 2, figsize=(9, 13))\ncoords = [axs[0, 0], axs[0, 1], axs[1, 0], axs[1, 1], axs[2, 0], axs[2, 1]]\nfor strategy, coord in zip(strategies, coords):\n plot_1d_data(\n X_train.ravel(),\n y_train.ravel(),\n X_test.ravel(),\n y_mesh.ravel(),\n np.full((X_test.shape[0]), 1.96*noise).ravel(),\n y_pred[strategy].ravel(),\n y_pis[strategy][:, 0, 0].ravel(),\n y_pis[strategy][:, 1, 0].ravel(),\n ax=coord,\n title=strategy\n )\nplt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "At first glance, the four strategies give similar results and the\nprediction intervals are very close to the true confidence intervals.\nLet\u2019s confirm this by comparing the prediction interval widths over\n$x$ between all strategies.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "fig, ax = plt.subplots(1, 1, figsize=(9, 5))\nax.axhline(1.96*2*noise, ls=\"--\", color=\"k\", label=\"True width\")\nfor strategy in STRATEGIES:\n ax.plot(\n X_test,\n y_pis[strategy][:, 1, 0] - y_pis[strategy][:, 0, 0],\n label=strategy\n )\nax.set_xlabel(\"x\")\nax.set_ylabel(\"Prediction Interval Width\")\nax.legend(fontsize=8)\nplt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As expected, the prediction intervals estimated by the Naive method\nare slightly too narrow. The Jackknife, Jackknife+, CV, CV+, JaB, and J+aB\ngive\nsimilar widths that are very close to the true width. On the other hand,\nthe width estimated by Jackknife-minmax and CV-minmax are slightly too\nwide. Note that the widths given by the Naive, Jackknife, and CV strategies\nare constant because there is a single model used for prediction,\nperturbed models are ignored at prediction time.\n\nIt's interesting to observe that CQR strategy offers more varying width,\noften giving much higher but also lower interval width than other methods,\ntherefore,\nwith homoscedastic noise, CQR would not be the preferred method.\n\nLet\u2019s now compare the *effective* coverage, namely the fraction of test\npoints whose true values lie within the prediction intervals, given by\nthe different strategies.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "pd.DataFrame([\n [\n regression_coverage_score(\n y_test, y_pis[strategy][:, 0, 0], y_pis[strategy][:, 1, 0]\n ),\n (\n y_pis[strategy][:, 1, 0] - y_pis[strategy][:, 0, 0]\n ).mean()\n ] for strategy in STRATEGIES\n], index=STRATEGIES, columns=[\"Coverage\", \"Width average\"]).round(2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "All strategies except the Naive one give effective coverage close to the\nexpected 0.95 value (recall that alpha = 0.05), confirming the theoretical\ngarantees.\n\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Estimating the aleatoric uncertainty of heteroscedastic noisy data\n\nLet's define again the $x \\times \\sin(x)$ function and another simple\nfunction that generates one-dimensional data with normal noise uniformely\nin a given interval.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def get_1d_data_with_heteroscedastic_noise(\n funct, min_x, max_x, n_samples, noise\n):\n \"\"\"\n Generate 1D noisy data uniformely from the given function\n and standard deviation for the noise.\n \"\"\"\n np.random.seed(59)\n X_train = np.linspace(min_x, max_x, n_samples)\n np.random.shuffle(X_train)\n X_test = np.linspace(min_x, max_x, n_samples*5)\n y_train = (\n funct(X_train) +\n (np.random.normal(0, noise, len(X_train)) * X_train)\n )\n y_test = (\n funct(X_test) +\n (np.random.normal(0, noise, len(X_test)) * X_test)\n )\n y_mesh = funct(X_test)\n return (\n X_train.reshape(-1, 1), y_train, X_test.reshape(-1, 1), y_test, y_mesh\n )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We first generate noisy one-dimensional data uniformely on an interval.\nHere, the noise is considered as *heteroscedastic*, since it will increase\nlinearly with $x$.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "min_x, max_x, n_samples, noise = 0, 5, 300, 0.5\n(\n X_train, y_train, X_test, y_test, y_mesh\n) = get_1d_data_with_heteroscedastic_noise(\n x_sinx, min_x, max_x, n_samples, noise\n)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's visualize our noisy function. As x increases, the data becomes more\nnoisy.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "plt.xlabel(\"x\")\nplt.ylabel(\"y\")\nplt.scatter(X_train, y_train, color=\"C0\")\nplt.plot(X_test, y_mesh, color=\"C1\")\nplt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As mentioned previously, we fit our training data with a simple\npolynomial function. Here, we choose a degree equal to 10 so the function\nis able to perfectly fit $x \\times \\sin(x)$.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "degree_polyn = 10\npolyn_model = Pipeline(\n [\n (\"poly\", PolynomialFeatures(degree=degree_polyn)),\n (\"linear\", LinearRegression())\n ]\n)\npolyn_model_quant = Pipeline(\n [\n (\"poly\", PolynomialFeatures(degree=degree_polyn)),\n (\"linear\", QuantileRegressor(\n solver=\"highs\",\n alpha=0,\n ))\n ]\n)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We then estimate the prediction intervals for all the strategies very easily\nwith a\n`fit` and `predict` process. The prediction interval's lower and upper bounds\nare then saved in a DataFrame. Here, we set an alpha value of 0.05\nin order to obtain a 95% confidence for our prediction intervals.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "STRATEGIES = {\n \"naive\": dict(method=\"naive\"),\n \"jackknife\": dict(method=\"base\", cv=-1),\n \"jackknife_plus\": dict(method=\"plus\", cv=-1),\n \"jackknife_minmax\": dict(method=\"minmax\", cv=-1),\n \"cv\": dict(method=\"base\", cv=10),\n \"cv_plus\": dict(method=\"plus\", cv=10),\n \"cv_minmax\": dict(method=\"minmax\", cv=10),\n \"jackknife_plus_ab\": dict(method=\"plus\", cv=Subsample(n_resamplings=50)),\n \"conformalized_quantile_regression\": dict(\n method=\"quantile\", cv=\"split\", alpha=0.05\n )\n}\ny_pred, y_pis = {}, {}\nfor strategy, params in STRATEGIES.items():\n if strategy == \"conformalized_quantile_regression\":\n mapie = MapieQuantileRegressor(polyn_model_quant, **params)\n mapie.fit(X_train, y_train, random_state=1)\n y_pred[strategy], y_pis[strategy] = mapie.predict(X_test)\n else:\n mapie = MapieRegressor(polyn_model, **params)\n mapie.fit(X_train, y_train)\n y_pred[strategy], y_pis[strategy] = mapie.predict(X_test, alpha=0.05)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once again, let\u2019s compare the target confidence intervals with prediction\nintervals obtained with the Jackknife+, Jackknife-minmax, CV+, CV-minmax,\nJackknife+-after-Boostrap, and CQR strategies.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "strategies = [\n \"jackknife_plus\",\n \"jackknife_minmax\",\n \"cv_plus\",\n \"cv_minmax\",\n \"jackknife_plus_ab\",\n \"conformalized_quantile_regression\"\n]\nn_figs = len(strategies)\nfig, axs = plt.subplots(3, 2, figsize=(9, 13))\ncoords = [axs[0, 0], axs[0, 1], axs[1, 0], axs[1, 1], axs[2, 0], axs[2, 1]]\nfor strategy, coord in zip(strategies, coords):\n plot_1d_data(\n X_train.ravel(),\n y_train.ravel(),\n X_test.ravel(),\n y_mesh.ravel(),\n (1.96*noise*X_test).ravel(),\n y_pred[strategy].ravel(),\n y_pis[strategy][:, 0, 0].ravel(),\n y_pis[strategy][:, 1, 0].ravel(),\n ax=coord,\n title=strategy\n )\nplt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can observe that all of the strategies except CQR seem to have similar\nconstant prediction intervals.\nOn the other hand, the CQR strategy offers a solution that adapts the\nprediction intervals to the local noise.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "fig, ax = plt.subplots(1, 1, figsize=(7, 5))\nax.plot(X_test, 1.96*2*noise*X_test, ls=\"--\", color=\"k\", label=\"True width\")\nfor strategy in STRATEGIES:\n ax.plot(\n X_test,\n y_pis[strategy][:, 1, 0] - y_pis[strategy][:, 0, 0],\n label=strategy\n )\nax.set_xlabel(\"x\")\nax.set_ylabel(\"Prediction Interval Width\")\nax.legend(fontsize=8)\nplt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One can observe that all the strategies behave in a similar way as in the\nfirst example shown previously. One exception is the CQR method which takes\ninto account the heteroscedasticity of the data. In this method we observe\nvery low interval widths at low values of $x$.\nThis is the only method that\neven slightly follows the true width, and therefore is the preferred method\nfor heteroscedastic data. Notice also that the true width is greater (lower)\nthan the predicted width from the other methods at $x \\gtrapprox 3$`\n($x \\leq 3$). This means that while the marginal coverage correct for\nthese methods, the conditional coverage is likely not guaranteed as we will\nobserve in the next figure.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def get_heteroscedastic_coverage(y_test, y_pis, STRATEGIES, bins):\n recap = {}\n for i in range(len(bins)-1):\n bin1, bin2 = bins[i], bins[i+1]\n name = f\"[{bin1}, {bin2}]\"\n recap[name] = []\n for strategy in STRATEGIES:\n indices = np.where((X_test >= bins[i]) * (X_test <= bins[i+1]))\n y_test_trunc = np.take(y_test, indices)\n y_low_ = np.take(y_pis[strategy][:, 0, 0], indices)\n y_high_ = np.take(y_pis[strategy][:, 1, 0], indices)\n score_coverage = regression_coverage_score(\n y_test_trunc[0], y_low_[0], y_high_[0]\n )\n recap[name].append(score_coverage)\n recap_df = pd.DataFrame(recap, index=STRATEGIES)\n return recap_df\n\n\nbins = [0, 1, 2, 3, 4, 5]\nheteroscedastic_coverage = get_heteroscedastic_coverage(\n y_test, y_pis, STRATEGIES, bins\n)\n\n# fig = plt.figure()\nheteroscedastic_coverage.T.plot.bar(figsize=(12, 5), alpha=0.7)\nplt.axhline(0.95, ls=\"--\", color=\"k\")\nplt.ylabel(\"Conditional coverage\")\nplt.xlabel(\"x bins\")\nplt.xticks(rotation=0)\nplt.ylim(0.8, 1.0)\nplt.legend(fontsize=8, loc=[0, 0])\nplt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let\u2019s now conclude by summarizing the *effective* coverage, namely the\nfraction of test\npoints whose true values lie within the prediction intervals, given by\nthe different strategies.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "pd.DataFrame([\n [\n regression_coverage_score(\n y_test, y_pis[strategy][:, 0, 0], y_pis[strategy][:, 1, 0]\n ),\n (\n y_pis[strategy][:, 1, 0] - y_pis[strategy][:, 0, 0]\n ).mean()\n ] for strategy in STRATEGIES\n], index=STRATEGIES, columns=[\"Coverage\", \"Width average\"]).round(2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "All the strategies have the wanted coverage, however, we notice that the CQR\nstrategy has much lower interval width than all the other methods, therefore,\nwith heteroscedastic noise, CQR would be the preferred method.\n\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. Estimating the epistemic uncertainty of out-of-distribution data\n\nLet\u2019s now consider one-dimensional data without noise, but normally\ndistributed.\nThe goal is to explore how the prediction intervals evolve for new data\nthat lie outside the distribution of the training data in order to see how\nthe strategies can capture the *epistemic* uncertainty.\nFor a comparison of the epistemic and aleatoric uncertainties, please have\na look at this source:\nhttps://en.wikipedia.org/wiki/Uncertainty_quantification.\n\nLet's start by generating and showing the data.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def get_1d_data_with_normal_distrib(funct, mu, sigma, n_samples, noise):\n \"\"\"\n Generate noisy 1D data with normal distribution from given function\n and noise standard deviation.\n \"\"\"\n np.random.seed(59)\n X_train = np.random.normal(mu, sigma, n_samples)\n X_test = np.arange(mu-4*sigma, mu+4*sigma, sigma/20.)\n y_train, y_mesh, y_test = funct(X_train), funct(X_test), funct(X_test)\n y_train += np.random.normal(0, noise, y_train.shape[0])\n y_test += np.random.normal(0, noise, y_test.shape[0])\n return (\n X_train.reshape(-1, 1), y_train, X_test.reshape(-1, 1), y_test, y_mesh\n )\n\n\nmu, sigma, n_samples, noise = 0, 2, 1000, 0.\nX_train, y_train, X_test, y_test, y_mesh = get_1d_data_with_normal_distrib(\n x_sinx, mu, sigma, n_samples, noise\n)\nplt.xlabel(\"x\")\nplt.ylabel(\"y\")\nplt.scatter(X_train, y_train, color=\"C0\")\n_ = plt.plot(X_test, y_test, color=\"C1\")\nplt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As before, we estimate the prediction intervals using a polynomial\nfunction of degree 10 and show the results for the Jackknife+ and CV+\nstrategies.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "polyn_model_quant = Pipeline(\n [\n (\"poly\", PolynomialFeatures(degree=degree_polyn)),\n (\"linear\", QuantileRegressor(\n solver=\"highs-ds\",\n alpha=0,\n ))\n ]\n)\nSTRATEGIES = {\n \"naive\": dict(method=\"naive\"),\n \"jackknife\": dict(method=\"base\", cv=-1),\n \"jackknife_plus\": dict(method=\"plus\", cv=-1),\n \"jackknife_minmax\": dict(method=\"minmax\", cv=-1),\n \"cv\": dict(method=\"base\", cv=10),\n \"cv_plus\": dict(method=\"plus\", cv=10),\n \"cv_minmax\": dict(method=\"minmax\", cv=10),\n \"jackknife_plus_ab\": dict(method=\"plus\", cv=Subsample(n_resamplings=50)),\n \"jackknife_minmax_ab\": dict(\n method=\"minmax\", cv=Subsample(n_resamplings=50)\n ),\n \"conformalized_quantile_regression\": dict(\n method=\"quantile\", cv=\"split\", alpha=0.05\n )\n}\ny_pred, y_pis = {}, {}\nfor strategy, params in STRATEGIES.items():\n if strategy == \"conformalized_quantile_regression\":\n mapie = MapieQuantileRegressor(polyn_model_quant, **params)\n mapie.fit(X_train, y_train, random_state=1)\n y_pred[strategy], y_pis[strategy] = mapie.predict(X_test)\n else:\n mapie = MapieRegressor(polyn_model, **params)\n mapie.fit(X_train, y_train)\n y_pred[strategy], y_pis[strategy] = mapie.predict(X_test, alpha=0.05)\n\nstrategies = [\n \"jackknife_plus\",\n \"jackknife_minmax\",\n \"cv_plus\",\n \"cv_minmax\",\n \"jackknife_plus_ab\",\n \"conformalized_quantile_regression\"\n]\nn_figs = len(strategies)\nfig, axs = plt.subplots(3, 2, figsize=(9, 13))\ncoords = [axs[0, 0], axs[0, 1], axs[1, 0], axs[1, 1], axs[2, 0], axs[2, 1]]\nfor strategy, coord in zip(strategies, coords):\n plot_1d_data(\n X_train.ravel(),\n y_train.ravel(),\n X_test.ravel(),\n y_mesh.ravel(),\n 1.96*noise,\n y_pred[strategy].ravel(),\n y_pis[strategy][:, 0, :].ravel(),\n y_pis[strategy][:, 1, :].ravel(),\n ax=coord,\n title=strategy\n )\nplt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "At first glance, our polynomial function does not give accurate\npredictions with respect to the true function when $|x| > 6$.\nThe prediction intervals estimated with the Jackknife+ do not seem to\nincrease. On the other hand, the CV and other related methods seem to capture\nsome uncertainty when $x > 6$.\n\nLet's now compare the prediction interval widths between all strategies.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "fig, ax = plt.subplots(1, 1, figsize=(7, 5))\nax.set_yscale(\"log\")\nfor strategy in STRATEGIES:\n ax.plot(\n X_test,\n y_pis[strategy][:, 1, 0] - y_pis[strategy][:, 0, 0],\n label=strategy\n )\nax.set_xlabel(\"x\")\nax.set_ylabel(\"Prediction Interval Width\")\nax.legend(fontsize=8)\nplt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The prediction interval widths start to increase exponentially\nfor $|x| > 4$ for the CV+, CV-minmax, Jackknife-minmax, and quantile\nstrategies. On the other hand, the prediction intervals estimated by\nJackknife+ remain roughly constant until $|x| \\approx 5$ before\nincreasing.\nThe CQR strategy seems to perform well, however, on the extreme values\nof the data the quantile regression fails to give reliable results as it\noutputs\nnegative value for the prediction intervals. This occurs because the quantile\nregressor with quantile $1 - \\alpha/2$ gives higher values than the\nquantile regressor with quantile $\\alpha/2$. Note that a warning will\nbe issued when this occurs.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "pd.DataFrame([\n [\n regression_coverage_score(\n y_test, y_pis[strategy][:, 0, 0], y_pis[strategy][:, 1, 0]\n ),\n (\n y_pis[strategy][:, 1, 0] - y_pis[strategy][:, 0, 0]\n ).mean()\n ] for strategy in STRATEGIES\n], index=STRATEGIES, columns=[\"Coverage\", \"Width average\"]).round(3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In conclusion, the Jackknife-minmax, CV+, CV-minmax, or Jackknife-minmax-ab\nstrategies are more\nconservative than the Jackknife+ strategy, and tend to result in more\nreliable coverages for *out-of-distribution* data. It is therefore\nadvised to use the three former strategies for predictions with new\nout-of-distribution data.\nNote however that there are no theoretical guarantees on the coverage level\nfor out-of-distribution data.\nHere it's important to note that the CQR strategy should not be taken into\naccount for width prediction, and it is abundantly clear from the negative\nwidth coverage that is observed in these results.\n\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. Estimating the uncertainty with different sklearn-compatible regressors\n\nMAPIE can be used with any kind of sklearn-compatible regressor. Here, we\nillustrate this by comparing the prediction intervals estimated by the CV+\nmethod using different models:\n\n* the same polynomial function as before.\n\n* a XGBoost model using the Scikit-learn API.\n\n* a simple neural network, a Multilayer Perceptron with three dense layers,\n using the KerasRegressor wrapper.\n\nOnce again, let\u2019s use our noisy one-dimensional data obtained from a\nuniform distribution.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "subprocess.run(\"pip install scikeras\", shell=True)\nsubprocess.run(\"pip install tensorflow\", shell=True)\nsubprocess.run(\"pip install xgboost\", shell=True)\n\nfrom scikeras.wrappers import KerasRegressor # noqa: E402\nfrom tensorflow.keras import Sequential # noqa: E402\nfrom tensorflow.keras.layers import Dense # noqa: E402\nfrom xgboost import XGBRegressor # noqa: E402\n\n\nmin_x, max_x, n_samples, noise = -5, 5, 100, 0.5\nX_train, y_train, X_test, y_test, y_mesh = get_1d_data_with_constant_noise(\n x_sinx, min_x, max_x, n_samples, noise\n)\n\nplt.xlabel(\"x\")\nplt.ylabel(\"y\")\nplt.plot(X_test, y_mesh, color=\"C1\")\n_ = plt.scatter(X_train, y_train)\nplt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's then define the models. The boosing model considers 100 shallow\ntrees with a max depth of 2 while the Multilayer Perceptron has two hidden\ndense layers with 20 neurons each followed by a relu activation.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def mlp():\n \"\"\"\n Two-layer MLP model\n \"\"\"\n model = Sequential([\n Dense(units=20, input_shape=(1,), activation=\"relu\"),\n Dense(units=20, activation=\"relu\"),\n Dense(units=1)\n ])\n model.compile(loss=\"mean_squared_error\", optimizer=\"adam\")\n return model\n\n\npolyn_model = Pipeline(\n [\n (\"poly\", PolynomialFeatures(degree=degree_polyn)),\n (\"linear\", LinearRegression())\n ]\n)\n\nxgb_model = XGBRegressor(\n max_depth=2,\n n_estimators=100,\n tree_method=\"hist\",\n random_state=59,\n learning_rate=0.1,\n verbosity=0,\n nthread=-1\n)\nmlp_model = KerasRegressor(\n build_fn=mlp,\n epochs=500,\n verbose=0\n)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's now use MAPIE to estimate the prediction intervals using the CV+\nmethod and compare their prediction interval.\n\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "models = [polyn_model, xgb_model, mlp_model]\nmodel_names = [\"polyn\", \"xgb\", \"mlp\"]\nfor name, model in zip(model_names, models):\n mapie = MapieRegressor(model, method=\"plus\", cv=10)\n mapie.fit(X_train, y_train)\n y_pred[name], y_pis[name] = mapie.predict(X_test, alpha=0.05)\n\nfig, axs = plt.subplots(1, 3, figsize=(20, 6))\nfor name, ax in zip(model_names, axs):\n plot_1d_data(\n X_train.ravel(),\n y_train.ravel(),\n X_test.ravel(),\n y_mesh.ravel(),\n 1.96*noise,\n y_pred[name].ravel(),\n y_pis[name][:, 0, 0].ravel(),\n y_pis[name][:, 1, 0].ravel(),\n ax=ax,\n title=name\n )\nplt.show()\n\n\nfig, ax = plt.subplots(1, 1, figsize=(7, 5))\nfor name in model_names:\n ax.plot(X_test, y_pis[name][:, 1, 0] - y_pis[name][:, 0, 0])\nax.axhline(1.96*2*noise, ls=\"--\", color=\"k\")\nax.set_xlabel(\"x\")\nax.set_ylabel(\"Prediction Interval Width\")\nax.legend(model_names + [\"True width\"], fontsize=8)\nplt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As expected with the CV+ method, the prediction intervals are a bit\nconservative since they are slightly wider than the true intervals.\nHowever, the CV+ method on the three models gives very promising results\nsince the prediction intervals closely follow the true intervals with\n$x$.\n\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.13" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/docs/Manifest.toml b/docs/Manifest.toml index 04314dd..72c37d3 100644 --- a/docs/Manifest.toml +++ b/docs/Manifest.toml @@ -2,7 +2,7 @@ julia_version = "1.8.1" manifest_format = "2.0" -project_hash = "ae240e8e0ebf5559f152baffe6c05f54b653e10d" +project_hash = "921211bc7dc57dcfec6290fbd98c475251523093" [[deps.ANSIColoredPrinters]] git-tree-sha1 = "574baf8110975760d391c710b6341da1afa48d8c" @@ -26,12 +26,23 @@ git-tree-sha1 = "52b3b436f8f73133d7bc3a6c71ee7ed6ab2ab754" uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" version = "0.4.3" +[[deps.Accessors]] +deps = ["Compat", "CompositionsBase", "ConstructionBase", "Dates", "InverseFunctions", "LinearAlgebra", "MacroTools", "Requires", "Test"] +git-tree-sha1 = "eb7a1342ff77f4f9b6552605f27fd432745a53a3" +uuid = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" +version = "0.1.22" + [[deps.Adapt]] deps = ["LinearAlgebra"] git-tree-sha1 = "195c5505521008abea5aee4f96930717958eac6f" uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" version = "3.4.0" +[[deps.ArgCheck]] +git-tree-sha1 = "a3a402a35a2f7e0b87828ccabbd5ebfbebe356b4" +uuid = "dce04be8-c92d-5529-be00-80e4d2c0e197" +version = "2.3.0" + [[deps.ArgTools]] uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" version = "1.1.1" @@ -86,9 +97,20 @@ git-tree-sha1 = "306bb5574b0c1c56d7e1207581516c557d105cad" uuid = "fbb218c0-5317-5bc6-957e-2ee96dd4b1f0" version = "0.3.5" +[[deps.BangBang]] +deps = ["Compat", "ConstructionBase", "Future", "InitialValues", "LinearAlgebra", "Requires", "Setfield", "Tables", "ZygoteRules"] +git-tree-sha1 = "7fe6d92c4f281cf4ca6f2fba0ce7b299742da7ca" +uuid = "198e06fe-97b7-11e9-32a5-e1d131e6ad66" +version = "0.3.37" + [[deps.Base64]] uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" +[[deps.Baselet]] +git-tree-sha1 = "aebf55e6d7795e02ca500a689d326ac979aaf89e" +uuid = "9718e550-a3fa-408a-8086-8db961cd8217" +version = "0.1.1" + [[deps.BitFlags]] git-tree-sha1 = "84259bb6172806304b9101094a7cc4bc6f56dbc6" uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" @@ -147,6 +169,12 @@ git-tree-sha1 = "23fe4c6668776fedfd3747c545cd0d1a5190eb15" uuid = "af321ab8-2d2e-40a6-b165-3d674595d28e" version = "0.1.9" +[[deps.ChainRules]] +deps = ["Adapt", "ChainRulesCore", "Compat", "Distributed", "GPUArraysCore", "IrrationalConstants", "LinearAlgebra", "Random", "RealDot", "SparseArrays", "Statistics", "StructArrays"] +git-tree-sha1 = "0c8c8887763f42583e1206ee35413a43c91e2623" +uuid = "082447d4-558c-5d27-93f4-14fc19e9eca2" +version = "1.45.0" + [[deps.ChainRulesCore]] deps = ["Compat", "LinearAlgebra", "SparseArrays"] git-tree-sha1 = "e7ff6cadf743c098e08fca25c91103ee4303c9bb" @@ -165,12 +193,6 @@ git-tree-sha1 = "5522c338564580adf5d58d91e43a55db0fa5fb39" uuid = "fb6a15b2-703c-40df-9091-08a04967cfa9" version = "0.1.10" -[[deps.CodeTracking]] -deps = ["InteractiveUtils", "UUIDs"] -git-tree-sha1 = "cc4bd91eba9cdbbb4df4746124c22c0832a460d6" -uuid = "da1fd8a2-8d9e-5ec2-8556-3022fb5608a2" -version = "1.1.1" - [[deps.CodecZlib]] deps = ["TranscodingStreams", "Zlib_jll"] git-tree-sha1 = "ded953804d019afa9a3f98981d99b33e3db7b6da" @@ -223,16 +245,21 @@ deps = ["Artifacts", "Libdl"] uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" version = "0.5.2+0" +[[deps.CompositionsBase]] +git-tree-sha1 = "455419f7e328a1a2493cabc6428d79e951349769" +uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" +version = "0.1.1" + [[deps.ComputationalResources]] git-tree-sha1 = "52cb3ec90e8a8bea0e62e275ba577ad0f74821f7" uuid = "ed09eef8-17a6-5b46-8889-db040fac31e3" version = "0.3.2" [[deps.ConformalPrediction]] -deps = ["MLJ", "MLJBase", "MLJModelInterface", "Statistics", "Term"] +deps = ["MLJ", "MLJBase", "MLJModelInterface", "Plots", "Statistics"] path = ".." uuid = "98bfc277-1877-43dc-819b-a3e38c30242f" -version = "0.1.2" +version = "0.1.3" [[deps.ConstructionBase]] deps = ["LinearAlgebra"] @@ -240,6 +267,12 @@ git-tree-sha1 = "fb21ddd70a051d882a1686a5a550990bbe371a95" uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" version = "1.4.1" +[[deps.ContextVariablesX]] +deps = ["Compat", "Logging", "UUIDs"] +git-tree-sha1 = "25cc3803f1030ab855e383129dcd3dc294e322cc" +uuid = "6add18c4-b38d-439d-96f6-d6bc489c04c5" +version = "0.1.3" + [[deps.Contour]] git-tree-sha1 = "d05d9e7b7aedff4e5b51a029dced05cfb6125781" uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" @@ -288,6 +321,11 @@ git-tree-sha1 = "fb3f7ff27befb9877bee84076dd9173185d7d86a" uuid = "7806a523-6efd-50cb-b5f6-3fa6f1930dbb" version = "0.11.2" +[[deps.DefineSingletons]] +git-tree-sha1 = "0fba8b706d0178b4dc7fd44a96a92382c9065c2c" +uuid = "244e2a9f-e319-4986-a169-4d1fe445cd52" +version = "0.1.2" + [[deps.DelimitedFiles]] deps = ["Mmap"] uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" @@ -322,9 +360,9 @@ uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" [[deps.Distributions]] deps = ["ChainRulesCore", "DensityInterface", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SparseArrays", "SpecialFunctions", "Statistics", "StatsBase", "StatsFuns", "Test"] -git-tree-sha1 = "04db820ebcfc1e053bd8cbb8d8bccf0ff3ead3f7" +git-tree-sha1 = "a7756d098cbabec6b3ac44f369f74915e8cfd70a" uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" -version = "0.25.76" +version = "0.25.79" [[deps.DocStringExtensions]] deps = ["LibGit2"] @@ -407,6 +445,18 @@ git-tree-sha1 = "c6033cc3892d0ef5bb9cd29b7f2f0331ea5184ea" uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" version = "3.3.10+0" +[[deps.FLoops]] +deps = ["BangBang", "Compat", "FLoopsBase", "InitialValues", "JuliaVariables", "MLStyle", "Serialization", "Setfield", "Transducers"] +git-tree-sha1 = "ffb97765602e3cbe59a0589d237bf07f245a8576" +uuid = "cc61a311-1640-44b5-9fba-1b764f453329" +version = "0.2.1" + +[[deps.FLoopsBase]] +deps = ["ContextVariablesX"] +git-tree-sha1 = "656f7a6859be8673bf1f35da5670246b923964f7" +uuid = "b9860ae5-e623-471e-878b-f6a53c775ea6" +version = "0.1.1" + [[deps.FileIO]] deps = ["Pkg", "Requires", "UUIDs"] git-tree-sha1 = "7be5f99f7d15578798f338f5433b6c432ea8037b" @@ -434,6 +484,18 @@ git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" version = "0.8.4" +[[deps.Flux]] +deps = ["Adapt", "ArrayInterface", "CUDA", "ChainRulesCore", "Functors", "LinearAlgebra", "MLUtils", "MacroTools", "NNlib", "NNlibCUDA", "Optimisers", "ProgressLogging", "Random", "Reexport", "SparseArrays", "SpecialFunctions", "Statistics", "StatsBase", "Test", "Zygote"] +git-tree-sha1 = "96dc065bf4a998e8adeebc0ff1302902b6e59362" +uuid = "587475ba-b771-5e3f-ad9e-33799f191a9c" +version = "0.13.4" + +[[deps.FoldsThreads]] +deps = ["Accessors", "FunctionWrappers", "InitialValues", "SplittablesBase", "Transducers"] +git-tree-sha1 = "eb8e1989b9028f7e0985b4268dabe94682249025" +uuid = "9c68100b-dfe1-47cf-94c8-95104e173443" +version = "0.1.1" + [[deps.Fontconfig_jll]] deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Pkg", "Zlib_jll"] git-tree-sha1 = "21efd19106a55620a188615da6d3d06cd7f6ee03" @@ -470,6 +532,16 @@ git-tree-sha1 = "aa31987c2ba8704e23c6c8ba8a4f769d5d7e4f91" uuid = "559328eb-81f9-559d-9380-de523a88c83c" version = "1.0.10+0" +[[deps.FunctionWrappers]] +git-tree-sha1 = "d62485945ce5ae9c0c48f124a84998d755bae00e" +uuid = "069b7b12-0de2-55c6-9aab-29f3d0a68a2e" +version = "1.1.3" + +[[deps.Functors]] +git-tree-sha1 = "223fffa49ca0ff9ce4f875be001ffe173b2b7de4" +uuid = "d9f16b24-f501-4c13-a1f2-28368ffc5196" +version = "0.2.8" + [[deps.Future]] deps = ["Random"] uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" @@ -569,12 +641,6 @@ git-tree-sha1 = "129acf094d168394e80ee1dc4bc06ec835e510a3" uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" version = "2.8.1+1" -[[deps.Highlights]] -deps = ["DocStringExtensions", "InteractiveUtils", "REPL"] -git-tree-sha1 = "0341077e8a6b9fc1c2ea5edc1e93a956d2aec0c7" -uuid = "eafb193a-b7ab-5a9e-9068-77385905fa72" -version = "0.5.2" - [[deps.HostCPUFeatures]] deps = ["BitTwiddlingConvenienceFunctions", "IfElse", "Libdl", "Static"] git-tree-sha1 = "b7b88a4716ac33fe31d6556c02fc60017594343c" @@ -593,6 +659,12 @@ git-tree-sha1 = "f7be53659ab06ddc986428d3a9dcc95f6fa6705a" uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89" version = "0.2.2" +[[deps.IRTools]] +deps = ["InteractiveUtils", "MacroTools", "Test"] +git-tree-sha1 = "2e99184fca5eb6f075944b04c22edec29beb4778" +uuid = "7869d1d1-7146-5819-86e3-90919afe41df" +version = "0.4.7" + [[deps.IfElse]] git-tree-sha1 = "debdd00ffef04665ccbb3e150747a77560e8fad1" uuid = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173" @@ -603,6 +675,11 @@ git-tree-sha1 = "f550e6e32074c939295eb5ea6de31849ac2c9625" uuid = "83e8ac13-25f8-5344-8a64-a9f2b223428f" version = "0.5.1" +[[deps.InitialValues]] +git-tree-sha1 = "4da0f88e9a39111c2fa3add390ab15f3a44f3ca3" +uuid = "22cec73e-a1b8-11e9-2c92-598750a2cf9c" +version = "0.3.1" + [[deps.IntelOpenMP_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "d979e54b71da82f3a65b62553da4fc3d18c9004c" @@ -681,6 +758,12 @@ git-tree-sha1 = "b53380851c6e6664204efb2e62cd24fa5c47e4ba" uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" version = "2.1.2+0" +[[deps.JuliaVariables]] +deps = ["MLStyle", "NameResolution"] +git-tree-sha1 = "49fb3cb53362ddadb4415e9b73926d6b40709e70" +uuid = "b14d175d-62b4-44ba-8fb7-3064adc8c3ec" +version = "0.2.4" + [[deps.KernelDensity]] deps = ["Distributions", "DocStringExtensions", "FFTW", "Interpolations", "StatsBase"] git-tree-sha1 = "9816b296736292a80b9a3200eb7fbb57aaa3917a" @@ -887,6 +970,12 @@ git-tree-sha1 = "ed2f724be26d0023cade9d59b55da93f528c3f26" uuid = "50ed68f4-41fd-4504-931a-ed422449fee0" version = "0.3.1" +[[deps.MLJFlux]] +deps = ["CategoricalArrays", "ColorTypes", "ComputationalResources", "Flux", "MLJModelInterface", "Metalhead", "ProgressMeter", "Random", "Statistics", "Tables"] +git-tree-sha1 = "2ecdce4dd9214789ee1796103d29eaee7619ebd0" +uuid = "094fc8d1-fd35-5302-93ea-dabda2abf845" +version = "0.2.9" + [[deps.MLJIteration]] deps = ["IterationControl", "MLJBase", "Random", "Serialization"] git-tree-sha1 = "024d0bd22bf4a5b273f626e89d742a9db95285ef" @@ -923,6 +1012,17 @@ git-tree-sha1 = "77209966cc028c1d7730001dc32bffe17a198f29" uuid = "03970b2e-30c4-11ea-3135-d1576263f10f" version = "0.7.3" +[[deps.MLStyle]] +git-tree-sha1 = "060ef7956fef2dc06b0e63b294f7dbfbcbdc7ea2" +uuid = "d8e11817-5142-5d16-987a-aa16d5891078" +version = "0.4.16" + +[[deps.MLUtils]] +deps = ["ChainRulesCore", "DelimitedFiles", "FLoops", "FoldsThreads", "Random", "ShowCases", "Statistics", "StatsBase", "Transducers"] +git-tree-sha1 = "824e9dfc7509cab1ec73ba77b55a916bb2905e26" +uuid = "f1d291b0-491e-4a28-83b9-f70985020b54" +version = "0.2.11" + [[deps.MacroTools]] deps = ["Markdown", "Random"] git-tree-sha1 = "42324d08725e200c23d4dfb549e0d5d89dede2d2" @@ -960,6 +1060,18 @@ git-tree-sha1 = "e498ddeee6f9fdb4551ce855a46f54dbd900245f" uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" version = "0.3.1" +[[deps.Metalhead]] +deps = ["Artifacts", "BSON", "Flux", "Functors", "LazyArtifacts", "MLUtils", "NNlib", "Random", "Statistics"] +git-tree-sha1 = "a8513152030f7210ccc0b871e03d60c9b13ed0b1" +uuid = "dbeba491-748d-5e0e-a39e-b530a07fa0cc" +version = "0.7.3" + +[[deps.MicroCollections]] +deps = ["BangBang", "InitialValues", "Setfield"] +git-tree-sha1 = "4d5917a26ca33c66c8e5ca3247bd163624d35493" +uuid = "128add7d-3638-4c79-886c-908ea0c25c34" +version = "0.1.3" + [[deps.Missings]] deps = ["DataAPI"] git-tree-sha1 = "bf210ce90b6c9eed32d25dbcae1ebc565df2687f" @@ -973,17 +1085,24 @@ uuid = "a63ad114-7e13-5084-954f-fe012c677804" uuid = "14a3606d-f60d-562e-9121-12d972cd8159" version = "2022.2.1" -[[deps.MyterialColors]] -git-tree-sha1 = "01d8466fb449436348999d7c6ad740f8f853a579" -uuid = "1c23619d-4212-4747-83aa-717207fae70f" -version = "0.3.0" - [[deps.NLSolversBase]] deps = ["DiffResults", "Distributed", "FiniteDiff", "ForwardDiff"] git-tree-sha1 = "50310f934e55e5ca3912fb941dec199b49ca9b68" uuid = "d41bc354-129a-5804-8e4c-c37616107c6c" version = "7.8.2" +[[deps.NNlib]] +deps = ["Adapt", "ChainRulesCore", "LinearAlgebra", "Pkg", "Requires", "Statistics"] +git-tree-sha1 = "37596c26f107f2fd93818166ed3dab1a2e6b2f05" +uuid = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" +version = "0.8.11" + +[[deps.NNlibCUDA]] +deps = ["Adapt", "CUDA", "LinearAlgebra", "NNlib", "Random", "Statistics"] +git-tree-sha1 = "4429261364c5ea5b7308aecaa10e803ace101631" +uuid = "a00861dc-f156-4864-bf3c-e6376f28a68d" +version = "0.2.4" + [[deps.NaNMath]] deps = ["OpenLibm_jll"] git-tree-sha1 = "a7c3d1da1189a1c2fe843a3bfa04d18d20eb3211" @@ -996,6 +1115,12 @@ git-tree-sha1 = "830c601de91378e773e7286c3a3e8964d6248657" uuid = "9bbee03b-0db5-5f46-924f-b5c9c21b8c60" version = "0.5.4" +[[deps.NameResolution]] +deps = ["PrettyPrint"] +git-tree-sha1 = "1a0fa0e9613f46c9b8c11eee38ebb4f590013c5e" +uuid = "71a1bf82-56d0-4bbc-8a3c-48b961074391" +version = "0.1.5" + [[deps.NetworkLayout]] deps = ["GeometryBasics", "LinearAlgebra", "Random", "Requires", "SparseArrays"] git-tree-sha1 = "cac8fc7ba64b699c678094fa630f49b80618f625" @@ -1058,6 +1183,12 @@ git-tree-sha1 = "b9fe76d1a39807fdcf790b991981a922de0c3050" uuid = "429524aa-4258-5aef-a3af-852621145aeb" version = "1.7.3" +[[deps.Optimisers]] +deps = ["ChainRulesCore", "Functors", "LinearAlgebra", "Random", "Statistics"] +git-tree-sha1 = "1ef34738708e3f31994b52693286dabcb3d29f6b" +uuid = "3bd65402-5787-11e9-1adc-39752487f4e2" +version = "0.2.9" + [[deps.Opus_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720" @@ -1150,6 +1281,11 @@ git-tree-sha1 = "47e5f437cc0e7ef2ce8406ce1e7e24d44915f88d" uuid = "21216c6a-2e73-6563-6e65-726566657250" version = "1.3.0" +[[deps.PrettyPrint]] +git-tree-sha1 = "632eb4abab3449ab30c5e1afaa874f0b98b586e4" +uuid = "8162dcfd-2161-5ef2-ae6c-7681170c5f98" +version = "0.2.0" + [[deps.PrettyPrinting]] git-tree-sha1 = "4be53d093e9e37772cc89e1009e8f6ad10c4681b" uuid = "54e16d92-306c-5ea0-a30b-337be88ac337" @@ -1179,9 +1315,9 @@ version = "1.7.2" [[deps.Qt5Base_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "xkbcommon_jll"] -git-tree-sha1 = "c6c0f690d0cc7caddb74cef7aa847b824a16b256" +git-tree-sha1 = "0c03844e2231e12fda4d0086fd7cbe4098ee8dc5" uuid = "ea2cea3b-5b76-57ae-a6ef-0a8af62496e1" -version = "5.15.3+1" +version = "5.15.3+2" [[deps.QuadGK]] deps = ["DataStructures", "LinearAlgebra"] @@ -1215,6 +1351,12 @@ git-tree-sha1 = "dc84268fe0e3335a62e315a3a7cf2afa7178a734" uuid = "c84ed2f1-dad5-54f0-aa8e-dbefe2724439" version = "0.4.3" +[[deps.RealDot]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "9f0a1b71baaf7650f4fa8a1d168c7fb6ee41f0c9" +uuid = "c1ae055f-0cd5-4b69-90a6-9a35b1a98df9" +version = "0.1.0" + [[deps.RecipesBase]] deps = ["SnoopPrecompile"] git-tree-sha1 = "d12e612bba40d189cead6ff857ddb67bd2e6a387" @@ -1313,6 +1455,11 @@ version = "1.1.1" deps = ["Distributed", "Mmap", "Random", "Serialization"] uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" +[[deps.ShowCases]] +git-tree-sha1 = "7f534ad62ab2bd48591bdeac81994ea8c445e4a5" +uuid = "605ecd9f-84a6-4c9e-81e2-4798472b76a3" +version = "0.1.0" + [[deps.Showoff]] deps = ["Dates", "Grisu"] git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de" @@ -1348,6 +1495,12 @@ git-tree-sha1 = "d75bda01f8c31ebb72df80a46c88b25d1c79c56d" uuid = "276daf66-3868-5448-9aa4-cd146d93841b" version = "2.1.7" +[[deps.SplittablesBase]] +deps = ["Setfield", "Test"] +git-tree-sha1 = "e08a62abc517eb79667d0a29dc08a3b589516bb5" +uuid = "171d559e-b47b-412a-8079-5efa626c420e" +version = "0.1.15" + [[deps.StableRNGs]] deps = ["Random", "Test"] git-tree-sha1 = "3be7d49667040add7ee151fefaf1f8c04c8c8276" @@ -1442,12 +1595,6 @@ git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6" uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50" version = "0.1.1" -[[deps.Term]] -deps = ["CodeTracking", "Dates", "Highlights", "InteractiveUtils", "Logging", "Markdown", "MyterialColors", "OrderedCollections", "Parameters", "ProgressLogging", "SnoopPrecompile", "Tables", "UUIDs", "UnicodeFun"] -git-tree-sha1 = "5b5d38673d148f80e7e04569a665006d3bf91cfb" -uuid = "22787eb5-b846-44ae-b979-8e399b8463ab" -version = "1.0.4" - [[deps.Test]] deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" @@ -1470,6 +1617,12 @@ git-tree-sha1 = "8a75929dcd3c38611db2f8d08546decb514fcadf" uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" version = "0.9.9" +[[deps.Transducers]] +deps = ["Adapt", "ArgCheck", "BangBang", "Baselet", "CompositionsBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "MicroCollections", "Requires", "Setfield", "SplittablesBase", "Tables"] +git-tree-sha1 = "c42fa452a60f022e9e087823b47e5a5f8adc53d5" +uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" +version = "0.4.75" + [[deps.URIs]] git-tree-sha1 = "e59ecc5a41b000fa94423a578d29290c7266fc10" uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" @@ -1683,6 +1836,18 @@ git-tree-sha1 = "e45044cd873ded54b6a5bac0eb5c971392cf1927" uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" version = "1.5.2+0" +[[deps.Zygote]] +deps = ["AbstractFFTs", "ChainRules", "ChainRulesCore", "DiffRules", "Distributed", "FillArrays", "ForwardDiff", "GPUArrays", "GPUArraysCore", "IRTools", "InteractiveUtils", "LinearAlgebra", "LogExpFunctions", "MacroTools", "NaNMath", "Random", "Requires", "SparseArrays", "SpecialFunctions", "Statistics", "ZygoteRules"] +git-tree-sha1 = "a6f1287943ac05fae56fa06049d1a7846dfbc65f" +uuid = "e88e6eb3-aa80-5325-afca-941959d7151f" +version = "0.6.51" + +[[deps.ZygoteRules]] +deps = ["MacroTools"] +git-tree-sha1 = "8c1a8e4dfacb1fd631745552c8db35d0deb09ea0" +uuid = "700de1a5-db45-46bc-99cf-38207098b444" +version = "0.2.2" + [[deps.fzf_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "868e669ccb12ba16eaf50cb2957ee2ff61261c56" diff --git a/docs/Project.toml b/docs/Project.toml index ad9ad43..55d3fc4 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -2,11 +2,14 @@ ConformalPrediction = "98bfc277-1877-43dc-819b-a3e38c30242f" DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" DecisionTree = "7806a523-6efd-50cb-b5f6-3fa6f1930dbb" +Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" EvoTrees = "f6006082-12f8-11e9-0c9c-0d5d367ab1e5" +Flux = "587475ba-b771-5e3f-ad9e-33799f191a9c" MLJ = "add582a8-e3ab-11e8-2d5e-e98b27df1bc7" MLJBase = "a7f614a8-145f-11e9-1d2a-a57a1082229d" MLJDecisionTreeInterface = "c6f25543-311c-4c74-83dc-3ea6d1015661" +MLJFlux = "094fc8d1-fd35-5302-93ea-dabda2abf845" MLJLinearModels = "6ee0df7b-362f-4a72-a706-9e79364fb692" MLJModelInterface = "e80e1ace-859a-464e-9ed9-23947d8ae3ea" MLJNaiveBayesInterface = "33e4bacb-b9e2-458e-9a13-5d9a90b235fa" diff --git a/docs/src/regression.qmd b/docs/src/regression.qmd index d32b2df..121a873 100644 --- a/docs/src/regression.qmd +++ b/docs/src/regression.qmd @@ -13,36 +13,44 @@ theme(:wong) ```{julia} # Regression data: -N = 150 -xmax = 8.0 -noise = 0.3 -X = rand(N) * xmax + +# Inputs: +N = 600 +xmax = 5.0 +using Distributions +d = Uniform(-xmax, xmax) +X = rand(d, N) + +# Outputs: +noise = 0.5 +fun(X) = X * sin(X) ε = randn(N) .* noise -y = @.(sin(X)) + ε +y = @.(fun(X)) + ε +using MLJ +train, test = partition(eachindex(y), 0.4, 0.4, shuffle=true) using Plots scatter(X, y, label="Observed") -xrange = range(0,xmax,length=50) -plot!(xrange, sin.(xrange), lw=4, label="Ground truth") +xrange = range(-xmax,xmax,length=N) +plot!(xrange, @.(fun(xrange)), lw=4, label="Ground truth") ``` ```{julia} -using MLJ EvoTreeRegressor = @load EvoTreeRegressor pkg=EvoTrees -model = EvoTreeRegressor() +model = EvoTreeRegressor(nrounds=50) ``` ```{julia} using ConformalPrediction conf_model = conformal_model(model) -mach = machine(conf_model, X, y) +X = reshape(X, :, 1) +Xtab = MLJ.table(X) +mach = machine(conf_model, Xtab, y) fit!(mach, rows=train) ``` ```{julia} -#| output: true -rows = rand(test, 10) -Xtest = selectrows(X, rows) -ytest = y[rows] -predict(mach, Xtest) -``` \ No newline at end of file +using Plots +zoom = -5 +plot(mach.model, mach.fitresult, X, y, zoom=zoom) +``` diff --git a/src/ConformalModels/ConformalModels.jl b/src/ConformalModels/ConformalModels.jl index dc6e072..e60893b 100644 --- a/src/ConformalModels/ConformalModels.jl +++ b/src/ConformalModels/ConformalModels.jl @@ -20,6 +20,8 @@ const ConformalModel = Union{ConformalInterval, ConformalSet, ConformalProbabili export ConformalInterval, ConformalSet, ConformalProbabilistic, ConformalModel +include("utils.jl") +include("plotting.jl") include("conformal_models.jl") # Regression Models: diff --git a/src/ConformalModels/inductive_regression.jl b/src/ConformalModels/inductive_regression.jl index 6fe62b8..ccde92e 100644 --- a/src/ConformalModels/inductive_regression.jl +++ b/src/ConformalModels/inductive_regression.jl @@ -60,6 +60,7 @@ function MMI.predict(conf_model::SimpleInductiveRegressor, fitresult, Xnew) v = conf_model.scores q̂ = Statistics.quantile(v, conf_model.coverage) ŷ = map(x -> (x .- q̂, x .+ q̂), eachrow(ŷ)) + ŷ = reformat_interval(ŷ) return ŷ end diff --git a/src/ConformalModels/plotting.jl b/src/ConformalModels/plotting.jl new file mode 100644 index 0000000..c678132 --- /dev/null +++ b/src/ConformalModels/plotting.jl @@ -0,0 +1,102 @@ +using Plots + +function Plots.plot( + conf_model::ConformalModel,fitresult,X,y; + target::Union{Nothing,Real}=nothing, + colorbar=true,title=nothing,length_out=50,zoom=-1,xlims=nothing,ylims=nothing,linewidth=0.1,lw=4, + kwargs... +) + + X = permutedims(X) + + is_classifier = target_scitype(conf_model.model) <: AbstractVector{<:Finite} + if !is_classifier + @assert size(X,1) == 1 "Cannot plot regression for multiple input variables." + else + @assert size(X,1) == 2 "Cannot plot classification for more than two input variables." + end + + if !is_classifier + + # REGRESSION + + # Surface range: + if isnothing(xlims) + xlims = (minimum(X),maximum(X)).+(zoom,-zoom) + else + xlims = xlims .+ (zoom,-zoom) + end + if isnothing(ylims) + ylims = (minimum(y),maximum(y)).+(zoom,-zoom) + else + ylims = ylims .+ (zoom,-zoom) + end + x_range = range(xlims[1],stop=xlims[2],length=length_out) + y_range = range(ylims[1],stop=ylims[2],length=length_out) + + title = isnothing(title) ? "" : title + + # Plot: + scatter(vec(X), vec(y), label="ytrain", xlim=xlims, ylim=ylims, lw=lw, title=title; kwargs...) + _x = reshape([x for x in x_range],:,1) + _x = MLJ.table(_x) + MMI.reformat(conf_model.model,_x) + ŷ = predict(conf_model, fitresult, _x) + lb, ub = eachcol(reduce(vcat, map(y -> permutedims(collect(y)), ŷ))) + ymid = (lb .+ ub)./2 + yerror = (ub .- lb)./2 + plot!(x_range, ymid, label="yhat", ribbon = (yerror, yerror), lw=lw; kwargs...) + + else + + # CLASSIFICATION + + # Surface range: + if isnothing(xlims) + xlims = (minimum(X[1,:]),maximum(X[1,:])).+(zoom,-zoom) + else + xlims = xlims .+ (zoom,-zoom) + end + if isnothing(ylims) + ylims = (minimum(X[2,:]),maximum(X[2,:])).+(zoom,-zoom) + else + ylims = ylims .+ (zoom,-zoom) + end + x_range = range(xlims[1],stop=xlims[2],length=length_out) + y_range = range(ylims[1],stop=ylims[2],length=length_out) + + # Plot + predict_ = function(X::AbstractVector) + z = la(X; link_approx=link_approx) + if outdim(la) == 1 # binary + z = [1.0 - z[1], z[1]] + end + return z + end + Z = [predict_([x,y]) for x=x_range, y=y_range] + Z = reduce(hcat, Z) + if outdim(la) > 1 + if isnothing(target) + @info "No target label supplied, using first." + end + target = isnothing(target) ? 1 : target + title = isnothing(title) ? "p̂(y=$(target))" : title + else + target = isnothing(target) ? 2 : target + title = isnothing(title) ? "p̂(y=$(target-1))" : title + end + + # Contour: + contourf( + x_range, y_range, Z[Int(target),:]; + colorbar=colorbar, title=title, linewidth=linewidth, + xlims=xlims, + ylims=ylims, + kwargs... + ) + # Samples: + scatter!(X[1,:],X[2,:],group=Int.(y); kwargs...) + + end + +end \ No newline at end of file diff --git a/src/ConformalModels/transductive_regression.jl b/src/ConformalModels/transductive_regression.jl index 63ab6c6..a0efd21 100644 --- a/src/ConformalModels/transductive_regression.jl +++ b/src/ConformalModels/transductive_regression.jl @@ -60,6 +60,7 @@ function MMI.predict(conf_model::NaiveRegressor, fitresult, Xnew) v = conf_model.scores q̂ = Statistics.quantile(v, conf_model.coverage) ŷ = map(x -> (x .- q̂, x .+ q̂), eachrow(ŷ)) + ŷ = reformat_interval(ŷ) return ŷ end @@ -131,6 +132,7 @@ function MMI.predict(conf_model::JackknifeRegressor, fitresult, Xnew) v = conf_model.scores q̂ = Statistics.quantile(v, conf_model.coverage) ŷ = map(x -> (x .- q̂, x .+ q̂), eachrow(ŷ)) + ŷ = reformat_interval(ŷ) return ŷ end @@ -209,6 +211,7 @@ function MMI.predict(conf_model::JackknifePlusRegressor, fitresult, Xnew) ub = Statistics.quantile(yᵢ .+ conf_model.scores, conf_model.coverage) return (lb, ub) end + ŷ = reformat_interval(ŷ) return ŷ end @@ -286,6 +289,7 @@ function MMI.predict(conf_model::JackknifeMinMaxRegressor, fitresult, Xnew) q̂ = Statistics.quantile(v, conf_model.coverage) # For each Xnew compute ( q̂⁻(μ̂₋ᵢ(xnew)-Rᵢᴸᴼᴼ) , q̂⁺(μ̂₋ᵢ(xnew)+Rᵢᴸᴼᴼ) ): ŷ = map(yᵢ -> (minimum(yᵢ .- q̂), maximum(yᵢ .+ q̂)), eachrow(ŷ)) + ŷ = reformat_interval(ŷ) return ŷ end @@ -378,6 +382,7 @@ function MMI.predict(conf_model::CVPlusRegressor, fitresult, Xnew) ub = Statistics.quantile(yᵢ .+ conf_model.scores, conf_model.coverage) return (lb, ub) end + ŷ = reformat_interval(ŷ) return ŷ end diff --git a/src/ConformalModels/utils.jl b/src/ConformalModels/utils.jl new file mode 100644 index 0000000..dd8366f --- /dev/null +++ b/src/ConformalModels/utils.jl @@ -0,0 +1,3 @@ +function reformat_interval(ŷ) + return map(y -> map(yᵢ -> ndims(yᵢ)==1 ? yᵢ[1] : yᵢ,y), ŷ) +end \ No newline at end of file diff --git a/test/classification.jl b/test/classification.jl index b71498b..ca90fc4 100644 --- a/test/classification.jl +++ b/test/classification.jl @@ -1,4 +1,5 @@ using MLJ +using Plots # Data: X, y = MLJ.make_blobs(1000, 2, centers=2) @@ -34,6 +35,9 @@ conformal_models = merge(values(available_models[:classification])...) @test !isnothing(conf_model.scores) predict(mach, selectrows(X, test)) + # Plot + plot(mach.model, mach.fitresult, X, y) + end end diff --git a/test/regression.jl b/test/regression.jl index 1d6f77d..f0721f3 100644 --- a/test/regression.jl +++ b/test/regression.jl @@ -1,4 +1,5 @@ using MLJ +using Plots # Data: X, y = MLJ.make_regression(1000, 2) @@ -34,6 +35,9 @@ conformal_models = merge(values(available_models[:regression])...) @test !isnothing(conf_model.scores) predict(mach, selectrows(X, test)) + # Plot + plot(mach.model, mach.fitresult, X, y) + end end From 8753fb80cc48fc8d3bddd116842e012ccc0c2b34 Mon Sep 17 00:00:00 2001 From: pat-alt Date: Wed, 30 Nov 2022 15:55:45 +0100 Subject: [PATCH 05/10] more work on docs --- .../classification/execute-results/md.json | 4 +- .../src/regression/execute-results/md.json | 10 + dev/plot_main-tutorial-regression.ipynb | 851 ++++++++++++++++-- docs/Manifest.toml | 20 +- docs/Project.toml | 2 + docs/make.jl | 2 +- docs/src/classification.md | 154 +++- docs/src/classification.qmd | 256 +++++- docs/src/regression.md | 81 ++ docs/src/regression.qmd | 59 +- src/ConformalModels/plotting.jl | 8 +- .../transductive_classification.jl | 4 +- .../transductive_regression.jl | 8 +- tmp.gif | Bin 0 -> 86650 bytes 14 files changed, 1335 insertions(+), 124 deletions(-) create mode 100644 _freeze/docs/src/regression/execute-results/md.json create mode 100644 docs/src/regression.md create mode 100644 tmp.gif diff --git a/_freeze/docs/src/classification/execute-results/md.json b/_freeze/docs/src/classification/execute-results/md.json index 938a281..5f63a7e 100644 --- a/_freeze/docs/src/classification/execute-results/md.json +++ b/_freeze/docs/src/classification/execute-results/md.json @@ -1,7 +1,7 @@ { - "hash": "a5e7b7c00cea9c148884a97a62ddf49b", + "hash": "442ff2462bc1aca2e32bbac33deb49a1", "result": { - "markdown": "\n\n::: {.cell execution_count=2}\n``` {.julia .cell-code}\nusing MLJ\nX, y = MLJ.make_blobs(1000, 2; centers=3, cluster_std=1.0)\ntrain, test = partition(eachindex(y), 0.4, 0.4, shuffle=true)\n```\n:::\n\n\n::: {.cell execution_count=3}\n``` {.julia .cell-code}\nEvoTreeClassifier = @load EvoTreeClassifier pkg=EvoTrees\nmodel = EvoTreeClassifier() \n```\n:::\n\n\n::: {.cell execution_count=4}\n``` {.julia .cell-code}\nusing ConformalPrediction\nconf_model = conformal_model(model)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n```\n:::\n\n\n::: {.cell execution_count=5}\n``` {.julia .cell-code}\nrows = rand(test, 10)\nXtest = selectrows(X, rows)\nytest = y[rows]\npredict(mach, Xtest)\n```\n\n::: {.cell-output .cell-output-display execution_count=6}\n```\n╭───────────────────────────────────────────────────────────────────╮\n│ │\n│ (1) UnivariateFinite{Multiclass {#90CAF9}3} (1=>0.82{/#90CAF9}) │\n│ (2) UnivariateFinite{Multiclass {#90CAF9}3} (3=>0.82{/#90CAF9}) │\n│ (3) UnivariateFinite{Multiclass {#90CAF9}3} (1=>0.82{/#90CAF9}) │\n│ (4) UnivariateFinite{Multiclass {#90CAF9}3} (1=>0.82{/#90CAF9}) │\n│ (5) UnivariateFinite{Multiclass {#90CAF9}3} (1=>0.82{/#90CAF9}) │\n│ (6) UnivariateFinite{Multiclass {#90CAF9}3} (3=>0.82{/#90CAF9}) │\n│ (7) UnivariateFinite{Multiclass {#90CAF9}3} (3=>0.82{/#90CAF9}) │\n│ (8) UnivariateFinite{Multiclass {#90CAF9}3} (2=>0.82{/#90CAF9}) │\n│ (9) UnivariateFinite{Multiclass {#90CAF9}3} (1=>0.82{/#90CAF9}) │\n│ (10) UnivariateFinite{Multiclass {#90CAF9}3} (3=>0.82{/#90CAF9}) │\n│ │\n│ │\n╰────────────────────────────────────────────────────── 10 items ───╯\n```\n:::\n:::\n\n\n", + "markdown": "# Classification \n\n```@meta\nCurrentModule = ConformalPrediction\n```\n\n\n\nThis tutorial is based in parts on this [blog post](https://www.paltmeyer.com/blog/posts/conformal-prediction/).\n\n### Split Conformal Classification {#sec-scp}\n\nWe consider a simple binary classification problem. Let $(X_i, Y_i), \\ i=1,...,n$ denote our feature-label pairs and let $\\mu: \\mathcal{X} \\mapsto \\mathcal{Y}$ denote the mapping from features to labels. For illustration purposes we will use the moons dataset 🌙. Using [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) we first generate the data and split into into a training and test set:\n\n::: {.cell execution_count=2}\n``` {.julia .cell-code}\nusing MLJ\nusing Random\nRandom.seed!(123)\n\n# Data:\nX, y = make_moons(500; noise=0.15)\ntrain, test = partition(eachindex(y), 0.8, shuffle=true)\n```\n:::\n\n\nHere we will use a specific case of CP called *split conformal prediction* which can then be summarized as follows:^[In other places split conformal prediction is sometimes referred to as *inductive* conformal prediction.]\n\n1. Partition the training into a proper training set and a separate calibration set: $\\mathcal{D}_n=\\mathcal{D}^{\\text{train}} \\cup \\mathcal{D}^{\\text{cali}}$.\n2. Train the machine learning model on the proper training set: $\\hat\\mu_{i \\in \\mathcal{D}^{\\text{train}}}(X_i,Y_i)$.\n3. Compute nonconformity scores, $\\mathcal{S}$, using the calibration data $\\mathcal{D}^{\\text{cali}}$ and the fitted model $\\hat\\mu_{i \\in \\mathcal{D}^{\\text{train}}}$. \n4. For a user-specified desired coverage ratio $(1-\\alpha)$ compute the corresponding quantile, $\\hat{q}$, of the empirical distribution of nonconformity scores, $\\mathcal{S}$.\n5. For the given quantile and test sample $X_{\\text{test}}$, form the corresponding conformal prediction set: \n\n$$\nC(X_{\\text{test}})=\\{y:s(X_{\\text{test}},y) \\le \\hat{q}\\}\n$$ {#eq-set}\n\nThis is the default procedure used for classification and regression in [`ConformalPrediction.jl`](https://github.com/pat-alt/ConformalPrediction.jl). \n\nNow let's take this to our 🌙 data. To illustrate the package functionality we will demonstrate the envisioned workflow. We first define our atomic machine learning model following standard [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) conventions. Using [`ConformalPrediction.jl`](https://github.com/pat-alt/ConformalPrediction.jl) we then wrap our atomic model in a conformal model using the standard API call `conformal_model(model::Supervised; kwargs...)`. To train and predict from our conformal model we can then rely on the conventional [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) procedure again. In particular, we wrap our conformal model in data (turning it into a machine) and then fit it on the training set. Finally, we use our machine to predict the label for a new test sample `Xtest`:\n\n::: {.cell execution_count=3}\n``` {.julia .cell-code}\n# Model:\nKNNClassifier = @load KNNClassifier pkg=NearestNeighborModels\nmodel = KNNClassifier(;K=50) \n\n# Training:\nusing ConformalPrediction\nconf_model = conformal_model(model; coverage=.9)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n\n# Conformal Prediction:\nXtest = selectrows(X, first(test))\nytest = y[first(test)]\npredict(mach, Xtest)[1]\n```\n\n::: {.cell-output .cell-output-stdout}\n```\nimport NearestNeighborModels\n```\n:::\n\n::: {.cell-output .cell-output-stdout}\n```\n ✔\n```\n:::\n\n::: {.cell-output .cell-output-display execution_count=8}\n```\n UnivariateFinite{Multiclass{2}} \n ┌ ┐ \n 0 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.94 \n └ ┘ \n```\n:::\n:::\n\n\nThe final predictions are set-valued. While the softmax output remains unchanged for the `SimpleInductiveClassifier`, the size of the prediction set depends on the chosen coverage rate, $(1-\\alpha)$. \n\n::: {.cell execution_count=4}\n\n::: {.cell-output .cell-output-display execution_count=9}\nWhen specifying a coverage rate very close to one, the prediction set will typically include many (in some cases all) of the possible labels. Below, for example, both classes are included in the prediction set when setting the coverage rate equal to $(1-\\alpha)$=1.0. This is intuitive, since high coverage quite literally requires that the true label is covered by the prediction set with high probability.\n\n:::\n:::\n\n\n::: {.cell execution_count=5}\n``` {.julia .cell-code}\nconf_model = conformal_model(model; coverage=coverage)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n\n# Conformal Prediction:\nXtest = (x1=[1],x2=[0])\npredict(mach, Xtest)[1]\n```\n\n::: {.cell-output .cell-output-display execution_count=10}\n```\n UnivariateFinite{Multiclass{2}} \n ┌ ┐ \n 0 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.5 \n 1 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.5 \n └ ┘ \n```\n:::\n:::\n\n\n::: {.cell execution_count=6}\n\n::: {.cell-output .cell-output-display execution_count=11}\nConversely, for low coverage rates, prediction sets can also be empty. For a choice of $(1-\\alpha)$=0.1, for example, the prediction set for our test sample is empty. This is a bit difficult to think about intuitively and I have not yet come across a satisfactory, intuitive interpretation.^[Any thoughts/comments welcome!] When the prediction set is empty, the `predict` call currently returns `missing`:\n\n:::\n:::\n\n\n::: {.cell execution_count=7}\n``` {.julia .cell-code}\nconf_model = conformal_model(model; coverage=coverage)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n\n# Conformal Prediction:\npredict(mach, Xtest)[1]\n```\n\n::: {.cell-output .cell-output-display execution_count=12}\n```\nmissing\n```\n:::\n:::\n\n\n\n\n@fig-anim should provide some more intuition as to what exactly is happening here. It illustrates the effect of the chosen coverage rate on the predicted softmax output and the set size in the two-dimensional feature space. Contours are overlayed with the moon data points (including test data). The two samples highlighted in red, $X_1$ and $X_2$, have been manually added for illustration purposes. Let's look at these one by one.\n\nFirstly, note that $X_1$ (red cross) falls into a region of the domain that is characterized by high predictive uncertainty. It sits right at the bottom-right corner of our class-zero moon 🌜 (orange), a region that is almost entirely enveloped by our class-one moon 🌛 (green). For low coverage rates the prediction set for $X_1$ is empty: on the left-hand side this is indicated by the missing contour for the softmax probability; on the right-hand side we can observe that the corresponding set size is indeed zero. For high coverage rates the prediction set includes both $y=0$ and $y=1$, indicative of the fact that the conformal classifier is uncertain about the true label.\n\nWith respect to $X_2$, we observe that while also sitting on the fringe of our class-zero moon, this sample populates a region that is not fully enveloped by data points from the opposite class. In this region, the underlying atomic classifier can be expected to be more certain about its predictions, but still not highly confident. How is this reflected by our corresponding conformal prediction sets? \n\n::: {.cell execution_count=9}\n``` {.julia .cell-code code-fold=\"true\"}\nXtest_2 = (x1=[-0.5],x2=[0.25])\ncov_ = .9\nconf_model = conformal_model(model; coverage=cov_)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\np̂_2 = pdf(predict(mach, Xtest_2)[1], 0)\n```\n:::\n\n\n::: {.cell execution_count=10}\n\n::: {.cell-output .cell-output-display execution_count=15}\nWell, for low coverage rates (roughly $<0.9$) the conformal prediction set does not include $y=0$: the set size is zero (right panel). Only for higher coverage rates do we have $C(X_2)=\\{0\\}$: the coverage rate is high enough to include $y=0$, but the corresponding softmax probability is still fairly low. For example, for $(1-\\alpha)=0.9$ we have $\\hat{p}(y=0|X_2)=0.72.$\n\n:::\n:::\n\n\nThese two examples illustrate an interesting point: for regions characterised by high predictive uncertainty, conformal prediction sets are typically empty (for low coverage) or large (for high coverage). While set-valued predictions may be something to get used to, this notion is overall intuitive. \n\n::: {.cell execution_count=11}\n``` {.julia .cell-code code-fold=\"true\"}\n# Setup\ncoverages = range(0.75,1.0,length=5)\nn = 100\nx1_range = range(extrema(X.x1)...,length=n)\nx2_range = range(extrema(X.x2)...,length=n)\n\nanim = @animate for coverage in coverages\n conf_model = conformal_model(model; coverage=coverage)\n mach = machine(conf_model, X, y)\n fit!(mach, rows=train)\n p1 = contourf_cp(mach, x1_range, x2_range; type=:proba, title=\"Softmax\", axis=nothing)\n scatter!(p1, X.x1, X.x2, group=y, ms=2, msw=0, alpha=0.75)\n scatter!(p1, Xtest.x1, Xtest.x2, ms=6, c=:red, label=\"X₁\", shape=:cross, msw=6)\n scatter!(p1, Xtest_2.x1, Xtest_2.x2, ms=6, c=:red, label=\"X₂\", shape=:diamond, msw=6)\n p2 = contourf_cp(mach, x1_range, x2_range; type=:set_size, title=\"Set size\", axis=nothing)\n scatter!(p2, X.x1, X.x2, group=y, ms=2, msw=0, alpha=0.75)\n scatter!(p2, Xtest.x1, Xtest.x2, ms=6, c=:red, label=\"X₁\", shape=:cross, msw=6)\n scatter!(p2, Xtest_2.x1, Xtest_2.x2, ms=6, c=:red, label=\"X₂\", shape=:diamond, msw=6)\n plot(p1, p2, plot_title=\"(1-α)=$(round(coverage,digits=2))\", size=(800,300))\nend\n\ngif(anim, fps=0.5)\n```\n\n::: {#fig-anim .cell-output .cell-output-display execution_count=16}\n```{=html}\n\n```\n\nThe effect of the coverage rate on the conformal prediction set. Softmax probabilities are shown on the left. The size of the prediction set is shown on the right.\n:::\n:::\n\n\n\n\n", "supporting": [ "classification_files" ], diff --git a/_freeze/docs/src/regression/execute-results/md.json b/_freeze/docs/src/regression/execute-results/md.json new file mode 100644 index 0000000..e2001a8 --- /dev/null +++ b/_freeze/docs/src/regression/execute-results/md.json @@ -0,0 +1,10 @@ +{ + "hash": "e0fd6af2834acab7a9aedb62c278b6a4", + "result": { + "markdown": "# Regression\n\n```@meta\nCurrentModule = ConformalPrediction\n```\n\n\n\nThis tutorial mostly replicates this [tutorial](https://mapie.readthedocs.io/en/latest/examples_regression/4-tutorials/plot_main-tutorial-regression.html#) from MAPIE.\n\n## Data\n\nWe begin by generating some synthetic regression data below:\n\n::: {#fig-data .cell execution_count=2}\n``` {.julia .cell-code}\n# Regression data:\n\n# Inputs:\nN = 600\nxmax = 3.0\nusing Distributions\nd = Uniform(-xmax, xmax)\nX = rand(d, N)\nX = reshape(X, :, 1)\n\n# Outputs:\nnoise = 0.5\nfun(X) = X * sin(X)\nε = randn(N) .* noise\ny = @.(fun(X)) + ε\nusing MLJ\ntrain, test = partition(eachindex(y), 0.4, 0.4, shuffle=true)\n\nusing Plots\nscatter(X, y, label=\"Observed\")\nxrange = range(-xmax,xmax,length=N)\nplot!(xrange, @.(fun(xrange)), lw=4, label=\"Ground truth\", ls=:dash, colour=:black)\n```\n:::\n\n\n## Model\n\nTo model this data we will use polynomial regression. There is currently no out-of-the-box support for polynomial feature transformations in `MLJ`, but it is easy enough to add a little helper function for this. Note how we define a linear pipeline `pipe` here. Since pipelines in `MLJ` are just models, we can use the generated object as an input to `conformal_model` below.\n\n::: {.cell execution_count=3}\n``` {.julia .cell-code}\nLinearRegressor = @load LinearRegressor pkg=MLJLinearModels\ndegree_polynomial = 10\npolynomial_features(X, degree::Int) = reduce(hcat, map(i -> X.^i, 1:degree))\npipe = (X -> MLJ.table(polynomial_features(MLJ.matrix(X), degree_polynomial))) |> LinearRegressor()\n```\n:::\n\n\nNext, we conformalize our polynomial regressor using every available approach (except the Naive approach):\n\n::: {.cell execution_count=4}\n``` {.julia .cell-code}\nusing ConformalPrediction\nconformal_models = merge(values(available_models[:regression])...)\ndelete!(conformal_models, :naive)\n# delete!(conformal_models, :jackknife)\nresults = Dict()\nfor _mod in keys(conformal_models) \n conf_model = conformal_model(pipe; method=_mod, coverage=0.95)\n mach = machine(conf_model, X, y)\n fit!(mach, rows=train)\n results[_mod] = mach\nend\n```\n:::\n\n\nFinally, let us look at the resulting conformal predictions in each case.\n\n::: {#fig-cp .cell execution_count=5}\n``` {.julia .cell-code}\nusing Plots\nzoom = -3\nxrange = range(-xmax+zoom,xmax-zoom,length=N)\nplt_list = []\n\nfor (_mod, mach) in results\n plt = plot(mach.model, mach.fitresult, X, y, zoom=zoom, title=_mod)\n plot!(plt, xrange, @.(fun(xrange)), lw=1, ls=:dash, colour=:black, label=\"Ground truth\")\n push!(plt_list, plt)\nend\n\nplot(plt_list..., size=(1600,1000))\n```\n:::\n\n\n", + "supporting": [ + "regression_files" + ], + "filters": [] + } +} \ No newline at end of file diff --git a/dev/plot_main-tutorial-regression.ipynb b/dev/plot_main-tutorial-regression.ipynb index 2174e1b..01d99d2 100644 --- a/dev/plot_main-tutorial-regression.ipynb +++ b/dev/plot_main-tutorial-regression.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": { "collapsed": false }, @@ -15,140 +15,366 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n# Tutorial for tabular regression\n" + "\n", + "# Tutorial for tabular regression\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "In this tutorial, we compare the prediction intervals estimated by MAPIE on a\nsimple, one-dimensional, ground truth function\n$f(x) = x \\times \\sin(x)$.\n\nThroughout this tutorial, we will answer the following questions:\n\n- How well do the MAPIE strategies capture the aleatoric uncertainty\n existing in the data?\n\n- How do the prediction intervals estimated by the resampling strategies\n evolve for new *out-of-distribution* data ?\n\n- How do the prediction intervals vary between regressor models ?\n\nThroughout this tutorial, we estimate the prediction intervals first using\na polynomial function, and then using a boosting model, and a simple neural\nnetwork.\n\n**For practical problems, we advise using the faster CV+ or\nJackknife+-after-Bootstrap strategies.\nFor conservative prediction interval estimates, you can alternatively\nuse the CV-minmax strategies.**\n\n" + "In this tutorial, we compare the prediction intervals estimated by MAPIE on a\n", + "simple, one-dimensional, ground truth function\n", + "$f(x) = x \\times \\sin(x)$.\n", + "\n", + "Throughout this tutorial, we will answer the following questions:\n", + "\n", + "- How well do the MAPIE strategies capture the aleatoric uncertainty\n", + " existing in the data?\n", + "\n", + "- How do the prediction intervals estimated by the resampling strategies\n", + " evolve for new *out-of-distribution* data ?\n", + "\n", + "- How do the prediction intervals vary between regressor models ?\n", + "\n", + "Throughout this tutorial, we estimate the prediction intervals first using\n", + "a polynomial function, and then using a boosting model, and a simple neural\n", + "network.\n", + "\n", + "**For practical problems, we advise using the faster CV+ or\n", + "Jackknife+-after-Bootstrap strategies.\n", + "For conservative prediction interval estimates, you can alternatively\n", + "use the CV-minmax strategies.**\n", + "\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [], "source": [ - "import os\nimport subprocess\nimport warnings\n\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport pandas as pd\n\nfrom mapie.metrics import regression_coverage_score\nfrom mapie.regression import MapieRegressor\nfrom mapie.quantile_regression import MapieQuantileRegressor\nfrom mapie.subsample import Subsample\nfrom sklearn.linear_model import LinearRegression, QuantileRegressor\nfrom sklearn.pipeline import Pipeline\nfrom sklearn.preprocessing import PolynomialFeatures\n\nos.environ[\"TF_CPP_MIN_LOG_LEVEL\"] = \"3\"\nwarnings.filterwarnings(\"ignore\")" + "import os\n", + "import subprocess\n", + "import warnings\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "from mapie.metrics import regression_coverage_score\n", + "from mapie.regression import MapieRegressor\n", + "from mapie.quantile_regression import MapieQuantileRegressor\n", + "from mapie.subsample import Subsample\n", + "from sklearn.linear_model import LinearRegression, QuantileRegressor\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.preprocessing import PolynomialFeatures\n", + "\n", + "os.environ[\"TF_CPP_MIN_LOG_LEVEL\"] = \"3\"\n", + "warnings.filterwarnings(\"ignore\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## 1. Estimating the aleatoric uncertainty of homoscedastic noisy data\n\nLet's start by defining the $x \\times \\sin(x)$ function and another\nsimple function that generates one-dimensional data with normal noise\nuniformely in a given interval.\n\n" + "## 1. Estimating the aleatoric uncertainty of homoscedastic noisy data\n", + "\n", + "Let's start by defining the $x \\times \\sin(x)$ function and another\n", + "simple function that generates one-dimensional data with normal noise\n", + "uniformely in a given interval.\n", + "\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [], "source": [ - "def x_sinx(x):\n \"\"\"One-dimensional x*sin(x) function.\"\"\"\n return x*np.sin(x)\n\n\ndef get_1d_data_with_constant_noise(funct, min_x, max_x, n_samples, noise):\n \"\"\"\n Generate 1D noisy data uniformely from the given function\n and standard deviation for the noise.\n \"\"\"\n np.random.seed(59)\n X_train = np.linspace(min_x, max_x, n_samples)\n np.random.shuffle(X_train)\n X_test = np.linspace(min_x, max_x, n_samples*5)\n y_train, y_mesh, y_test = funct(X_train), funct(X_test), funct(X_test)\n y_train += np.random.normal(0, noise, y_train.shape[0])\n y_test += np.random.normal(0, noise, y_test.shape[0])\n return (\n X_train.reshape(-1, 1), y_train, X_test.reshape(-1, 1), y_test, y_mesh\n )" + "def x_sinx(x):\n", + " \"\"\"One-dimensional x*sin(x) function.\"\"\"\n", + " return x*np.sin(x)\n", + "\n", + "\n", + "def get_1d_data_with_constant_noise(funct, min_x, max_x, n_samples, noise, zoom=5):\n", + " \"\"\"\n", + " Generate 1D noisy data uniformely from the given function\n", + " and standard deviation for the noise.\n", + " \"\"\"\n", + " np.random.seed(59)\n", + " X_train = np.linspace(min_x, max_x, n_samples)\n", + " np.random.shuffle(X_train)\n", + " X_test = np.linspace(min_x-zoom, max_x+zoom, n_samples*5)\n", + " y_train, y_mesh, y_test = funct(X_train), funct(X_test), funct(X_test)\n", + " y_train += np.random.normal(0, noise, y_train.shape[0])\n", + " y_test += np.random.normal(0, noise, y_test.shape[0])\n", + " return (\n", + " X_train.reshape(-1, 1), y_train, X_test.reshape(-1, 1), y_test, y_mesh\n", + " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "We first generate noisy one-dimensional data uniformely on an interval.\nHere, the noise is considered as *homoscedastic*, since it remains constant\nover $x$.\n\n" + "We first generate noisy one-dimensional data uniformely on an interval.\n", + "Here, the noise is considered as *homoscedastic*, since it remains constant\n", + "over $x$.\n", + "\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [], "source": [ - "min_x, max_x, n_samples, noise = -5, 5, 600, 0.5\nX_train, y_train, X_test, y_test, y_mesh = get_1d_data_with_constant_noise(\n x_sinx, min_x, max_x, n_samples, noise\n)" + "min_x, max_x, n_samples, noise = -5, 5, 600, 0.5\n", + "X_train, y_train, X_test, y_test, y_mesh = get_1d_data_with_constant_noise(\n", + " x_sinx, min_x, max_x, n_samples, noise\n", + ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Let's visualize our noisy function.\n\n" + "Let's visualize our noisy function.\n", + "\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 39, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ - "plt.xlabel(\"x\")\nplt.ylabel(\"y\")\nplt.scatter(X_train, y_train, color=\"C0\")\n_ = plt.plot(X_test, y_mesh, color=\"C1\")\nplt.show()" + "plt.xlabel(\"x\")\n", + "plt.ylabel(\"y\")\n", + "plt.scatter(X_train, y_train, color=\"C0\")\n", + "_ = plt.plot(X_test, y_mesh, color=\"C1\")\n", + "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "As mentioned previously, we fit our training data with a simple\npolynomial function. Here, we choose a degree equal to 10 so the function\nis able to perfectly fit $x \\times \\sin(x)$.\n\n" + "As mentioned previously, we fit our training data with a simple\n", + "polynomial function. Here, we choose a degree equal to 10 so the function\n", + "is able to perfectly fit $x \\times \\sin(x)$.\n", + "\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [], "source": [ - "degree_polyn = 10\npolyn_model = Pipeline(\n [\n (\"poly\", PolynomialFeatures(degree=degree_polyn)),\n (\"linear\", LinearRegression())\n ]\n)\npolyn_model_quant = Pipeline(\n [\n (\"poly\", PolynomialFeatures(degree=degree_polyn)),\n (\"linear\", QuantileRegressor(\n solver=\"highs\",\n alpha=0,\n ))\n ]\n)" + "degree_polyn = 10\n", + "polyn_model = Pipeline(\n", + " [\n", + " (\"poly\", PolynomialFeatures(degree=degree_polyn)),\n", + " (\"linear\", LinearRegression())\n", + " ]\n", + ")\n", + "polyn_model_quant = Pipeline(\n", + " [\n", + " (\"poly\", PolynomialFeatures(degree=degree_polyn)),\n", + " (\"linear\", QuantileRegressor(\n", + " solver=\"highs\",\n", + " alpha=0,\n", + " ))\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.ensemble import GradientBoostingRegressor\n", + "polyn_model = Pipeline(\n", + " [\n", + " (\"boosted_tree\", GradientBoostingRegressor())\n", + " ]\n", + ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "We then estimate the prediction intervals for all the strategies very easily\nwith a\n`fit` and `predict` process. The prediction interval's lower and upper bounds\nare then saved in a DataFrame. Here, we set an alpha value of 0.05\nin order to obtain a 95% confidence for our prediction intervals.\n\n" + "We then estimate the prediction intervals for all the strategies very easily\n", + "with a\n", + "`fit` and `predict` process. The prediction interval's lower and upper bounds\n", + "are then saved in a DataFrame. Here, we set an alpha value of 0.05\n", + "in order to obtain a 95% confidence for our prediction intervals.\n", + "\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [], "source": [ - "STRATEGIES = {\n \"naive\": dict(method=\"naive\"),\n \"jackknife\": dict(method=\"base\", cv=-1),\n \"jackknife_plus\": dict(method=\"plus\", cv=-1),\n \"jackknife_minmax\": dict(method=\"minmax\", cv=-1),\n \"cv\": dict(method=\"base\", cv=10),\n \"cv_plus\": dict(method=\"plus\", cv=10),\n \"cv_minmax\": dict(method=\"minmax\", cv=10),\n \"jackknife_plus_ab\": dict(method=\"plus\", cv=Subsample(n_resamplings=50)),\n \"jackknife_minmax_ab\": dict(\n method=\"minmax\", cv=Subsample(n_resamplings=50)\n ),\n \"conformalized_quantile_regression\": dict(\n method=\"quantile\", cv=\"split\", alpha=0.05\n )\n}\ny_pred, y_pis = {}, {}\nfor strategy, params in STRATEGIES.items():\n if strategy == \"conformalized_quantile_regression\":\n mapie = MapieQuantileRegressor(polyn_model_quant, **params)\n mapie.fit(X_train, y_train, random_state=1)\n y_pred[strategy], y_pis[strategy] = mapie.predict(X_test)\n else:\n mapie = MapieRegressor(polyn_model, **params)\n mapie.fit(X_train, y_train)\n y_pred[strategy], y_pis[strategy] = mapie.predict(X_test, alpha=0.05)" + "STRATEGIES = {\n", + " \"naive\": dict(method=\"naive\"),\n", + " \"jackknife\": dict(method=\"base\", cv=-1),\n", + " \"jackknife_plus\": dict(method=\"plus\", cv=-1),\n", + " \"jackknife_minmax\": dict(method=\"minmax\", cv=-1),\n", + " \"cv\": dict(method=\"base\", cv=10),\n", + " \"cv_plus\": dict(method=\"plus\", cv=10),\n", + " \"cv_minmax\": dict(method=\"minmax\", cv=10),\n", + " \"jackknife_plus_ab\": dict(method=\"plus\", cv=Subsample(n_resamplings=50)),\n", + " \"jackknife_minmax_ab\": dict(\n", + " method=\"minmax\", cv=Subsample(n_resamplings=50)\n", + " ),\n", + " \"conformalized_quantile_regression\": dict(\n", + " method=\"quantile\", cv=\"split\", alpha=0.05\n", + " )\n", + "}\n", + "y_pred, y_pis = {}, {}\n", + "for strategy, params in STRATEGIES.items():\n", + " if strategy == \"conformalized_quantile_regression\":\n", + " mapie = MapieQuantileRegressor(polyn_model_quant, **params)\n", + " mapie.fit(X_train, y_train, random_state=1)\n", + " y_pred[strategy], y_pis[strategy] = mapie.predict(X_test)\n", + " else:\n", + " mapie = MapieRegressor(polyn_model, **params)\n", + " mapie.fit(X_train, y_train)\n", + " y_pred[strategy], y_pis[strategy] = mapie.predict(X_test, alpha=0.05)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Let\u2019s now compare the target confidence intervals with the predicted\nintervals obtained with the Jackknife+, Jackknife-minmax, CV+, CV-minmax,\nJackknife+-after-Boostrap, and conformalized quantile regression (CQR)\nstrategies. Note that for the Jackknife-after-Bootstrap method, we call the\n:class:`~mapie.subsample.Subsample` object that allows us to train\nbootstrapped models. Note also that the CQR method is called with\n:class:`~mapie.quantile_regression.MapieQuantileRegressor` with a\n\"split\" strategy.\n\n" + "Let’s now compare the target confidence intervals with the predicted\n", + "intervals obtained with the Jackknife+, Jackknife-minmax, CV+, CV-minmax,\n", + "Jackknife+-after-Boostrap, and conformalized quantile regression (CQR)\n", + "strategies. Note that for the Jackknife-after-Bootstrap method, we call the\n", + ":class:`~mapie.subsample.Subsample` object that allows us to train\n", + "bootstrapped models. Note also that the CQR method is called with\n", + ":class:`~mapie.quantile_regression.MapieQuantileRegressor` with a\n", + "\"split\" strategy.\n", + "\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 43, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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3W6mTZtGOBymoqKCH/zgB6e8dwzwySefUFlZCaD1PdBXrDong8/n01bhiqJgMBhO+WEnhMDr9WrGicFg0A2UDJCXl8d5552HqqoMGTKE73//+5pH9mQRQrBo0SJqamqAlBesvb1dM1h0dI6HlBK/368Zy/F4HIfDccr3pMViwel0dvLk6QZKFgiFQjQ0NABobahPp7R0fn6+lmqc/jD1CHydE0VKybhx48jJyQEgEoloBddOldzcXK0+j81m0zx8Ol1He3u7piM5OTlYLJbT1pF0qrFeU0nnZEkmk0yZMgWbzYYQglAopIUenCq5ubmakWwymc4tA0UIYRRCrBNCvJ3NcT/55BOee+45APbs2cPq1atP63r5+flaefL0Xp0uLDonihCCSy+9FLPZjNVq5aabbuLOO+88rWvm5uZq6ap9+/Y95VTDM4Hu0pEPPviAuXPnArB582Y2bNhwWtfLz8+npaUFr9fbqaaSjs6JYDabufzyyzUP6u23385NN910WtfsaKAMGTLkiD2kMkW3GyjAvwHbsj1oMBjUAhH37Nlz2hkO+fn5qKqKy+UiEAhoUdQ6OidCuoux3+8nNzcXi8Wi7f+eKjNmzOBb3/oWBoOBvLw8hg8f3jWT7Zl0m46kY9i2b9+uFcc7VfLz8wmHw3g8Hi24WdcRnRMlGo0Si8Xw+XyajqS9sqfKddddx/333w9AaWlpVhc63WqgCCHKgFnAX7I9djAY1Pbp0u700yHtRrNYLASDQS644ALKy8tPe5465wbr16/nV7/6FS0tLbjdbt5//32amppO65omkwmDwUBOTg5+v/+sfdB1t46kaykpitJlOmKz2fD7/UydOpXS0tKumKrOOcCKFSt47LHHaG1txW6388EHH5z2995kMmGz2bDZbLS2tp5TacaPA98Dsl5BKi0saS/K6QpLr169+Na3vkX//v2RUjJ27FgGDRrUFVPVOQfw+XyYzWba2towm8189tlnpx0zEg6HmTdvHmazmZqaGv74xz+erQGXj9ONOgKcdg2UNP379+c73/kO5eXlxGIxLrrooqyXF9c5c/H7/Xg8HiKRCEIIli9frm3zniptbW288cYb2O129u7dyxNPPJG1DNVuM1CEENcAjVLKNcc57n4hxGohxOrTXVGmkVISDAaRUmrpWKcrLCaTCbfbra2AWlpaztoVq07XkxYW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oqCgQBMVjYwghKCgoECbeU9yNB3RyCSTRUc0B+U8eeaZZzh48CCAJioaGUUIQSwW4ze/+Q1PPfUUPp8v0yZpnCdPPPEEx44dAzQd0cgsSR351a9+xTPPPEMwGMy0Se9Dc1DOk/7+fn77298SjUYzasfAwADz5s1j3rx5lJSUUF5envo9Eomc9dxt27bxpS996ZzXWL58ebrMPYnVq1efs/7Ev/3bvxEIBMbl+lOFaDSK3++nvb2dvXv38otf/CLjn0uN86Onp4dHH32UWCyWUTs0HdEIh8P4fD66u7t59913efTRR4nH45k26yQ0B+UsHDp0iB07diCl5M4776S0tJRAIICqqhmzqaCggJ07d7Jz507uu+8+HnzwwdTvRqPxrMK3aNEi/v3f//2c19i0aVM6Tb4gNGE5N0IIDAYD999/P7fffjtut5utW7dm2iyNM7Bnzx727t2LlJJPf/rT5OfnEwgEyGQfNE1HNBRFwWg08md/9mfcfPPNdHZ2snv37kybdRKag3IGpJS8/vrrvP3220gp0ev1XHvttUgpL+yD39EBTzwBDz2U+LejI+223n333dx3330sXbqUr371q7zzzjssW7aM+fPns3z5cg4dOgTAa6+9xvXXXw/AN77xDT796U+zevVq6urqThIcu92eOn716tV89KMfZcaMGdxxxx0pUX3uueeYMWMGCxcu5Etf+lJq3LEEg0Fuv/12mpqauPnmm09aQrz//vtZtGgRs2bN4h/+4R8A+Pd//3e6urpYs2YNa9asOeNxH3T0ej1WqxW73U59fT2f/OQnWbp0aabN0jgNUko2bNjAli1bADCZTFx99dWoqnphS+qajmg6kmYMBgNWqxWz2czs2bO58847aW5uzrRZJ6Fl8ZyBrq4uuru7ufbaa1GUhB9XUVFBd3c3fr8fm8127j3kjg546ilwOqG4GHy+xO833QQVFWm1t6Ojg02bNqHT6fB6vbz55pvo9Xpefvll/vZv/5bf//737zvn4MGDbNiwgZGRERobG7n//vvfl3L27rvvsm/fPsrKylixYgUbN25k0aJFfP7zn+eNN96gtraWj3/846e16Uc/+hFWq5UDBw6we/duFixYkHruW9/6Fvn5+cTjcdatW8fu3bv50pe+xPe//302bNhAYWHhGY+bO3duGl+5yYXf73/fe1RXV5chazTOxbFj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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ - "def plot_1d_data(\n X_train,\n y_train,\n X_test,\n y_test,\n y_sigma,\n y_pred,\n y_pred_low,\n y_pred_up,\n ax=None,\n title=None\n):\n ax.set_xlabel(\"x\")\n ax.set_ylabel(\"y\")\n ax.fill_between(X_test, y_pred_low, y_pred_up, alpha=0.3)\n ax.scatter(X_train, y_train, color=\"red\", alpha=0.3, label=\"Training data\")\n ax.plot(X_test, y_test, color=\"gray\", label=\"True confidence intervals\")\n ax.plot(X_test, y_test - y_sigma, color=\"gray\", ls=\"--\")\n ax.plot(X_test, y_test + y_sigma, color=\"gray\", ls=\"--\")\n ax.plot(\n X_test, y_pred, color=\"blue\", alpha=0.5, label=\"Prediction intervals\"\n )\n if title is not None:\n ax.set_title(title)\n ax.legend()\n\n\nstrategies = [\n \"jackknife_plus\",\n \"jackknife_minmax\",\n \"cv_plus\",\n \"cv_minmax\",\n \"jackknife_plus_ab\",\n \"conformalized_quantile_regression\"\n]\nn_figs = len(strategies)\nfig, axs = plt.subplots(3, 2, figsize=(9, 13))\ncoords = [axs[0, 0], axs[0, 1], axs[1, 0], axs[1, 1], axs[2, 0], axs[2, 1]]\nfor strategy, coord in zip(strategies, coords):\n plot_1d_data(\n X_train.ravel(),\n y_train.ravel(),\n X_test.ravel(),\n y_mesh.ravel(),\n np.full((X_test.shape[0]), 1.96*noise).ravel(),\n y_pred[strategy].ravel(),\n y_pis[strategy][:, 0, 0].ravel(),\n y_pis[strategy][:, 1, 0].ravel(),\n ax=coord,\n title=strategy\n )\nplt.show()" + "def plot_1d_data(\n", + " X_train,\n", + " y_train,\n", + " X_test,\n", + " y_test,\n", + " y_sigma,\n", + " y_pred,\n", + " y_pred_low,\n", + " y_pred_up,\n", + " ax=None,\n", + " title=None\n", + "):\n", + " ax.set_xlabel(\"x\")\n", + " ax.set_ylabel(\"y\")\n", + " ax.fill_between(X_test, y_pred_low, y_pred_up, alpha=0.3)\n", + " ax.scatter(X_train, y_train, color=\"red\", alpha=0.3, label=\"Training data\")\n", + " ax.plot(X_test, y_test, color=\"gray\", label=\"True confidence intervals\")\n", + " ax.plot(X_test, y_test - y_sigma, color=\"gray\", ls=\"--\")\n", + " ax.plot(X_test, y_test + y_sigma, color=\"gray\", ls=\"--\")\n", + " ax.plot(\n", + " X_test, y_pred, color=\"blue\", alpha=0.5, label=\"Prediction intervals\"\n", + " )\n", + " if title is not None:\n", + " ax.set_title(title)\n", + " ax.legend()\n", + "\n", + "\n", + "strategies = [\n", + " \"jackknife_plus\",\n", + " \"jackknife_minmax\",\n", + " \"cv_plus\",\n", + " \"cv_minmax\",\n", + " \"jackknife_plus_ab\",\n", + " \"conformalized_quantile_regression\"\n", + "]\n", + "n_figs = len(strategies)\n", + "fig, axs = plt.subplots(3, 2, figsize=(9, 13))\n", + "coords = [axs[0, 0], axs[0, 1], axs[1, 0], axs[1, 1], axs[2, 0], axs[2, 1]]\n", + "for strategy, coord in zip(strategies, coords):\n", + " plot_1d_data(\n", + " X_train.ravel(),\n", + " y_train.ravel(),\n", + " X_test.ravel(),\n", + " y_mesh.ravel(),\n", + " np.full((X_test.shape[0]), 1.96*noise).ravel(),\n", + " y_pred[strategy].ravel(),\n", + " y_pis[strategy][:, 0, 0].ravel(),\n", + " y_pis[strategy][:, 1, 0].ravel(),\n", + " ax=coord,\n", + " title=strategy\n", + " )\n", + "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "At first glance, the four strategies give similar results and the\nprediction intervals are very close to the true confidence intervals.\nLet\u2019s confirm this by comparing the prediction interval widths over\n$x$ between all strategies.\n\n" + "At first glance, the four strategies give similar results and the\n", + "prediction intervals are very close to the true confidence intervals.\n", + "Let’s confirm this by comparing the prediction interval widths over\n", + "$x$ between all strategies.\n", + "\n" ] }, { @@ -159,14 +385,42 @@ }, "outputs": [], "source": [ - "fig, ax = plt.subplots(1, 1, figsize=(9, 5))\nax.axhline(1.96*2*noise, ls=\"--\", color=\"k\", label=\"True width\")\nfor strategy in STRATEGIES:\n ax.plot(\n X_test,\n y_pis[strategy][:, 1, 0] - y_pis[strategy][:, 0, 0],\n label=strategy\n )\nax.set_xlabel(\"x\")\nax.set_ylabel(\"Prediction Interval Width\")\nax.legend(fontsize=8)\nplt.show()" + "fig, ax = plt.subplots(1, 1, figsize=(9, 5))\n", + "ax.axhline(1.96*2*noise, ls=\"--\", color=\"k\", label=\"True width\")\n", + "for strategy in STRATEGIES:\n", + " ax.plot(\n", + " X_test,\n", + " y_pis[strategy][:, 1, 0] - y_pis[strategy][:, 0, 0],\n", + " label=strategy\n", + " )\n", + "ax.set_xlabel(\"x\")\n", + "ax.set_ylabel(\"Prediction Interval Width\")\n", + "ax.legend(fontsize=8)\n", + "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "As expected, the prediction intervals estimated by the Naive method\nare slightly too narrow. The Jackknife, Jackknife+, CV, CV+, JaB, and J+aB\ngive\nsimilar widths that are very close to the true width. On the other hand,\nthe width estimated by Jackknife-minmax and CV-minmax are slightly too\nwide. Note that the widths given by the Naive, Jackknife, and CV strategies\nare constant because there is a single model used for prediction,\nperturbed models are ignored at prediction time.\n\nIt's interesting to observe that CQR strategy offers more varying width,\noften giving much higher but also lower interval width than other methods,\ntherefore,\nwith homoscedastic noise, CQR would not be the preferred method.\n\nLet\u2019s now compare the *effective* coverage, namely the fraction of test\npoints whose true values lie within the prediction intervals, given by\nthe different strategies.\n\n" + "As expected, the prediction intervals estimated by the Naive method\n", + "are slightly too narrow. The Jackknife, Jackknife+, CV, CV+, JaB, and J+aB\n", + "give\n", + "similar widths that are very close to the true width. On the other hand,\n", + "the width estimated by Jackknife-minmax and CV-minmax are slightly too\n", + "wide. Note that the widths given by the Naive, Jackknife, and CV strategies\n", + "are constant because there is a single model used for prediction,\n", + "perturbed models are ignored at prediction time.\n", + "\n", + "It's interesting to observe that CQR strategy offers more varying width,\n", + "often giving much higher but also lower interval width than other methods,\n", + "therefore,\n", + "with homoscedastic noise, CQR would not be the preferred method.\n", + "\n", + "Let’s now compare the *effective* coverage, namely the fraction of test\n", + "points whose true values lie within the prediction intervals, given by\n", + "the different strategies.\n", + "\n" ] }, { @@ -177,21 +431,38 @@ }, "outputs": [], "source": [ - "pd.DataFrame([\n [\n regression_coverage_score(\n y_test, y_pis[strategy][:, 0, 0], y_pis[strategy][:, 1, 0]\n ),\n (\n y_pis[strategy][:, 1, 0] - y_pis[strategy][:, 0, 0]\n ).mean()\n ] for strategy in STRATEGIES\n], index=STRATEGIES, columns=[\"Coverage\", \"Width average\"]).round(2)" + "pd.DataFrame([\n", + " [\n", + " regression_coverage_score(\n", + " y_test, y_pis[strategy][:, 0, 0], y_pis[strategy][:, 1, 0]\n", + " ),\n", + " (\n", + " y_pis[strategy][:, 1, 0] - y_pis[strategy][:, 0, 0]\n", + " ).mean()\n", + " ] for strategy in STRATEGIES\n", + "], index=STRATEGIES, columns=[\"Coverage\", \"Width average\"]).round(2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "All strategies except the Naive one give effective coverage close to the\nexpected 0.95 value (recall that alpha = 0.05), confirming the theoretical\ngarantees.\n\n" + "All strategies except the Naive one give effective coverage close to the\n", + "expected 0.95 value (recall that alpha = 0.05), confirming the theoretical\n", + "garantees.\n", + "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## 2. Estimating the aleatoric uncertainty of heteroscedastic noisy data\n\nLet's define again the $x \\times \\sin(x)$ function and another simple\nfunction that generates one-dimensional data with normal noise uniformely\nin a given interval.\n\n" + "## 2. Estimating the aleatoric uncertainty of heteroscedastic noisy data\n", + "\n", + "Let's define again the $x \\times \\sin(x)$ function and another simple\n", + "function that generates one-dimensional data with normal noise uniformely\n", + "in a given interval.\n", + "\n" ] }, { @@ -202,14 +473,39 @@ }, "outputs": [], "source": [ - "def get_1d_data_with_heteroscedastic_noise(\n funct, min_x, max_x, n_samples, noise\n):\n \"\"\"\n Generate 1D noisy data uniformely from the given function\n and standard deviation for the noise.\n \"\"\"\n np.random.seed(59)\n X_train = np.linspace(min_x, max_x, n_samples)\n np.random.shuffle(X_train)\n X_test = np.linspace(min_x, max_x, n_samples*5)\n y_train = (\n funct(X_train) +\n (np.random.normal(0, noise, len(X_train)) * X_train)\n )\n y_test = (\n funct(X_test) +\n (np.random.normal(0, noise, len(X_test)) * X_test)\n )\n y_mesh = funct(X_test)\n return (\n X_train.reshape(-1, 1), y_train, X_test.reshape(-1, 1), y_test, y_mesh\n )" + "def get_1d_data_with_heteroscedastic_noise(\n", + " funct, min_x, max_x, n_samples, noise\n", + "):\n", + " \"\"\"\n", + " Generate 1D noisy data uniformely from the given function\n", + " and standard deviation for the noise.\n", + " \"\"\"\n", + " np.random.seed(59)\n", + " X_train = np.linspace(min_x, max_x, n_samples)\n", + " np.random.shuffle(X_train)\n", + " X_test = np.linspace(min_x, max_x, n_samples*5)\n", + " y_train = (\n", + " funct(X_train) +\n", + " (np.random.normal(0, noise, len(X_train)) * X_train)\n", + " )\n", + " y_test = (\n", + " funct(X_test) +\n", + " (np.random.normal(0, noise, len(X_test)) * X_test)\n", + " )\n", + " y_mesh = funct(X_test)\n", + " return (\n", + " X_train.reshape(-1, 1), y_train, X_test.reshape(-1, 1), y_test, y_mesh\n", + " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "We first generate noisy one-dimensional data uniformely on an interval.\nHere, the noise is considered as *heteroscedastic*, since it will increase\nlinearly with $x$.\n\n" + "We first generate noisy one-dimensional data uniformely on an interval.\n", + "Here, the noise is considered as *heteroscedastic*, since it will increase\n", + "linearly with $x$.\n", + "\n" ] }, { @@ -220,14 +516,21 @@ }, "outputs": [], "source": [ - "min_x, max_x, n_samples, noise = 0, 5, 300, 0.5\n(\n X_train, y_train, X_test, y_test, y_mesh\n) = get_1d_data_with_heteroscedastic_noise(\n x_sinx, min_x, max_x, n_samples, noise\n)" + "min_x, max_x, n_samples, noise = 0, 5, 300, 0.5\n", + "(\n", + " X_train, y_train, X_test, y_test, y_mesh\n", + ") = get_1d_data_with_heteroscedastic_noise(\n", + " x_sinx, min_x, max_x, n_samples, noise\n", + ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Let's visualize our noisy function. As x increases, the data becomes more\nnoisy.\n\n" + "Let's visualize our noisy function. As x increases, the data becomes more\n", + "noisy.\n", + "\n" ] }, { @@ -238,14 +541,21 @@ }, "outputs": [], "source": [ - "plt.xlabel(\"x\")\nplt.ylabel(\"y\")\nplt.scatter(X_train, y_train, color=\"C0\")\nplt.plot(X_test, y_mesh, color=\"C1\")\nplt.show()" + "plt.xlabel(\"x\")\n", + "plt.ylabel(\"y\")\n", + "plt.scatter(X_train, y_train, color=\"C0\")\n", + "plt.plot(X_test, y_mesh, color=\"C1\")\n", + "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "As mentioned previously, we fit our training data with a simple\npolynomial function. Here, we choose a degree equal to 10 so the function\nis able to perfectly fit $x \\times \\sin(x)$.\n\n" + "As mentioned previously, we fit our training data with a simple\n", + "polynomial function. Here, we choose a degree equal to 10 so the function\n", + "is able to perfectly fit $x \\times \\sin(x)$.\n", + "\n" ] }, { @@ -256,14 +566,34 @@ }, "outputs": [], "source": [ - "degree_polyn = 10\npolyn_model = Pipeline(\n [\n (\"poly\", PolynomialFeatures(degree=degree_polyn)),\n (\"linear\", LinearRegression())\n ]\n)\npolyn_model_quant = Pipeline(\n [\n (\"poly\", PolynomialFeatures(degree=degree_polyn)),\n (\"linear\", QuantileRegressor(\n solver=\"highs\",\n alpha=0,\n ))\n ]\n)" + "degree_polyn = 10\n", + "polyn_model = Pipeline(\n", + " [\n", + " (\"poly\", PolynomialFeatures(degree=degree_polyn)),\n", + " (\"linear\", LinearRegression())\n", + " ]\n", + ")\n", + "polyn_model_quant = Pipeline(\n", + " [\n", + " (\"poly\", PolynomialFeatures(degree=degree_polyn)),\n", + " (\"linear\", QuantileRegressor(\n", + " solver=\"highs\",\n", + " alpha=0,\n", + " ))\n", + " ]\n", + ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "We then estimate the prediction intervals for all the strategies very easily\nwith a\n`fit` and `predict` process. The prediction interval's lower and upper bounds\nare then saved in a DataFrame. Here, we set an alpha value of 0.05\nin order to obtain a 95% confidence for our prediction intervals.\n\n" + "We then estimate the prediction intervals for all the strategies very easily\n", + "with a\n", + "`fit` and `predict` process. The prediction interval's lower and upper bounds\n", + "are then saved in a DataFrame. Here, we set an alpha value of 0.05\n", + "in order to obtain a 95% confidence for our prediction intervals.\n", + "\n" ] }, { @@ -274,14 +604,39 @@ }, "outputs": [], "source": [ - "STRATEGIES = {\n \"naive\": dict(method=\"naive\"),\n \"jackknife\": dict(method=\"base\", cv=-1),\n \"jackknife_plus\": dict(method=\"plus\", cv=-1),\n \"jackknife_minmax\": dict(method=\"minmax\", cv=-1),\n \"cv\": dict(method=\"base\", cv=10),\n \"cv_plus\": dict(method=\"plus\", cv=10),\n \"cv_minmax\": dict(method=\"minmax\", cv=10),\n \"jackknife_plus_ab\": dict(method=\"plus\", cv=Subsample(n_resamplings=50)),\n \"conformalized_quantile_regression\": dict(\n method=\"quantile\", cv=\"split\", alpha=0.05\n )\n}\ny_pred, y_pis = {}, {}\nfor strategy, params in STRATEGIES.items():\n if strategy == \"conformalized_quantile_regression\":\n mapie = MapieQuantileRegressor(polyn_model_quant, **params)\n mapie.fit(X_train, y_train, random_state=1)\n y_pred[strategy], y_pis[strategy] = mapie.predict(X_test)\n else:\n mapie = MapieRegressor(polyn_model, **params)\n mapie.fit(X_train, y_train)\n y_pred[strategy], y_pis[strategy] = mapie.predict(X_test, alpha=0.05)" + "STRATEGIES = {\n", + " \"naive\": dict(method=\"naive\"),\n", + " \"jackknife\": dict(method=\"base\", cv=-1),\n", + " \"jackknife_plus\": dict(method=\"plus\", cv=-1),\n", + " \"jackknife_minmax\": dict(method=\"minmax\", cv=-1),\n", + " \"cv\": dict(method=\"base\", cv=10),\n", + " \"cv_plus\": dict(method=\"plus\", cv=10),\n", + " \"cv_minmax\": dict(method=\"minmax\", cv=10),\n", + " \"jackknife_plus_ab\": dict(method=\"plus\", cv=Subsample(n_resamplings=50)),\n", + " \"conformalized_quantile_regression\": dict(\n", + " method=\"quantile\", cv=\"split\", alpha=0.05\n", + " )\n", + "}\n", + "y_pred, y_pis = {}, {}\n", + "for strategy, params in STRATEGIES.items():\n", + " if strategy == \"conformalized_quantile_regression\":\n", + " mapie = MapieQuantileRegressor(polyn_model_quant, **params)\n", + " mapie.fit(X_train, y_train, random_state=1)\n", + " y_pred[strategy], y_pis[strategy] = mapie.predict(X_test)\n", + " else:\n", + " mapie = MapieRegressor(polyn_model, **params)\n", + " mapie.fit(X_train, y_train)\n", + " y_pred[strategy], y_pis[strategy] = mapie.predict(X_test, alpha=0.05)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Once again, let\u2019s compare the target confidence intervals with prediction\nintervals obtained with the Jackknife+, Jackknife-minmax, CV+, CV-minmax,\nJackknife+-after-Boostrap, and CQR strategies.\n\n" + "Once again, let’s compare the target confidence intervals with prediction\n", + "intervals obtained with the Jackknife+, Jackknife-minmax, CV+, CV-minmax,\n", + "Jackknife+-after-Boostrap, and CQR strategies.\n", + "\n" ] }, { @@ -292,14 +647,42 @@ }, "outputs": [], "source": [ - "strategies = [\n \"jackknife_plus\",\n \"jackknife_minmax\",\n \"cv_plus\",\n \"cv_minmax\",\n \"jackknife_plus_ab\",\n \"conformalized_quantile_regression\"\n]\nn_figs = len(strategies)\nfig, axs = plt.subplots(3, 2, figsize=(9, 13))\ncoords = [axs[0, 0], axs[0, 1], axs[1, 0], axs[1, 1], axs[2, 0], axs[2, 1]]\nfor strategy, coord in zip(strategies, coords):\n plot_1d_data(\n X_train.ravel(),\n y_train.ravel(),\n X_test.ravel(),\n y_mesh.ravel(),\n (1.96*noise*X_test).ravel(),\n y_pred[strategy].ravel(),\n y_pis[strategy][:, 0, 0].ravel(),\n y_pis[strategy][:, 1, 0].ravel(),\n ax=coord,\n title=strategy\n )\nplt.show()" + "strategies = [\n", + " \"jackknife_plus\",\n", + " \"jackknife_minmax\",\n", + " \"cv_plus\",\n", + " \"cv_minmax\",\n", + " \"jackknife_plus_ab\",\n", + " \"conformalized_quantile_regression\"\n", + "]\n", + "n_figs = len(strategies)\n", + "fig, axs = plt.subplots(3, 2, figsize=(9, 13))\n", + "coords = [axs[0, 0], axs[0, 1], axs[1, 0], axs[1, 1], axs[2, 0], axs[2, 1]]\n", + "for strategy, coord in zip(strategies, coords):\n", + " plot_1d_data(\n", + " X_train.ravel(),\n", + " y_train.ravel(),\n", + " X_test.ravel(),\n", + " y_mesh.ravel(),\n", + " (1.96*noise*X_test).ravel(),\n", + " y_pred[strategy].ravel(),\n", + " y_pis[strategy][:, 0, 0].ravel(),\n", + " y_pis[strategy][:, 1, 0].ravel(),\n", + " ax=coord,\n", + " title=strategy\n", + " )\n", + "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "We can observe that all of the strategies except CQR seem to have similar\nconstant prediction intervals.\nOn the other hand, the CQR strategy offers a solution that adapts the\nprediction intervals to the local noise.\n\n" + "We can observe that all of the strategies except CQR seem to have similar\n", + "constant prediction intervals.\n", + "On the other hand, the CQR strategy offers a solution that adapts the\n", + "prediction intervals to the local noise.\n", + "\n" ] }, { @@ -310,14 +693,36 @@ }, "outputs": [], "source": [ - "fig, ax = plt.subplots(1, 1, figsize=(7, 5))\nax.plot(X_test, 1.96*2*noise*X_test, ls=\"--\", color=\"k\", label=\"True width\")\nfor strategy in STRATEGIES:\n ax.plot(\n X_test,\n y_pis[strategy][:, 1, 0] - y_pis[strategy][:, 0, 0],\n label=strategy\n )\nax.set_xlabel(\"x\")\nax.set_ylabel(\"Prediction Interval Width\")\nax.legend(fontsize=8)\nplt.show()" + "fig, ax = plt.subplots(1, 1, figsize=(7, 5))\n", + "ax.plot(X_test, 1.96*2*noise*X_test, ls=\"--\", color=\"k\", label=\"True width\")\n", + "for strategy in STRATEGIES:\n", + " ax.plot(\n", + " X_test,\n", + " y_pis[strategy][:, 1, 0] - y_pis[strategy][:, 0, 0],\n", + " label=strategy\n", + " )\n", + "ax.set_xlabel(\"x\")\n", + "ax.set_ylabel(\"Prediction Interval Width\")\n", + "ax.legend(fontsize=8)\n", + "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "One can observe that all the strategies behave in a similar way as in the\nfirst example shown previously. One exception is the CQR method which takes\ninto account the heteroscedasticity of the data. In this method we observe\nvery low interval widths at low values of $x$.\nThis is the only method that\neven slightly follows the true width, and therefore is the preferred method\nfor heteroscedastic data. Notice also that the true width is greater (lower)\nthan the predicted width from the other methods at $x \\gtrapprox 3$`\n($x \\leq 3$). This means that while the marginal coverage correct for\nthese methods, the conditional coverage is likely not guaranteed as we will\nobserve in the next figure.\n\n" + "One can observe that all the strategies behave in a similar way as in the\n", + "first example shown previously. One exception is the CQR method which takes\n", + "into account the heteroscedasticity of the data. In this method we observe\n", + "very low interval widths at low values of $x$.\n", + "This is the only method that\n", + "even slightly follows the true width, and therefore is the preferred method\n", + "for heteroscedastic data. Notice also that the true width is greater (lower)\n", + "than the predicted width from the other methods at $x \\gtrapprox 3$`\n", + "($x \\leq 3$). This means that while the marginal coverage correct for\n", + "these methods, the conditional coverage is likely not guaranteed as we will\n", + "observe in the next figure.\n", + "\n" ] }, { @@ -328,14 +733,50 @@ }, "outputs": [], "source": [ - "def get_heteroscedastic_coverage(y_test, y_pis, STRATEGIES, bins):\n recap = {}\n for i in range(len(bins)-1):\n bin1, bin2 = bins[i], bins[i+1]\n name = f\"[{bin1}, {bin2}]\"\n recap[name] = []\n for strategy in STRATEGIES:\n indices = np.where((X_test >= bins[i]) * (X_test <= bins[i+1]))\n y_test_trunc = np.take(y_test, indices)\n y_low_ = np.take(y_pis[strategy][:, 0, 0], indices)\n y_high_ = np.take(y_pis[strategy][:, 1, 0], indices)\n score_coverage = regression_coverage_score(\n y_test_trunc[0], y_low_[0], y_high_[0]\n )\n recap[name].append(score_coverage)\n recap_df = pd.DataFrame(recap, index=STRATEGIES)\n return recap_df\n\n\nbins = [0, 1, 2, 3, 4, 5]\nheteroscedastic_coverage = get_heteroscedastic_coverage(\n y_test, y_pis, STRATEGIES, bins\n)\n\n# fig = plt.figure()\nheteroscedastic_coverage.T.plot.bar(figsize=(12, 5), alpha=0.7)\nplt.axhline(0.95, ls=\"--\", color=\"k\")\nplt.ylabel(\"Conditional coverage\")\nplt.xlabel(\"x bins\")\nplt.xticks(rotation=0)\nplt.ylim(0.8, 1.0)\nplt.legend(fontsize=8, loc=[0, 0])\nplt.show()" + "def get_heteroscedastic_coverage(y_test, y_pis, STRATEGIES, bins):\n", + " recap = {}\n", + " for i in range(len(bins)-1):\n", + " bin1, bin2 = bins[i], bins[i+1]\n", + " name = f\"[{bin1}, {bin2}]\"\n", + " recap[name] = []\n", + " for strategy in STRATEGIES:\n", + " indices = np.where((X_test >= bins[i]) * (X_test <= bins[i+1]))\n", + " y_test_trunc = np.take(y_test, indices)\n", + " y_low_ = np.take(y_pis[strategy][:, 0, 0], indices)\n", + " y_high_ = np.take(y_pis[strategy][:, 1, 0], indices)\n", + " score_coverage = regression_coverage_score(\n", + " y_test_trunc[0], y_low_[0], y_high_[0]\n", + " )\n", + " recap[name].append(score_coverage)\n", + " recap_df = pd.DataFrame(recap, index=STRATEGIES)\n", + " return recap_df\n", + "\n", + "\n", + "bins = [0, 1, 2, 3, 4, 5]\n", + "heteroscedastic_coverage = get_heteroscedastic_coverage(\n", + " y_test, y_pis, STRATEGIES, bins\n", + ")\n", + "\n", + "# fig = plt.figure()\n", + "heteroscedastic_coverage.T.plot.bar(figsize=(12, 5), alpha=0.7)\n", + "plt.axhline(0.95, ls=\"--\", color=\"k\")\n", + "plt.ylabel(\"Conditional coverage\")\n", + "plt.xlabel(\"x bins\")\n", + "plt.xticks(rotation=0)\n", + "plt.ylim(0.8, 1.0)\n", + "plt.legend(fontsize=8, loc=[0, 0])\n", + "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Let\u2019s now conclude by summarizing the *effective* coverage, namely the\nfraction of test\npoints whose true values lie within the prediction intervals, given by\nthe different strategies.\n\n" + "Let’s now conclude by summarizing the *effective* coverage, namely the\n", + "fraction of test\n", + "points whose true values lie within the prediction intervals, given by\n", + "the different strategies.\n", + "\n" ] }, { @@ -346,21 +787,45 @@ }, "outputs": [], "source": [ - "pd.DataFrame([\n [\n regression_coverage_score(\n y_test, y_pis[strategy][:, 0, 0], y_pis[strategy][:, 1, 0]\n ),\n (\n y_pis[strategy][:, 1, 0] - y_pis[strategy][:, 0, 0]\n ).mean()\n ] for strategy in STRATEGIES\n], index=STRATEGIES, columns=[\"Coverage\", \"Width average\"]).round(2)" + "pd.DataFrame([\n", + " [\n", + " regression_coverage_score(\n", + " y_test, y_pis[strategy][:, 0, 0], y_pis[strategy][:, 1, 0]\n", + " ),\n", + " (\n", + " y_pis[strategy][:, 1, 0] - y_pis[strategy][:, 0, 0]\n", + " ).mean()\n", + " ] for strategy in STRATEGIES\n", + "], index=STRATEGIES, columns=[\"Coverage\", \"Width average\"]).round(2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "All the strategies have the wanted coverage, however, we notice that the CQR\nstrategy has much lower interval width than all the other methods, therefore,\nwith heteroscedastic noise, CQR would be the preferred method.\n\n" + "All the strategies have the wanted coverage, however, we notice that the CQR\n", + "strategy has much lower interval width than all the other methods, therefore,\n", + "with heteroscedastic noise, CQR would be the preferred method.\n", + "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## 3. Estimating the epistemic uncertainty of out-of-distribution data\n\nLet\u2019s now consider one-dimensional data without noise, but normally\ndistributed.\nThe goal is to explore how the prediction intervals evolve for new data\nthat lie outside the distribution of the training data in order to see how\nthe strategies can capture the *epistemic* uncertainty.\nFor a comparison of the epistemic and aleatoric uncertainties, please have\na look at this source:\nhttps://en.wikipedia.org/wiki/Uncertainty_quantification.\n\nLet's start by generating and showing the data.\n\n" + "## 3. Estimating the epistemic uncertainty of out-of-distribution data\n", + "\n", + "Let’s now consider one-dimensional data without noise, but normally\n", + "distributed.\n", + "The goal is to explore how the prediction intervals evolve for new data\n", + "that lie outside the distribution of the training data in order to see how\n", + "the strategies can capture the *epistemic* uncertainty.\n", + "For a comparison of the epistemic and aleatoric uncertainties, please have\n", + "a look at this source:\n", + "https://en.wikipedia.org/wiki/Uncertainty_quantification.\n", + "\n", + "Let's start by generating and showing the data.\n", + "\n" ] }, { @@ -371,14 +836,41 @@ }, "outputs": [], "source": [ - "def get_1d_data_with_normal_distrib(funct, mu, sigma, n_samples, noise):\n \"\"\"\n Generate noisy 1D data with normal distribution from given function\n and noise standard deviation.\n \"\"\"\n np.random.seed(59)\n X_train = np.random.normal(mu, sigma, n_samples)\n X_test = np.arange(mu-4*sigma, mu+4*sigma, sigma/20.)\n y_train, y_mesh, y_test = funct(X_train), funct(X_test), funct(X_test)\n y_train += np.random.normal(0, noise, y_train.shape[0])\n y_test += np.random.normal(0, noise, y_test.shape[0])\n return (\n X_train.reshape(-1, 1), y_train, X_test.reshape(-1, 1), y_test, y_mesh\n )\n\n\nmu, sigma, n_samples, noise = 0, 2, 1000, 0.\nX_train, y_train, X_test, y_test, y_mesh = get_1d_data_with_normal_distrib(\n x_sinx, mu, sigma, n_samples, noise\n)\nplt.xlabel(\"x\")\nplt.ylabel(\"y\")\nplt.scatter(X_train, y_train, color=\"C0\")\n_ = plt.plot(X_test, y_test, color=\"C1\")\nplt.show()" + "def get_1d_data_with_normal_distrib(funct, mu, sigma, n_samples, noise):\n", + " \"\"\"\n", + " Generate noisy 1D data with normal distribution from given function\n", + " and noise standard deviation.\n", + " \"\"\"\n", + " np.random.seed(59)\n", + " X_train = np.random.normal(mu, sigma, n_samples)\n", + " X_test = np.arange(mu-4*sigma, mu+4*sigma, sigma/20.)\n", + " y_train, y_mesh, y_test = funct(X_train), funct(X_test), funct(X_test)\n", + " y_train += np.random.normal(0, noise, y_train.shape[0])\n", + " y_test += np.random.normal(0, noise, y_test.shape[0])\n", + " return (\n", + " X_train.reshape(-1, 1), y_train, X_test.reshape(-1, 1), y_test, y_mesh\n", + " )\n", + "\n", + "\n", + "mu, sigma, n_samples, noise = 0, 2, 1000, 0.\n", + "X_train, y_train, X_test, y_test, y_mesh = get_1d_data_with_normal_distrib(\n", + " x_sinx, mu, sigma, n_samples, noise\n", + ")\n", + "plt.xlabel(\"x\")\n", + "plt.ylabel(\"y\")\n", + "plt.scatter(X_train, y_train, color=\"C0\")\n", + "_ = plt.plot(X_test, y_test, color=\"C1\")\n", + "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "As before, we estimate the prediction intervals using a polynomial\nfunction of degree 10 and show the results for the Jackknife+ and CV+\nstrategies.\n\n" + "As before, we estimate the prediction intervals using a polynomial\n", + "function of degree 10 and show the results for the Jackknife+ and CV+\n", + "strategies.\n", + "\n" ] }, { @@ -389,14 +881,81 @@ }, "outputs": [], "source": [ - "polyn_model_quant = Pipeline(\n [\n (\"poly\", PolynomialFeatures(degree=degree_polyn)),\n (\"linear\", QuantileRegressor(\n solver=\"highs-ds\",\n alpha=0,\n ))\n ]\n)\nSTRATEGIES = {\n \"naive\": dict(method=\"naive\"),\n \"jackknife\": dict(method=\"base\", cv=-1),\n \"jackknife_plus\": dict(method=\"plus\", cv=-1),\n \"jackknife_minmax\": dict(method=\"minmax\", cv=-1),\n \"cv\": dict(method=\"base\", cv=10),\n \"cv_plus\": dict(method=\"plus\", cv=10),\n \"cv_minmax\": dict(method=\"minmax\", cv=10),\n \"jackknife_plus_ab\": dict(method=\"plus\", cv=Subsample(n_resamplings=50)),\n \"jackknife_minmax_ab\": dict(\n method=\"minmax\", cv=Subsample(n_resamplings=50)\n ),\n \"conformalized_quantile_regression\": dict(\n method=\"quantile\", cv=\"split\", alpha=0.05\n )\n}\ny_pred, y_pis = {}, {}\nfor strategy, params in STRATEGIES.items():\n if strategy == \"conformalized_quantile_regression\":\n mapie = MapieQuantileRegressor(polyn_model_quant, **params)\n mapie.fit(X_train, y_train, random_state=1)\n y_pred[strategy], y_pis[strategy] = mapie.predict(X_test)\n else:\n mapie = MapieRegressor(polyn_model, **params)\n mapie.fit(X_train, y_train)\n y_pred[strategy], y_pis[strategy] = mapie.predict(X_test, alpha=0.05)\n\nstrategies = [\n \"jackknife_plus\",\n \"jackknife_minmax\",\n \"cv_plus\",\n \"cv_minmax\",\n \"jackknife_plus_ab\",\n \"conformalized_quantile_regression\"\n]\nn_figs = len(strategies)\nfig, axs = plt.subplots(3, 2, figsize=(9, 13))\ncoords = [axs[0, 0], axs[0, 1], axs[1, 0], axs[1, 1], axs[2, 0], axs[2, 1]]\nfor strategy, coord in zip(strategies, coords):\n plot_1d_data(\n X_train.ravel(),\n y_train.ravel(),\n X_test.ravel(),\n y_mesh.ravel(),\n 1.96*noise,\n y_pred[strategy].ravel(),\n y_pis[strategy][:, 0, :].ravel(),\n y_pis[strategy][:, 1, :].ravel(),\n ax=coord,\n title=strategy\n )\nplt.show()" + "polyn_model_quant = Pipeline(\n", + " [\n", + " (\"poly\", PolynomialFeatures(degree=degree_polyn)),\n", + " (\"linear\", QuantileRegressor(\n", + " solver=\"highs-ds\",\n", + " alpha=0,\n", + " ))\n", + " ]\n", + ")\n", + "STRATEGIES = {\n", + " \"naive\": dict(method=\"naive\"),\n", + " \"jackknife\": dict(method=\"base\", cv=-1),\n", + " \"jackknife_plus\": dict(method=\"plus\", cv=-1),\n", + " \"jackknife_minmax\": dict(method=\"minmax\", cv=-1),\n", + " \"cv\": dict(method=\"base\", cv=10),\n", + " \"cv_plus\": dict(method=\"plus\", cv=10),\n", + " \"cv_minmax\": dict(method=\"minmax\", cv=10),\n", + " \"jackknife_plus_ab\": dict(method=\"plus\", cv=Subsample(n_resamplings=50)),\n", + " \"jackknife_minmax_ab\": dict(\n", + " method=\"minmax\", cv=Subsample(n_resamplings=50)\n", + " ),\n", + " \"conformalized_quantile_regression\": dict(\n", + " method=\"quantile\", cv=\"split\", alpha=0.05\n", + " )\n", + "}\n", + "y_pred, y_pis = {}, {}\n", + "for strategy, params in STRATEGIES.items():\n", + " if strategy == \"conformalized_quantile_regression\":\n", + " mapie = MapieQuantileRegressor(polyn_model_quant, **params)\n", + " mapie.fit(X_train, y_train, random_state=1)\n", + " y_pred[strategy], y_pis[strategy] = mapie.predict(X_test)\n", + " else:\n", + " mapie = MapieRegressor(polyn_model, **params)\n", + " mapie.fit(X_train, y_train)\n", + " y_pred[strategy], y_pis[strategy] = mapie.predict(X_test, alpha=0.05)\n", + "\n", + "strategies = [\n", + " \"jackknife_plus\",\n", + " \"jackknife_minmax\",\n", + " \"cv_plus\",\n", + " \"cv_minmax\",\n", + " \"jackknife_plus_ab\",\n", + " \"conformalized_quantile_regression\"\n", + "]\n", + "n_figs = len(strategies)\n", + "fig, axs = plt.subplots(3, 2, figsize=(9, 13))\n", + "coords = [axs[0, 0], axs[0, 1], axs[1, 0], axs[1, 1], axs[2, 0], axs[2, 1]]\n", + "for strategy, coord in zip(strategies, coords):\n", + " plot_1d_data(\n", + " X_train.ravel(),\n", + " y_train.ravel(),\n", + " X_test.ravel(),\n", + " y_mesh.ravel(),\n", + " 1.96*noise,\n", + " y_pred[strategy].ravel(),\n", + " y_pis[strategy][:, 0, :].ravel(),\n", + " y_pis[strategy][:, 1, :].ravel(),\n", + " ax=coord,\n", + " title=strategy\n", + " )\n", + "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "At first glance, our polynomial function does not give accurate\npredictions with respect to the true function when $|x| > 6$.\nThe prediction intervals estimated with the Jackknife+ do not seem to\nincrease. On the other hand, the CV and other related methods seem to capture\nsome uncertainty when $x > 6$.\n\nLet's now compare the prediction interval widths between all strategies.\n\n" + "At first glance, our polynomial function does not give accurate\n", + "predictions with respect to the true function when $|x| > 6$.\n", + "The prediction intervals estimated with the Jackknife+ do not seem to\n", + "increase. On the other hand, the CV and other related methods seem to capture\n", + "some uncertainty when $x > 6$.\n", + "\n", + "Let's now compare the prediction interval widths between all strategies.\n", + "\n" ] }, { @@ -407,14 +966,37 @@ }, "outputs": [], "source": [ - "fig, ax = plt.subplots(1, 1, figsize=(7, 5))\nax.set_yscale(\"log\")\nfor strategy in STRATEGIES:\n ax.plot(\n X_test,\n y_pis[strategy][:, 1, 0] - y_pis[strategy][:, 0, 0],\n label=strategy\n )\nax.set_xlabel(\"x\")\nax.set_ylabel(\"Prediction Interval Width\")\nax.legend(fontsize=8)\nplt.show()" + "fig, ax = plt.subplots(1, 1, figsize=(7, 5))\n", + "ax.set_yscale(\"log\")\n", + "for strategy in STRATEGIES:\n", + " ax.plot(\n", + " X_test,\n", + " y_pis[strategy][:, 1, 0] - y_pis[strategy][:, 0, 0],\n", + " label=strategy\n", + " )\n", + "ax.set_xlabel(\"x\")\n", + "ax.set_ylabel(\"Prediction Interval Width\")\n", + "ax.legend(fontsize=8)\n", + "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The prediction interval widths start to increase exponentially\nfor $|x| > 4$ for the CV+, CV-minmax, Jackknife-minmax, and quantile\nstrategies. On the other hand, the prediction intervals estimated by\nJackknife+ remain roughly constant until $|x| \\approx 5$ before\nincreasing.\nThe CQR strategy seems to perform well, however, on the extreme values\nof the data the quantile regression fails to give reliable results as it\noutputs\nnegative value for the prediction intervals. This occurs because the quantile\nregressor with quantile $1 - \\alpha/2$ gives higher values than the\nquantile regressor with quantile $\\alpha/2$. Note that a warning will\nbe issued when this occurs.\n\n" + "The prediction interval widths start to increase exponentially\n", + "for $|x| > 4$ for the CV+, CV-minmax, Jackknife-minmax, and quantile\n", + "strategies. On the other hand, the prediction intervals estimated by\n", + "Jackknife+ remain roughly constant until $|x| \\approx 5$ before\n", + "increasing.\n", + "The CQR strategy seems to perform well, however, on the extreme values\n", + "of the data the quantile regression fails to give reliable results as it\n", + "outputs\n", + "negative value for the prediction intervals. This occurs because the quantile\n", + "regressor with quantile $1 - \\alpha/2$ gives higher values than the\n", + "quantile regressor with quantile $\\alpha/2$. Note that a warning will\n", + "be issued when this occurs.\n", + "\n" ] }, { @@ -425,21 +1007,56 @@ }, "outputs": [], "source": [ - "pd.DataFrame([\n [\n regression_coverage_score(\n y_test, y_pis[strategy][:, 0, 0], y_pis[strategy][:, 1, 0]\n ),\n (\n y_pis[strategy][:, 1, 0] - y_pis[strategy][:, 0, 0]\n ).mean()\n ] for strategy in STRATEGIES\n], index=STRATEGIES, columns=[\"Coverage\", \"Width average\"]).round(3)" + "pd.DataFrame([\n", + " [\n", + " regression_coverage_score(\n", + " y_test, y_pis[strategy][:, 0, 0], y_pis[strategy][:, 1, 0]\n", + " ),\n", + " (\n", + " y_pis[strategy][:, 1, 0] - y_pis[strategy][:, 0, 0]\n", + " ).mean()\n", + " ] for strategy in STRATEGIES\n", + "], index=STRATEGIES, columns=[\"Coverage\", \"Width average\"]).round(3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "In conclusion, the Jackknife-minmax, CV+, CV-minmax, or Jackknife-minmax-ab\nstrategies are more\nconservative than the Jackknife+ strategy, and tend to result in more\nreliable coverages for *out-of-distribution* data. It is therefore\nadvised to use the three former strategies for predictions with new\nout-of-distribution data.\nNote however that there are no theoretical guarantees on the coverage level\nfor out-of-distribution data.\nHere it's important to note that the CQR strategy should not be taken into\naccount for width prediction, and it is abundantly clear from the negative\nwidth coverage that is observed in these results.\n\n" + "In conclusion, the Jackknife-minmax, CV+, CV-minmax, or Jackknife-minmax-ab\n", + "strategies are more\n", + "conservative than the Jackknife+ strategy, and tend to result in more\n", + "reliable coverages for *out-of-distribution* data. It is therefore\n", + "advised to use the three former strategies for predictions with new\n", + "out-of-distribution data.\n", + "Note however that there are no theoretical guarantees on the coverage level\n", + "for out-of-distribution data.\n", + "Here it's important to note that the CQR strategy should not be taken into\n", + "account for width prediction, and it is abundantly clear from the negative\n", + "width coverage that is observed in these results.\n", + "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## 4. Estimating the uncertainty with different sklearn-compatible regressors\n\nMAPIE can be used with any kind of sklearn-compatible regressor. Here, we\nillustrate this by comparing the prediction intervals estimated by the CV+\nmethod using different models:\n\n* the same polynomial function as before.\n\n* a XGBoost model using the Scikit-learn API.\n\n* a simple neural network, a Multilayer Perceptron with three dense layers,\n using the KerasRegressor wrapper.\n\nOnce again, let\u2019s use our noisy one-dimensional data obtained from a\nuniform distribution.\n\n" + "## 4. Estimating the uncertainty with different sklearn-compatible regressors\n", + "\n", + "MAPIE can be used with any kind of sklearn-compatible regressor. Here, we\n", + "illustrate this by comparing the prediction intervals estimated by the CV+\n", + "method using different models:\n", + "\n", + "* the same polynomial function as before.\n", + "\n", + "* a XGBoost model using the Scikit-learn API.\n", + "\n", + "* a simple neural network, a Multilayer Perceptron with three dense layers,\n", + " using the KerasRegressor wrapper.\n", + "\n", + "Once again, let’s use our noisy one-dimensional data obtained from a\n", + "uniform distribution.\n", + "\n" ] }, { @@ -450,14 +1067,36 @@ }, "outputs": [], "source": [ - "subprocess.run(\"pip install scikeras\", shell=True)\nsubprocess.run(\"pip install tensorflow\", shell=True)\nsubprocess.run(\"pip install xgboost\", shell=True)\n\nfrom scikeras.wrappers import KerasRegressor # noqa: E402\nfrom tensorflow.keras import Sequential # noqa: E402\nfrom tensorflow.keras.layers import Dense # noqa: E402\nfrom xgboost import XGBRegressor # noqa: E402\n\n\nmin_x, max_x, n_samples, noise = -5, 5, 100, 0.5\nX_train, y_train, X_test, y_test, y_mesh = get_1d_data_with_constant_noise(\n x_sinx, min_x, max_x, n_samples, noise\n)\n\nplt.xlabel(\"x\")\nplt.ylabel(\"y\")\nplt.plot(X_test, y_mesh, color=\"C1\")\n_ = plt.scatter(X_train, y_train)\nplt.show()" + "subprocess.run(\"pip install scikeras\", shell=True)\n", + "subprocess.run(\"pip install tensorflow\", shell=True)\n", + "subprocess.run(\"pip install xgboost\", shell=True)\n", + "\n", + "from scikeras.wrappers import KerasRegressor # noqa: E402\n", + "from tensorflow.keras import Sequential # noqa: E402\n", + "from tensorflow.keras.layers import Dense # noqa: E402\n", + "from xgboost import XGBRegressor # noqa: E402\n", + "\n", + "\n", + "min_x, max_x, n_samples, noise = -5, 5, 100, 0.5\n", + "X_train, y_train, X_test, y_test, y_mesh = get_1d_data_with_constant_noise(\n", + " x_sinx, min_x, max_x, n_samples, noise\n", + ")\n", + "\n", + "plt.xlabel(\"x\")\n", + "plt.ylabel(\"y\")\n", + "plt.plot(X_test, y_mesh, color=\"C1\")\n", + "_ = plt.scatter(X_train, y_train)\n", + "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Let's then define the models. The boosing model considers 100 shallow\ntrees with a max depth of 2 while the Multilayer Perceptron has two hidden\ndense layers with 20 neurons each followed by a relu activation.\n\n" + "Let's then define the models. The boosing model considers 100 shallow\n", + "trees with a max depth of 2 while the Multilayer Perceptron has two hidden\n", + "dense layers with 20 neurons each followed by a relu activation.\n", + "\n" ] }, { @@ -468,14 +1107,49 @@ }, "outputs": [], "source": [ - "def mlp():\n \"\"\"\n Two-layer MLP model\n \"\"\"\n model = Sequential([\n Dense(units=20, input_shape=(1,), activation=\"relu\"),\n Dense(units=20, activation=\"relu\"),\n Dense(units=1)\n ])\n model.compile(loss=\"mean_squared_error\", optimizer=\"adam\")\n return model\n\n\npolyn_model = Pipeline(\n [\n (\"poly\", PolynomialFeatures(degree=degree_polyn)),\n (\"linear\", LinearRegression())\n ]\n)\n\nxgb_model = XGBRegressor(\n max_depth=2,\n n_estimators=100,\n tree_method=\"hist\",\n random_state=59,\n learning_rate=0.1,\n verbosity=0,\n nthread=-1\n)\nmlp_model = KerasRegressor(\n build_fn=mlp,\n epochs=500,\n verbose=0\n)" + "def mlp():\n", + " \"\"\"\n", + " Two-layer MLP model\n", + " \"\"\"\n", + " model = Sequential([\n", + " Dense(units=20, input_shape=(1,), activation=\"relu\"),\n", + " Dense(units=20, activation=\"relu\"),\n", + " Dense(units=1)\n", + " ])\n", + " model.compile(loss=\"mean_squared_error\", optimizer=\"adam\")\n", + " return model\n", + "\n", + "\n", + "polyn_model = Pipeline(\n", + " [\n", + " (\"poly\", PolynomialFeatures(degree=degree_polyn)),\n", + " (\"linear\", LinearRegression())\n", + " ]\n", + ")\n", + "\n", + "xgb_model = XGBRegressor(\n", + " max_depth=2,\n", + " n_estimators=100,\n", + " tree_method=\"hist\",\n", + " random_state=59,\n", + " learning_rate=0.1,\n", + " verbosity=0,\n", + " nthread=-1\n", + ")\n", + "mlp_model = KerasRegressor(\n", + " build_fn=mlp,\n", + " epochs=500,\n", + " verbose=0\n", + ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Let's now use MAPIE to estimate the prediction intervals using the CV+\nmethod and compare their prediction interval.\n\n" + "Let's now use MAPIE to estimate the prediction intervals using the CV+\n", + "method and compare their prediction interval.\n", + "\n" ] }, { @@ -486,20 +1160,56 @@ }, "outputs": [], "source": [ - "models = [polyn_model, xgb_model, mlp_model]\nmodel_names = [\"polyn\", \"xgb\", \"mlp\"]\nfor name, model in zip(model_names, models):\n mapie = MapieRegressor(model, method=\"plus\", cv=10)\n mapie.fit(X_train, y_train)\n y_pred[name], y_pis[name] = mapie.predict(X_test, alpha=0.05)\n\nfig, axs = plt.subplots(1, 3, figsize=(20, 6))\nfor name, ax in zip(model_names, axs):\n plot_1d_data(\n X_train.ravel(),\n y_train.ravel(),\n X_test.ravel(),\n y_mesh.ravel(),\n 1.96*noise,\n y_pred[name].ravel(),\n y_pis[name][:, 0, 0].ravel(),\n y_pis[name][:, 1, 0].ravel(),\n ax=ax,\n title=name\n )\nplt.show()\n\n\nfig, ax = plt.subplots(1, 1, figsize=(7, 5))\nfor name in model_names:\n ax.plot(X_test, y_pis[name][:, 1, 0] - y_pis[name][:, 0, 0])\nax.axhline(1.96*2*noise, ls=\"--\", color=\"k\")\nax.set_xlabel(\"x\")\nax.set_ylabel(\"Prediction Interval Width\")\nax.legend(model_names + [\"True width\"], fontsize=8)\nplt.show()" + "models = [polyn_model, xgb_model, mlp_model]\n", + "model_names = [\"polyn\", \"xgb\", \"mlp\"]\n", + "for name, model in zip(model_names, models):\n", + " mapie = MapieRegressor(model, method=\"plus\", cv=10)\n", + " mapie.fit(X_train, y_train)\n", + " y_pred[name], y_pis[name] = mapie.predict(X_test, alpha=0.05)\n", + "\n", + "fig, axs = plt.subplots(1, 3, figsize=(20, 6))\n", + "for name, ax in zip(model_names, axs):\n", + " plot_1d_data(\n", + " X_train.ravel(),\n", + " y_train.ravel(),\n", + " X_test.ravel(),\n", + " y_mesh.ravel(),\n", + " 1.96*noise,\n", + " y_pred[name].ravel(),\n", + " y_pis[name][:, 0, 0].ravel(),\n", + " y_pis[name][:, 1, 0].ravel(),\n", + " ax=ax,\n", + " title=name\n", + " )\n", + "plt.show()\n", + "\n", + "\n", + "fig, ax = plt.subplots(1, 1, figsize=(7, 5))\n", + "for name in model_names:\n", + " ax.plot(X_test, y_pis[name][:, 1, 0] - y_pis[name][:, 0, 0])\n", + "ax.axhline(1.96*2*noise, ls=\"--\", color=\"k\")\n", + "ax.set_xlabel(\"x\")\n", + "ax.set_ylabel(\"Prediction Interval Width\")\n", + "ax.legend(model_names + [\"True width\"], fontsize=8)\n", + "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "As expected with the CV+ method, the prediction intervals are a bit\nconservative since they are slightly wider than the true intervals.\nHowever, the CV+ method on the three models gives very promising results\nsince the prediction intervals closely follow the true intervals with\n$x$.\n\n" + "As expected with the CV+ method, the prediction intervals are a bit\n", + "conservative since they are slightly wider than the true intervals.\n", + "However, the CV+ method on the three models gives very promising results\n", + "since the prediction intervals closely follow the true intervals with\n", + "$x$.\n", + "\n" ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3.9.0 64-bit ('3.9.0')", "language": "python", "name": "python3" }, @@ -513,9 +1223,14 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.13" + "version": "3.9.0" + }, + "vscode": { + "interpreter": { + "hash": "9f3749d15f85194e2be8a9af590cff47c92b4121cd966ac320a66f9707b35b3a" + } } }, "nbformat": 4, "nbformat_minor": 0 -} \ No newline at end of file +} diff --git a/docs/Manifest.toml b/docs/Manifest.toml index 72c37d3..29b884a 100644 --- a/docs/Manifest.toml +++ b/docs/Manifest.toml @@ -2,7 +2,7 @@ julia_version = "1.8.1" manifest_format = "2.0" -project_hash = "921211bc7dc57dcfec6290fbd98c475251523093" +project_hash = "28fe83b4a7735a52aeb539eca5a8329b34ea0fc4" [[deps.ANSIColoredPrinters]] git-tree-sha1 = "574baf8110975760d391c710b6341da1afa48d8c" @@ -1121,6 +1121,18 @@ git-tree-sha1 = "1a0fa0e9613f46c9b8c11eee38ebb4f590013c5e" uuid = "71a1bf82-56d0-4bbc-8a3c-48b961074391" version = "0.1.5" +[[deps.NearestNeighborModels]] +deps = ["Distances", "FillArrays", "InteractiveUtils", "LinearAlgebra", "MLJModelInterface", "NearestNeighbors", "Statistics", "StatsBase", "Tables"] +git-tree-sha1 = "727b8f1c3f9fec6b1a805ba9bef72c73758eda02" +uuid = "636a865e-7cf4-491e-846c-de09b730eb36" +version = "0.2.1" + +[[deps.NearestNeighbors]] +deps = ["Distances", "StaticArrays"] +git-tree-sha1 = "440165bf08bc500b8fe4a7be2dc83271a00c0716" +uuid = "b8a86587-4115-5ab1-83bc-aa920d37bbce" +version = "0.4.12" + [[deps.NetworkLayout]] deps = ["GeometryBasics", "LinearAlgebra", "Random", "Requires", "SparseArrays"] git-tree-sha1 = "cac8fc7ba64b699c678094fa630f49b80618f625" @@ -1263,6 +1275,12 @@ git-tree-sha1 = "b42fb2292fbbaed36f25d33a15c8cc0b4f287fcf" uuid = "1d0040c9-8b98-4ee7-8388-3f51789ca0ad" version = "0.1.10" +[[deps.Polynomials]] +deps = ["LinearAlgebra", "RecipesBase"] +git-tree-sha1 = "3010a6dd6ad4c7384d2f38c58fa8172797d879c1" +uuid = "f27b6e38-b328-58d1-80ce-0feddd5e7a45" +version = "3.2.0" + [[deps.PooledArrays]] deps = ["DataAPI", "Future"] git-tree-sha1 = "a6062fe4063cdafe78f4a0a81cfffb89721b30e7" diff --git a/docs/Project.toml b/docs/Project.toml index 55d3fc4..0a2759d 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -14,5 +14,7 @@ MLJLinearModels = "6ee0df7b-362f-4a72-a706-9e79364fb692" MLJModelInterface = "e80e1ace-859a-464e-9ed9-23947d8ae3ea" MLJNaiveBayesInterface = "33e4bacb-b9e2-458e-9a13-5d9a90b235fa" NaiveBayes = "9bbee03b-0db5-5f46-924f-b5c9c21b8c60" +NearestNeighborModels = "636a865e-7cf4-491e-846c-de09b730eb36" PlotThemes = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a" Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" +Polynomials = "f27b6e38-b328-58d1-80ce-0feddd5e7a45" diff --git a/docs/make.jl b/docs/make.jl index 16c4ba2..e1a6a8f 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -34,7 +34,7 @@ makedocs(; "🏠 Home" => "index.md", "🤔 Tutorials" => [ "Classification" => "classification.md", - "Regression" = "regression.md", + "Regression" => "regression.md", ], "📖 Reference" => "reference.md", "🛠 Contribute" => "contribute.md", diff --git a/docs/src/classification.md b/docs/src/classification.md index 546810e..3cf88a5 100644 --- a/docs/src/classification.md +++ b/docs/src/classification.md @@ -1,41 +1,145 @@ +# Classification + +``` @meta +CurrentModule = ConformalPrediction +``` + +This tutorial is based in parts on this [blog post](https://www.paltmeyer.com/blog/posts/conformal-prediction/). + +### Split Conformal Classification + +We consider a simple binary classification problem. Let (*X*_(*i*),*Y*_(*i*)), *i* = 1, ..., *n* denote our feature-label pairs and let *μ* : 𝒳 ↦ 𝒴 denote the mapping from features to labels. For illustration purposes we will use the moons dataset 🌙. Using [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) we first generate the data and split into into a training and test set: + ``` julia using MLJ -X, y = MLJ.make_blobs(1000, 2; centers=3, cluster_std=1.0) -train, test = partition(eachindex(y), 0.4, 0.4, shuffle=true) +using Random +Random.seed!(123) + +# Data: +X, y = make_moons(500; noise=0.15) +train, test = partition(eachindex(y), 0.8, shuffle=true) ``` +Here we will use a specific case of CP called *split conformal prediction* which can then be summarized as follows:[1] + +1. Partition the training into a proper training set and a separate calibration set: 𝒟_(*n*) = 𝒟^(train) ∪ 𝒟^(cali). +2. Train the machine learning model on the proper training set: *μ̂*_(*i* ∈ 𝒟^(train))(*X*_(*i*),*Y*_(*i*)). +3. Compute nonconformity scores, 𝒮, using the calibration data 𝒟^(cali) and the fitted model *μ̂*_(*i* ∈ 𝒟^(train)). +4. For a user-specified desired coverage ratio (1−*α*) compute the corresponding quantile, *q̂*, of the empirical distribution of nonconformity scores, 𝒮. +5. For the given quantile and test sample *X*_(test), form the corresponding conformal prediction set: + +*C*(*X*_(test)) = {*y* : *s*(*X*_(test),*y*) ≤ *q̂*}   (1) + +This is the default procedure used for classification and regression in [`ConformalPrediction.jl`](https://github.com/pat-alt/ConformalPrediction.jl). + +Now let’s take this to our 🌙 data. To illustrate the package functionality we will demonstrate the envisioned workflow. We first define our atomic machine learning model following standard [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) conventions. Using [`ConformalPrediction.jl`](https://github.com/pat-alt/ConformalPrediction.jl) we then wrap our atomic model in a conformal model using the standard API call `conformal_model(model::Supervised; kwargs...)`. To train and predict from our conformal model we can then rely on the conventional [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) procedure again. In particular, we wrap our conformal model in data (turning it into a machine) and then fit it on the training set. Finally, we use our machine to predict the label for a new test sample `Xtest`: + ``` julia -EvoTreeClassifier = @load EvoTreeClassifier pkg=EvoTrees -model = EvoTreeClassifier() +# Model: +KNNClassifier = @load KNNClassifier pkg=NearestNeighborModels +model = KNNClassifier(;K=50) + +# Training: +using ConformalPrediction +conf_model = conformal_model(model; coverage=.9) +mach = machine(conf_model, X, y) +fit!(mach, rows=train) + +# Conformal Prediction: +Xtest = selectrows(X, first(test)) +ytest = y[first(test)] +predict(mach, Xtest)[1] ``` + import NearestNeighborModels + + ✔ + + UnivariateFinite{Multiclass{2}} + ┌ ┐ + 0 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.94 + └ ┘ + +The final predictions are set-valued. While the softmax output remains unchanged for the `SimpleInductiveClassifier`, the size of the prediction set depends on the chosen coverage rate, (1−*α*). + +When specifying a coverage rate very close to one, the prediction set will typically include many (in some cases all) of the possible labels. Below, for example, both classes are included in the prediction set when setting the coverage rate equal to (1−*α*)=1.0. This is intuitive, since high coverage quite literally requires that the true label is covered by the prediction set with high probability. + ``` julia -using ConformalPrediction -conf_model = conformal_model(model) +conf_model = conformal_model(model; coverage=coverage) mach = machine(conf_model, X, y) fit!(mach, rows=train) + +# Conformal Prediction: +Xtest = (x1=[1],x2=[0]) +predict(mach, Xtest)[1] ``` + UnivariateFinite{Multiclass{2}} + ┌ ┐ + 0 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.5 + 1 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.5 + └ ┘ + +Conversely, for low coverage rates, prediction sets can also be empty. For a choice of (1−*α*)=0.1, for example, the prediction set for our test sample is empty. This is a bit difficult to think about intuitively and I have not yet come across a satisfactory, intuitive interpretation.[2] When the prediction set is empty, the `predict` call currently returns `missing`: + ``` julia -rows = rand(test, 10) -Xtest = selectrows(X, rows) -ytest = y[rows] -predict(mach, Xtest) +conf_model = conformal_model(model; coverage=coverage) +mach = machine(conf_model, X, y) +fit!(mach, rows=train) + +# Conformal Prediction: +predict(mach, Xtest)[1] ``` - ╭───────────────────────────────────────────────────────────────────╮ - │ │ - │ (1) UnivariateFinite{Multiclass {#90CAF9}3} (1=>0.82{/#90CAF9}) │ - │ (2) UnivariateFinite{Multiclass {#90CAF9}3} (3=>0.82{/#90CAF9}) │ - │ (3) UnivariateFinite{Multiclass {#90CAF9}3} (1=>0.82{/#90CAF9}) │ - │ (4) UnivariateFinite{Multiclass {#90CAF9}3} (1=>0.82{/#90CAF9}) │ - │ (5) UnivariateFinite{Multiclass {#90CAF9}3} (1=>0.82{/#90CAF9}) │ - │ (6) UnivariateFinite{Multiclass {#90CAF9}3} (3=>0.82{/#90CAF9}) │ - │ (7) UnivariateFinite{Multiclass {#90CAF9}3} (3=>0.82{/#90CAF9}) │ - │ (8) UnivariateFinite{Multiclass {#90CAF9}3} (2=>0.82{/#90CAF9}) │ - │ (9) UnivariateFinite{Multiclass {#90CAF9}3} (1=>0.82{/#90CAF9}) │ - │ (10) UnivariateFinite{Multiclass {#90CAF9}3} (3=>0.82{/#90CAF9}) │ - │ │ - │ │ - ╰────────────────────────────────────────────────────── 10 items ───╯ + missing + +**?@fig-anim** should provide some more intuition as to what exactly is happening here. It illustrates the effect of the chosen coverage rate on the predicted softmax output and the set size in the two-dimensional feature space. Contours are overlayed with the moon data points (including test data). The two samples highlighted in red, *X*₁ and *X*₂, have been manually added for illustration purposes. Let’s look at these one by one. + +Firstly, note that *X*₁ (red cross) falls into a region of the domain that is characterized by high predictive uncertainty. It sits right at the bottom-right corner of our class-zero moon 🌜 (orange), a region that is almost entirely enveloped by our class-one moon 🌛 (green). For low coverage rates the prediction set for *X*₁ is empty: on the left-hand side this is indicated by the missing contour for the softmax probability; on the right-hand side we can observe that the corresponding set size is indeed zero. For high coverage rates the prediction set includes both *y* = 0 and *y* = 1, indicative of the fact that the conformal classifier is uncertain about the true label. + +With respect to *X*₂, we observe that while also sitting on the fringe of our class-zero moon, this sample populates a region that is not fully enveloped by data points from the opposite class. In this region, the underlying atomic classifier can be expected to be more certain about its predictions, but still not highly confident. How is this reflected by our corresponding conformal prediction sets? + +``` julia +Xtest_2 = (x1=[-0.5],x2=[0.25]) +cov_ = .9 +conf_model = conformal_model(model; coverage=cov_) +mach = machine(conf_model, X, y) +fit!(mach, rows=train) +p̂_2 = pdf(predict(mach, Xtest_2)[1], 0) +``` + +Well, for low coverage rates (roughly  \< 0.9) the conformal prediction set does not include *y* = 0: the set size is zero (right panel). Only for higher coverage rates do we have *C*(*X*₂) = {0}: the coverage rate is high enough to include *y* = 0, but the corresponding softmax probability is still fairly low. For example, for (1−*α*) = 0.9 we have *p̂*(*y*=0|*X*₂) = 0.72. + +These two examples illustrate an interesting point: for regions characterised by high predictive uncertainty, conformal prediction sets are typically empty (for low coverage) or large (for high coverage). While set-valued predictions may be something to get used to, this notion is overall intuitive. + +``` julia +# Setup +coverages = range(0.75,1.0,length=5) +n = 100 +x1_range = range(extrema(X.x1)...,length=n) +x2_range = range(extrema(X.x2)...,length=n) + +anim = @animate for coverage in coverages + conf_model = conformal_model(model; coverage=coverage) + mach = machine(conf_model, X, y) + fit!(mach, rows=train) + p1 = contourf_cp(mach, x1_range, x2_range; type=:proba, title="Softmax", axis=nothing) + scatter!(p1, X.x1, X.x2, group=y, ms=2, msw=0, alpha=0.75) + scatter!(p1, Xtest.x1, Xtest.x2, ms=6, c=:red, label="X₁", shape=:cross, msw=6) + scatter!(p1, Xtest_2.x1, Xtest_2.x2, ms=6, c=:red, label="X₂", shape=:diamond, msw=6) + p2 = contourf_cp(mach, x1_range, x2_range; type=:set_size, title="Set size", axis=nothing) + scatter!(p2, X.x1, X.x2, group=y, ms=2, msw=0, alpha=0.75) + scatter!(p2, Xtest.x1, Xtest.x2, ms=6, c=:red, label="X₁", shape=:cross, msw=6) + scatter!(p2, Xtest_2.x1, Xtest_2.x2, ms=6, c=:red, label="X₂", shape=:diamond, msw=6) + plot(p1, p2, plot_title="(1-α)=$(round(coverage,digits=2))", size=(800,300)) +end + +gif(anim, fps=0.5) +``` + +The effect of the coverage rate on the conformal prediction set. Softmax probabilities are shown on the left. The size of the prediction set is shown on the right. + +[1] In other places split conformal prediction is sometimes referred to as *inductive* conformal prediction. + +[2] Any thoughts/comments welcome! diff --git a/docs/src/classification.qmd b/docs/src/classification.qmd index 9eec225..f75938c 100644 --- a/docs/src/classification.qmd +++ b/docs/src/classification.qmd @@ -11,28 +11,264 @@ using Plots theme(:wong) ``` + +This tutorial is based in parts on this [blog post](https://www.paltmeyer.com/blog/posts/conformal-prediction/). + +### Split Conformal Classification {#sec-scp} + +We consider a simple binary classification problem. Let $(X_i, Y_i), \ i=1,...,n$ denote our feature-label pairs and let $\mu: \mathcal{X} \mapsto \mathcal{Y}$ denote the mapping from features to labels. For illustration purposes we will use the moons dataset 🌙. Using [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) we first generate the data and split into into a training and test set: + ```{julia} using MLJ -X, y = MLJ.make_blobs(1000, 2; centers=3, cluster_std=1.0) -train, test = partition(eachindex(y), 0.4, 0.4, shuffle=true) +using Random +Random.seed!(123) + +# Data: +X, y = make_moons(500; noise=0.15) +train, test = partition(eachindex(y), 0.8, shuffle=true) ``` +Here we will use a specific case of CP called *split conformal prediction* which can then be summarized as follows:^[In other places split conformal prediction is sometimes referred to as *inductive* conformal prediction.] + +1. Partition the training into a proper training set and a separate calibration set: $\mathcal{D}_n=\mathcal{D}^{\text{train}} \cup \mathcal{D}^{\text{cali}}$. +2. Train the machine learning model on the proper training set: $\hat\mu_{i \in \mathcal{D}^{\text{train}}}(X_i,Y_i)$. +3. Compute nonconformity scores, $\mathcal{S}$, using the calibration data $\mathcal{D}^{\text{cali}}$ and the fitted model $\hat\mu_{i \in \mathcal{D}^{\text{train}}}$. +4. For a user-specified desired coverage ratio $(1-\alpha)$ compute the corresponding quantile, $\hat{q}$, of the empirical distribution of nonconformity scores, $\mathcal{S}$. +5. For the given quantile and test sample $X_{\text{test}}$, form the corresponding conformal prediction set: + +$$ +C(X_{\text{test}})=\{y:s(X_{\text{test}},y) \le \hat{q}\} +$$ {#eq-set} + +This is the default procedure used for classification and regression in [`ConformalPrediction.jl`](https://github.com/pat-alt/ConformalPrediction.jl). + +Now let's take this to our 🌙 data. To illustrate the package functionality we will demonstrate the envisioned workflow. We first define our atomic machine learning model following standard [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) conventions. Using [`ConformalPrediction.jl`](https://github.com/pat-alt/ConformalPrediction.jl) we then wrap our atomic model in a conformal model using the standard API call `conformal_model(model::Supervised; kwargs...)`. To train and predict from our conformal model we can then rely on the conventional [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) procedure again. In particular, we wrap our conformal model in data (turning it into a machine) and then fit it on the training set. Finally, we use our machine to predict the label for a new test sample `Xtest`: + ```{julia} -EvoTreeClassifier = @load EvoTreeClassifier pkg=EvoTrees -model = EvoTreeClassifier() +#| output: true + +# Model: +KNNClassifier = @load KNNClassifier pkg=NearestNeighborModels +model = KNNClassifier(;K=50) + +# Training: +using ConformalPrediction +conf_model = conformal_model(model; coverage=.9) +mach = machine(conf_model, X, y) +fit!(mach, rows=train) + +# Conformal Prediction: +Xtest = selectrows(X, first(test)) +ytest = y[first(test)] +predict(mach, Xtest)[1] ``` +The final predictions are set-valued. While the softmax output remains unchanged for the `SimpleInductiveClassifier`, the size of the prediction set depends on the chosen coverage rate, $(1-\alpha)$. ```{julia} -using ConformalPrediction -conf_model = conformal_model(model) +#| echo: false +#| output: true + +coverage = 1.0 +using Markdown +Markdown.parse(""" +When specifying a coverage rate very close to one, the prediction set will typically include many (in some cases all) of the possible labels. Below, for example, both classes are included in the prediction set when setting the coverage rate equal to ``(1-\\alpha)``=$coverage. This is intuitive, since high coverage quite literally requires that the true label is covered by the prediction set with high probability. +""") +``` + +```{julia} +#| output: true + +conf_model = conformal_model(model; coverage=coverage) +mach = machine(conf_model, X, y) +fit!(mach, rows=train) + +# Conformal Prediction: +Xtest = (x1=[1],x2=[0]) +predict(mach, Xtest)[1] +``` + +```{julia} +#| echo: false +#| output: true + +coverage = .1 +using Markdown +Markdown.parse(""" +Conversely, for low coverage rates, prediction sets can also be empty. For a choice of ``(1-\\alpha)``=$coverage, for example, the prediction set for our test sample is empty. This is a bit difficult to think about intuitively and I have not yet come across a satisfactory, intuitive interpretation.^[Any thoughts/comments welcome!] When the prediction set is empty, the `predict` call currently returns `missing`: +""") +``` + +```{julia} +#| output: true + +conf_model = conformal_model(model; coverage=coverage) +mach = machine(conf_model, X, y) +fit!(mach, rows=train) + +# Conformal Prediction: +predict(mach, Xtest)[1] +``` + +```{julia} +#| echo: false +using Plots + +function contourf_cp(mach::Machine, x1_range, x2_range; type=:set_size, kwargs...) + set_size = [] + proba = [] + for x2 in x2_range, x1 in x1_range + Xnew = (x1 = [x1], x2 = [x2]) + p̂ = predict(mach, Xnew)[1] + # Set size: + z = ismissing(p̂) ? 0 : sum(pdf.(p̂, p̂.decoder.classes) .> 0) + push!(set_size, z) + # Probability: + p = ismissing(p̂) ? p̂ : pdf.(p̂, 1) + push!(proba, p) + end + if type == :set_size + plt = contourf(x1_range, x2_range, set_size; clim=(0,2), c=cgrad(:blues, 3, categorical = true), kwargs...) + elseif type == :proba + plt = contourf(x1_range, x2_range, proba; c=:thermal, kwargs...) + end + return plt +end +``` + +@fig-anim should provide some more intuition as to what exactly is happening here. It illustrates the effect of the chosen coverage rate on the predicted softmax output and the set size in the two-dimensional feature space. Contours are overlayed with the moon data points (including test data). The two samples highlighted in red, $X_1$ and $X_2$, have been manually added for illustration purposes. Let's look at these one by one. + +Firstly, note that $X_1$ (red cross) falls into a region of the domain that is characterized by high predictive uncertainty. It sits right at the bottom-right corner of our class-zero moon 🌜 (orange), a region that is almost entirely enveloped by our class-one moon 🌛 (green). For low coverage rates the prediction set for $X_1$ is empty: on the left-hand side this is indicated by the missing contour for the softmax probability; on the right-hand side we can observe that the corresponding set size is indeed zero. For high coverage rates the prediction set includes both $y=0$ and $y=1$, indicative of the fact that the conformal classifier is uncertain about the true label. + +With respect to $X_2$, we observe that while also sitting on the fringe of our class-zero moon, this sample populates a region that is not fully enveloped by data points from the opposite class. In this region, the underlying atomic classifier can be expected to be more certain about its predictions, but still not highly confident. How is this reflected by our corresponding conformal prediction sets? + +```{julia} +#| code-fold: true + +Xtest_2 = (x1=[-0.5],x2=[0.25]) +cov_ = .9 +conf_model = conformal_model(model; coverage=cov_) mach = machine(conf_model, X, y) fit!(mach, rows=train) +p̂_2 = pdf(predict(mach, Xtest_2)[1], 0) ``` ```{julia} +#| echo: false #| output: true -rows = rand(test, 10) -Xtest = selectrows(X, rows) -ytest = y[rows] -predict(mach, Xtest) + +Markdown.parse(""" +Well, for low coverage rates (roughly ``<0.9``) the conformal prediction set does not include ``y=0``: the set size is zero (right panel). Only for higher coverage rates do we have ``C(X_2)=\\{0\\}``: the coverage rate is high enough to include ``y=0``, but the corresponding softmax probability is still fairly low. For example, for ``(1-\\alpha)=$(cov_)`` we have ``\\hat{p}(y=0|X_2)=$(p̂_2).`` +""") +``` + +These two examples illustrate an interesting point: for regions characterised by high predictive uncertainty, conformal prediction sets are typically empty (for low coverage) or large (for high coverage). While set-valued predictions may be something to get used to, this notion is overall intuitive. + +```{julia} +#| output: true +#| label: fig-anim +#| fig-cap: "The effect of the coverage rate on the conformal prediction set. Softmax probabilities are shown on the left. The size of the prediction set is shown on the right." +#| code-fold: true + +# Setup +coverages = range(0.75,1.0,length=5) +n = 100 +x1_range = range(extrema(X.x1)...,length=n) +x2_range = range(extrema(X.x2)...,length=n) + +anim = @animate for coverage in coverages + conf_model = conformal_model(model; coverage=coverage) + mach = machine(conf_model, X, y) + fit!(mach, rows=train) + p1 = contourf_cp(mach, x1_range, x2_range; type=:proba, title="Softmax", axis=nothing) + scatter!(p1, X.x1, X.x2, group=y, ms=2, msw=0, alpha=0.75) + scatter!(p1, Xtest.x1, Xtest.x2, ms=6, c=:red, label="X₁", shape=:cross, msw=6) + scatter!(p1, Xtest_2.x1, Xtest_2.x2, ms=6, c=:red, label="X₂", shape=:diamond, msw=6) + p2 = contourf_cp(mach, x1_range, x2_range; type=:set_size, title="Set size", axis=nothing) + scatter!(p2, X.x1, X.x2, group=y, ms=2, msw=0, alpha=0.75) + scatter!(p2, Xtest.x1, Xtest.x2, ms=6, c=:red, label="X₁", shape=:cross, msw=6) + scatter!(p2, Xtest_2.x1, Xtest_2.x2, ms=6, c=:red, label="X₂", shape=:diamond, msw=6) + plot(p1, p2, plot_title="(1-α)=$(round(coverage,digits=2))", size=(800,300)) +end + +gif(anim, fps=0.5) +``` + +```{julia} +#| echo: false +#| eval: false + +using Plots.PlotMeasures + +# Setup +coverages = range(0.75,1.0,length=25) +n = 100 +x1_range = range(extrema(X.x1)...,length=n) +x2_range = range(extrema(X.x2)...,length=n) +anim = @animate for coverage in coverages + conf_model = conformal_model(model; coverage=coverage) + mach = machine(conf_model, X, y) + fit!(mach, rows=train) + plt = contourf_cp(mach, x1_range, x2_range; type=:proba, axis=nothing, size=(500,500), background_color=:transparent, colorbar=false, margin=-1.5mm) + + # Annotations + + # First: + p̂ = predict(mach, Xtest)[1] + if ismissing(p̂) + z = "∅" + else + L = p̂.decoder.classes + set_contents = reduce((x,y) -> x * ", " * y, string.(L[pdf.(p̂, L) .> 0])) + z = "{$(set_contents)}" + end + ann_Xtest = (Xtest.x1, Xtest.x2, ("ŷ₁=$z", 20, :white)) + annotate!(plt, ann_Xtest) + + # Second + p̂ = predict(mach, Xtest_2)[1] + if ismissing(p̂) + z = "∅" + else + L = p̂.decoder.classes + set_contents = reduce((x,y) -> x * ", " * y, string.(L[pdf.(p̂, L) .> 0])) + z = "{$(set_contents)}" + end + ann_Xtest = (Xtest_2.x1, Xtest_2.x2, ("ŷ₂=$z", 20, :white)) + annotate!(plt, ann_Xtest) +end +gif(anim, "blog/posts/conformal-prediction/www/intro.gif", fps=5) + +anim = @animate for coverage in coverages + conf_model = conformal_model(model; coverage=coverage) + mach = machine(conf_model, X, y) + fit!(mach, rows=train) + plt = contourf_cp(mach, x1_range, x2_range; type=:proba, axis=nothing, size=(1200,400), background_color=:transparent, colorbar=false, margin=-1.5mm) + + # Annotations + + # First: + p̂ = predict(mach, Xtest)[1] + if ismissing(p̂) + z = "∅" + else + L = p̂.decoder.classes + set_contents = reduce((x,y) -> x * ", " * y, string.(L[pdf.(p̂, L) .> 0])) + z = "{$(set_contents)}" + end + ann_Xtest = (Xtest.x1, Xtest.x2, ("ŷ₁=$z", 20, :white)) + annotate!(plt, ann_Xtest) + + # Second + p̂ = predict(mach, Xtest_2)[1] + if ismissing(p̂) + z = "∅" + else + L = p̂.decoder.classes + set_contents = reduce((x,y) -> x * ", " * y, string.(L[pdf.(p̂, L) .> 0])) + z = "{$(set_contents)}" + end + ann_Xtest = (Xtest_2.x1, Xtest_2.x2, ("ŷ₂=$z", 20, :white)) + annotate!(plt, ann_Xtest) +end +gif(anim, "blog/posts/conformal-prediction/www/medium.gif", fps=5) ``` \ No newline at end of file diff --git a/docs/src/regression.md b/docs/src/regression.md new file mode 100644 index 0000000..0bce4e7 --- /dev/null +++ b/docs/src/regression.md @@ -0,0 +1,81 @@ + +# Regression + +``` @meta +CurrentModule = ConformalPrediction +``` + +This tutorial mostly replicates this [tutorial](https://mapie.readthedocs.io/en/latest/examples_regression/4-tutorials/plot_main-tutorial-regression.html#) from MAPIE. + +## Data + +We begin by generating some synthetic regression data below: + +``` julia +# Regression data: + +# Inputs: +N = 600 +xmax = 3.0 +using Distributions +d = Uniform(-xmax, xmax) +X = rand(d, N) +X = reshape(X, :, 1) + +# Outputs: +noise = 0.5 +fun(X) = X * sin(X) +ε = randn(N) .* noise +y = @.(fun(X)) + ε +using MLJ +train, test = partition(eachindex(y), 0.4, 0.4, shuffle=true) + +using Plots +scatter(X, y, label="Observed") +xrange = range(-xmax,xmax,length=N) +plot!(xrange, @.(fun(xrange)), lw=4, label="Ground truth", ls=:dash, colour=:black) +``` + +## Model + +To model this data we will use polynomial regression. There is currently no out-of-the-box support for polynomial feature transformations in `MLJ`, but it is easy enough to add a little helper function for this. Note how we define a linear pipeline `pipe` here. Since pipelines in `MLJ` are just models, we can use the generated object as an input to `conformal_model` below. + +``` julia +LinearRegressor = @load LinearRegressor pkg=MLJLinearModels +degree_polynomial = 10 +polynomial_features(X, degree::Int) = reduce(hcat, map(i -> X.^i, 1:degree)) +pipe = (X -> MLJ.table(polynomial_features(MLJ.matrix(X), degree_polynomial))) |> LinearRegressor() +``` + +Next, we conformalize our polynomial regressor using every available approach (except the Naive approach): + +``` julia +using ConformalPrediction +conformal_models = merge(values(available_models[:regression])...) +delete!(conformal_models, :naive) +# delete!(conformal_models, :jackknife) +results = Dict() +for _mod in keys(conformal_models) + conf_model = conformal_model(pipe; method=_mod, coverage=0.95) + mach = machine(conf_model, X, y) + fit!(mach, rows=train) + results[_mod] = mach +end +``` + +Finally, let us look at the resulting conformal predictions in each case. + +``` julia +using Plots +zoom = -3 +xrange = range(-xmax+zoom,xmax-zoom,length=N) +plt_list = [] + +for (_mod, mach) in results + plt = plot(mach.model, mach.fitresult, X, y, zoom=zoom, title=_mod) + plot!(plt, xrange, @.(fun(xrange)), lw=1, ls=:dash, colour=:black, label="Ground truth") + push!(plt_list, plt) +end + +plot(plt_list..., size=(1600,1000)) +``` diff --git a/docs/src/regression.qmd b/docs/src/regression.qmd index 121a873..3525755 100644 --- a/docs/src/regression.qmd +++ b/docs/src/regression.qmd @@ -11,15 +11,25 @@ using Plots theme(:wong) ``` +This tutorial mostly replicates this [tutorial](https://mapie.readthedocs.io/en/latest/examples_regression/4-tutorials/plot_main-tutorial-regression.html#) from MAPIE. + +## Data + +We begin by generating some synthetic regression data below: + ```{julia} +#| label: fig-data +#| fig-cap: "Synthetic data." + # Regression data: # Inputs: N = 600 -xmax = 5.0 +xmax = 3.0 using Distributions d = Uniform(-xmax, xmax) X = rand(d, N) +X = reshape(X, :, 1) # Outputs: noise = 0.5 @@ -32,25 +42,52 @@ train, test = partition(eachindex(y), 0.4, 0.4, shuffle=true) using Plots scatter(X, y, label="Observed") xrange = range(-xmax,xmax,length=N) -plot!(xrange, @.(fun(xrange)), lw=4, label="Ground truth") +plot!(xrange, @.(fun(xrange)), lw=4, label="Ground truth", ls=:dash, colour=:black) ``` +## Model + +To model this data we will use polynomial regression. There is currently no out-of-the-box support for polynomial feature transformations in `MLJ`, but it is easy enough to add a little helper function for this. Note how we define a linear pipeline `pipe` here. Since pipelines in `MLJ` are just models, we can use the generated object as an input to `conformal_model` below. + ```{julia} -EvoTreeRegressor = @load EvoTreeRegressor pkg=EvoTrees -model = EvoTreeRegressor(nrounds=50) +LinearRegressor = @load LinearRegressor pkg=MLJLinearModels +degree_polynomial = 10 +polynomial_features(X, degree::Int) = reduce(hcat, map(i -> X.^i, 1:degree)) +pipe = (X -> MLJ.table(polynomial_features(MLJ.matrix(X), degree_polynomial))) |> LinearRegressor() ``` +Next, we conformalize our polynomial regressor using every available approach (except the Naive approach): + ```{julia} using ConformalPrediction -conf_model = conformal_model(model) -X = reshape(X, :, 1) -Xtab = MLJ.table(X) -mach = machine(conf_model, Xtab, y) -fit!(mach, rows=train) +conformal_models = merge(values(available_models[:regression])...) +delete!(conformal_models, :naive) +# delete!(conformal_models, :jackknife) +results = Dict() +for _mod in keys(conformal_models) + conf_model = conformal_model(pipe; method=_mod, coverage=0.95) + mach = machine(conf_model, X, y) + fit!(mach, rows=train) + results[_mod] = mach +end ``` +Finally, let us look at the resulting conformal predictions in each case. + ```{julia} +#| label: fig-cp +#| fig-cap: "Conformal prediction regions." + using Plots -zoom = -5 -plot(mach.model, mach.fitresult, X, y, zoom=zoom) +zoom = -3 +xrange = range(-xmax+zoom,xmax-zoom,length=N) +plt_list = [] + +for (_mod, mach) in results + plt = plot(mach.model, mach.fitresult, X, y, zoom=zoom, title=_mod) + plot!(plt, xrange, @.(fun(xrange)), lw=1, ls=:dash, colour=:black, label="Ground truth") + push!(plt_list, plt) +end + +plot(plt_list..., size=(1600,1000)) ``` diff --git a/src/ConformalModels/plotting.jl b/src/ConformalModels/plotting.jl index c678132..f429c5f 100644 --- a/src/ConformalModels/plotting.jl +++ b/src/ConformalModels/plotting.jl @@ -3,7 +3,7 @@ using Plots function Plots.plot( conf_model::ConformalModel,fitresult,X,y; target::Union{Nothing,Real}=nothing, - colorbar=true,title=nothing,length_out=50,zoom=-1,xlims=nothing,ylims=nothing,linewidth=0.1,lw=4, + colorbar=true,title=nothing,length_out=50,zoom=-1,xlims=nothing,ylims=nothing,linewidth=0.1,lw=4,train_lab=nothing,hat_lab=nothing, kwargs... ) @@ -37,7 +37,8 @@ function Plots.plot( title = isnothing(title) ? "" : title # Plot: - scatter(vec(X), vec(y), label="ytrain", xlim=xlims, ylim=ylims, lw=lw, title=title; kwargs...) + _lab = isnothing(train_lab) ? "Observed" : train_lab + scatter(vec(X), vec(y), label=_lab, xlim=xlims, ylim=ylims, lw=lw, title=title; kwargs...) _x = reshape([x for x in x_range],:,1) _x = MLJ.table(_x) MMI.reformat(conf_model.model,_x) @@ -45,7 +46,8 @@ function Plots.plot( lb, ub = eachcol(reduce(vcat, map(y -> permutedims(collect(y)), ŷ))) ymid = (lb .+ ub)./2 yerror = (ub .- lb)./2 - plot!(x_range, ymid, label="yhat", ribbon = (yerror, yerror), lw=lw; kwargs...) + _lab = isnothing(hat_lab) ? "Predicted" : hat_lab + plot!(x_range, ymid, label=_lab, ribbon = (yerror, yerror), lw=lw; kwargs...) else diff --git a/src/ConformalModels/transductive_classification.jl b/src/ConformalModels/transductive_classification.jl index e982d7d..b9480ab 100644 --- a/src/ConformalModels/transductive_classification.jl +++ b/src/ConformalModels/transductive_classification.jl @@ -25,7 +25,9 @@ A typical choice for the heuristic function is ``h(\hat\mu(X_i), Y_i)=1-\hat\mu( function MMI.fit(conf_model::NaiveClassifier, verbosity, X, y) # Setup: - Xtrain, ytrain = MMI.reformat(conf_model.model, X, y) + Xtrain = selectrows(X, :) + ytrain = y[:] + Xtrain, ytrain = MMI.reformat(conf_model.model, Xtrain, ytrain) # Training: fitresult, cache, report = MMI.fit(conf_model.model, verbosity, Xtrain, ytrain) diff --git a/src/ConformalModels/transductive_regression.jl b/src/ConformalModels/transductive_regression.jl index a0efd21..230b923 100644 --- a/src/ConformalModels/transductive_regression.jl +++ b/src/ConformalModels/transductive_regression.jl @@ -30,7 +30,9 @@ A typical choice for the heuristic function is ``h(\hat\mu(X_i),Y_i)=|Y_i-\hat\m function MMI.fit(conf_model::NaiveRegressor, verbosity, X, y) # Setup: - Xtrain, ytrain = MMI.reformat(conf_model.model, X, y) + Xtrain = selectrows(X, :) + ytrain = y[:] + Xtrain, ytrain = MMI.reformat(conf_model.model, Xtrain, ytrain) # Training: fitresult, cache, report = MMI.fit(conf_model.model, verbosity, Xtrain, ytrain) @@ -92,7 +94,9 @@ where ``\hat\mu_{-i}(X_i)`` denotes the leave-one-out prediction for ``X_i``. In function MMI.fit(conf_model::JackknifeRegressor, verbosity, X, y) # Setup: - Xtrain, ytrain = MMI.reformat(conf_model.model, X, y) + Xtrain = selectrows(X, :) + ytrain = y[:] + Xtrain, ytrain = MMI.reformat(conf_model.model, Xtrain, ytrain) # Training: fitresult, cache, report = MMI.fit(conf_model.model, verbosity, Xtrain, ytrain) diff --git a/tmp.gif b/tmp.gif new file mode 100644 index 0000000000000000000000000000000000000000..a7dfc81d542a237e606f46dae051542bfbc11bbf GIT binary patch literal 86650 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 literal 0 HcmV?d00001 From 0c218b905eca803f770cd2658ac9a2a803275857 Mon Sep 17 00:00:00 2001 From: pat-alt Date: Wed, 30 Nov 2022 16:36:01 +0100 Subject: [PATCH 06/10] bleh --- .../classification/execute-results/md.json | 2 +- .../docs/src/index/execute-results/md.json | 2 +- .../docs/src/intro/execute-results/md.json | 4 +- _quarto.yml | 6 +- docs/{ => src}/_metadata.yml | 3 +- docs/src/classification.ipynb | 670 ++++++++++++++++++ docs/src/classification.md | 4 +- .../figure-commonmark/mermaid-figure-1.png | Bin 228036 -> 524329 bytes docs/src/index.md | 27 +- docs/src/intro.md | 82 ++- docs/src/reference.commonmark.md | 35 + test/Manifest.toml | 464 +++++++++++- test/Project.toml | 1 + test/classification.jl | 2 +- 14 files changed, 1247 insertions(+), 55 deletions(-) rename docs/{ => src}/_metadata.yml (51%) create mode 100644 docs/src/classification.ipynb create mode 100644 docs/src/reference.commonmark.md diff --git a/_freeze/docs/src/classification/execute-results/md.json b/_freeze/docs/src/classification/execute-results/md.json index 5f63a7e..14874fe 100644 --- a/_freeze/docs/src/classification/execute-results/md.json +++ b/_freeze/docs/src/classification/execute-results/md.json @@ -1,7 +1,7 @@ { "hash": "442ff2462bc1aca2e32bbac33deb49a1", "result": { - "markdown": "# Classification \n\n```@meta\nCurrentModule = ConformalPrediction\n```\n\n\n\nThis tutorial is based in parts on this [blog post](https://www.paltmeyer.com/blog/posts/conformal-prediction/).\n\n### Split Conformal Classification {#sec-scp}\n\nWe consider a simple binary classification problem. Let $(X_i, Y_i), \\ i=1,...,n$ denote our feature-label pairs and let $\\mu: \\mathcal{X} \\mapsto \\mathcal{Y}$ denote the mapping from features to labels. For illustration purposes we will use the moons dataset 🌙. Using [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) we first generate the data and split into into a training and test set:\n\n::: {.cell execution_count=2}\n``` {.julia .cell-code}\nusing MLJ\nusing Random\nRandom.seed!(123)\n\n# Data:\nX, y = make_moons(500; noise=0.15)\ntrain, test = partition(eachindex(y), 0.8, shuffle=true)\n```\n:::\n\n\nHere we will use a specific case of CP called *split conformal prediction* which can then be summarized as follows:^[In other places split conformal prediction is sometimes referred to as *inductive* conformal prediction.]\n\n1. Partition the training into a proper training set and a separate calibration set: $\\mathcal{D}_n=\\mathcal{D}^{\\text{train}} \\cup \\mathcal{D}^{\\text{cali}}$.\n2. Train the machine learning model on the proper training set: $\\hat\\mu_{i \\in \\mathcal{D}^{\\text{train}}}(X_i,Y_i)$.\n3. Compute nonconformity scores, $\\mathcal{S}$, using the calibration data $\\mathcal{D}^{\\text{cali}}$ and the fitted model $\\hat\\mu_{i \\in \\mathcal{D}^{\\text{train}}}$. \n4. For a user-specified desired coverage ratio $(1-\\alpha)$ compute the corresponding quantile, $\\hat{q}$, of the empirical distribution of nonconformity scores, $\\mathcal{S}$.\n5. For the given quantile and test sample $X_{\\text{test}}$, form the corresponding conformal prediction set: \n\n$$\nC(X_{\\text{test}})=\\{y:s(X_{\\text{test}},y) \\le \\hat{q}\\}\n$$ {#eq-set}\n\nThis is the default procedure used for classification and regression in [`ConformalPrediction.jl`](https://github.com/pat-alt/ConformalPrediction.jl). \n\nNow let's take this to our 🌙 data. To illustrate the package functionality we will demonstrate the envisioned workflow. We first define our atomic machine learning model following standard [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) conventions. Using [`ConformalPrediction.jl`](https://github.com/pat-alt/ConformalPrediction.jl) we then wrap our atomic model in a conformal model using the standard API call `conformal_model(model::Supervised; kwargs...)`. To train and predict from our conformal model we can then rely on the conventional [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) procedure again. In particular, we wrap our conformal model in data (turning it into a machine) and then fit it on the training set. Finally, we use our machine to predict the label for a new test sample `Xtest`:\n\n::: {.cell execution_count=3}\n``` {.julia .cell-code}\n# Model:\nKNNClassifier = @load KNNClassifier pkg=NearestNeighborModels\nmodel = KNNClassifier(;K=50) \n\n# Training:\nusing ConformalPrediction\nconf_model = conformal_model(model; coverage=.9)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n\n# Conformal Prediction:\nXtest = selectrows(X, first(test))\nytest = y[first(test)]\npredict(mach, Xtest)[1]\n```\n\n::: {.cell-output .cell-output-stdout}\n```\nimport NearestNeighborModels\n```\n:::\n\n::: {.cell-output .cell-output-stdout}\n```\n ✔\n```\n:::\n\n::: {.cell-output .cell-output-display execution_count=8}\n```\n UnivariateFinite{Multiclass{2}} \n ┌ ┐ \n 0 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.94 \n └ ┘ \n```\n:::\n:::\n\n\nThe final predictions are set-valued. While the softmax output remains unchanged for the `SimpleInductiveClassifier`, the size of the prediction set depends on the chosen coverage rate, $(1-\\alpha)$. \n\n::: {.cell execution_count=4}\n\n::: {.cell-output .cell-output-display execution_count=9}\nWhen specifying a coverage rate very close to one, the prediction set will typically include many (in some cases all) of the possible labels. Below, for example, both classes are included in the prediction set when setting the coverage rate equal to $(1-\\alpha)$=1.0. This is intuitive, since high coverage quite literally requires that the true label is covered by the prediction set with high probability.\n\n:::\n:::\n\n\n::: {.cell execution_count=5}\n``` {.julia .cell-code}\nconf_model = conformal_model(model; coverage=coverage)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n\n# Conformal Prediction:\nXtest = (x1=[1],x2=[0])\npredict(mach, Xtest)[1]\n```\n\n::: {.cell-output .cell-output-display execution_count=10}\n```\n UnivariateFinite{Multiclass{2}} \n ┌ ┐ \n 0 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.5 \n 1 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.5 \n └ ┘ \n```\n:::\n:::\n\n\n::: {.cell execution_count=6}\n\n::: {.cell-output .cell-output-display execution_count=11}\nConversely, for low coverage rates, prediction sets can also be empty. For a choice of $(1-\\alpha)$=0.1, for example, the prediction set for our test sample is empty. This is a bit difficult to think about intuitively and I have not yet come across a satisfactory, intuitive interpretation.^[Any thoughts/comments welcome!] When the prediction set is empty, the `predict` call currently returns `missing`:\n\n:::\n:::\n\n\n::: {.cell execution_count=7}\n``` {.julia .cell-code}\nconf_model = conformal_model(model; coverage=coverage)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n\n# Conformal Prediction:\npredict(mach, Xtest)[1]\n```\n\n::: {.cell-output .cell-output-display execution_count=12}\n```\nmissing\n```\n:::\n:::\n\n\n\n\n@fig-anim should provide some more intuition as to what exactly is happening here. It illustrates the effect of the chosen coverage rate on the predicted softmax output and the set size in the two-dimensional feature space. Contours are overlayed with the moon data points (including test data). The two samples highlighted in red, $X_1$ and $X_2$, have been manually added for illustration purposes. Let's look at these one by one.\n\nFirstly, note that $X_1$ (red cross) falls into a region of the domain that is characterized by high predictive uncertainty. It sits right at the bottom-right corner of our class-zero moon 🌜 (orange), a region that is almost entirely enveloped by our class-one moon 🌛 (green). For low coverage rates the prediction set for $X_1$ is empty: on the left-hand side this is indicated by the missing contour for the softmax probability; on the right-hand side we can observe that the corresponding set size is indeed zero. For high coverage rates the prediction set includes both $y=0$ and $y=1$, indicative of the fact that the conformal classifier is uncertain about the true label.\n\nWith respect to $X_2$, we observe that while also sitting on the fringe of our class-zero moon, this sample populates a region that is not fully enveloped by data points from the opposite class. In this region, the underlying atomic classifier can be expected to be more certain about its predictions, but still not highly confident. How is this reflected by our corresponding conformal prediction sets? \n\n::: {.cell execution_count=9}\n``` {.julia .cell-code code-fold=\"true\"}\nXtest_2 = (x1=[-0.5],x2=[0.25])\ncov_ = .9\nconf_model = conformal_model(model; coverage=cov_)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\np̂_2 = pdf(predict(mach, Xtest_2)[1], 0)\n```\n:::\n\n\n::: {.cell execution_count=10}\n\n::: {.cell-output .cell-output-display execution_count=15}\nWell, for low coverage rates (roughly $<0.9$) the conformal prediction set does not include $y=0$: the set size is zero (right panel). Only for higher coverage rates do we have $C(X_2)=\\{0\\}$: the coverage rate is high enough to include $y=0$, but the corresponding softmax probability is still fairly low. For example, for $(1-\\alpha)=0.9$ we have $\\hat{p}(y=0|X_2)=0.72.$\n\n:::\n:::\n\n\nThese two examples illustrate an interesting point: for regions characterised by high predictive uncertainty, conformal prediction sets are typically empty (for low coverage) or large (for high coverage). While set-valued predictions may be something to get used to, this notion is overall intuitive. \n\n::: {.cell execution_count=11}\n``` {.julia .cell-code code-fold=\"true\"}\n# Setup\ncoverages = range(0.75,1.0,length=5)\nn = 100\nx1_range = range(extrema(X.x1)...,length=n)\nx2_range = range(extrema(X.x2)...,length=n)\n\nanim = @animate for coverage in coverages\n conf_model = conformal_model(model; coverage=coverage)\n mach = machine(conf_model, X, y)\n fit!(mach, rows=train)\n p1 = contourf_cp(mach, x1_range, x2_range; type=:proba, title=\"Softmax\", axis=nothing)\n scatter!(p1, X.x1, X.x2, group=y, ms=2, msw=0, alpha=0.75)\n scatter!(p1, Xtest.x1, Xtest.x2, ms=6, c=:red, label=\"X₁\", shape=:cross, msw=6)\n scatter!(p1, Xtest_2.x1, Xtest_2.x2, ms=6, c=:red, label=\"X₂\", shape=:diamond, msw=6)\n p2 = contourf_cp(mach, x1_range, x2_range; type=:set_size, title=\"Set size\", axis=nothing)\n scatter!(p2, X.x1, X.x2, group=y, ms=2, msw=0, alpha=0.75)\n scatter!(p2, Xtest.x1, Xtest.x2, ms=6, c=:red, label=\"X₁\", shape=:cross, msw=6)\n scatter!(p2, Xtest_2.x1, Xtest_2.x2, ms=6, c=:red, label=\"X₂\", shape=:diamond, msw=6)\n plot(p1, p2, plot_title=\"(1-α)=$(round(coverage,digits=2))\", size=(800,300))\nend\n\ngif(anim, fps=0.5)\n```\n\n::: {#fig-anim .cell-output .cell-output-display execution_count=16}\n```{=html}\n\n```\n\nThe effect of the coverage rate on the conformal prediction set. Softmax probabilities are shown on the left. The size of the prediction set is shown on the right.\n:::\n:::\n\n\n\n\n", + "markdown": "# Classification \n\n```@meta\nCurrentModule = ConformalPrediction\n```\n\n\n\nThis tutorial is based in parts on this [blog post](https://www.paltmeyer.com/blog/posts/conformal-prediction/).\n\n### Split Conformal Classification {#sec-scp}\n\nWe consider a simple binary classification problem. Let $(X_i, Y_i), \\ i=1,...,n$ denote our feature-label pairs and let $\\mu: \\mathcal{X} \\mapsto \\mathcal{Y}$ denote the mapping from features to labels. For illustration purposes we will use the moons dataset 🌙. Using [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) we first generate the data and split into into a training and test set:\n\n::: {.cell execution_count=2}\n``` {.julia .cell-code}\nusing MLJ\nusing Random\nRandom.seed!(123)\n\n# Data:\nX, y = make_moons(500; noise=0.15)\ntrain, test = partition(eachindex(y), 0.8, shuffle=true)\n```\n:::\n\n\nHere we will use a specific case of CP called *split conformal prediction* which can then be summarized as follows:^[In other places split conformal prediction is sometimes referred to as *inductive* conformal prediction.]\n\n1. Partition the training into a proper training set and a separate calibration set: $\\mathcal{D}_n=\\mathcal{D}^{\\text{train}} \\cup \\mathcal{D}^{\\text{cali}}$.\n2. Train the machine learning model on the proper training set: $\\hat\\mu_{i \\in \\mathcal{D}^{\\text{train}}}(X_i,Y_i)$.\n3. Compute nonconformity scores, $\\mathcal{S}$, using the calibration data $\\mathcal{D}^{\\text{cali}}$ and the fitted model $\\hat\\mu_{i \\in \\mathcal{D}^{\\text{train}}}$. \n4. For a user-specified desired coverage ratio $(1-\\alpha)$ compute the corresponding quantile, $\\hat{q}$, of the empirical distribution of nonconformity scores, $\\mathcal{S}$.\n5. For the given quantile and test sample $X_{\\text{test}}$, form the corresponding conformal prediction set: \n\n$$\nC(X_{\\text{test}})=\\{y:s(X_{\\text{test}},y) \\le \\hat{q}\\}\n$$ {#eq-set}\n\nThis is the default procedure used for classification and regression in [`ConformalPrediction.jl`](https://github.com/pat-alt/ConformalPrediction.jl). \n\nNow let's take this to our 🌙 data. To illustrate the package functionality we will demonstrate the envisioned workflow. We first define our atomic machine learning model following standard [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) conventions. Using [`ConformalPrediction.jl`](https://github.com/pat-alt/ConformalPrediction.jl) we then wrap our atomic model in a conformal model using the standard API call `conformal_model(model::Supervised; kwargs...)`. To train and predict from our conformal model we can then rely on the conventional [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) procedure again. In particular, we wrap our conformal model in data (turning it into a machine) and then fit it on the training set. Finally, we use our machine to predict the label for a new test sample `Xtest`:\n\n::: {.cell execution_count=3}\n``` {.julia .cell-code}\n# Model:\nKNNClassifier = @load KNNClassifier pkg=NearestNeighborModels\nmodel = KNNClassifier(;K=50) \n\n# Training:\nusing ConformalPrediction\nconf_model = conformal_model(model; coverage=.9)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n\n# Conformal Prediction:\nXtest = selectrows(X, first(test))\nytest = y[first(test)]\npredict(mach, Xtest)[1]\n```\n\n::: {.cell-output .cell-output-stdout}\n```\nimport NearestNeighborModels ✔\n```\n:::\n\n::: {.cell-output .cell-output-stdout}\n```\n\n```\n:::\n\n::: {.cell-output .cell-output-display execution_count=4}\n```\n UnivariateFinite{Multiclass{2}} \n ┌ ┐ \n 0 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.94 \n └ ┘ \n```\n:::\n:::\n\n\nThe final predictions are set-valued. While the softmax output remains unchanged for the `SimpleInductiveClassifier`, the size of the prediction set depends on the chosen coverage rate, $(1-\\alpha)$. \n\n::: {.cell execution_count=4}\n\n::: {.cell-output .cell-output-display execution_count=5}\nWhen specifying a coverage rate very close to one, the prediction set will typically include many (in some cases all) of the possible labels. Below, for example, both classes are included in the prediction set when setting the coverage rate equal to $(1-\\alpha)$=1.0. This is intuitive, since high coverage quite literally requires that the true label is covered by the prediction set with high probability.\n\n:::\n:::\n\n\n::: {.cell execution_count=5}\n``` {.julia .cell-code}\nconf_model = conformal_model(model; coverage=coverage)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n\n# Conformal Prediction:\nXtest = (x1=[1],x2=[0])\npredict(mach, Xtest)[1]\n```\n\n::: {.cell-output .cell-output-display execution_count=6}\n```\n UnivariateFinite{Multiclass{2}} \n ┌ ┐ \n 0 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.5 \n 1 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.5 \n └ ┘ \n```\n:::\n:::\n\n\n::: {.cell execution_count=6}\n\n::: {.cell-output .cell-output-display execution_count=7}\nConversely, for low coverage rates, prediction sets can also be empty. For a choice of $(1-\\alpha)$=0.1, for example, the prediction set for our test sample is empty. This is a bit difficult to think about intuitively and I have not yet come across a satisfactory, intuitive interpretation.^[Any thoughts/comments welcome!] When the prediction set is empty, the `predict` call currently returns `missing`:\n\n:::\n:::\n\n\n::: {.cell execution_count=7}\n``` {.julia .cell-code}\nconf_model = conformal_model(model; coverage=coverage)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n\n# Conformal Prediction:\npredict(mach, Xtest)[1]\n```\n\n::: {.cell-output .cell-output-display execution_count=8}\n```\nmissing\n```\n:::\n:::\n\n\n\n\n@fig-anim should provide some more intuition as to what exactly is happening here. It illustrates the effect of the chosen coverage rate on the predicted softmax output and the set size in the two-dimensional feature space. Contours are overlayed with the moon data points (including test data). The two samples highlighted in red, $X_1$ and $X_2$, have been manually added for illustration purposes. Let's look at these one by one.\n\nFirstly, note that $X_1$ (red cross) falls into a region of the domain that is characterized by high predictive uncertainty. It sits right at the bottom-right corner of our class-zero moon 🌜 (orange), a region that is almost entirely enveloped by our class-one moon 🌛 (green). For low coverage rates the prediction set for $X_1$ is empty: on the left-hand side this is indicated by the missing contour for the softmax probability; on the right-hand side we can observe that the corresponding set size is indeed zero. For high coverage rates the prediction set includes both $y=0$ and $y=1$, indicative of the fact that the conformal classifier is uncertain about the true label.\n\nWith respect to $X_2$, we observe that while also sitting on the fringe of our class-zero moon, this sample populates a region that is not fully enveloped by data points from the opposite class. In this region, the underlying atomic classifier can be expected to be more certain about its predictions, but still not highly confident. How is this reflected by our corresponding conformal prediction sets? \n\n::: {.cell execution_count=9}\n``` {.julia .cell-code code-fold=\"true\"}\nXtest_2 = (x1=[-0.5],x2=[0.25])\ncov_ = .9\nconf_model = conformal_model(model; coverage=cov_)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\np̂_2 = pdf(predict(mach, Xtest_2)[1], 0)\n```\n:::\n\n\n::: {.cell execution_count=10}\n\n::: {.cell-output .cell-output-display execution_count=11}\nWell, for low coverage rates (roughly $<0.9$) the conformal prediction set does not include $y=0$: the set size is zero (right panel). Only for higher coverage rates do we have $C(X_2)=\\{0\\}$: the coverage rate is high enough to include $y=0$, but the corresponding softmax probability is still fairly low. For example, for $(1-\\alpha)=0.9$ we have $\\hat{p}(y=0|X_2)=0.72.$\n\n:::\n:::\n\n\nThese two examples illustrate an interesting point: for regions characterised by high predictive uncertainty, conformal prediction sets are typically empty (for low coverage) or large (for high coverage). While set-valued predictions may be something to get used to, this notion is overall intuitive. \n\n::: {.cell execution_count=11}\n``` {.julia .cell-code code-fold=\"true\"}\n# Setup\ncoverages = range(0.75,1.0,length=5)\nn = 100\nx1_range = range(extrema(X.x1)...,length=n)\nx2_range = range(extrema(X.x2)...,length=n)\n\nanim = @animate for coverage in coverages\n conf_model = conformal_model(model; coverage=coverage)\n mach = machine(conf_model, X, y)\n fit!(mach, rows=train)\n p1 = contourf_cp(mach, x1_range, x2_range; type=:proba, title=\"Softmax\", axis=nothing)\n scatter!(p1, X.x1, X.x2, group=y, ms=2, msw=0, alpha=0.75)\n scatter!(p1, Xtest.x1, Xtest.x2, ms=6, c=:red, label=\"X₁\", shape=:cross, msw=6)\n scatter!(p1, Xtest_2.x1, Xtest_2.x2, ms=6, c=:red, label=\"X₂\", shape=:diamond, msw=6)\n p2 = contourf_cp(mach, x1_range, x2_range; type=:set_size, title=\"Set size\", axis=nothing)\n scatter!(p2, X.x1, X.x2, group=y, ms=2, msw=0, alpha=0.75)\n scatter!(p2, Xtest.x1, Xtest.x2, ms=6, c=:red, label=\"X₁\", shape=:cross, msw=6)\n scatter!(p2, Xtest_2.x1, Xtest_2.x2, ms=6, c=:red, label=\"X₂\", shape=:diamond, msw=6)\n plot(p1, p2, plot_title=\"(1-α)=$(round(coverage,digits=2))\", size=(800,300))\nend\n\ngif(anim, fps=0.5)\n```\n\n::: {#fig-anim .cell-output .cell-output-display execution_count=12}\n```{=html}\n\n```\n\nThe effect of the coverage rate on the conformal prediction set. Softmax probabilities are shown on the left. The size of the prediction set is shown on the right.\n:::\n:::\n\n\n\n\n", "supporting": [ "classification_files" ], diff --git a/_freeze/docs/src/index/execute-results/md.json b/_freeze/docs/src/index/execute-results/md.json index 03a9018..3c0ad8d 100644 --- a/_freeze/docs/src/index/execute-results/md.json +++ b/_freeze/docs/src/index/execute-results/md.json @@ -1,7 +1,7 @@ { "hash": "c56dcfed5fce5fece3f8dd90b08af0bd", "result": { - "markdown": "```@meta\nCurrentModule = ConformalPrediction\n```\n\n# ConformalPrediction\n\nDocumentation for [ConformalPrediction.jl](https://github.com/pat-alt/ConformalPrediction.jl).\n\n\n\n`ConformalPrediction.jl` is a package for Uncertainty Quantification (UQ) through Conformal Prediction (CP) in Julia. It is designed to work with supervised models trained in [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/) @blaom2020mlj. Conformal Prediction is distribution-free, easy-to-understand, easy-to-use and model-agnostic. \n\n# 📖 Background\n\nConformal Prediction is a scalable frequentist approach to uncertainty quantification and coverage control. It promises to be an easy-to-understand, distribution-free and model-agnostic way to generate statistically rigorous uncertainty estimates. Interestingly, it can even be used to complement Bayesian methods.\n\nThe animation below is lifted from a small blog post that introduces the topic and the package ([[TDS](https://towardsdatascience.com/conformal-prediction-in-julia-351b81309e30)], [[Quarto](https://www.paltmeyer.com/blog/posts/conformal-prediction/#fig-anim)]). It shows conformal prediction sets for two different samples and changing coverage rates. Standard conformal classifiers produce set-valued predictions: for ambiguous samples these sets are typically large (for high coverage) or empty (for low coverage).\n\n![Conformal Prediction in action: Prediction sets for two different samples and changing coverage rates. As coverage grows, so does the size of the prediction sets.](https://raw.githubusercontent.com/pat-alt/blog/main/posts/conformal-prediction/www/medium.gif)\n\n## 🚩 Installation \n\nYou can install the latest stable release from the general registry:\n\n```{.julia}\nusing Pkg\nPkg.add(\"ConformalPrediction\")\n```\n\nThe development version can be installed as follows:\n\n```{.julia}\nusing Pkg\nPkg.add(url=\"https://github.com/pat-alt/ConformalPrediction.jl\")\n```\n\n## 🔁 Status \n\nThis package is in its early stages of development and therefore still subject to changes to the core architecture and API. The following CP approaches have been implemented in the development version:\n\n**Regression**:\n\n- Inductive \n- Naive Transductive \n- Jackknife \n- Jackknife+ \n- Jackknife-minmax\n- CV+\n- CV-minmax\n\n**Classification**:\n\n- Inductive (LABEL [@sadinle2019least])\n- Adaptive Inductive\n\nThe package has been tested for the following supervised models offered by [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/).\n\n**Regression**:\n\n::: {.cell execution_count=2}\n``` {.julia .cell-code}\nusing ConformalPrediction\nkeys(tested_atomic_models[:regression])\n```\n\n::: {.cell-output .cell-output-display execution_count=12}\n```\nKeySet for a Dict{Symbol, Expr} with 4 entries. Keys:\n :nearest_neighbor\n :evo_tree\n :light_gbm\n :decision_tree\n```\n:::\n:::\n\n\n**Classification**:\n\n::: {.cell execution_count=3}\n``` {.julia .cell-code}\nkeys(tested_atomic_models[:classification])\n```\n\n::: {.cell-output .cell-output-display execution_count=13}\n```\nKeySet for a Dict{Symbol, Expr} with 4 entries. Keys:\n :nearest_neighbor\n :evo_tree\n :light_gbm\n :decision_tree\n```\n:::\n:::\n\n\n## 🔍 Usage Example \n\nTo illustrate the intended use of the package, let's have a quick look at a simple regression problem. Using [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/) we first generate some synthetic data and then determine indices for our training, calibration and test data:\n\n::: {.cell execution_count=4}\n``` {.julia .cell-code}\nusing MLJ\nX, y = MLJ.make_regression(1000, 2)\ntrain, test = partition(eachindex(y), 0.4, 0.4)\n```\n:::\n\n\nWe then import a decision tree ([`EvoTrees.jl`](https://github.com/Evovest/EvoTrees.jl)) following the standard [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/) procedure.\n\n::: {.cell execution_count=5}\n``` {.julia .cell-code}\nEvoTreeRegressor = @load EvoTreeRegressor pkg=EvoTrees\nmodel = EvoTreeRegressor() \n```\n:::\n\n\nTo turn our conventional model into a conformal model, we just need to declare it as such by using `conformal_model` wrapper function. The generated conformal model instance can wrapped in data to create a *machine*. Finally, we proceed by fitting the machine on training data using the generic `fit!` method:\n\n::: {.cell execution_count=6}\n``` {.julia .cell-code}\nusing ConformalPrediction\nconf_model = conformal_model(model)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n```\n:::\n\n\nPredictions can then be computed using the generic `predict` method. The code below produces predictions for the first `n` samples. Each tuple contains the lower and upper bound for the prediction interval.\n\n::: {.cell execution_count=7}\n``` {.julia .cell-code}\nn = 10\nXtest = selectrows(X, first(test,n))\nytest = y[first(test,n)]\npredict(mach, Xtest)\n```\n\n::: {.cell-output .cell-output-display execution_count=17}\n```\n╭─────────────────────────────────────────────────────────────────╮\n│ │\n│ (1) ([0.14395897640483468], [1.5537237281612537]) │\n│ (2) ([-0.539687877793372], [0.8700768739630471]) │\n│ (3) ([-0.46442052745067525], [0.9453442243057439]) │\n│ (4) ([0.010529843675146089], [1.420294595431565]) │\n│ (5) ([0.07301045762431613], [1.4827752093807351]) │\n│ (6) ([-0.012020120998203487], [1.3977446307582158]) │\n│ (7) ([0.5297045560243977], [1.9394693077808167]) │\n│ (8) ([-0.46442052745067525], [0.9453442243057439]) │\n│ (9) ([-0.09600489213468855], [1.3137598596217306]) │\n│ (10) ([0.010529843675146089], [1.420294595431565]) │\n│ │\n│ │\n╰──────────────────────────────────────────────────── 10 items ───╯\n```\n:::\n:::\n\n\n## 🛠 Contribute \n\nContributions are welcome! Please follow the [SciML ColPrac guide](https://github.com/SciML/ColPrac).\n\n## 🎓 References \n\n", + "markdown": "```@meta\nCurrentModule = ConformalPrediction\n```\n\n# ConformalPrediction\n\nDocumentation for [ConformalPrediction.jl](https://github.com/pat-alt/ConformalPrediction.jl).\n\n\n\n`ConformalPrediction.jl` is a package for Uncertainty Quantification (UQ) through Conformal Prediction (CP) in Julia. It is designed to work with supervised models trained in [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/) @blaom2020mlj. Conformal Prediction is distribution-free, easy-to-understand, easy-to-use and model-agnostic. \n\n# 📖 Background\n\nConformal Prediction is a scalable frequentist approach to uncertainty quantification and coverage control. It promises to be an easy-to-understand, distribution-free and model-agnostic way to generate statistically rigorous uncertainty estimates. Interestingly, it can even be used to complement Bayesian methods.\n\nThe animation below is lifted from a small blog post that introduces the topic and the package ([[TDS](https://towardsdatascience.com/conformal-prediction-in-julia-351b81309e30)], [[Quarto](https://www.paltmeyer.com/blog/posts/conformal-prediction/#fig-anim)]). It shows conformal prediction sets for two different samples and changing coverage rates. Standard conformal classifiers produce set-valued predictions: for ambiguous samples these sets are typically large (for high coverage) or empty (for low coverage).\n\n![Conformal Prediction in action: Prediction sets for two different samples and changing coverage rates. As coverage grows, so does the size of the prediction sets.](https://raw.githubusercontent.com/pat-alt/blog/main/posts/conformal-prediction/www/medium.gif)\n\n## 🚩 Installation \n\nYou can install the latest stable release from the general registry:\n\n```{.julia}\nusing Pkg\nPkg.add(\"ConformalPrediction\")\n```\n\nThe development version can be installed as follows:\n\n```{.julia}\nusing Pkg\nPkg.add(url=\"https://github.com/pat-alt/ConformalPrediction.jl\")\n```\n\n## 🔁 Status \n\nThis package is in its early stages of development and therefore still subject to changes to the core architecture and API. The following CP approaches have been implemented in the development version:\n\n**Regression**:\n\n- Inductive \n- Naive Transductive \n- Jackknife \n- Jackknife+ \n- Jackknife-minmax\n- CV+\n- CV-minmax\n\n**Classification**:\n\n- Inductive (LABEL [@sadinle2019least])\n- Adaptive Inductive\n\nThe package has been tested for the following supervised models offered by [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/).\n\n**Regression**:\n\n::: {.cell execution_count=2}\n``` {.julia .cell-code}\nusing ConformalPrediction\nkeys(tested_atomic_models[:regression])\n```\n\n::: {.cell-output .cell-output-display execution_count=3}\n```\nKeySet for a Dict{Symbol, Expr} with 4 entries. Keys:\n :nearest_neighbor\n :evo_tree\n :light_gbm\n :decision_tree\n```\n:::\n:::\n\n\n**Classification**:\n\n::: {.cell execution_count=3}\n``` {.julia .cell-code}\nkeys(tested_atomic_models[:classification])\n```\n\n::: {.cell-output .cell-output-display execution_count=4}\n```\nKeySet for a Dict{Symbol, Expr} with 4 entries. Keys:\n :nearest_neighbor\n :evo_tree\n :light_gbm\n :decision_tree\n```\n:::\n:::\n\n\n## 🔍 Usage Example \n\nTo illustrate the intended use of the package, let's have a quick look at a simple regression problem. Using [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/) we first generate some synthetic data and then determine indices for our training, calibration and test data:\n\n::: {.cell execution_count=4}\n``` {.julia .cell-code}\nusing MLJ\nX, y = MLJ.make_regression(1000, 2)\ntrain, test = partition(eachindex(y), 0.4, 0.4)\n```\n:::\n\n\nWe then import a decision tree ([`EvoTrees.jl`](https://github.com/Evovest/EvoTrees.jl)) following the standard [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/) procedure.\n\n::: {.cell execution_count=5}\n``` {.julia .cell-code}\nEvoTreeRegressor = @load EvoTreeRegressor pkg=EvoTrees\nmodel = EvoTreeRegressor() \n```\n:::\n\n\nTo turn our conventional model into a conformal model, we just need to declare it as such by using `conformal_model` wrapper function. The generated conformal model instance can wrapped in data to create a *machine*. Finally, we proceed by fitting the machine on training data using the generic `fit!` method:\n\n::: {.cell execution_count=6}\n``` {.julia .cell-code}\nusing ConformalPrediction\nconf_model = conformal_model(model)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n```\n:::\n\n\nPredictions can then be computed using the generic `predict` method. The code below produces predictions for the first `n` samples. Each tuple contains the lower and upper bound for the prediction interval.\n\n::: {.cell execution_count=7}\n``` {.julia .cell-code}\nn = 5\nXtest = selectrows(X, first(test,n))\nytest = y[first(test,n)]\npredict(mach, Xtest)\n```\n\n::: {.cell-output .cell-output-display execution_count=8}\n```\n╭─────────────────────────────────────────────────────────╮\n│ │\n│ (1) (1.9785806677967583, 3.555027766731997) │\n│ (2) (3.902150239475792, 5.4785973384110305) │\n│ (3) (0.5223306700743977, 2.0987777690096365) │\n│ (4) (2.3013653650067107, 3.8778124639419493) │\n│ (5) (2.380170088915079, 3.9566171878503176) │\n│ │\n│ │\n╰───────────────────────────────────────────── 5 items ───╯\n```\n:::\n:::\n\n\n## 🛠 Contribute \n\nContributions are welcome! Please follow the [SciML ColPrac guide](https://github.com/SciML/ColPrac).\n\n## 🎓 References \n\n", "supporting": [ "index_files" ], diff --git a/_freeze/docs/src/intro/execute-results/md.json b/_freeze/docs/src/intro/execute-results/md.json index 960f41c..696ab98 100644 --- a/_freeze/docs/src/intro/execute-results/md.json +++ b/_freeze/docs/src/intro/execute-results/md.json @@ -1,7 +1,7 @@ { - "hash": "1b0ee553524705afa5795d1e05898476", + "hash": "4b0109965d9339b1ffd867a3c20a947b", "result": { - "markdown": "\n\n`ConformalPrediction.jl` is a package for Uncertainty Quantification (UQ) through Conformal Prediction (CP) in Julia. It is designed to work with supervised models trained in [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/). Conformal Prediction is distribution-free, easy-to-understand, easy-to-use and model-agnostic. \n\n## Installation 🚩\n\nYou can install the first stable release from the general registry:\n\n```{.julia}\nusing Pkg\nPkg.add(\"ConformalPrediction\")\n```\n\nThe development version can be installed as follows:\n\n```{.julia}\nusing Pkg\nPkg.add(url=\"https://github.com/pat-alt/ConformalPrediction.jl\")\n```\n\n## Status 🔁\n\nThis package is in its very early stages of development and therefore still subject to changes to the core architecture. The following approaches have been implemented in the development version:\n\n**Regression**:\n\n- Inductive \n- Naive Transductive \n- Jackknife \n- Jackknife+ \n- Jackknife-minmax\n- CV+\n- CV-minmax\n\n**Classification**:\n\n- Inductive (LABEL [@sadinle2019least])\n- Adaptive Inductive\n\nI have only tested it for a few of the supervised models offered by [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/).\n\n## Usage Example 🔍\n\nTo illustrate the intended use of the package, let's have a quick look at a simple regression problem. Using [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/) we first generate some synthetic data and then determine indices for our training, calibration and test data:\n\n::: {.cell execution_count=2}\n``` {.julia .cell-code}\nusing MLJ\nX, y = MLJ.make_regression(1000, 2)\ntrain, test = partition(eachindex(y), 0.4, 0.4)\n```\n:::\n\n\nWe then import a decision tree ([`EvoTrees.jl`](https://github.com/Evovest/EvoTrees.jl)) following the standard [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/) procedure.\n\n::: {.cell execution_count=3}\n``` {.julia .cell-code}\nEvoTreeRegressor = @load EvoTreeRegressor pkg=EvoTrees\nmodel = EvoTreeRegressor() \n```\n:::\n\n\nTo turn our conventional model into a conformal model, we just need to declare it as such by using `conformal_model` wrapper function. The generated conformal model instance can wrapped in data to create a *machine*. Finally, we proceed by fitting the machine on training data using the generic `fit!` method:\n\n::: {.cell execution_count=4}\n``` {.julia .cell-code}\nusing ConformalPrediction\nconf_model = conformal_model(model)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n```\n:::\n\n\nPredictions can then be computed using the generic `predict` method. The code below produces predictions for the first `n` samples. Each tuple contains the lower and upper bound for the prediction interval.\n\n::: {.cell execution_count=5}\n``` {.julia .cell-code}\nn = 10\nXtest = selectrows(X, first(test,n))\nytest = y[first(test,n)]\npredict(mach, Xtest)\n```\n\n::: {.cell-output .cell-output-display execution_count=6}\n```\n╭─────────────────────────────────────────────────────────────────╮\n│ │\n│ (1) ([-0.20063113789390163], [1.323655530145934]) │\n│ (2) ([-0.061147489871723804], [1.4631391781681118]) │\n│ (3) ([-1.4486105066363675], [0.07567616140346822]) │\n│ (4) ([-0.7160881365817455], [0.8081985314580902]) │\n│ (5) ([-1.7173644161988695], [-0.19307774815903367]) │\n│ (6) ([-1.2158809697881832], [0.3084056982516525]) │\n│ (7) ([-1.7173644161988695], [-0.19307774815903367]) │\n│ (8) ([0.26510754559144056], [1.7893942136312764]) │\n│ (9) ([-0.8716996456392521], [0.6525870224005836]) │\n│ (10) ([0.43084861624955606], [1.9551352842893919]) │\n│ │\n│ │\n╰──────────────────────────────────────────────────── 10 items ───╯\n```\n:::\n:::\n\n\n## Contribute 🛠\n\nContributions are welcome! Please follow the [SciML ColPrac guide](https://github.com/SciML/ColPrac).\n\n## References 🎓\n\n", + "markdown": "\n\n`ConformalPrediction.jl` is a package for Uncertainty Quantification (UQ) through Conformal Prediction (CP) in Julia. It is designed to work with supervised models trained in [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/) @blaom2020mlj. Conformal Prediction is distribution-free, easy-to-understand, easy-to-use and model-agnostic. \n\n# 📖 Background\n\nConformal Prediction is a scalable frequentist approach to uncertainty quantification and coverage control. It promises to be an easy-to-understand, distribution-free and model-agnostic way to generate statistically rigorous uncertainty estimates. Interestingly, it can even be used to complement Bayesian methods.\n\nThe animation below is lifted from a small blog post that introduces the topic and the package ([[TDS](https://towardsdatascience.com/conformal-prediction-in-julia-351b81309e30)], [[Quarto](https://www.paltmeyer.com/blog/posts/conformal-prediction/#fig-anim)]). It shows conformal prediction sets for two different samples and changing coverage rates. Standard conformal classifiers produce set-valued predictions: for ambiguous samples these sets are typically large (for high coverage) or empty (for low coverage).\n\n![Conformal Prediction in action: Prediction sets for two different samples and changing coverage rates. As coverage grows, so does the size of the prediction sets.](https://raw.githubusercontent.com/pat-alt/blog/main/posts/conformal-prediction/www/medium.gif)\n\n## 🚩 Installation \n\nYou can install the latest stable release from the general registry:\n\n```{.julia}\nusing Pkg\nPkg.add(\"ConformalPrediction\")\n```\n\nThe development version can be installed as follows:\n\n```{.julia}\nusing Pkg\nPkg.add(url=\"https://github.com/pat-alt/ConformalPrediction.jl\")\n```\n\n## 🔁 Status \n\nThis package is in its early stages of development and therefore still subject to changes to the core architecture and API. The following CP approaches have been implemented in the development version:\n\n**Regression**:\n\n- Inductive \n- Naive Transductive \n- Jackknife \n- Jackknife+ \n- Jackknife-minmax\n- CV+\n- CV-minmax\n\n**Classification**:\n\n- Inductive (LABEL [@sadinle2019least])\n- Adaptive Inductive\n\nThe package has been tested for the following supervised models offered by [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/).\n\n**Regression**:\n\n::: {.cell execution_count=2}\n``` {.julia .cell-code}\nusing ConformalPrediction\nkeys(tested_atomic_models[:regression])\n```\n\n::: {.cell-output .cell-output-display execution_count=3}\n```\nKeySet for a Dict{Symbol, Expr} with 4 entries. Keys:\n :nearest_neighbor\n :evo_tree\n :light_gbm\n :decision_tree\n```\n:::\n:::\n\n\n**Classification**:\n\n::: {.cell execution_count=3}\n``` {.julia .cell-code}\nkeys(tested_atomic_models[:classification])\n```\n\n::: {.cell-output .cell-output-display execution_count=4}\n```\nKeySet for a Dict{Symbol, Expr} with 4 entries. Keys:\n :nearest_neighbor\n :evo_tree\n :light_gbm\n :decision_tree\n```\n:::\n:::\n\n\n## 🔍 Usage Example \n\nTo illustrate the intended use of the package, let's have a quick look at a simple regression problem. Using [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/) we first generate some synthetic data and then determine indices for our training, calibration and test data:\n\n::: {.cell execution_count=4}\n``` {.julia .cell-code}\nusing MLJ\nX, y = MLJ.make_regression(1000, 2)\ntrain, test = partition(eachindex(y), 0.4, 0.4)\n```\n:::\n\n\nWe then import a decision tree ([`EvoTrees.jl`](https://github.com/Evovest/EvoTrees.jl)) following the standard [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/) procedure.\n\n::: {.cell execution_count=5}\n``` {.julia .cell-code}\nEvoTreeRegressor = @load EvoTreeRegressor pkg=EvoTrees\nmodel = EvoTreeRegressor() \n```\n:::\n\n\nTo turn our conventional model into a conformal model, we just need to declare it as such by using `conformal_model` wrapper function. The generated conformal model instance can wrapped in data to create a *machine*. Finally, we proceed by fitting the machine on training data using the generic `fit!` method:\n\n::: {.cell execution_count=6}\n``` {.julia .cell-code}\nusing ConformalPrediction\nconf_model = conformal_model(model)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n```\n:::\n\n\nPredictions can then be computed using the generic `predict` method. The code below produces predictions for the first `n` samples. Each tuple contains the lower and upper bound for the prediction interval.\n\n::: {.cell execution_count=7}\n``` {.julia .cell-code}\nn = 5\nXtest = selectrows(X, first(test,n))\nytest = y[first(test,n)]\npredict(mach, Xtest)\n```\n\n::: {.cell-output .cell-output-display execution_count=8}\n```\n╭───────────────────────────────────────────────────────────╮\n│ │\n│ (1) (-2.3533542827227794, 1.1215603803363177) │\n│ (2) (-5.386746248140736, -1.9118315850816388) │\n│ (3) (-4.084485418193179, -0.6095707551340814) │\n│ (4) (-2.5544886119708683, 0.9204260510882288) │\n│ (5) (-3.9127608429516876, -0.4378461798925908) │\n│ │\n│ │\n╰─────────────────────────────────────────────── 5 items ───╯\n```\n:::\n:::\n\n\n## 🛠 Contribute \n\nContributions are welcome! Please follow the [SciML ColPrac guide](https://github.com/SciML/ColPrac).\n\n## 🎓 References \n\n", "supporting": [ "intro_files" ], diff --git a/_quarto.yml b/_quarto.yml index 3ce739e..c5443d7 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -1,16 +1,18 @@ project: title: "ConformalPrediction.jl" execute-dir: project - + crossref: fig-prefix: Figure tbl-prefix: Table bibliography: https://raw.githubusercontent.com/pat-alt/bib/main/bib.bib +fig-format: png execute: freeze: auto - echo: true eval: true + echo: true output: false + jupyter: julia-1.8 diff --git a/docs/_metadata.yml b/docs/src/_metadata.yml similarity index 51% rename from docs/_metadata.yml rename to docs/src/_metadata.yml index f591beb..b4ac9c2 100644 --- a/docs/_metadata.yml +++ b/docs/src/_metadata.yml @@ -1,5 +1,4 @@ format: commonmark: variant: -raw_html - wrap: preserve - self-contained: true \ No newline at end of file + wrap: none \ No newline at end of file diff --git a/docs/src/classification.ipynb b/docs/src/classification.ipynb new file mode 100644 index 0000000..ee5509c --- /dev/null +++ b/docs/src/classification.ipynb @@ -0,0 +1,670 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "824dfde5", + "metadata": {}, + "source": [ + "# Classification \n", + "\n", + "```@meta\n", + "CurrentModule = ConformalPrediction\n", + "```\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "a67104b4", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[32m\u001b[1m Activating\u001b[22m\u001b[39m project at `~/code/ConformalPrediction.jl/docs`\n" + ] + } + ], + "source": [ + "#| echo: false\n", + "using Pkg; Pkg.activate(\"docs\")\n", + "using Plots\n", + "theme(:wong)" + ] + }, + { + "cell_type": "markdown", + "id": "2d254c95", + "metadata": {}, + "source": [ + "This tutorial is based in parts on this [blog post](https://www.paltmeyer.com/blog/posts/conformal-prediction/).\n", + "\n", + "### Split Conformal Classification {#sec-scp}\n", + "\n", + "We consider a simple binary classification problem. Let $(X_i, Y_i), \\ i=1,...,n$ denote our feature-label pairs and let $\\mu: \\mathcal{X} \\mapsto \\mathcal{Y}$ denote the mapping from features to labels. For illustration purposes we will use the moons dataset 🌙. Using [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) we first generate the data and split into into a training and test set:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "b809784d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "([110, 100, 420, 107, 85, 218, 34, 82, 289, 400 … 44, 484, 146, 412, 366, 355, 98, 457, 137, 104], [363, 479, 172, 185, 411, 268, 482, 301, 9, 243 … 52, 215, 78, 258, 149, 195, 57, 97, 344, 362])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "using MLJ\n", + "using Random\n", + "Random.seed!(123)\n", + "\n", + "# Data:\n", + "X, y = make_moons(500; noise=0.15)\n", + "train, test = partition(eachindex(y), 0.8, shuffle=true)" + ] + }, + { + "cell_type": "markdown", + "id": "a45eb5fe", + "metadata": {}, + "source": [ + "Here we will use a specific case of CP called *split conformal prediction* which can then be summarized as follows:^[In other places split conformal prediction is sometimes referred to as *inductive* conformal prediction.]\n", + "\n", + "1. Partition the training into a proper training set and a separate calibration set: $\\mathcal{D}_n=\\mathcal{D}^{\\text{train}} \\cup \\mathcal{D}^{\\text{cali}}$.\n", + "2. Train the machine learning model on the proper training set: $\\hat\\mu_{i \\in \\mathcal{D}^{\\text{train}}}(X_i,Y_i)$.\n", + "3. Compute nonconformity scores, $\\mathcal{S}$, using the calibration data $\\mathcal{D}^{\\text{cali}}$ and the fitted model $\\hat\\mu_{i \\in \\mathcal{D}^{\\text{train}}}$. \n", + "4. For a user-specified desired coverage ratio $(1-\\alpha)$ compute the corresponding quantile, $\\hat{q}$, of the empirical distribution of nonconformity scores, $\\mathcal{S}$.\n", + "5. For the given quantile and test sample $X_{\\text{test}}$, form the corresponding conformal prediction set: \n", + "\n", + "$$\n", + "C(X_{\\text{test}})=\\{y:s(X_{\\text{test}},y) \\le \\hat{q}\\}\n", + "$$ {#eq-set}\n", + "\n", + "This is the default procedure used for classification and regression in [`ConformalPrediction.jl`](https://github.com/pat-alt/ConformalPrediction.jl). \n", + "\n", + "Now let's take this to our 🌙 data. To illustrate the package functionality we will demonstrate the envisioned workflow. We first define our atomic machine learning model following standard [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) conventions. Using [`ConformalPrediction.jl`](https://github.com/pat-alt/ConformalPrediction.jl) we then wrap our atomic model in a conformal model using the standard API call `conformal_model(model::Supervised; kwargs...)`. To train and predict from our conformal model we can then rely on the conventional [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) procedure again. In particular, we wrap our conformal model in data (turning it into a machine) and then fit it on the training set. Finally, we use our machine to predict the label for a new test sample `Xtest`:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "55de461f", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "┌ Info: For silent loading, specify `verbosity=0`. \n", + "└ @ Main /Users/patrickaltmeyer/.julia/packages/MLJModels/K5pPR/src/loading.jl:159\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "import NearestNeighborModels ✔" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "┌ Info: Training machine(SimpleInductiveClassifier(model = KNNClassifier(K = 50, …), …), …).\n", + "└ @ MLJBase /Users/patrickaltmeyer/.julia/packages/MLJBase/6ooqv/src/machines.jl:496\n" + ] + }, + { + "data": { + "text/plain": [ + " \u001b[97;1mUnivariateFinite{Multiclass{2}}\u001b[0m \n", + " \u001b[38;5;8m┌ ┐\u001b[0m \n", + " 0 \u001b[38;5;8m┤\u001b[0m\u001b[38;5;2m■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\u001b[0m 0.94 \u001b[38;5;8m \u001b[0m \u001b[38;5;8m\u001b[0m\n", + " \u001b[38;5;8m└ ┘\u001b[0m " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#| output: true\n", + "\n", + "# Model:\n", + "KNNClassifier = @load KNNClassifier pkg=NearestNeighborModels\n", + "model = KNNClassifier(;K=50) \n", + "\n", + "# Training:\n", + "using ConformalPrediction\n", + "conf_model = conformal_model(model; coverage=.9)\n", + "mach = machine(conf_model, X, y)\n", + "fit!(mach, rows=train)\n", + "\n", + "# Conformal Prediction:\n", + "Xtest = selectrows(X, first(test))\n", + "ytest = y[first(test)]\n", + "predict(mach, Xtest)[1]" + ] + }, + { + "cell_type": "markdown", + "id": "002f329c", + "metadata": {}, + "source": [ + "The final predictions are set-valued. While the softmax output remains unchanged for the `SimpleInductiveClassifier`, the size of the prediction set depends on the chosen coverage rate, $(1-\\alpha)$. " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "16679c1d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "When specifying a coverage rate very close to one, the prediction set will typically include many (in some cases all) of the possible labels. Below, for example, both classes are included in the prediction set when setting the coverage rate equal to $(1-\\alpha)$=1.0. This is intuitive, since high coverage quite literally requires that the true label is covered by the prediction set with high probability.\n", + "\n" + ], + "text/markdown": [ + "When specifying a coverage rate very close to one, the prediction set will typically include many (in some cases all) of the possible labels. Below, for example, both classes are included in the prediction set when setting the coverage rate equal to $(1-\\alpha)$=1.0. This is intuitive, since high coverage quite literally requires that the true label is covered by the prediction set with high probability.\n" + ], + "text/plain": [ + " When specifying a coverage rate very close to one, the prediction set will\n", + " typically include many (in some cases all) of the possible labels. Below,\n", + " for example, both classes are included in the prediction set when setting\n", + " the coverage rate equal to \u001b[35m(1-\\alpha)\u001b[39m=1.0. This is intuitive, since high\n", + " coverage quite literally requires that the true label is covered by the\n", + " prediction set with high probability." + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#| echo: false\n", + "#| output: true\n", + "\n", + "coverage = 1.0\n", + "using Markdown\n", + "Markdown.parse(\"\"\"\n", + "When specifying a coverage rate very close to one, the prediction set will typically include many (in some cases all) of the possible labels. Below, for example, both classes are included in the prediction set when setting the coverage rate equal to ``(1-\\\\alpha)``=$coverage. This is intuitive, since high coverage quite literally requires that the true label is covered by the prediction set with high probability.\n", + "\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "aaf34e08", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "┌ Info: Training machine(SimpleInductiveClassifier(model = KNNClassifier(K = 50, …), …), …).\n", + "└ @ MLJBase /Users/patrickaltmeyer/.julia/packages/MLJBase/6ooqv/src/machines.jl:496\n" + ] + }, + { + "data": { + "text/plain": [ + " \u001b[97;1mUnivariateFinite{Multiclass{2}}\u001b[0m \n", + " \u001b[38;5;8m┌ ┐\u001b[0m \n", + " 0 \u001b[38;5;8m┤\u001b[0m\u001b[38;5;2m■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\u001b[0m 0.5 \u001b[38;5;8m \u001b[0m \u001b[38;5;8m\u001b[0m\n", + " 1 \u001b[38;5;8m┤\u001b[0m\u001b[38;5;2m■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\u001b[0m 0.5 \u001b[38;5;8m \u001b[0m \u001b[38;5;8m\u001b[0m\n", + " \u001b[38;5;8m└ ┘\u001b[0m " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#| output: true\n", + "\n", + "conf_model = conformal_model(model; coverage=coverage)\n", + "mach = machine(conf_model, X, y)\n", + "fit!(mach, rows=train)\n", + "\n", + "# Conformal Prediction:\n", + "Xtest = (x1=[1],x2=[0])\n", + "predict(mach, Xtest)[1]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "2e9b2f54", + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "Conversely, for low coverage rates, prediction sets can also be empty. For a choice of $(1-\\alpha)$=0.1, for example, the prediction set for our test sample is empty. This is a bit difficult to think about intuitively and I have not yet come across a satisfactory, intuitive interpretation.\\^{}[Any thoughts/comments welcome!] When the prediction set is empty, the \\texttt{predict} call currently returns \\texttt{missing}:\n", + "\n" + ], + "text/markdown": [ + "Conversely, for low coverage rates, prediction sets can also be empty. For a choice of $(1-\\alpha)$=0.1, for example, the prediction set for our test sample is empty. This is a bit difficult to think about intuitively and I have not yet come across a satisfactory, intuitive interpretation.^[Any thoughts/comments welcome!] When the prediction set is empty, the `predict` call currently returns `missing`:\n" + ], + "text/plain": [ + " Conversely, for low coverage rates, prediction sets can also be empty. For a\n", + " choice of \u001b[35m(1-\\alpha)\u001b[39m=0.1, for example, the prediction set for our test\n", + " sample is empty. This is a bit difficult to think about intuitively and I\n", + " have not yet come across a satisfactory, intuitive interpretation.^[Any\n", + " thoughts/comments welcome!] When the prediction set is empty, the \u001b[36mpredict\u001b[39m\n", + " call currently returns \u001b[36mmissing\u001b[39m:" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#| echo: false\n", + "#| output: true\n", + "\n", + "coverage = .1\n", + "using Markdown\n", + "Markdown.parse(\"\"\"\n", + "Conversely, for low coverage rates, prediction sets can also be empty. For a choice of ``(1-\\\\alpha)``=$coverage, for example, the prediction set for our test sample is empty. This is a bit difficult to think about intuitively and I have not yet come across a satisfactory, intuitive interpretation.^[Any thoughts/comments welcome!] When the prediction set is empty, the `predict` call currently returns `missing`:\n", + "\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "894e07c2", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "┌ Info: Training machine(SimpleInductiveClassifier(model = KNNClassifier(K = 50, …), …), …).\n", + "└ @ MLJBase /Users/patrickaltmeyer/.julia/packages/MLJBase/6ooqv/src/machines.jl:496\n" + ] + }, + { + "data": { + "text/plain": [ + "missing" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#| output: true\n", + "\n", + "conf_model = conformal_model(model; coverage=coverage)\n", + "mach = machine(conf_model, X, y)\n", + "fit!(mach, rows=train)\n", + "\n", + "# Conformal Prediction:\n", + "predict(mach, Xtest)[1]" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "e3f765cc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + " \u001b[38;2;155;179;224m╭──── \u001b[38;2;227;172;141mFunction: \u001b[1m\u001b[38;5;12mcontourf_cp\u001b[22m\u001b[39m\u001b[39m\u001b[38;2;155;179;224m\u001b[38;2;155;179;224m ───────────────────────────────────────────╮\u001b[39m\u001b[0m\u001b[39m\u001b[38;2;155;179;224m\n", + " \u001b[0m\u001b[38;2;155;179;224m│\u001b[39m\u001b[0m \u001b[0m\u001b[38;2;155;179;224m│\u001b[39m\u001b[0m\n", + " \u001b[0m\u001b[38;2;155;179;224m│\u001b[39m\u001b[0m \u001b[1m\u001b[2m(1) \u001b[22m\u001b[22m \u001b[1m\u001b[38;2;165;198;217mcontourf_cp\u001b[22m\u001b[39m\u001b[38;2;255;245;157m(\u001b[39mmach\u001b[38;2;206;147;216m::Machine\u001b[39m, x1_range, x2_range; type, \u001b[0m\u001b[38;2;155;179;224m│\u001b[39m\u001b[0m\n", + " \u001b[0m\u001b[38;2;155;179;224m│\u001b[39m\u001b[0m kwargs...\u001b[38;2;255;245;157m)\u001b[39m \u001b[0m\u001b[38;2;155;179;224m│\u001b[39m\u001b[0m\n", + " \u001b[0m\u001b[38;2;155;179;224m│\u001b[39m\u001b[0m \u001b[0m\u001b[38;2;155;179;224m│\u001b[39m\u001b[0m\n", + " \u001b[38;2;155;179;224m╰───────────────────────────────────────────────────────── \u001b[1m\u001b[37m1\u001b[22m\u001b[39m method\u001b[38;2;155;179;224m ───╯\u001b[39m\u001b[0m\u001b[39m\u001b[0m\n", + "\u001b[2m\u001b[32m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Docstring\u001b[0m \u001b[2m\u001b[32m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[22m\u001b[39m\u001b[22m\u001b[39m\u001b[0m\n", + " No documentation found.\u001b[0m \n", + " \n", + " \u001b[3m\u001b[38;2;255;245;157m`\u001b[23m\u001b[39m\u001b[0m\u001b[38;2;222;222;222mcontourf_cp\u001b[39m\u001b[3m\u001b[38;2;255;245;157m`\u001b[23m\u001b[39m is a \u001b[3m\u001b[38;2;255;245;157m`\u001b[23m\u001b[39m\u001b[38;2;222;222;222mFunction\u001b[39m\u001b[3m\u001b[38;2;255;245;157m`\u001b[23m\u001b[39m.\u001b[0m \n", + " \n", + " \u001b[2m\u001b[37m\u001b[48;2;38;38;38m┌─────────────────────────────────────────────────────────┐\u001b[22m\u001b[39m\u001b[49m \n", + " \u001b[0m\u001b[2m\u001b[37m\u001b[48;2;38;38;38m│\u001b[22m\u001b[39m\u001b[49m\u001b[0m\u001b[48;2;38;38;38m \u001b[49m\u001b[0m\u001b[48;2;38;38;38m\u001b[3m\u001b[38;2;40;122;54m# 1 method for generic function \"contourf_cp\":\u001b[23m\u001b[39m\u001b[38;2;222;222;222m\u001b[48;2;38;38;38m \u001b[49m\u001b[38;2;222;222;222m\u001b[49m\u001b[48;2;38;38;38m \u001b[49m\u001b[0m\u001b[2m\u001b[37m\u001b[48;2;38;38;38m│\u001b[22m\u001b[39m\u001b[49m\u001b[0m \n", + " \u001b[0m\u001b[2m\u001b[37m\u001b[48;2;38;38;38m│\u001b[22m\u001b[39m\u001b[49m\u001b[0m\u001b[48;2;38;38;38m \u001b[49m\u001b[0m\u001b[48;2;38;38;38m\u001b[39m\u001b[38;2;227;136;100m[\u001b[39m\u001b[38;2;144;202;249m1\u001b[39m\u001b[38;2;227;136;100m]\u001b[39m\u001b[38;2;222;222;222m \u001b[39m\u001b[38;2;232;212;114mcontourf_cp\u001b[39m\u001b[38;2;227;136;100m(\u001b[39m\u001b[38;2;222;222;222mmach\u001b[39m\u001b[38;2;222;109;89m::\u001b[39m\u001b[38;2;222;222;222mMachine\u001b[39m\u001b[38;2;227;136;100m,\u001b[39m\u001b[38;2;222;222;222m \u001b[39m\u001b[38;2;222;222;222mx1_range\u001b[39m\u001b[38;2;227;136;100m,\u001b[39m\u001b[38;2;222;222;222m \u001b[39m\u001b[38;2;222;222;222mx2_range\u001b[39m\u001b[38;2;227;136;100m;\u001b[39m\u001b[38;2;222;222;222m \u001b[48;2;38;38;38m \u001b[49m\u001b[38;2;222;222;222m\u001b[49m\u001b[48;2;38;38;38m \u001b[49m\u001b[0m\u001b[2m\u001b[37m\u001b[48;2;38;38;38m│\u001b[22m\u001b[39m\u001b[49m\u001b[0m \n", + " \u001b[0m\u001b[2m\u001b[37m\u001b[48;2;38;38;38m│\u001b[22m\u001b[39m\u001b[49m\u001b[0m\u001b[48;2;38;38;38m \u001b[49m\u001b[0m\u001b[48;2;38;38;38m\u001b[39m\u001b[38;2;222;222;222mtype\u001b[39m\u001b[38;2;227;136;100m,\u001b[39m\u001b[38;2;222;222;222m \u001b[39m\u001b[38;2;222;222;222mkwargs\u001b[39m\u001b[38;2;222;109;89m...\u001b[39m\u001b[38;2;227;136;100m)\u001b[39m\u001b[38;2;222;222;222m \u001b[39m\u001b[38;2;122;147;245min\u001b[39m\u001b[38;2;222;222;222m \u001b[39m\u001b[38;2;222;222;222mMain\u001b[39m\u001b[38;2;222;222;222m \u001b[39m\u001b[38;2;222;222;222mat\u001b[39m\u001b[38;2;222;222;222m \u001b[39m\u001b[38;2;222;222;222mIn\u001b[39m\u001b[38;2;227;136;100m[\u001b[39m\u001b[38;2;144;202;249m9\u001b[39m\u001b[38;2;227;136;100m]\u001b[39m\u001b[38;2;222;109;89m:\u001b[39m\u001b[38;2;144;202;249m3\u001b[39m\u001b[48;2;38;38;38m \u001b[49m\u001b[39m\u001b[49m\u001b[48;2;38;38;38m \u001b[49m\u001b[0m\u001b[2m\u001b[37m\u001b[48;2;38;38;38m│\u001b[22m\u001b[39m\u001b[49m\u001b[0m \n", + " \u001b[2m\u001b[37m\u001b[48;2;38;38;38m└─────────────────────────────────────────────────────────┘\u001b[22m\u001b[39m\u001b[49m\u001b[0m \n" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#| echo: false\n", + "using Plots\n", + "\n", + "function contourf_cp(mach::Machine, x1_range, x2_range; type=:set_size, kwargs...)\n", + " set_size = []\n", + " proba = []\n", + " for x2 in x2_range, x1 in x1_range\n", + " Xnew = (x1 = [x1], x2 = [x2])\n", + " p̂ = predict(mach, Xnew)[1]\n", + " # Set size:\n", + " z = ismissing(p̂) ? 0 : sum(pdf.(p̂, p̂.decoder.classes) .> 0)\n", + " push!(set_size, z)\n", + " # Probability:\n", + " p = ismissing(p̂) ? p̂ : pdf.(p̂, 1)\n", + " push!(proba, p)\n", + " end\n", + " if type == :set_size\n", + " plt = contourf(x1_range, x2_range, set_size; clim=(0,2), c=cgrad(:blues, 3, categorical = true), kwargs...)\n", + " elseif type == :proba\n", + " plt = contourf(x1_range, x2_range, proba; c=:thermal, kwargs...)\n", + " end\n", + " return plt\n", + "end" + ] + }, + { + "cell_type": "markdown", + "id": "25d16d91", + "metadata": {}, + "source": [ + "@fig-anim should provide some more intuition as to what exactly is happening here. It illustrates the effect of the chosen coverage rate on the predicted softmax output and the set size in the two-dimensional feature space. Contours are overlayed with the moon data points (including test data). The two samples highlighted in red, $X_1$ and $X_2$, have been manually added for illustration purposes. Let's look at these one by one.\n", + "\n", + "Firstly, note that $X_1$ (red cross) falls into a region of the domain that is characterized by high predictive uncertainty. It sits right at the bottom-right corner of our class-zero moon 🌜 (orange), a region that is almost entirely enveloped by our class-one moon 🌛 (green). For low coverage rates the prediction set for $X_1$ is empty: on the left-hand side this is indicated by the missing contour for the softmax probability; on the right-hand side we can observe that the corresponding set size is indeed zero. For high coverage rates the prediction set includes both $y=0$ and $y=1$, indicative of the fact that the conformal classifier is uncertain about the true label.\n", + "\n", + "With respect to $X_2$, we observe that while also sitting on the fringe of our class-zero moon, this sample populates a region that is not fully enveloped by data points from the opposite class. In this region, the underlying atomic classifier can be expected to be more certain about its predictions, but still not highly confident. How is this reflected by our corresponding conformal prediction sets? \n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "ee9d2b12", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "┌ Info: Training machine(SimpleInductiveClassifier(model = KNNClassifier(K = 50, …), …), …).\n", + "└ @ MLJBase /Users/patrickaltmeyer/.julia/packages/MLJBase/6ooqv/src/machines.jl:496\n" + ] + }, + { + "data": { + "text/plain": [ + "\u001b[38;2;144;202;249m0.72\u001b[39m" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#| code-fold: true\n", + "\n", + "Xtest_2 = (x1=[-0.5],x2=[0.25])\n", + "cov_ = .9\n", + "conf_model = conformal_model(model; coverage=cov_)\n", + "mach = machine(conf_model, X, y)\n", + "fit!(mach, rows=train)\n", + "p̂_2 = pdf(predict(mach, Xtest_2)[1], 0)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "9964ddea", + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "Well, for low coverage rates (roughly $<0.9$) the conformal prediction set does not include $y=0$: the set size is zero (right panel). Only for higher coverage rates do we have $C(X_2)=\\{0\\}$: the coverage rate is high enough to include $y=0$, but the corresponding softmax probability is still fairly low. For example, for $(1-\\alpha)=0.9$ we have $\\hat{p}(y=0|X_2)=0.72.$\n", + "\n" + ], + "text/markdown": [ + "Well, for low coverage rates (roughly $<0.9$) the conformal prediction set does not include $y=0$: the set size is zero (right panel). Only for higher coverage rates do we have $C(X_2)=\\{0\\}$: the coverage rate is high enough to include $y=0$, but the corresponding softmax probability is still fairly low. For example, for $(1-\\alpha)=0.9$ we have $\\hat{p}(y=0|X_2)=0.72.$\n" + ], + "text/plain": [ + " Well, for low coverage rates (roughly \u001b[35m<0.9\u001b[39m) the conformal prediction set\n", + " does not include \u001b[35my=0\u001b[39m: the set size is zero (right panel). Only for higher\n", + " coverage rates do we have \u001b[35mC(X_2)=\\{0\\}\u001b[39m: the coverage rate is high enough to\n", + " include \u001b[35my=0\u001b[39m, but the corresponding softmax probability is still fairly low.\n", + " For example, for \u001b[35m(1-\\alpha)=0.9\u001b[39m we have \u001b[35m\\hat{p}(y=0|X_2)=0.72.\u001b[39m" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#| echo: false\n", + "#| output: true\n", + "\n", + "Markdown.parse(\"\"\"\n", + "Well, for low coverage rates (roughly ``<0.9``) the conformal prediction set does not include ``y=0``: the set size is zero (right panel). Only for higher coverage rates do we have ``C(X_2)=\\\\{0\\\\}``: the coverage rate is high enough to include ``y=0``, but the corresponding softmax probability is still fairly low. For example, for ``(1-\\\\alpha)=$(cov_)`` we have ``\\\\hat{p}(y=0|X_2)=$(p̂_2).``\n", + "\"\"\")" + ] + }, + { + "cell_type": "markdown", + "id": "99debeef", + "metadata": {}, + "source": [ + "These two examples illustrate an interesting point: for regions characterised by high predictive uncertainty, conformal prediction sets are typically empty (for low coverage) or large (for high coverage). While set-valued predictions may be something to get used to, this notion is overall intuitive. \n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "fig-anim", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "┌ Info: Training machine(SimpleInductiveClassifier(model = KNNClassifier(K = 50, …), …), …).\n", + "└ @ MLJBase /Users/patrickaltmeyer/.julia/packages/MLJBase/6ooqv/src/machines.jl:496\n", + "┌ Info: Training machine(SimpleInductiveClassifier(model = KNNClassifier(K = 50, …), …), …).\n", + "└ @ MLJBase /Users/patrickaltmeyer/.julia/packages/MLJBase/6ooqv/src/machines.jl:496\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "┌ Info: Training machine(SimpleInductiveClassifier(model = KNNClassifier(K = 50, …), …), …).\n", + "└ @ MLJBase /Users/patrickaltmeyer/.julia/packages/MLJBase/6ooqv/src/machines.jl:496\n", + "┌ Info: Training machine(SimpleInductiveClassifier(model = KNNClassifier(K = 50, …), …), …).\n", + "└ @ MLJBase /Users/patrickaltmeyer/.julia/packages/MLJBase/6ooqv/src/machines.jl:496\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "┌ Info: Training machine(SimpleInductiveClassifier(model = KNNClassifier(K = 50, …), …), …).\n", + "└ @ MLJBase /Users/patrickaltmeyer/.julia/packages/MLJBase/6ooqv/src/machines.jl:496\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "┌ Info: Saved animation to /Users/patrickaltmeyer/code/ConformalPrediction.jl/tmp.gif\n", + "└ @ Plots /Users/patrickaltmeyer/.julia/packages/Plots/Pn7Zn/src/animation.jl:149\n" + ] + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "Plots.AnimatedGif(\"/Users/patrickaltmeyer/code/ConformalPrediction.jl/tmp.gif\")" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#| output: true\n", + "#| label: fig-anim\n", + "#| fig-cap: The effect of the coverage rate on the conformal prediction set. Softmax probabilities are shown on the left. The size of the prediction set is shown on the right.\n", + "#| code-fold: true\n", + "\n", + "# Setup\n", + "coverages = range(0.75,1.0,length=5)\n", + "n = 100\n", + "x1_range = range(extrema(X.x1)...,length=n)\n", + "x2_range = range(extrema(X.x2)...,length=n)\n", + "\n", + "anim = @animate for coverage in coverages\n", + " conf_model = conformal_model(model; coverage=coverage)\n", + " mach = machine(conf_model, X, y)\n", + " fit!(mach, rows=train)\n", + " p1 = contourf_cp(mach, x1_range, x2_range; type=:proba, title=\"Softmax\", axis=nothing)\n", + " scatter!(p1, X.x1, X.x2, group=y, ms=2, msw=0, alpha=0.75)\n", + " scatter!(p1, Xtest.x1, Xtest.x2, ms=6, c=:red, label=\"X₁\", shape=:cross, msw=6)\n", + " scatter!(p1, Xtest_2.x1, Xtest_2.x2, ms=6, c=:red, label=\"X₂\", shape=:diamond, msw=6)\n", + " p2 = contourf_cp(mach, x1_range, x2_range; type=:set_size, title=\"Set size\", axis=nothing)\n", + " scatter!(p2, X.x1, X.x2, group=y, ms=2, msw=0, alpha=0.75)\n", + " scatter!(p2, Xtest.x1, Xtest.x2, ms=6, c=:red, label=\"X₁\", shape=:cross, msw=6)\n", + " scatter!(p2, Xtest_2.x1, Xtest_2.x2, ms=6, c=:red, label=\"X₂\", shape=:diamond, msw=6)\n", + " plot(p1, p2, plot_title=\"(1-α)=$(round(coverage,digits=2))\", size=(800,300))\n", + "end\n", + "\n", + "gif(anim, fps=0.5)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "dcb0aa9e", + "metadata": {}, + "outputs": [], + "source": [ + "#| echo: false\n", + "#| eval: false\n", + "\n", + "using Plots.PlotMeasures\n", + "\n", + "# Setup\n", + "coverages = range(0.75,1.0,length=25)\n", + "n = 100\n", + "x1_range = range(extrema(X.x1)...,length=n)\n", + "x2_range = range(extrema(X.x2)...,length=n)\n", + "anim = @animate for coverage in coverages\n", + " conf_model = conformal_model(model; coverage=coverage)\n", + " mach = machine(conf_model, X, y)\n", + " fit!(mach, rows=train)\n", + " plt = contourf_cp(mach, x1_range, x2_range; type=:proba, axis=nothing, size=(500,500), background_color=:transparent, colorbar=false, margin=-1.5mm)\n", + "\n", + " # Annotations\n", + "\n", + " # First:\n", + " p̂ = predict(mach, Xtest)[1]\n", + " if ismissing(p̂)\n", + " z = \"∅\"\n", + " else\n", + " L = p̂.decoder.classes\n", + " set_contents = reduce((x,y) -> x * \", \" * y, string.(L[pdf.(p̂, L) .> 0]))\n", + " z = \"{$(set_contents)}\"\n", + " end\n", + " ann_Xtest = (Xtest.x1, Xtest.x2, (\"ŷ₁=$z\", 20, :white))\n", + " annotate!(plt, ann_Xtest)\n", + "\n", + " # Second\n", + " p̂ = predict(mach, Xtest_2)[1]\n", + " if ismissing(p̂)\n", + " z = \"∅\"\n", + " else\n", + " L = p̂.decoder.classes\n", + " set_contents = reduce((x,y) -> x * \", \" * y, string.(L[pdf.(p̂, L) .> 0]))\n", + " z = \"{$(set_contents)}\"\n", + " end\n", + " ann_Xtest = (Xtest_2.x1, Xtest_2.x2, (\"ŷ₂=$z\", 20, :white))\n", + " annotate!(plt, ann_Xtest)\n", + "end\n", + "gif(anim, \"blog/posts/conformal-prediction/www/intro.gif\", fps=5)\n", + "\n", + "anim = @animate for coverage in coverages\n", + " conf_model = conformal_model(model; coverage=coverage)\n", + " mach = machine(conf_model, X, y)\n", + " fit!(mach, rows=train)\n", + " plt = contourf_cp(mach, x1_range, x2_range; type=:proba, axis=nothing, size=(1200,400), background_color=:transparent, colorbar=false, margin=-1.5mm)\n", + " \n", + " # Annotations\n", + "\n", + " # First:\n", + " p̂ = predict(mach, Xtest)[1]\n", + " if ismissing(p̂)\n", + " z = \"∅\"\n", + " else\n", + " L = p̂.decoder.classes\n", + " set_contents = reduce((x,y) -> x * \", \" * y, string.(L[pdf.(p̂, L) .> 0]))\n", + " z = \"{$(set_contents)}\"\n", + " end\n", + " ann_Xtest = (Xtest.x1, Xtest.x2, (\"ŷ₁=$z\", 20, :white))\n", + " annotate!(plt, ann_Xtest)\n", + "\n", + " # Second\n", + " p̂ = predict(mach, Xtest_2)[1]\n", + " if ismissing(p̂)\n", + " z = \"∅\"\n", + " else\n", + " L = p̂.decoder.classes\n", + " set_contents = reduce((x,y) -> x * \", \" * y, string.(L[pdf.(p̂, L) .> 0]))\n", + " z = \"{$(set_contents)}\"\n", + " end\n", + " ann_Xtest = (Xtest_2.x1, Xtest_2.x2, (\"ŷ₂=$z\", 20, :white))\n", + " annotate!(plt, ann_Xtest)\n", + "end\n", + "gif(anim, \"blog/posts/conformal-prediction/www/medium.gif\", fps=5)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Julia 1.8.1", + "language": "julia", + "name": "julia-1.8" + }, + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.8.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/src/classification.md b/docs/src/classification.md index 3cf88a5..5591e48 100644 --- a/docs/src/classification.md +++ b/docs/src/classification.md @@ -52,9 +52,7 @@ ytest = y[first(test)] predict(mach, Xtest)[1] ``` - import NearestNeighborModels - - ✔ + import NearestNeighborModels ✔ UnivariateFinite{Multiclass{2}} ┌ ┐ diff --git a/docs/src/contribute_files/figure-commonmark/mermaid-figure-1.png b/docs/src/contribute_files/figure-commonmark/mermaid-figure-1.png index dfc3a3563469f29b665a761c6f34f1601c389622..9abfa0a6b6df45987d98df8e571e6386b9b02e80 100644 GIT binary patch literal 524329 zcmeFZXIPWl)&+`{t!`jjQK|(&q^b0-q9D?gDqW@b4w4X1QBi41l^T%VrFUXMP+Djq zbdVNENJ0yNgpj-9`E+ykckXk4e$RcLlOIA}B+0whoMVnT=2*PCqpikrkmDc|6BCR2 ztsA;bOvg5um{>3Tu^(JXp;Iq0F`Z^ozj00fQS#!Lo3ptetaaJ#{R#K&p6)ksyM`&2 z-7Hl;m$o(Ul;$5DF}XObrOBzer!8B{>ZRJ)8>s`A^FIX}PVG8$B(Yh4Z|)_j0pA%N z+^9^1xwJ#?U<4itOOerv&h}l*d{uIEgp}%h>#q^nRs@tl(y}NCQ9?|}@(OC9ZuiI+ z%waH?J>Vn#ugASOR432>y2`jvq&a!?KmFjy9|61n!}Y7XpXmID%S^XUFCF+#*AMJf z+VvlAztElH{HWXH zZ^$=H^KomqNTB0P6BQYC>9J6E>5uYK8nar`&*zL^F=@m8{j&e_8b7~0Hst?rP5Ey@ z{4cUGvf=*-+5Src|GV-4w*O1Nng0LX_&hC0RQ$WP-p?8;rG4LMk={O!PHE+Vo*gJQ zHR^sZG?Edy&AxAWhvh) z+9@2NXv8+D)ML7`)S+*#W-d|sYfHG>Ypo=yR+s8A9_cY}Q!`p!L6RcxuQxY|*wOfX z6nmGH6l&smIMlVSP<)?dET{Y(8Q9 zMwgo&k?V;sN8IS78hq8rKILEB>-3(#dsCC)@9{d#TU%Q@C=Vze@rowVF+qCHf#QT$7q;k`_0k^^KH{7j}h?8*IBJXTn z-#`_A;1*o|kcs!~VA<^3!P4pPW`0Wa&5$X!?WOIfCuj|=yma!T#Zou1jYaCj1P9uA zbnp##`(>{O{7S0{%gI>`ux%MDY}6v0K3|;lB+X}7z9JAJ%>0_xvO=a+c$*5+ zZhnlN8XYQMZY0u7w{KG@t`(S)f)7_e zD$y1q*-wzeUT(~*5ktWi9$ydq^-eX(f7hz+GF8=!p-P;b@~2dSX)I>Z$c69U=ka5R z`BhKXmKnY&mQ8Go>}Ll6b?!0+-7#%gWxJ z_fuMV8+n5A|MEupsFf(By!;4f1s?)zZCpT;{=LH-4+5N>zu(vQ^HXbp%xUgnpY_U{ zpo=v<%Dkq*#Dv9d!jLWOO-l>8sO*EZF6j8`lSiv_xP!D`#GlDb`)>|yZyek9F$$@X zg}Fq}}S@Ew8$i1d<|AAV>pO!0{I!MBP;qSz6KODJ~1D(H%fB6#3VzP(n zj&dV2xmAUYrlr#4Lmneb%*g**F8A8Mm6o*gon0NOmJ?6TBf+l=U!09)U#@rGz7CMU ze5GS~y7i&w!}r%hCm*65H>2!sXK}OKi?Y;l4HESev;fMMxmZG*O)OgnDZG@vw z?&SFoHNsDjicsH{+HyP25B%`1E)9AUkr+;PV#oDgPnhmSd~ayr|D!BXNPzjn&&rX~$FZ|40FD_>iw;<{np zj6J8PP~vv)^@mUBD3Ycx#4{%w5lpe4@?Szoft$9nX1E$A3>X~ zW-}nKFGt|v!-ooOvnoA(eWw~5sprm471swMEc$*e)a2_QI{d$+yzVGf)wYB#Zh0w= zbEw;+?$e$7#M)dz7A17O(&!Pc%roJVmr7h%EH;-n)Sq14#MFz!xw*Mtak|xIeUxM> zwD$7y@>qHfEA_zzwMKC3NI_YJ9RU>1l6uN}JGATYvBTBP z+z3+BMl*ctrY69@bLV1fNL7CP!oNcFu~78iKrWJJ#?ui{RbCGJx>rdpKlUW2e8Pfr z5dF};k|)o(73HEfo%1Rbn`B6lJyqF7A8!ufhxFP4d>=i!GkJ9K;M&To=~5W==<-Z7 z{p}{AJuTsOmdo7&t=T5OFD%ln@rbQk&P@bLhu=VSC9 z$J$~?Yd1m=^pTDJ96~rTz%H~#KxA4?nc_;2uO6p#ZBWqFGq0h)6;X#B`6-*z(rV@D zd3JTPr{}GV9Hi!dZqTR6g!`iX0pVg35schK&$8wIL`Q}cL2e`RU_&cV5by9i1p%$3-*V9-NT1tJ4##Ew_E4QDW3kP zE#%f8?s6)_VTWU>UFj-f$3E;m;WxFR(O!pMd`bB6_6H-BsN+jZ_jfrlG4*mQCDZ9p zLOt>5KH*=P!c?{c$!7m#T^GSw*x5l-;;sDxDFHFJN4zGIl9OL9ml_?sxA%~#_N|L& z-)BrO)PPT$f(9#84mBpX%|4M614Sk>J$>5@qrCJ)e!9pF3cUv2^Iwn08i#)i(`i|n z=xi%MOpN{f2&0A=$srO6Z@E5p+vY=r#(f8rqrWlPu`*BQk-H^$gK8*wWp@(@OdpHg zOm}!`G-j_9`Xn<^*#5U({^t3PRI;gMR6X!HWHwh`$rXPuuCKQm@)L@EA}9JJE4ICz zj&VU3=iqAi>X%DPPoBJIky~!Y^KxO>JB580Q>MK8WUU!yVmZR^c*Soa{o78=_1thj zzYu6-l&7sxmIQ}KMnuepurV`JaW(tnq-1Iu?%3YA0j25yjH`-pDjTXU5n9-ux3AP@ z6s~E2b`PBwt>;!n!vB9B??mbQP8?>m`TY#Ffyqp2q!pX(rmwrUq9!gYDBKG<|DnRM zGI=XP*TJ--t7G7SmJ|#|jh?uC$^8SX2Ge7@4Y6xFzp#%UiSU?BE4z^R@@(2^LRfZo zUV65cEmf{cyIoUD5~bfKA?_mHCxNQA878~+DQP9(2WrlW=Ds^}TK?7<(F@G`SYLl8 zMg~%RuGJ`$YuT8WNC66SZu(U{#xPjR+@Js5o>;^lneU};9A)bE>Mtk(VGyZ&uX zVlQ45=i*`ARc3RDJHhH}*9v!AXXgq;J20?n&j^#2*V)NFd~tWSmI(X1gv7)tQrP?V z0Vs$g_aK1zkEc*5167hMS(Ml1H|{as=>a3^M9z> zZniZwQY-wu(tU}(?fCJm*RRd*t}HMkkw^y*$Zia;_N^8gm5g&J1yt0L z=YJ4UJufK~h>NJGzW?Srou0Z9RKjxnc>S@HCvzt!;TF?(48H zUHg0Q@Ztse>nBklBs$lPx9@cV0xYR0Xlwj^zFT|?2zo4L?KTCtX*6bQ~Sn`f} z{r-y=F5H4qRr5i6gdLIAZG^%zwNrG$f>=E!Kkjl7q+N@Rbp>@gZ>(O(z}Pq)e3|t% zvM0M%W3kv{M~-AKEsbM`#J9TX?=zSMW%!yW;7>&=Q%%5r^41Z?z^b_VJ#TBTE~u-! zeeK#9tN8?XAj{Dc0~(hvdmQxMN1^Kd4j=H1K-$r10h66qx}nMvAf{)LPD`|RVD>S0!|CM#Lt?oVF_s-)BFyLgL)E|}l&5 z%+1n3pr*cBwom7kO4{}3mU75mx!adbGu!k2J@o$E4e(kXTeFI)xX}{XHxo5JzDbBt7(aVX8VlVdS60+TdYRKqvhQ; zwyqVGBQFoX;!xh!4?pGgdTQ#ZbLXYyuNdCEvfiUC%l z{p@3lMu_RQ(qt>|?X}r>UZ?Q}vNL|pbDyB7Yp!dO%K*(rEDy*qX7IOsgV)Mtn^XG3ua7FP+g~pAL+Ef_9va>6{ zqy$}-MMu5AX(@Z;V>}4@Q>QrBS~!tT%`b0^xqop{V$n~PCcI zZ4Z0G0=7QzBiM4md-~zf^L;w>qJDj1v7|yOM^;Wwo*i;Yr8+j=&24?tF+Qc%YtC$@ z{4sJ5GpqdwAAc7Wbv8EU7&nAVI|Wi_+bL%{-J;{UC2Z+rZ{JO+(9g=w zw(m?l78@HYCnYcLm2pK}8rvyt8Pk3|Q$0E=CPqTTszuZO_yf2P6}tvr)2ZiuiF1g$ zwC!|@kD8f=&bv#->=ut|RRvNP2Y*h?eu0JBDqY9w*OQ-LPq+-n5C#h?os1m)Y_guJ zT<1#iuUK1?P{SNQF?VF?09^25o0s=ENJbdXQmto}*EJhs+I~! zE+i%exQrV&snA!I*|-nx@ikFx*+1qxA|~lFjPyYnAPf=Twv}X=mA`imWuh&hEj=IR zr&D8-vRZkA?$D_SF?+%&PQt3id0*XbSYUBq;03{fJ#3>3_O}*K*(GOuNLA!cLZ5J+ zs4|!cq}D3Yx0ECHdYbxNdLykA_^!APi+16k7k3$RY}}j+W$=SdV;-IG6C#w`p(kKj z-QAZ`VC!GyRy$T{p4^X?hRNWry(GHV9_i}o#Uv)afA;Kf-PQ_D(she(-`>3&TV^}< z!u_EG6!Gxij3)w_Apg18LX7KupJ%K_q#$~G{5Lm;BD(gl8tKOn=NrC;vgf9!f9gpH z88L49((_j)2rQI7T1E<~Z{b=+s9QCHZ2W-2cnJO#Vu-DKUYOK8zX^Y>R1TfcRF|8e zHkm{5`;=J73TD2(F9J8)S4p$+t0prF_4x()YwMQ^+5^e3v^mw)BS6y?zv71VV$O@xT=MSy5Tc(zf9GaAIH!8B$)M(RhsouCE zqsm(~7)D;>66|<-P)6_!ow>#m7?fN&zd3#n9+z+G);QebuA`nPjybD_skDuCt+w#r zbTIdy9fDBtMkW%YtM0Y6#*|gKTb~PpmId~0y`9z2dBe3R(65z5ndWtKdFzhM0ELY4 z|0Vng36RaKoC+&y)d_id*ffN;KH#*r^o3l-_#kEF;@%UmYFsua#&Py_mIy>@$41!G z|M*RD8JDjn-O<&Z-{`PuKOv{Ing&?Pc>y}QCt+wPfw2=9@7z27o4&KN6ww&pu{whY zq%cUC09!8wNgl;jWYBz^X|cX)%Zn4rba%H#Qdx2B+^FHv8lzID`0eFyusZs-{MM1b z;!;w2rtC~&t6VEZ5nIBIt6fgp7B^St8gnMLY>TgmOHrW5?|rcT{?uys==uNwB~IT8 z;epJ%`YVWVdIu02tL;&3HX;yP=m5yeprEB}#%@+xf8UKDO!*qkXT_)XkNMF}K%#B< zunRS9Y@Hi}5=A1EnP0H+7HynS;Z7OiK;aAe5Xz7A;?1t;@dj-bBha#Z^71OxS zqnr(B?75ja=iV{Dv0Nx&GyICUX)6`e;7?q5Ei^YzLZ=!O&`|9RQv`h)bhpQY7%BIB+9rWaa55*|f`{8tg>I^IcH$6gA zM~;EgOdf}ZM!`-#cE0JVZCLO}u2Z;D0=a2>qt(<@;bo~HU|oUadK?LGiA}J)OC&U$ zYkB#Qm;wQfPG{zA&tD*wH~lP|WiUxFO&fT@yvQa^}Hi3flzvC+6;q*(!z50iSzZhVTAdDul^ccl*64UZ*78&ILP8gFNe z5)O{}V^}DQeQdPGw#(x|be~Q*{fUlk$cq;aQ_Xz=SL!8=Ydv3idX;ZAs+NyKa5f0@ zkz2YjSmQQnE)=p@%Dhz-Y+z%PWzrPzHbY$6237)~Jb~aAGe$CN`GB_dx{g&vHT( zctVJ-RU6TzWDpuwDTbWx-rZhE#caRvz{;D*(HK&rYdt>x8I&ih7eBzey~GKlkphBB zdJEl}HZ{qkUPsTsi{62)0Cf58diI~RRd^7YEEl3c>Yu1UxFQf}d#@GGa#GSnhs)7j zp-5$VjYZ&sU{Hz2H&E_KUGgQH&f9>ARq416UL3Li9 zU<5KIv$yw%fsw(c_4>7>&_h10-01wm!u}kL%q%GEJ&5su(wkk3o?*ldQFXJ+QDc2^ zyhxrs1a8eKneFK*1=StIFp{vD70IRFKmKnIK^Re63sGO+ZS*r-2-hCMz$^48cgaJiHRy0}ZtwlW4m!?U%u&r)4?EYE$mf5Z+c za3g&%XSJ`_P*%=uOwJC&Eh;bHXIJhq1v;qZp+%eaZQOhVs1sS4!k*r9KLSqqV)K^g z(?bZp!Y@TYUw+`gISC)^Lfz!kS~+4vJL7vsAN=_XRmSrLA7dMbYaXOnt#U*!)ArK{ zerW32p8^Pe5u2c~z@K>~BH|HH)qdQ&IVhzHU_5Mt7_@0E)qq*F(zkn_mw!Ll`< z1X-^L$a6p_inQd&qwQObPi;VpO`3@ga(P?snD4aKsyv<#h%!9oFbBunywgfYf|rC1 z_D?lim(e%bcBz{o=gK2&NwxN9IDN|$FDynL3fQrl-GM$UI_2kwiLUd zC^WDvb8EBLl=8`_qEvdElt({adZCwql2{&oqbx%tn5jpZE2j&}!MzkY21^b|Rt zZ3OR`G0SR80|RJ<%g70r!4HPGfg(c)BoU2iT5eh8khx@-qnV5)32z|hdjxQ6eRe`u zuH0sb4uJlG4*m@vD9?I;Xn?*FQe=rx1^qdvd9dW%h?_F{xY79idiq=vaUf1aSpotd zF;Dj!_ea@}*LXxrJos!qLgfNl4v`cVypA8s3E|xiKKG<2Lk(WIJT2g`Ht!*~kokuX zv1j__rCz|v9FVEEUB=CFiA|;%sDk){%*<~%FCv1@+PE0<2?5* zES8J)#t7yVFw~Lpj1ay&0E3_zcUqmhE^=>a;qvNSN9|ILc)gF;c4I&1r%#_OkbfLt zK^-?TD*>Of(+~mrn!!Pteas;j`S|odeL903D5__O2l@Gm`GwvEA1o=M*r!A zF4hO&H7gD>Y(6`Q;B7roWMjJaaSvh@5&_BZ9;<$YFt|IgWua_c7*W9wQ>)<9$ z5K3TnDzZu;^#Jwn3mg3!eWUddwzo3WsC-9Me|+`)@xOV!DT@F)ypejRKu*S zqAGm^$keewD*V{|!HV+n!+;)UWs6pu5y1++7II}&6kC_3997fXLEVpY?dyehtGOHL zpJblgqM-d4@K$Yx@SN3c-K~T!Hh-WWwEWd*L7DE~e)@)AbV_AnCE($(&DmCq&Klaf zvcp`5tlD02sq^nGGrJIz>~i#{miAsA>D!w~#0V=z81!nO8N2Q`MtfYeJ?#M6PCXqO z3U~EtywEN1gDh=DpTzf8`z4J>&dJVZGsQf)UxK}BoPW=d>>w2zSFY$FBe*fH( z@fk)6PJu=@GgPce7j}*!X^hVE5_taNxuArwrpl2QxZd{SyFLc7O%%t}aTwXBWIGT* zyEctT4}2f^mga(d9F*)gZj-1;4PXh2P;}M8h^8Fx5z{?PJ1dC`D+fd{D^dw!N^B&* zzz-2igNf0<8T7|5sv&f-8aHdCgcv;rIerwqDVko0BLb+dHGAsCGTbrJGPgv2U>Z> z3{_NAqU8ftzC$78F?9I)_I$=oRZ_1Gyx?e;BKb=DE_izS0}grL_o@+F394bY^y$0y zuTKA9Pj?sp2q7g4}dixn#hj z_i}y)hz42^eyzlq{za!}Lf_6Cz0m->=74p`!BvgWa~HKvF$9)INV2u9Ykxt>wx0Ba zXElDOjxgEWM+y9S!sB-e$S}CqU6`|T@(UJD8`(*{C@JTA8G8KMlIHl63kwdaB)y!} z;*E_5s*0PNvU>wQUrv%{KZ&Y0yOt>DlWh^WDcGK#0Q8@N_P}Kgc^tPDD&Izx6wQC0 zk-vap#9^gfZdaEZMl(cZtH>d?7A}yjfX<|yrQ94&y?jZ|kiOb1M4=RHLP)5f;e%!r zVi2Oc`IVjzcE+KKEHlgw56T3x14Pma5NYhpN2Pd}#Qyv7OpxkA}0zvbr# zj`D+D+RnB3(I|pq-n-X+Dzi@_@UwN1S*iYyAFxFH!gz*Sx#YELbI4CTpFXuHY9C-d z&~w~qwA=cntC`u;xvoa-quL4YBe>-`;D-mwbFwv4(gpSG=BaDMwP7dZ1$p@|15FbF zs|g@Tq^nAJ6Uzi~P(}LIv_}hi3d;HNnwl)YxZenfY9m-SHev=CRuyHZ`qmY-zFh0`@|^$h7Ba(& zbeMkO1Ho6?h0~Rv2P;t*RZ^gYEUfbBHbdp#0mj56vph&e4eYqUboEePNr@2|u8J{7g_)QBY7L3>(?%_;T`Ew15u!@vh5^h#OKRUDeb4;x{$*B3}=q4U)(!tm^`8 znYj-YQ3@L|oSiie+G_oJKG)JZh=oU?*;B{ZI1f-%7rRDP6dH|tC9wTa=#E|#$YNc^ z^$iV+=TM%0Fq%%0#OzkwoN@B3ed^r#Xlt3-K+hac5{=R?tG$I(B)`LNfBSYpaeJe^ z4o6_-I)IV$TK9)+&aw&bE8px*9jo^NBJm&r0g}|GmAJiV0JI6nUS?cdL12+U>Lb+p z^c;dtyRIB_OumdQKtQ1(GWF4vfjM+cr0TOG8#@3=AcK`$IQx0r2@TXwf1f~TY(i;| zul@ZSH!>{(mKDt*Lz0ZoDq2Qo8l$#`_^fvNjifHmC5h#`TBe+%%KUhGXbzi>P;ih1 z0t=WP^~dCiOL!07;&mR7VxV$(lTp~ox4CLO{@O?-avXn3qP2X@vimtTnr5W(cA0I* zI~Qn+^h5xb#G^J+>6OD1u%umLyR}{&1PWRs-lqoBL%F$*W%EslswR4AwQn`NxD!@MJTB9Ie1TfhfKXPlJv@^o&Euu__4Rtq3l%8WP2n3%7_)qe10b&OkaFt-HokK86f2b>`% z5q3wnSC~d=k>@%jBX_~~PVzRm(_t*>kzWJp=4D6M*dEuc!WY0*p(8pj0xlAG3I1kenFs1 zK@gAxK$?8}@$+QF|7`D7=*_?9`;2QQm7Ph4!muhTUygB{;8#zS!vEP01ClGKE>7M9 zJu9na;h)X;byAB(&FgPPO-+Xw6WYHGUY$SA6`ho1qtDB&cq{4{J3Q^>%UkWR_Bas< zxtz-dhUYm^I*BoS>aSm2KD5!%-Y%8z)+PXNa4T>FG_Y>9iyNF@fDfjxtLK+#Vr|Ik-l9}KO60F2&;FB-!wsoH`pEJ|{#O>);^ zP6o&cz-R`LO1B_t4xmaYa^6d0%BFw(@kh50dMqEr<+KH$#x|z6xkqM0q8^GEmwoi5 zN9#0YH^aldoZ)kta+2yLP3!6VZ`_o>;y|PKD zpF@KQ&hN)$^NoLQ-sjH>8I&_BFL)`dpd;cS72hju&fT_m8YsM!50@jYsRZ#T$c*P! zS5!3T^4Mzvr41-Ks)~DMq7>yQa;ACCbLfb#ZoKG7lKYt7 zgw@Y5`1r$RvIwNpe13u3+QKO>jD=kRa*dYPNJS$ot`J^@YIFku=!1^RDyy{IvNe#` zJ6m8tW;86kw-_8=cmR|@Q`g$ooHH>3QJ_2nS+I5O^C6<+=!Uw8r!649zl4aQ!0IOd9q#9no$d2f*@tBKj2l5gL z3*E`n+@~gU-u&Jk@J)CAECzED#m2D~bS+`5&QJO5jdI!cIGPa^x6Ya3R}*s#_vr?Z zkB%H|<)+B+^LNb`KHXhja;W71uD|qwP+TiY-!{1IDi{Ea1Yh(NSG8 zYZ&bmc|kBEnH>)cV^Ou^M&`h`M+_&lq{kLknc9Pkt4=MFzq0cVDXoHrHNI8PY7_%v zw28{22XMp%?($jUY;H?%e?p?R&`7M44rY>8AH*%ioaKowcwBZS24&eD>nSf>@Bh$+fYk0Tl+* zqD?awO@9D>mcaZ_el``lJv?QZv+mk4cp&8IfN9&u`Fox3E|1iRNlUlCU9FCD>3O;j zK8yupp8Dg;&6G+U6H z=(9=K0>?-O<>kw7=XQU1_>dXs0&Si_paTQHS`G1eeV3N0uC5l~d}PVkqRAZ4{~rIJ zrML;SN*PR9+u#Dffm+T;|BC3*wQCD2U)!r_%7dkhOAeh zMotVKXpzGe9+H&vC}gX07zfg$Ems66Sq$XzVQyL-nHVnsT4eP%U@u_s>@ccfu~|Nl!+4$hD^`*8=c?g6eN&jv(zZyYi5dYR zp|Q8+m`*6ta3c4vl_X{{lxygdr7wOoFNjXHY=Hs2FH+8jFcTb}cmgzHLd7+oYQ#i3 zgRV92i0m}{KeX^7!>kdJ>iW;QnEAAhQY!%tQpvs2{@m>}ADrPSlup8x>6ejTpyane zL`%k6&CXbJq%cclf4GFqRT6cbzg*oZ@kd5S$7t>f_egkGOeSN1yU^<Mf)x~W)1~T=c z6UCe}F8bnoLwK8P`lmq#U;&WysCFLm-iKXjFOepcb7rz&d=`4MHqVA62b2ww-tpO3 zJ1>3WcR>zI3dMq=)-UeZfA73j(riX}BD?$r!n-v5+#>}^FexGRsJ8k6U7%_sVJYRu zIaQ&vXM1x6zyKM$j`H^*080~PtuJT<+c+JeT%ZzCMMKIdZ8j^6uC)mT`E-yV8i}&2 z&eLftjA<|k4PKYuwm7iV!=Y8Q=+isaoXH;jI`mK<Six)ZAKpI-WrWYZ+zT`MGZ< zL)rl1klGX0<`Vz-?`Q;Xiqm)@riT_^O;038s6v6UQq6H;=r`M^+K{qRBx{#)tj zwXp8AM;Trkw_k^0pL_w0ijbIF^j#gzj?!IlV8S`h9)I7z1sK{GAq+N^gTZ>dJ6!JG zy{sy(`9+7#$lSoDfF35^RSL_l&elwLFk1fLi;1L!#JysjiFermQPDo?b@T6q`p?M> z)|7}CBLc%ckQENfupI^!>Y z_1B>qcgz|{WE;y@yjMD8m>$t6`n)cEHNXv$c@wG9e)5X-I}aT#tx6-iK=PQ0DXiRf zlQ@hN1YJ)7;IMa*pxRyRK0cojUdRcg6Av8?=EFN2E|051{<(%fN&WJ2ct~v+53KC& z$8KO>2=9_)*_5$(V`25Ec+1s-3W9qGb2c5WwWm#LfV1uiLw*0?h`!9uX&lU{K!$iDy!d<27E?g z$T!1k8wPq<94>sqk3mZT^W}B1p0iWtbQ{&XTiVB*lvc@k>GW_->l!S-QBd^an-TK| z{o+8nQW|d21Om5Do1k7eM9NKctw*Z$^~;y~K(H3^`*ZCo%)$sUh`9!dj<&IEue|YxaC#^+>+S=K7VVWJ2s%~rm zd@A~EO;XE&M9D4V{?QW#_H@<+L@=;qaWoPiQF(O&m3F~DxPekMo!WGm#?c4^x@!i| z-0lT+Ig5Mk@y@KHiPo!{5pwJ{NOB{*XukFch{ZN=l-tknQaw)&*|s zi>og1p~TFrEDn^~&94`H-wcUWEyc2O%bjFCY-E`DTy$q39n}#C65Fw6;JkMBfS%Ja ztblq?PcXQ#{=6K9FG-}+qh2VcQBdWJngp+}AFu$5m{W>oxf$gfWF=>#7^u)ITn=Z%xTGPq^nN!%dD5ZH$-!2l=*G@uRxE3={AbBn9OsO+qwvW5&ktwafY4f$(J ziy*Km%^Kgl>5m;Mi0|2qib-u6ud!RaM`sRa;Yq&Fr44MNd6^EaYzB(Cy?CiWt@un? zFHs4CgA;IQ*^M4$m+ogy8nhC)Z7W&MS;6)YJhx z7(gesD%svY4xu-f;4~lVtS?d50L5cqWJIIW39@S*Ioc`x<#siY^*@b(wUmVC6a~398fekiuTDA3?gcze z1Gu01LBrXO*~9!VTFaB%Jwp?>O?Hr-6bFvli({?;^rcMeflDAO0knbfX+Up|ga&D9 zCeIp2#l%;uTj@w08ZR6%vJ;vYlp1iBwtV^ewG`p|x54{)u6_KgSEqn{^Obdlj{b_) z+_S}(hg65bKD<)AHr5f`e^F>mX>f0m`Tex^n${VPg2o|`mjIqs6@e@qP!Xkj|e=Rl#gA-j>*X**gCNzbV*CMVOsboCeqSZg&GaUwHcvHz- z6%T?peI~&4#u<)IoB`~FT=Bwb{LAxa&rYF;!v=&5tsQZC6?*NTD?0Vi=}bH`!@zo+ zCvcQ1@3&CM=vvB=N)-}rfXMjJSP%wRuU?Jz0ke@y!{|0 z$f(R@uJV$%e8ApzihQg0<})|eyeQp5MU+4dslr<$n>=H`2nSgScCE{v}zs9zNBI6rx`1;ik514?5Z zM7her$Cd!`-F`+5*i{{+Ci^5Zf#)HUpGfr5wfq(J?QO&M-c5Y?al8~^Q!uTj+5_GP z7?yp3n;U-I)^cR=**#X?@hu$0wA#t2wy3FkBJk@EEfYhVtj*QEE|%!xxm|F9GM5pc zhXLB)vQ0|Q+WmNs`4bUO)(D2%fU$dE!c$mLf!emfys49eKKN{7Gk2y6p`}x~ zi)n&~j_sVPjcuZ(RW-k1F>FU;^YK+dFoK=2D!(5b(Tq05?fgkE;9ot+!cwl_HQSb@ zHI4xGFAxUCsnRxWVYW{DS)Ju>EZf)Cf@Xb}`fx*Sca6Zsi`heo4t-r86vQMYZ$f>E zu2n4zg#yeox~;WBSh>S?#{$a;UU=d`twq%Oq65Xtu>*L4TNIn_OIufDXV-nFDoXMI zd6^T*eZ~4&5o|ar?qHdd%Q~@Sm3(k1xY+!FzQhk-qYdajgpB*-V>9GJ|z8vIBd|KK$Sno_~Cpcv5i_yae8P{|~_$gExfy2ilF3 zs6A2oX3i(7P6DwAbmDGRgc!YSj!yG>-&qghh-Ecm2s8O3D$3S4KQvV1gMwbv%Boiw z7Qa{Vc?jHkbXv&wIx@eYAh96`xXhP3;GatpS)Es6{VN#y&&nrh5 z+3Q^t(&>1N{CG7U-2NdPfT5)zFv#V)6x!^SPA%Pm(C8Prk=0t;cZ z6nd5Y3F`MQGciqW47cjM*l~d=&3vfIrQj!nnxDTGhh;EGe_NoOgIAA)(%WL&g^`I0 z{&jWxeO;_^21S2WezkjmRmSFQ5%JN78m`#32+2=RT&?&O$wXhVVx!Ex!d$*x_y zT3{~WDNB9pX;3oHw#6=cl6F7Sr0ZBB+cC1?RVL-@6Gt2sD=8DeiYiiVme-(Aj?1h1 z+$E`f@17X1^AxYVuQP}mk*?W;j?%k!%90(_lPir`Q|9QFm@pGJ=! z@wR&zm1w)Jtz+{qGRD0Mt$g>q=ezI5Ih}U^gYXQC=ggWbJib5PzK z^9wi|-SET5<1o!%&tCu{y+&nEkL@nFtgNvr3AzqYbNB#i?YMlsz5(80Wm^&2@udVD z&IpGNp9RhBgwV##J8y`4wjNh?;m2o*$G6^}->vim>R&rlx7^ac_KDdIn6uzzNBgQ^YQK1T8=GAOhch}nkw!s=L5K{djN$)pjS zH=#8?wcN`LKe-EuA8KK7sGE%wGB7m65)A^nx_m652TBz!ZUsTn^?sHh_;)-^WdE76 z$Bw<*7r=Vz%4lw2TTGt_Ixa3Qw4>_bQ3=i>_~c-A0S`6XSe5J8?RLAb{|es>8kn$g z?0b3Q#9Th$N+Kv?v?^C4)l389DXlsfQ?8R9+nNBs%1D zO2}zM?Pqz-nA{l`gN|iD@MsPP+$y#@y+}JhFHef#Ae!5z%@mWeG*Xod#IzPgAkBhv z6f?mtCaMpozB3T6dTQ#(vBNzR6HbG1F%s<)LLaliaUQkLiXhXy$Nl3S1`5kjLJfZ9 zBw&d<2wXRBp8W`M9Rb5J(OT>5St7dO0VG_w67H1z_%V|y3=HWBOZ*}^PUx%W`Tn}` z=Z-8&RQ>0wfyqobbU$mDBq0HS{On^S=mBYWbPIRg?TN~ibkYs$S^)52U(G0qfEu)Q zjM~@c)W}#KP&vTq;Iz1R%Nvh1f8zw4Id^H3pANMA9I`WP0y8tuP13HW48_k{s?wqs^ABs@h}ylTRmRqb*OaE#Qug-JF+WnR?H77dG734UFlKxBrs@s zubt9J6<{^5^Sui^Hl{O_wl3-;pUTZjLnmuYqEXcL8b*z4e5WXu=5v{jBJNlvrpIg` z7EdvZ4L~Sr-AH~n_z9T6O3e@upOtiF02qUw6ET9~Ve4}C-Dzi3NkG|354YzAcBlKJ zM^D--PnM^rUjxP?RmIX$+XwHM&odCS-oD3Z7<3m=Yh!*+!sP!+w&}6`tX$Um@PD21 zigT>@!MQf*xD>V4v>N3XbOuW%QIqijT8n$bt8V%}{gj{Y3)*R>A}wU?l>!1D}xzA%X9mrHD*n?IHT4s{RQjsnLfgvrUi!ULT6O)99aACZM4)g%)jgitH z^_91^%v}r6vj=;R>NMnAPCN=RyCxbU?R3ibx@bXu$CrN7j5OCVXHv=q^rId7I@$cs z!DQ@KKzZ8jzSA9FQXp7~_DUdY4g-fU&=rk;<^v!-mF0;KAMWQw+1X@`$T4pl=;^uq z++(J^nwpO_c9S3PncCGpHA}o~RW(aFE)-`EL|5P$tr`_~h$3N@dVoVnB46xc*$E|Q zfywf^I-k9Y;Bc83sQfiz7jhRK=Mcs^_W+#J4qM9Uz9YX2?#k=DJFW7-A)Lb~XtGUo zRaAm4f@rd)jevMT<`SeOA7&1b?l~Rh;&L4AOC4|h@`ZYmoc#ZFr{Ta8C=fo1N>j0xwnZ)xVJQ~bIy@~SDthfLjd{>qD|r7`PLwGNZ`IMI&FRRbaA-h! z;i8%;Y^=`5Z6#3NG8!laru7w)ijZd~$&164Ku%+_cX=AzX~_!?Z-Q>zeiUo)9rV{% z2!~i$`oK`LIQPkArNMj~()@$K6lXG|K(g%U4Kw4Rz}?zA|?BSG*ypVbnFp7e|OLHqD_5FJV#?AT?rPykgMJM|fFJJMVzc6B_ zuB^xmCXpJIK*~;qt>0}g*ZQo&dGzQ}JAHUcibGzpsr2flb}(I=G_VvD6f8rbB|kVt zlSd99z!_A=DMQf99FgA@2)t9nmemu?BTV*M*ROvLgL--vHX7~H-k{(%t0=&3aiHY- zu<23xYhxe)SNb0Xe9&sg4T+D|v}#`v-Vwl8O|Sn0zr&}d0;W@U?RnoQx7x3lV_YmE zBvff8?=_cft3pf^xBljyK>_C&OS)9r9qsKII^`%k5PjAYjExsmNnoo+lr$)U88`o555tLs?Z zh_Tw{CY~-SA|nGDPjJrq3u8C0U+=Kw1&RL$lWJ&gUh!R^M0!kQ#ak4me^I5}KS%$t zst`Mjq}HV1-T^%j1pJPh?1udHZ&K4^!;GIJ9pI#WQhc?fD{P)U51hfW=(O*c`QF!< zdYF?FY)4Z4cbs^SXa4%)Wx@f_ztY}KltZh*VI@w|4K=nhpMf9Q+KOYiQ);2W0QGHq zPebD2Q>Se7iOc==8Viw~0}M+cP}N$f@17-5zyaQ34gO zM2s}H*9b^Sjj#Iy`yB^a=J1j%P$W!0scCsk$&LVH2PiEkN%vT^IAuMZ(sEUhh_mEJBb{x5d2b;Q?vlapxUxF`5u-)I{$fJ!^0+sWKM4JZv#{e zc_IiC?DF_r77$>`$vy-782tqE$c7FOx+Q_>rv;XffS;yH)laM*`8TpLEdCG5ei1Oo z3k)^NuKRR3Q^$0Igy8qLvdo>yvi}cz-x-$GmA1=FMm?iZV?_i(1x2MPpma#0NI-=s z3er^sM7s1&Vk}5gsz_6+NR!@+N|7#Iq)P9-xA)wOrun`(KhMA6+G8B`efQpLJ>`Dx zrz|nDv)#`hvJeoT_NJ)cu!0lJE0D>LkCUvGFJJaIkUDqHwxRn#HQo;&DCp;VT?UkI7#+=dUYRcziwl)dg*2c?H}mEVYb@+VLGhd+Eb1k_1A8U z2XMZY2F5T{ZR_JFGDuMw1Z2lpez&1iR{t{$+l;OYu5G{X=l#S=HE#CaayoX8u&JQQ z`{(!mMVX=&B~o`dIfqA2f;&>McEG2Wn^zq3<*OYp`4f})qX?#UrT zSC^#Gm>rBZ>JfVH{+!*WS2>298Mi^;EJyKk5y}skonZZTedGz0*p9N}e<<&(*T;|` z=KtbthsHqR#ct=)INDm11Rzy3=W_KSi(}BCJ)>-3@XA06WvzqbW8*wDsBYlSostv7 zmb#;bB;C_n-VE23d+Sft-nn5EIm)5-G}wH+S-L5UAL;M7d`B9+#&*mG`1+p1>h0F= zOxJ&W`|{V#7|1Xz%*Abm+fkf1G!25{!=;&FeK10LOU+KPzpi;=u^6=rg z27axUW@{3&_Srj~-jb~?5mx3$x?RQ80aA>_x_-NY(DX8aP;4P0+zNFeTGUSap54hP zf3oL-lcn!l-KG<0!pOHqX-tx014?Y7Mk3(GQ`FS=@GG9`#S-HmrTXpr*+ai&uYtt5YV3`8Ou*_S(w zDdNj@F`gVMNbJkkzP>#5=VNr-dYJ6c$K?1C%IEaqkvIMEwyiur{q^%lyWe~`fB4r= zKRrG4f3QhuS;Fd`I}P%H1^RkuRosv z@!%D^SgMflTln+N;*DF26lYOXX>K0pns;2fxuj>Qv~RyB{3?}*T*c>dcI_j)%kM+DeZ3)%3r_k*&ijJT=??~U9N0>Ajm*<-MTaD?(zI}6IRFPjMN^uWQ^Gvt9x?AHgd73eysi}qnwZYVs z*q%DQdH1e-m+V6_)sY|dUpQ68sa@Drotz9eexDvy+lKe|Qy3_SpjxaLqkErsra7i*#Zi?nNsS9U6;PyHq+tCV>R z(ZN?%rZxBak!{2JxD@T(p%=|rDklB-jSI~l9y)7sY2L9pb6(?Mq3sbiIbV@%PES^4 z--;i7+(aFOpY-*KCeCr04*5Rk?;MQmc+RbPtIb>3dgD3e4;k)LAyfVg+}A88ybwKX1UWUH8rSHBcdV=OS3pw-dMBkrrQFhjeuJhdy_H9z^47j z5V^2x5lQwM&DN&p&vR)@+Kk+m)Iq@c1zbT282640usF5c<+)an7LUl~@?}JQ~3q=9wFx zeLY7T5PE6L&hm_fv2nTI-iJn;k5}e$?P6Zy+9G~8OjJ{o&aCz3@lte*&dRZ{bf>fR zjvwo_thgEl>06oz+Y%V6ZXTHW;>C-Esjkx{4k#lP45`-$us%$0ZuYDEyrE8xiNI0z zQkCI>cqvDhhzKs<|FgP;2TgacCup7;Qs!jGI5C8a|F)pm&C8dyvlk_gmxGlQysufS z>D$6<;N4r|UB&6IYWOUnb-a+7vKKp7bmt-8aM=@NLXM6qqB%D>!>~58*FJi%|*Sz0K%emVZ|1Np`#)7Z{BP$`1(LY zZ9yZNDfE(`BJ*(ODo(K*-uTT7bTnEHmr4j$g>w4}-nmDbZ_)N>`@*A#{zUpwT zz4iD!vVbzZhQ@-Yf8Gja|0>``jBY~i?|*$u;_+E<;t ztJJ8k`bdZptzdHC1$U1l^E}r%Xg8$o*fIFU_@bb+9AC0bUEfaqq`U1g0=>OIOdrC{v7hJWk!Q zCC#|s+f4mSLLnbp3(E<1=YWL{jpL;-IQMt+ zl<7mdO$K~><_g^mWq(eL)v5}$ZoBtxemI+vQB8nhLBnQY%u6f}I<&JKG!;{4CIkD- z!Mk@|JvtNgT8?*Gw}fJH&MB)I`s1bed+raKwc;VX#!~~miCHEwncFT}*__MGoL)Kt zLpHLxgD}9laF}2 zecgz0xhhlUgf4yot@#rtk|Z>v(=0B-&ehOJeh7`!D9<`xis=%fnjS47TEm&!B~lNX z4>j@`l$?5$Tf8fvT>nkX^w&SPwOjvdrWMv{#t{fWk7{7YXVIP!Wb=JSGF zg!k>(0h{0Etx?IsBeF1}dIbbQJ#$~=N1?-QeuaAZ<+e7z3ocHi-6}`Fj5Mo4T7sm> zTA_*$&-V)GNK?4k_6pnV8>i3>8%~*xjN}^L-?Y8>*HwdMeXZutnUpmC3z}zi%(sr; z@=`i~#6P_!(6CLs9S1X{N&-m5si9@ojw( zl%G&1RHh&J<@lXi)@=d(J0ZpRmD zVPXmD#5E5Y2bm5p*=xLcvp4setdeU59mQg}iMKbHv2AI7__u!FqN3DTqe9n&alEdJ zo0R0DwamHPnNgm6ZwFwM}ZzQ z1;ZyVo(M@7zj{@Bj~jFL<^KM#OFq6m3#!huY8gv&xiRj?YVuPIWOKR71$Qt9Sedw+ z_PCqbWNxRn`U&;RHWy!TpX%h=xSgI}V0(j5=j^0JvNn+}3whC?9sQf%0v4az#&_Fj zAhGV3WjrKDd@PWlw8Zqoi~W^}mcIJ$X$)pNv!!Mo2>?K&l=r^VcPYHBc4wEpkwD#( z7ke;b)n(aib(O~~ z?iP9}2=+zg_{&HqF?#QxkkNKHr7B5O)V|w`O=&+z#)!*vp5aX1!w)!HGN<{Dg-QkN zloDCI(^fx8o_;8sQpP*e%6JPvEl9j7^mssG^ZPg3+rK^uN@fU-&VJUNueMFiL50089Rh{Ra(p}?vqX$4L^TQqlU*DzO4)pX*X%m? zolgfl1^Y|=PcyP*tPMoWg zy=vr?@vwd|Mh)?=BV5#*+PdxVXbzf(i;CU$Xk?9-`NZDsd?RlgfY7bYUAoK(6;-D^ z%ucE1yYtTVFys;F0R!xUP(}<0Q0ue+FdCXs1o!Sb+W4$e)g}`FY#&!wf_rzicK1!j zwob1Asfb_*muLX_oO0&e`RSp|Af@?jv zmAu92mS?qm7}ugAxG-XU%BbgYPXlnmKt0dpdX3Kc@iv5fkCU5U>_#8r)hPP2E<#hk zJJO{}88y8TO*c6ZsM9cZrzuV8yu`M8 zqk;5cmn$b`9B1_82GIU=7?wWv-Mz2ZSY-2p#do!bhtV&-7aIO_)=~D4h%W_PTb=zj3nP zMUjh0HE3sdAp#h3@9G(0MzJBclvb|8ZNSCO7{7lEV%gJ^J(zQD*pR3a+GEZMj(z+q zH=F6!Sx6{588msYjFpC-As*(&=R{T4c=iIV5IjAlsq_SH*FGk7re~?fzV!3vjOw4Z+O*nhi;U zTf~i%$8G! z7)u&Y2ELBAIej)ftGV^v2h|8&g)rm%67NF#El4zrYpLk`NXHvoyCI;n(=X82CrPf< zEdgtH3&VK=GtLfnCmncub|ALEX7nTDuARg3!*ExR3Cu%<_N{I|QL#KnA@M@&=FQ8y_wE(_<(He0%9$r%O&yDh%t!NSV}h>Iy8lFc<`;fary(m4f%#W_6&pxj#sgA&TjyZw0Dv7-y`3+U&wWh?pJE*0Ai znm7_n!_E>DE=Ny{Ak^d zO(}Ds?YkmWXFfNbwwuQp)$2^od|j;x!vUvH7q`dQX0j~J)ukUk9H>=CUy)^9P(HNv z!2{7)fS~Jf9qrdM%$fooY!PuJAxnsLO^pMFnCm)Mh&hY1@X$W;Gx>6QD6QYq-CvAL zL(+j*6@Js9z4Jqs`tBZyPuP+dly`e^yMW8FGHH6_(cj##FyAuXhK6+qF$U|CZYuAo z1*aROftQ{i(`*(Tj33+Il}DrDSo(3CyDcI{VR3%DV^`^gpx3W?k&OaS?t) zxS7$fj~Id%gf$S^j7}-U6x0eOi}UG4)atY)XJ@k7OhyERS>;=h01E6=9(Hd+I;n%Q+4Xuf19}Rg<3Pvd~b6ocUND2HC z!=f2o=ytgs&2%^6y9s4VLF8Y_&uDKwEyO!Fap38wq0gSZ`7{~}!ZwTjDz_H~;Lz-c zylI0n9-15Ug?AT#YI=6>-(Ty9e;F)jeOU7R)DeG+vEfrzUP7D}y7xD3y%k_>vs+eW z@sXo{v8fb%K>O3P&W^FFv9=bVE#(?|7Vq=hk0UNl5qlH4~8NIUs!_ z)mnLCaEH>0+Y+kE%Rid4NnB|6HDtGUlM?1+?6y{Zb0j^{7{lU1uEB3s#LET%wZ^x_ z729~dy4s&H_2mMM&~U$^_2iL?bW_Ubz>2+cEo-%p+BTf?5fy9cii5A@;zOC!vMi^S zFK63KQ5r4`H!mX8F5DOc-u*Vvq3@*NU;{JD&d4|NKLLL|58?J9uVF9{n_Xn=sFygL zwMh&@R>|M4Lb2c(y*NL0pz4d9!r4d8uR-w*yfyT6JIAg0g-Je9LWbK@!dn5Ts=du2 z#wjjN#$LlvExE~NA8beAm)T5?mTF?w*Pu)3T{Bg~o63S^}=amgw|9GT!@N&}& zhz0@8iUn)f=FH{qu#I=3R$YE|xE}M1aInl5G_zh`Za+_gVA>4bk=C2WPmcy>2+FpOs9<>5}3;|I8`jlahR$ zzL7(p-4|b8>ra{M8?8vxa#0i$4@RUcNLi?&5lI%WI%@DmGrM>u)oL1_bKokQv5wl@ z6#q4I+SNRre~;wamx}^;+&ggp$Jeqk%Bb5IK9kngxi}@j6rDL$ z=B{4O*BxxuHY&#Hsg`4MzwL$A(BsNVPa1)Eb}&gQocGFh1i3iulH_G%)Tjxu9L{8` zTgwmGU2^}C;KZPniNEBaPdvO$=(~s72cs^5JNP(&Kk3p*eCVVfZcebjT7I4LA2I#L(~?eK?ZtT^Xw? z3I?m>`A!xQCGW~;3{%TJ;-#2;nfeU9L2j%;b-CnY@I5t!SxTl2Tk znxfTcA}B)3ZhnazW1XA0eeY)!1zbb;MXawj_m^((9qy4zRRgh)~n(mU-)XjPeoMYr9}@zHEPLfv`bu2#+?WS}trwn`w6X z;kr|6$mDNpstyXd^ZpKFg^~JrjTSw&H#E@W^Ah{C7-McKx3z`#R)yU@UfLD(%l(a` z5h{Mk?*a?cD#Oa{K(<`qoJx_9ACtcvd+q#GZSBL&f~KEe4Hd~212ZG-QQ{}S+-Y69 zd5h}6=ZHY5fPWkhc*ch57V30npS~JrnLhgEEdGY2-)cBC5V~N{Ca#hH{8U&Mf6+$F zd%o*yG$t1-8pIZt)c%rTk()$zwPoGusy@OET^;79kymhc2+WQY?e!deB%;Uw7vb@2 zJT4?M^4h}J?R5q8K~u%XyE!8-HB6CZ%phS2-Bjv7dyJHsmCZZzE}oma=ulai(i5n4 zh5bO(g^&=ocG>K?OWbV7K7RIYvYdDl5uIio#KB09^?+%ddEL`^y6*D-YYn~aHNGUV zmH+A*;|1tuQm}|BE&j(A^=kk50*s#c z2{`fIflijG&#Kue<7Hy1_;U?wSwaMV`rz!`?mTZ?YZ^OCo7lZ%(B-X)9a@+j))(+nlcHtT8Bqy!tR7McfwX;J|bMg)C zPZ=0yAGjoIHrNE6xUUOxUQ%c2Z6=RH(jLK=$iv|{F%mrnb$jX7 zbF!y)q>%`n%R={P!rhuPAV~k5nGEk1g<~*0uxWKeKL7O{vd~a3m5_0km8m`PV()H9 zZyl|m*$j_OG_XbgN%66Y&zgS zWgdPEShm~WQe1KDkycQkVV&>onGBObf!sVV#a+mCT=w(&i{!QdW2X>NALuvIyRs~E zF*FPs{(NWT6W^pCZq$n_7Z!P9&^~0}F2&3CBKgkcu=MGLuasN{3a@SutDssHr&-un zgVDUYYR#`>2oBX2N}A3uoYYP2e8)TX@f0723p<+*O^_G^wQ0+uZ7hYdz`Osnu6vc> zZIwsPdki`~Z0!;H)zp_&zyQy*0&BjDEz?wU_sd9OSptm#YV8~JY%mAUr?kG9f! zS8(Qkxzm!R+U5-tbq)(3|5SZEVg6%gkV3M*!Tex*8#ug=ebGSp?H?IkT>jCpwWw&; zu&V?)3ZxiWnPyD@3HPFqp-)y=Sikite|cq;LOCLAue;WZ@X2c0rd5CbIn%qNAph|W z%YsWhO5T$ND!FN#VIQ^$@DnXr!9-rwFAtbH+bnL(|Lfn$IK55Dt47IsUYB|ko&KGP z=1^Oi>DyOG{%1t;gKBHeq0wq-TNg|zJp-IpUB86XXD)*8o%c5l@4WP)E9u;i+6wg}ABAIsVz% zOG}jgnGq60`-#XVYtLrxGh7Id1&%8Kx0&lEwG>rm;^mp-_{)70=Vy%5U|sr`y3y6W z{BvWx%l6{hRzKZ^0U+XvIUW-4)Y3?#f_$gy`@cq2W@elPh7`Nyt{hiU%t*1gU$=Yr z?$DhYZoexw3XWb(pE}T15}%*{%Fvd6y2;d1aIWV*O>tGKVRBE4?MiSz+$<0w%8xlO z;(}Fa#_43s8+3Sh53|p_FDNP&5cNqK>=(QcCaJV@j}^Q8#N~W0;`n{dYd`Zw&sCGu z^hMtp#f*u{cp4U~6VP3OAzs$GN!opgM;#w3aF={ct*_+GHlQ18XH*Ta-sa5HY{sW- z_SM^LC^d|8Y>}`{gGsb>LFWe<_V}gSbdJNH02fc?c_2Gm@%nPpUJSI4N|zc*|sMP7W&I3xmDSYNB6`crqSZ45qawO#tM zv(E^*b9>z;i}MA}eju_3JU3HwYwZ=`o6v}zZr+sFACpaoS>aasL$3mOZsfe|X-c=% z&NL3_`4mfd|ECq>Ji)E)}~(lb90tU%N9>?(;=>%#o0MP>`jZ&e0+ z-D=D2R&C3*RW~Y_E09E3a;raT{#^Zbd9{hPIiz;w5y>WlUlLQdtx4pF()g%YK)#cz zhIM=QmM3GkvQL2CCznuQ{2F#i?M}4to+K zY%PNyJSQ&haEz7JS<)}<94O*ISfz?c{c$$wO9gTo{y$-q(|ZkDk+#RG?K$_imER0> zDn=sX7LuOr9_Sk5W%1CMntvGtBJh+P;DGDwrD;&*T1VB z#|SuJ`b|rsMG2lb*HgiUWAhdVFskP6p1L&P?wtt-_)C08r(>!N_$|;EdtpHx5$+Yh zLKZZp8fM*7B3`=xetE~iLq2~#xOQ!{h^4$>3&#RuvxU}`D2dHzUD7!0#nUK^E9%jlo!mQT_oY-?w;_NT`5fzOC(w#sl+Km zpRV0o35qD{IsYX7XME3UjZ<2Y5IGrt_V~3E-zYdbkdyK9ALkJ#*Xg7z&>3ISpgdeg|`uHgDd{ z2o;KM*SWVBB1+i0@}=g`OY@iFE}o?J1V_qXt9ZbHT2}1-MsqMWbfETH3jf(g?ooN< zLR-5FwI~o@(94%{yLWRtAVyDhPO7+$f(i{6?;{t4oi}bB3&coq+)Ll>_+rstpiV_W zGhENIl4DiLV%@y?MIHc=SO0bG!@`RlRWmc~qL)!VBom{&2TmhvL_<2W8_eHayk!rn zl!7h?9~b@cjz>S027!ji(PY6xYZcs@90wXs6e5X(v`l%b9I+MtOaTVypk& z?vnF5DQxHTDK0Of&0nOv#Q6KJRjRwMY@*j{r@p@rRZi%|cg%nLlhywd{LBC6KR@&x z>5=8oR}({hX$x%!f4*tan`;qmC@FD5EeJOT9!{bRKAGY8@V~Mt0lNDeZ=C#`uWEUc zUR%}Y{?>hIZzB3n`bV-3-Z2#uD7xcO?;D~WT&hH2w%&EzGFC#}{TipwZKeyBAEITr zewMvvDtohJ_C`*AyMd#QcFv8)=R?sgd3|*faXy7VR^@&8I_cUs#*!Hm5awT=+~Z3L zLyNWAosTV+RIQXQ40ivBiV^FEZU$5hM_!M;^=}6%yTHaYV;1oIZ2av!aoY890E2=o zGLaw0I*YkZp8VaYQt!5zNB7!6g(J56dnPS10~yzr{6@G^rp0M#X=%;m2JaUyiaLwE z93~a^IiJ(9( z-G4`Mlkk(?e3EK|RG_e7Ko3*IaBUZ+Hb_=T?OaOqU5*?aWX6BU8vAjj6|NkshQ zF+??3!*OP1XY0HBd}bpzmOj|dY&W0z`Y7IVdMNK*c`16d{MLemg&%%guX)y&;Wdd$9U8Ki~RRG@9O66Cqorn_P7_kyA*>k3}|mw_i0iy7{CM zIeAH3#Xywcoy2(DMp(<7zBkBCok`F$Pn8$RQRQGL0gXTucf$#E^J({fJ$lKyLa!s zv5vw7`6yhz{Kh9Tm1BA$kMQ90vMScb2GxcjxkQ=4U*!Ct0V=~B1vF#%w0cb9IF_xd zq@*OcsyDb{unX3NE#<8(`MQOfQ5;z>Na+<>41*3I7BC%Bq+5UzYk9IM$QT`6UHL}p zjTY1GUTcp<)o6_KkzBC@xWdE36*DaodxEpfP)BklN=6!2_|-A6t-JmHMKv8VIy%bj zQ`#Uba_ZEx^FgtHiBjcc_Pu|w1rh zGo3C=JuY!?-#+EiC|g~Ok*^=T{ruSYWA&m{vi;Hh(t(3a#g~TKTwy(MNrbqD`CGhc z{dM*3DW?0@TQzPJDrQ;n4Vnnxf^yHcIdD9Y>~nyb43UpwU!sR$40OZi?2eqo9z`i6 ztM}JN&B{{xR6216E*})6t+m^J7c(ahkF1e;i`CL>_iTUmQvbrF3dPv<_J@aCiBfnK z<5%;E3b8Hht78W2(!IVN2CmzH#c*a2@yA|ZJ*2}V_pB^NeU`Q5o0_|K6Xlb18a)5_ zR#w&yESSUn zfJfUI%9dTkfDcT&24!inKHJvTwF3o*Ds=O72M&~?bVN@7(CXW>vi-2$1h)M(YVTOF z|BwPMF0NFQLHP=CYf|q7^9Un}3j}@8iU@3fiD%J<;X|WparROjg+E!hspuJ_*u9a~ zcksHtyatEI$HzrArb>|&^F$Yk`fzimxGRqNQ8yTgzj{IqBLFr~uhu%}=xO}jS-hll zb$1)0)|uGLhCyFG!%)~L^Vv=>X;_FTnRx8(sx+|1{%;#amF-8%qucT6)mh@aV5eXi zE5uE!fqPQm^x=&ok%(J1_hcbvoPPXxm!m2< zWBFrtEgymHuEf+y$JDto!J&vJH(Uym7PhqlMhs6Y_s;nZVhtVGC_ zqRx9s+V#uQM63$=X|?6LYP9lO{F?1|!Hb=3n?+ekNeAZKKoRqx=FlE$F`>E`6_sTL z$T=|H;U?9!oieh0{E_X-@xO;qbC_9a{)R473SjZ7-lCADn7O_ zUfw<19ZQ!tG&0ROh zt-t(_)gOsaN;5iMs?G&n!0X^c96$?z?;hAbi%fr9ll^tnutbd^`2_`4+Gq6U7jkpY z?RU!Gx%VGbjY3&VbNzHe7TowSE{xkOf@)XDnU>@`(Nb>`xe#&%=1XB6scfhEri7-i zQd3ju`0g>S=pl?K3r^KWLh8W^Qo)Q27Mw{$lyG|aW7%0m(%}IlmZcAX|McQnwCIK8 z#g@ZKXml2NtY|EjOrK%w^r{!4%28^o3_%--4{$TF++)QY4sd@SEV7}B>|rqY$}!!v zEi>m=y!dn?O07dG?yzq2Re=XG7>EZH0o-Cud7F*AgV&BH*_-}J-T;OG!+%S5jBT$$;8A2JTM@#GT;Z7pr9{C?E!~nEsPb@(9yB3 zMGSV9PdSdPJOUNf&`UIUGQq&%f|%lDQ8noIDSQ}eDIevDttEhA#WE~$_*?XaTT$j) z%BQm_i%f;H%*h%@N)2V-3znh#L?kUIs(6--mp%HyjIK%mF|Zv92rju%oRcP3-N2f z2q7y_@Z&Sa*}4802gv~+4E^lv#=%`^`w3tc$C)zrz&`H9osQ1VUG~iW$JTtlU3$&W zF?IcW4y@(L^hIW&#Fcjw$%Pkd&v$~$yJcpEnk~lgn!Dk3{pNGMVGff2q@q9gzcD!# z{g0THZtP6Q7Y9%dd<#9??PpvdI6n}-f_-RcXbRB^NWNhCroCp#w)r_C9VGZ!!9aK}IJ=UO5q)LL!9+*_WPz*&&Axrd*0n;| zU<1?Y)8tU{umsebgkbHm=K3Ot0OUQ{gPM$TygzK#>hcT6-u&=T`}5mFEtI8cHzwF7 z1-f}bqn_W1%E9Aln3$Xal1A(=;ffM|Mr^$t-NHg`a@MtVMYvG79$x2AZmFvu#oOXD z=1BiLl=b?cg)tbR*UAfj`0!!Hbd6Ab&M-GTqu1T|5ie@p(~<^Okg2WpPcdhJl4&Z^$qCMHSn zwaA2-Pr-fj_RU7=Sx3Mc*tK8~i`k3PE}ejY=g)r&s<{6CFcp=J0*_vE$=45$R)o+H zO|q-Qj%{>ljt zPC>!dn07%0hu54%j9rRQeOdm=ejD*mPsV33rRsnEm0dCADP^gJV!3hSMiN3n`9lG; zF!{_JXO%vYT(!KdvM1M3cjGj>a>nzONK7)!4Vn5kcz}Hn+@Yp)5(~!E#cNiDE`v_0 z)+8Z>6tiWfS#HBt-2&pSfU<&qk{Y9?qiuQE|1fYd@WFh>eOE!{FsK3I)TbJ1z#J05 z0ZIqYw8w9CA+Y=R+1|sLuhatk9sXUHFf=qYpC3#H-e|!or;y05@GyUgWfX8JRk5td zgM|oX3gdt9zxrW|V_w-8m)+qd;4!$gCz5HZAU881 z6MI&SA=Jd#Mp}r4aag#W35==fl>W@Q}de zO7JQ%4A?$gP>J73Jj!QylvrllrE&@%;FCEBJ1%~H!Z8juBx~IHsG+`U3$xkulvgFg zE*(-PyLXdN*m@{Y^pr>HX z2qa#m?ZDh&App%+-RqcX`H;=frMrnQ zFxo101uM1Iy)|gh*KSNXB{K7Fdu9LRJs40>o|tmk84;6p0u&9gG&op}3-wOw#6p2- zAr|UN_-)7)&Hgd*{VQ*uBl16(!y(%+sQ^5J1fF8Fy&(SW+uxy;g6J@&p{2b5>Jq{E zDs`D-t!ZT?SgJmrR4#S#VlV*fP4HgZpAb+Dstk}1fE=@`ieYyF$a5h#=g*(N5`L8v z(g5fgz4A6-TGAi(?_3jvtQ3Rx^CY0sJ_D3sh_hUXi`3UYi3%Wz6*WF}m*>^gaR9|0DCunvO0TIv% zgZ0E^0+~;qduN|>>4;38!U83>X+E|BfkGV9kO?y87r3WNge5(!N45QcLT zy}rWM{1_SGLV!DtSQBA*u>+hbnrA&{{XH(|IUAIuPvpQRwq&FcDi~?N8qL)@zUj@~UaIiM2 z7(*b))E)2#F9|&rhucW`qj?i7BeF z`~uV7AS~4|NMklgWG;vVr)XRghf4~pDg<8O5)e=@x}~C+dhZCRgTe<}sK>l)XT1=% zlz{Le4+L=l`@wkjtgz{7vTI1`@9~qqDIvR#VhA+|eJ-vw-+et>aZE*AT1R_3IyFRSS@> zfKnJj*NH~lxN#745CV0QPr!uW<*dlxe6*Em`!v+FWBB%lY?l)J$*aAg5WCH>2g>4M5T{52yV0)Yi>ix|=djIm`s|Qtw$HMOUiTEk4GzAp9gwbaG;sz{rdpO1Hg4J!k8gmJ zfPAh>gvY8xJn4*D3v3$;U}Oji#eTpE;!hZa)3$q zLI)UN1L*w@AQ|s~01p0m4)SWtrq7iLJ2#l*&QcS-GDvzCJYXCoYCOwU^S zsdcIpa0nr?H&SHr^(E*&k|kaPDo#YZ<}TPW^M%m@;yGXb{2wCQ)*%xt5lUc>txD($ zhggC@eN{mbRz)hN#;v)GR$=aMk?n|2y2a$(70H0Hxd%oVJJJTaN(vwr+X1`G$=wmN zlA%h*>B!f@>-uqtyTTA_U@JgBf;cM-3$T&bze!O{(LY4ZuJ}=9sZ&KAD1;ywP)W() z6qix;>T5S{`X8%687%SUT3rGpEAEM8jWN*E69kCI$W$%|2DnE2mTCBZun_us@EY&I zX`|NN1K4r5pOF~yWc;88V9bFmwO6;2Do5z<>z)<&4RFkG25Q{f+Y6lpe`|$shUnxn z`6VHHb(&%cuun11=6R)CTQ*Pqs;3oHr!xcBuv6nyA8ye7H7hr|)&+)AG8VOiBI5KLFj zijn|<{N&u%US&4`ra{u`i9E6C3lAftF^JsnLp!SMQ1EM=>(s*RM3od5lC&$#X$KgP z4b)TR=-48jb77`Hr0nc=A$Pb^!+^1doU+eBOob_z!z80IMp7H%1jm8By^XZ#s&Rk=H-M|gcadDG_!!oh z-Pzh1ei%Z&&gzPCt_PW>IbcNKDY*Ffym7!_F!(3GgbsSkfmq@?`zK-C*0ZlzK|2!A zaAeKgTACH1bdx;;z2pjUBIt?VxG&4j}w(#^AxR; z-=4zyB!m*V+?ACe?aiXhY^hi@;<-UJfpJ9Yz7)2*LT-8ccHe=^BJ>p~J=YFIOLzdH zk>xg1@$lRsKoe_GH%3P>i@PH01vDG1$gY8f-LTdNvv}rHx=M`5YVd6*Fn|P1Auu>6 zRs(tEE|^mCAgJC2UL$Oea*PIYBP2i_vHK77KGgz$GeTl42H8!dI51xUEUjrSTpt%F zrz@N#F63E4*9_AQ`|nC7rr*Fx(FvHaqIv*$Y9%vb9cw<`g`Gf(hxiy|>{wO^3p>l| z@p6#>kgUSX{39$hoB}aV1V_6tloMjx-r4{=Pm~kP?*&)F5J4<~9*ATTT565`8EN=? z$w;d*`5@f3+P!<6AcB_j@|uNPfnHZQ=!!cXYaH~*wB!G-93c!0BAS)lC#h-x+#^N` zsUdYB5j+AeVk(uANGcgW(=T5Iu2m1U>P}-|f(GslZ$*Tg1O+e;NZqd3VzT+`>?2j{ zKQQw3jn#ZZOIb4dg_naoa!>FkxR5Xb|HnWoO;9O8Qo3-OBIS5}-)})4QZa06^#L=d z*CT&B$_Lz<1cnzSCDrjf3|1q*kSDow=NQVi<>@9HVI@~>?MOBb?XzBL-M)0tc4U+7 zQzinPR?O2_t%BZiw3YH!gm7{LE!iUT)5B7(XfLV4W*}G;Ux^pj1OKH%>(2XNAqqr@ zj;hCdL)!?y-4lFddZyilR6{^2wY6DE{&u=rcgC*{kz*b_8w4?JPMSR#BI~L}{DpiVl-NczwKSxfkE>V6S@U4|NgV_B z5uS^1eWt6h;gi_96r>DW0TtCJ>!|?1lbA=%#wH7LkZ3hKMv~aDlrh;$7XCJKy#!RZ zI&%>_-xy8Go(S6V_eaw3qGW)u-=?oz=_G4(^#pO(xM{iI_{BBAps%tXVdhwWMGnLv z$RCNa6Z{&5LZi96R`40IABfP&XMR6MKzGg+l9k4u?zN?igUo?1ehkVO5uRsp=l3by zl(6qiUUCqKNl?bP#j0Z6MWjMv_mvt3G@x{@1_-TL3D_7+zoI4eH?B31TPzbr6xa(lk3H1`mzGnb4G|84e<~epq!U0Xf(xj zKv_GTXM`Jsl8AP%e2(Hk()=x1LJi4!<=L}5l%w(S@u1gQk$GE2)Cgjcb+esMw)M$g zY{gghHp4 zVl<#ct^L5PD1*SY%qEa513WPVja?;65d_~FJeINRdFZKT( zMQ=|6JKu$>AyOtmj0Ln6=p>jPwPB>@p?{JP468}h93j2`z%GrvMD89rP}98y!kBnG zNDPRm#$*%b0+KKupGWZwnK#I`mIT=RT?%Y_=y-QI@j*CAnncw1vYVs`I74kDZobAU ztg_YC+)!bVZhVA3UFytU@FJ>B9LFj|Lx_fIC=RTO?|R7v%0UQ60|i7zRsP{atNazM z&$)l|rD?YHp;gbAqohgD>b3(#tKbAd?^~ky_d1IRPY0$4JA*nB4)Pj9TK^$rqOwT@ z&j_e!F>1O(lIgA{5@9=KBFsr$#cCeVF3VtYt&G!})XM;!5_g52T`9V_(C5>#pbmTv z9YwzH;lqrFE4X^;CgE*Nv*(+vrqf$4xn|4{r8}qwkOxQP`tHF6J*1&Z)eT4gd`K!2 zi41@rM9>Jnbv+No>i4$=_#>BIM5JjB? zL{EOLykOz{w**IP^D4oDQn}!I?Jf}9-;&3Brkgs@D8e>w87M$y>7^R0n4e)C%JHu)*l-fPkXjtCqLYZ+f#Kyzi z-8L8*C)HuylX*DN$qn@}%!EjcCvxiO2sRVUQf!al%57&X|Bft%B!SHp=q3ft$8J~f zUAPOI3&{i*FpJXc?C#g)^Gox3e^C9gCug7P$=rO$cmLX=YE$o-5TUgAFKvGRUUPn- z9`nh79xxQYXnZLPX7=v=>&rgIKZ5tjYaaRYAF2bl&e}2YKD4vXS@`Lo=J5Ub`A$j8 zF#8?vsa@$^#RK?uZB}3KR4DYeC;UZz(NEq&CSiV!4;3Dw=A+7 zSGvmsuiTEW$5+Fx>0t_u;T2*|+-{Rkwn`CV7)%Coeop}H3y@pv3ub;37sr{TUB5Fi zG4ZmjEHy>|{k9UYQ{}L#t=;j4XS!jxBnmapsi>&zcF0SCRqqQv&ZXC!fx|S>GBVIygBL|Vs*a4RO6gT&773;}sxS=j$tx*&&p0l>LCXgl8Y_x6d z6-#!mqZ9R4@WG-|Qc@F>lX;j{v6Hx6x6l#-ArG<0ZsKe-moHzwdfG z*DPX{PdK(T7enE{tEENOThebOq&gYIdj0J|d}CmAH2dMhpt$ye62E-HqYdbba0a;# zq=!+r;YgNn33alkF@nzfGb(>RwA_G?4If{*?{oEa^LWt^l{dpdcm%8jVT6$ImBvaS zTt0Wk$LZn2ho4dJd{ri`Yvb}~XAY6Bg=SmIq8VjzS{23PgdZltjqS%cJGqNU3rYH3 z0deO1>#Lt0{Ceo{VX)-15T45l3bY6s9Z-bAyjrZ=s@dHMB_TgK+!LK%D(8u$Z+l+uOoSoZ+smdZjW*3GwIp$=_%IpCg4!T!mpAi z0evCq$J>dN*gljpIU-+S>jI%AYC~)Tlz{MT#`McyMkRGl$LApuBxZC1H2+7ZqBM}zdJrE}tA6{xXRr2c9t79G#%VGf~Z+jnpnxB7v-mOzl z@@}0wM@S`S7!INfh_niT$ak$)XO3{cKIT>2S-nQ9El`}Co%6xt;{M0>I*@&>7MJdN zK&|{(`wZ>Yty@PChKj0%3`-+f;1Zgdx%l;M5$G}_Y?vP@o1i*;m|oEAC!DVBh^0VY z9MKAo>OVQxY5{!sd+p`l-uQ*!P8__>=vGL$4e3=3^z`w%T85!Q=Qr{cyEhx4STe!{_|wwUgJNPhB>njJaCPoCMI*rS%R&;Zgc&fGQ;{tHjg8Bu z?&KmU`x(^LsX}uAVMx(GkzNg)!WuJ2H1%Tg5bdbQB+VG1Oo#lBn*%e6lq1e zF^)yqqKKfBg@AMj7=Vg|q!NOnQW6SC!#C#M8}B*yyZ^xVJRi?}?|aTw_Wu3WnrqH6 z#~gDm;?%@Yu1Ps&K>|wBqU9BNjdTSndU+C%#a@QNF;Kcy=E5*iHu=a4$00}|- z-il9Ei9q22#RH*x+AFu>v|&DRgqrI;6o~l{ay1MMaVzYPbF2tKPa(hL&*{=?Lfq9@ zG4Eb-vJ~`U4Iq{fU1)AGCnDjc{BKLJBCNn|be)m;il&1o*}(FT^gH15u<(KKB6-N5 znM-(TRy%XyRXG2IGX7FHb@HvQZf*_e9U?3#Yrc~jIdIR`k{kIsP`id94wFmC-op4j z(-?G3!Jn-q14f?N035XbyMMbn^-j>U30^r5Zu%95I*c8cPN6?EQ{ZXX-S(qLkJ9Rb zk|hs@s6nplYga!bf-S;f8D*AUM`Dokk-K904O{qUppbXerFB0#+7Cw^3lVqd&E>H$ zJ+$~gMiuD;{kr0!o}q%Ho>yd#?9|@7Hy4#nGG4eOQkRVduKG*zkh#6bbz`enubwl9 zj2&KzVg@Qtw$O|tW;9}2vCoqyPnud<;Bgr)mjKP7b#b`GV$77{b+@L1HS}j17Mn8< zI?eJ3B0PKc3|smIE(Ck2goh>%yXJ-udAlc1)aVd(zOJgS4%;uHHsHQ}`*wV`Fxt}C z>doy@be8rU>U;UT2ul~G=4woQ7rvOHFMy;5?x$oOUZcH#2#wC|5KnQzuVH7yva%FO z15G;%{)x4-FpNJtYr^=w>_c?!U`DXo9B>})sQ1H+&aqEh@CpZ)_Ld?HjAJaq_#PR< zVSznB|MQ23hu>FM^PW0&iq0T?pJA2)PRu{IR+xd^yz};~xzT`<0YM@J=%1)cs|i;G3LGW~KtvCtk!b|vCu4Sml+_rir9+8H&_7P8loTdftYY9y zc`=6R23kNX=ll8dXYNId$n8T=wJW$=3FAeV0Y$*albaGT$dLZ?e!FjuH4W9DJq~y% z4P_L?UercR1l?!FJ$$&5e)C2?`67UhF*_7py&4~*d*DD=Vxq*7B}6sScY?@}c4#T{ z?K3k{dIfa-1xl!bgH>P~M|Cz$xSy=)6MG zvNL%7a*#g@5b)p_XgKqEkm!ua(f2&@e_;A-6-Ss1d0K+ZI9Mq3!K9Yl@fzu;@PltB zeUOM=is;xHBxw9u1EYr?s8_!)E#=&>VZ+brx)DiWQ0L}|8}Jll%{cb|bkczm3s&pS z>vvc9)$gvPMBQp|7qIZ$H&=vAuwS;H%TiFFB+?$n$c0Nov622{+4&B(olHOq;As#RkLA|v8&LV3&X2a5Lp-|>V zimWFsF$TRzFsh-i&qw~fz%&eoe_cf9vg|CzuKy)778Y~c&wnP>+n3xGry$(6~Y zCr|wG>{w_-HxoFov1j+r!`)kHq{bNPj#BhvMQ0NbkL0%z!X9)*z5=@bf(i~M&)vO` zbONrCkUfA42$8WJxco=0DPIo!%}eJT&p>YjnMRp%fHgex`{Lr+@P249;lFn6i48N@ z7zyeom}%hrVOA#t2SO4sTf{^ z_6A+Ys=?yl7KrShjg|7nisD$sAx?~Ksk-kN>Z^ZnjPjV~=JW0C?b41v_7lOT=4!>X z!LW#k<;Qvojc_G!Vu-u zTt)Wm*+Ur%EDugzd*8k&7G`COOocNv!{z3%ZnDh2{?eYSQG=E;%!R0b-~{hWu@?^@4eq$*c3u+Fb2Bru zbAW(2IB`bLPck+tUhRJ&vd)(&U@1|P+ZMNu;{aqpKceeN!3L!{ zH;RP*geMDKtl+dfq+4{fv>2x5t@uCPU3f3DV|r`jIBuxfZQ-t9eGGC1Clv>lzz`O9 z%xUodDOby1zbV<03Ub2C%E}kDHS+YDjd+;OET%v3`UHl65<$WY@as_UBQH)xVB3au z(Objl>}KWV?~ae5PVeoKSGH}yWALJ0;|H?N47agTb(dknb*C7I%vl^4w5U>H0iXQ^ zIVrh5JU6PJduHV+z^r+&2&yb#@NV6o5AQfE=;vC9W>aFM>62j|5LYoER`ycnyIqk& z)=8x3$jAs~j|^C;WdYd`9R%zu4#Gb&Fw+xn%b4DbExWW89ZT;&eq4ydaO-#29XbJk z^L~DQvK@fKEftiG8+rOC?4g*|$-ib`v;jd3uS?MVBuHH3x%)57We8D02aY#!VC zmmuLO4ICI8r2m%*&YBD%GE$Hb+VND16DeMbMoh`06_^qf06EKvZD859w|VYZa{F!xz~302#{rGPH_>b`mN`{@qFTX}V3H$_djFCs#)144U$#J2KnFAr! zE$kbSG*~@?3{d`Dq&VSyn(-UirQfhJ_zHR}>JdQFjXRQ-d~$B^1E27|re+apMGRxc z*T_fw=WE2*t(!{@8Yzl2cx9DF%ja|sQKW-zG>$O+L4K?+U$mP1Lnwzl>wK+$_~abmi!{ zE@Ot!Y|cM4(jCp-j=BJZ1DrBiFg(RBdS$e+CnO}`%8MYzn@2KDCGaB}7&?#r=t5h~ zKllM0WpN3K9K5IreB0Qn3jgOzme7WS5hJ!2BofF@HGB#BXg$%=gen%}d>Nf#W~}jf zFxGppc~FX|o#rqq0K$~n!$RJF_`uzf(WOSjE(_*#agW9NS4z+r@L?4RJX0#ua$9+Q3)2O#WzRbNDZ_;V3Vu6P z&z~BVh)GA$09tF!M%603B&9F_6$IyySkU3&;pH_U(`M#A-W_-E>0w~N_OW-RKtd~u zV~)$(W3(Dosv!N~CxfY|SU}*J;lfSt{{HBeYGN_ABPE5sgHl%smNKW#)S(|o6n!Yii$j@_ym(pJ zJjyUo?qJ@%UVnD4#u^BMmoh)pC@syc*9NBX3fx}<$`)d1K9)7t#ANwvX4ckzNMHXr zbheRu|8u9Cn`pNHmWh`}PhjAbBAZ8#9udcZcL(jXKjqj#7MmJ4|IfQGh57lAb3^wM zg$BksRHm5+L}ZX-N7kasfOG+jGBBHHIYbusz(?aVsbv?m(+%0?xPlNxMKB{_si`t> zy!X=5WLYQo-Tpreosle-j0#iqZIt6MNh(d`PMp!v(X`(TDufA$QIPUOOH(dn>5DtE zMm?bi$VKF0762HB{-|bqUDoKagai-3^M9hLciI?sKnsiYC1ww(kg`t{HjPogAzM*ZRi*uAB1w=B%7I4wN)UjQ7^C~8vphi=JdJ*H`Ip1UM zy!t7yK9Vf&L{X4gD$GkF@NZ+|Ur|wk>9|~41pete4zg%JZ=F``H&K4{9Ym~A^z433 zLMs!^cU;r+W}fKe!X4AI%V|_ z_Wog@Ja-_f5HSnljB25z@w~#X1Lq9Kwe`S(13xeU33+`G%YU)4nLdNJ-L`AjE`+vM zRM13m8oBhn-78+<(iFJiw~+ZYKvnjWM%hr1rx%7?o{E#2Q4BwmtrhhzFMLHC5eIZR zQFp`$)}+`jbtqZ-=;6Z)fP%>5s9ued)GkJPqWnMEht8;LsLUV^h7p~I|-R*yZz989&NzI9p}h|NM$42cnRKnEtNK+qgT^$11-r|Z+Qvk zdY6`?6fjo6MDv$Jp~(R-8!zLEs2OhM%9SkZ+4!f*9jHMtk9wu3lY;7(WikO)aHCXf z%0X3?Vii?R8TQ?&%|vYPCZecFUWafH+5~g$y?&?T5U>)+4;Uzfi#w!Pu3*S$%$(U7#>4)ghUOV$WY9*rj7kZ^dTI9{fIg4(OUcQ}iCN%T>ITUatsk%@qeX(@sMU+q8U%AXVCHH`W8FK0Cn(~B${ ztN4S6pQNOu59rThR9IPokF9eaxU%;z1I{S0;utK0yed@)KP}}&R6?g$4y1cT*-!w5 zlZ-=2*MvDf=N8mk|;Liy&+Gck2DBz%Ua~B^U z9}=giSV}sXc^o!z8?#!YmLCu{5(f{w4KN`gDT!(+zEFVTM>KlOxz#_weK*f&l__R`KDKiKyAqUBQF6c_CoZ*d?QP-q0Ge&Ch0mp#|4raW# zDXaOft_US&994Bp4Phz|svz0u#Tu>pb8uO;IlOk?b1XTP%rH4`JCGM)BKRg6$w#Bn z=u5`Z3by!L%s1HX1ZPDDskW96keHQ-P<}?f5Mc@WhDUMCZ0PdXt7LOJfoi6;BC#%s z=&`tmp#F>lE#-{TQ3JFJOjX9vV&+cs7ZKSESrC!OC=xL_ohwO@^^QdgR4!RjMs(L7 zqdHH$ukILN76*MAQ}-Z$nYa?l1F09a_RWtns>Z>Ij2U)8L;l z)3=`K$K)5{S$se)Qg)1QCao<}9tcf-y$r}8F+3}x1%4iLe4QUCg8&B_06XwG@<#Fc^R zrgKd#7!SJm-;6~~8ofkh0T!10AWar)5yy5Q@}B!=T|K+|7jbH135x8veR35x7@3M~c4`2kSqX?iF!OIw$Jlb0vo;Y}97UEJd zVHzEdgpUG7!StaK{T{e8o4U+k*+#bmK!xPRP}b$8%$M=*MpKzK=PXOIi68MrR9v8A z4aBA#EG`Vn(GM;smlgjWK6=C|af=p=p|Ej37)eoY9s|*emOj;x`F*wBSgdEXW0OfW_I5W4b z7amhJ8ePYr#r^IWp-Lx?+=*T04Uny*Ss>vrRY3mi=qu*QR`L3Fyg$p&!+;@V38&uE zIOw9uEt*gt2Qz=%!AzmxyF@w%>qZsGV#xmx)$dT)`}=#)(OjtL2$i6c${_IAoG&mf zEl>yL0cvZc#e}Q7lVlP?O%e1OWAqsFTl&V0InuzpM0!Ar@bmek#T1=YZdl$$-kt*) zJs0IvXkS>#h|Qf>nZZ-k4k(pst<-}`D7E@%mMQ=~MxSzGzS>?2DTs6KH4MF?(Sor$ zq3BD!3}>;C2E~!3)O^G8Y=__9+e#EB9d~fKhhjT$$MBz71CO#Uz>b&>EK-;W*5j*53=07zvG#BzsKs8BZN3x@0R_^G`E*oh))33y z#QyA(DM=|H#Xn~_^o7e77L9kxC(R2XMxw58nizE$w)L#Jbt5srzEsX9fl6yD-P0YZ z=6ZsT5e~V0ppWJ(;gw2`IE)G`-^$> z`?SzML`8gX6I4b(${m82dWP~DSvV!Iz=$k@rrvFg$?cp+_?6rumHM+rdO%&duZ4yq zfV>6luki$>TAi<$&sM)S6~GqRA#q*ED@V^hlMC=qOB+=jG1i!Sec9%Dvu}iI&S#%< zK7~zpQv}DH$F602y;fT1M9;sUkWgMSKbl?d{n6U{h6~(wBaIk8<>KEH=boE5`SfX# zR~zRF<}b@#_RSPLpkq1eyr{8p7EujVUK}9GYGE;$4lP@Zk0+vj7_2`D-vHg7`& zcq->#hZ};!t8LO%af^FN=%!OY{KpuXKE-)|M)t790tQ^s)YR-of5xf}8}thb3LLjv zlp^twKtZAw=W4*ac;ahe9x9r)x`6P_vh|{918H*M4usUfF`Im#& zOK)Jk<;JLOW2pfC7hce&Eod{)#9J?#dA8QJitdxEJ)Xb%mb}YT=#WjFSfOt!Ysz)@ zvE|E`>tYHAFavm2~RO^#;HIQq`a?HXM8=JlCKi_YMon3rM zNeOW1V&T=RRogyG7VO!l9|19gC7j9BY186aFSl{ppD)B^qHU#c6W1ErYT%#(oR$7WgAJI7U1Q$FcFD z>$_Z^VbT&AkfxSad0E*Zr*JLVwuDk~#J-%I9AQbxyC`~{>+qNj0p?{?f5BM3DB9_w_pPJSz{~yyZ2L5bs*&1hYd!XefXI(9O+B@ z4+CfnybtgU2mI2&5qHcZ2jH#tx0?VKekN<-15y2Y(atD>&b|obT1_&|)3b5l-oD+L zZo;sO;=2xQRePx0xK<2fKF)z{&~|W0q<^8G>7~dzdzwr0+PM*F59zm!<=f0Z{=fe_ z;mALB{r~=B`d?0N{D&R>&%g55U*y%kF9;IgmbBI< z>xJiR-s9?;2E^B~F9@8OVM}##jPm*71>a>U*j)S*E#M*?sg(mck;3ARqBzEi1~$X( z?A^5K#BH@GR?n-L}mFZKo}DSy^C& zOnSZW1@&&IvKcn~gpNZnlKc=G+hh-n$L#3$0}c?3*tDX{S>97|Uxq=9vU&Zq|9U79 zO&y(&EvjG6otymk*|XIbUpv_(A5e?xax?5GiSQ|uZ58328_ZK#wI770XL568Oh}s3 zk)}2!kd}K?Rs9UDQGSj@spSf5+Sf#XF=M|kw~rGx-Brsq1xIe-SUEU&Ee>S%@2FGtUh`IaT4 zki@)c`03u!3dja2`!kWE(&FM!RGZ(%Najg-y%78M4LVIdSro?e7bjN_M`ta@+8+o2 zU-7ohF~8v_5!(C#QHSlK?`&{OvPzo2V8QR`tnErlO-Qx(+S?~!9ZY+@_}FGIgMIz~lUz@hKoAGik9O?^xiPW$mR|A#;KI$Tnh0IH|0F3S+DGrwG)@vJ*^ZcR%4 z_?+C_Ged*c`_DE`g}EGc-p8PT*;E>jr*?yjO&<6FrR)Rb!8*5J)5xV%(hBWeJP3xM zEJ}T`4`=YA$|~mo`CsSitkK5ffzdBTr^Va$X=q%+jn>Wkg2qkYXu?N`3D04e%0?sZ zQ}KlezCGyexLckF=1c~+D^`6`8qtY0I)OP%1J7bWUo@eoI9Yy{iG2n1I^}?r4?*GY zN9C_LQ-95k<92q}f`T4_{#3a<4_jgx^K5U}Ha}xM9yY7`9@lGuf%n1Ice%w3>gecP z4oA{b5Gb|)HpjEv4@`%+b@X1a}HN5PfYTh(n9D1lL*ZpVh}H*X3n(_Ub)9$+YQQH%3r z0r`D+#-Y-37H$r0kULhNt-N@bn%Z8#s=v*LZrr)!S&|2cD56p#`Glo-Hd>Qg|Jd%K zJn%)5==o8-HTxdx%!KeXb@}~8lNz7FS{Sr|-_4^6F52J_5E-&BJjfzbxuJXR-In=PY6{RvCC?KLxZ=utpcJKcE9S{>8 z?RvILQ}Z$|XVKWRcdzbMk%SbzH54mu(Mt zD&+C*^RX3*ighodTxT;{`Q3OyJf$VGHgsQ{%gMPV^Mfdx{X}75;hj5nboTe5 zglG<0km;Dc{e56S$fG;L10o_Lbpu~{MXg*$C(K2je_Cm17={rSLr4^kDVn<>uu0ha zc>momUyRdD#<7j4o0x=+z@-ml2!xe3m%;ax2zSIl;JiN~B0^zt7P|jrg4H-V1+;(a z;Vn8Bvor4{@oolgR_}L)@87CCbR#&}<89s+YpEmuZ2)U->_UkpR@Bc6r^)qg9uzD` zHRc9BxO;aKD8~%wqh_RsB^*oDL(|p?JlH{}d2CI^pzV9m{4`kG4l!97ZU#`OM58MF0@+h> zGnVsh$BTT-!$4DOu=4rMr6_?WLi~|cB^|7Wnezt(mv6rRB^AzeHuo5!FHMyADYAU| zR)my$;v>*^zD*i|S-snt5hWrK$mbG59Ai4D1 zoTWef+1U7W5!|w^g_*hG$ia*cvYGCmW|XT2AaYfF7rW~`%E70ursj`!xd@u#x>7_W z0a=&*O8$WDE-o(P5^EDJZ#*~Od_a^pn_t%cb@sAj>9rO%Hc4{1$_&e!Jblda9)LP_ zmtC`T>C3OnM!Fnc=!yCy`@Tx#Fq(fOKLT8H0rDEuT*6tId+c?` zV=;fsyBe))H#h{FZ_D!sKx_X5tXOlN;z%4wp&$PCnhZZXehVu-F?xst8sZNxD=Bk+ z6hqBCWY=gr+I`oZAbO>;wH%w@0~HbS-u4oR8R@LkX~vI{FdVPe{{2m*wm25_%kBkV zTf3&*4MSdvxd$B(nEmiSz7tGsqTF~kduQDCIyJ?bu!ahQNZ?zH_k5F|-_@LgC?0hC zl_EsiZwm^nyHc?4=3UuI_s`wtL{?~i1G!(iG687(RUlSU@L116uLBB4`{ERopQn%xSVXjTiE zc=wBGYhSlHGF~tNQ5*P^qwF`ZSDQAwf>-CM#S?2J1qE}nm+^%libAs?aink&)Iy4- za1&qcW!wC}t!Ey>W*aB^N`ULQ{`H?l(1dfyrUt~tV8#w8pq>dv{hU$BICZer?ON z`k4#YDWO=jPh0z{Yj@LKLephsO}Ojm;r;s;VUG9fK+?CM6F^Eth%MCNc}CH+YrW?f z&&DrmU=Z%cdDpN?;G)2QU7oEss-fP z@BRb+(jKF_ZwBT%ji@}dlV0@j$& zo*h6$+P!!0^`Zs`9D^CMSO{y}l5p49#N^t|o6Y;u(FEKKWGg8=pT5mro-jsu_^X%( zh#{Zg&=rP@XUZM_dJc?>heBp(=tfRK6;ZJ{$Bx634OC{0L?An=qI2;$y*+JJ=yXJ*xL!EKD$5N0xtGiftIyH4>ck z&8x4aK*xK|*IK=5l@_WWL4Wff%mU6tC4#+X1mLg&qsAT+;%k(gz%jkpd)x$Z3?fs` zGtk1BOn|cGO6CHbBTI}A9@jXLt?vmC7_PU7>c;%Ofg!mi>(*%kK1s>^1CzzZ7RNL| zNw{b(y8?7U!?FtVELCg(ALFB3fB$&!{ktij%yA{CfG<_I zU9WE2i+VbQR`=ngVM`BiOcSg?i>0B^FM&R|Qqb?gAD7?IyN62P0f@~zQwuQIFdX!D zP~ggLRI9dQG-=u5(Z1~=)xL{lG%-C;Tx?I?F_c|qYSm~l1O19Wfxa*OO8hchmGB|6 z{ux%ijR9*LI!;T`)G?6Vw%ECTTrG`DO;E~Z(g6n5SY?#T)=@) z`VLR=GwR~QW#1YbTajeT0<)^_JiWUU^Dg@nn=72)xA~-xZA1dHbJwn}!N#!Fz(x1a z3(l8&fh~I(%3C2QiXv6{@I8*WN@#{x@0jnp&5tJn^JrQNr0T4?KHvri^IYGBEy#`8 z-^{jPV&JtY3&R*|!xpt$Tl=e1P{*2WiCf@H>#T_s-aNO?_FwRK;{s*VLx%z{zEY$! zn_d8JP<6-nrKq&Z)F;u%EC<|$#i3u*r36N|5`|6js)WvH;}7ujt~d2P*f@@@&lI-k zibiz@q%*q{mYfQpud$%knpMQXpoDk z|9OA0pFt_`j{|eTps`W$A3lTe=E7S)n|J1G`3C;B*w*1 z`u89V1a~K*JyDlPkDd=E0S+yy^QZ@NwQj-=I6|3bF&v4?y3rA*p0?`B7l$TGuu>@( z#ly@6EA3CWOtQCH@(FY@F~gj5`%N)E(K8t}`hY3Q?sga=33h{QC84$OacG z2+~CgvFHY$gr3k~@0Z%(FF=*Z43pVhUr%K(cp_z%U8*X>1O0|nZ zZ&?h!>6WVk+s4)ebhukM-3)!8CO)efvvO&KGM0LsNE3-2AejN?<6Ey&gOSN{~|@ z7GYxcx36E#uw5Jx6WQD=VV;R-%R++n5a}6?%8_7)>m0NAAH&qs8~*l%;TvKa&}C3U zfWq3kx(~r|DPAg>!uUIkJOaL?XpG+|~x(bNEk#OHL+k2cV zO2?`@%F@Q{{!{RVx^dZR2M-=hLru{E#z*yow5EGLE7}mOd=U*fy>_O#JmX{Y<*E!Dk8PE1@K3wq)3AV(X8oO zh7c-&QadPob5wa`ap{%thjV)wP}q!j3z)+vW&d$yu_>-@aRSFa30x+LqKPT?cQL%EPLcVvS3%|=ccZSwk z)4QYa#aY7qShnD4z@$^Y-`S|Ed+UU<`#ydB=!}dE@2Um!<^iDb-kuz+is$Sp-ZHBh zM|N7uEF=QBQi3}WG!p&X_5Sl*&wt!n&7RyTzuO>2sy_Jk@<9fuX8twCQau+jShIHR zzJmwvo-lW}!{i;HQ}!B9bg^+np13q#xYGrC!$|m?%Rw44I7)|y|FZLtEZ>u?luH$ zIy<|0>JA+~%wGPf*&cm|C86T~HY*@}HbX;s-w zDH2=kA5;Gfxx&?;AYOY#%tI6V%dg{PaMN;~tf2M(UM9!5q-7-P09^AH&!oGPK(X>^ zFNU81ryZ&!`WDA>f(6%{IR}ris)eCl^k8stn|d!@zPtqK^G2RJZreJ#bdY1&xJ)qs zY47TavNG;K1_^=X3L9H4y{%jS78ni>59clkSc}G!=^xL#kg0_Kmzj%M+;sp|A}|cc zu{KjQeDTr+yI<~y4Td^m+=-aNY%%H&zkwp>~ zn)=AZAyp%czQZeO?hpTudE^T(db;N%a%|4S62U!3!jh0Y+(+UF-XAZg2}DLn?f(50 zSgi-ZZWqp-D`v9RoO5Gp`xF3+pqkU9zaAaE2M-BQu}5EjbwFMi0JtziqD*gG(N~d9fp@?l3@aD1&zU!T> zk>h$db9acVyYZb`Z}I;4&Yc(9pYjjLG{?pK7W_#UFm$Pqm8>1rPYj2q-0YmvschTaow$iA8Lg|L-h-@nW;Mzw|M&LX^(^d1Uu}|6> z!$CkofYlDUj=Ne%h8-~f&Jv3-b=It8Iaw9l{qz{g%=~%t?q_7^0oBBmPxWg^yK zQT-J~#X3iV%YPXR!3dJ&JhM~sO4C|eEcg`M_oKdo-7LYR!f(f2Fw8IdQhl1sd=4lthk$J8Z6MNs`hzAf1|EcbFYm%;^VGIH;^1UaA zhZ_5wU14H)Z~NSZM-mQgP?$+;i@Zb~CQ~z)7gqox9u9yRq}2p@OCSPcSP+slVdn>) zy!q+UM)hPW-K2-{LhG)9GQ@Etl+n@Fsg=mr!mtOyo&&^Qf+g9XKlG8au@K4_r>4fd z^N_J6f~vXhHW{Cf-?BiPdg`eCkj(KRne_l@Ta}bP@bLw!fHMU&(N)ND?^OVgwn5iZ z5p`+?^N#+>`=~O+s*MxE*(v*FfN>}WsB+*y!$P%iBv9x2`qLTBN)G__AK>e#Vn&ug z;45PR3^c^vU;PH-a3|Qo#R49bW9EapOAUYxxyX;6cD1jA!+?bz9ByvzMQi=Q((&(GXSY7-1t~$Eu?lEN!K=ZdxJ0!=#xRCCmUKvq7s?ECjH&TE{bZk z>H8p*sz7=%JfdS$fFT$T7&z7X@X?bJIHUex;_F_DetN@Q^X6+~BX5a1QZt|=2h4-y zDXDwoEPqGKKfdqO48P6lXlX@#vAs9Y5ROFo{NrQ@mia(GHa1Lx=b(E91O+YhaTp=< z8M5Gfw?7=o0Hhs57ItVeSt%$OS)NBpD%Qaq(0v@2nLpMN*RNNv6Ey!V9sdztHW7*_ z>yJ;jLKw8EhcKPKZO(k6aMl1idi(V997G>Gif`wN@(fWWQ<&e?>G})_;|&@+)rnis z{VVWV4qy*05s^F-+mJAuz6+c)x8W?J8a2EcT9f?{maiMQmDlhdp>i%Lkm)@~W8{4ots3EuoPIArTa|(0~2!%64jtbUk zvPJw$*pt3P`JOcRHVNZb=Vr#moyW_e1et)|U6ijUb$cvAOaPXSg2go7^I2mdwROz~ z{s7FUh=Iqjg!~yz?o-o>kb>_+!R>;dUpdI2meL{(x6j8@srZU+!WGaThsHHv5t?sV zKA{CUJTUmE0;qcnu6{bx>xO5$4~g8FUQ3#3ZH^8z{ErXa?rbAc2H$=S2&3$FAN*-6 zTvH`|K$GQx1HC@@8E&_Og8hvAq=35W&OL5kPx`{{-P?@wV&%d&y?f-Qy;X1y>|NaW z)nt9NgSCC{#ntPv3p$whYst8eQT7$owO3+^(_1WWA>pXoGJA!Ka!C`$=4j6)52N)!QRY}~G6H+zDPPL==cLtC6>x*`M76@UUUICFRH;=!a zVvc}5fNZWC*(p1(ItEdv!N*S+7_N6r-*PV-x4%_DuG;35PANuH7rF~|rc9Z#Y4u)( zn;3Qf?fZ9{_&`1jjpaQg{`@LfjU)e;H2UaaWM#wwyy@reI5fTe5K!aLC+W}H=*~7C zIC&3gL#W_T$m=>|i`Z=_g%6GJ-?)BVS2LqvDhh?&md`t}8CJrbI{Nx;y?vGQ_vy{i zKB4YaX;7&AP-c=K~k z)P%4`&6LPK3rGR^F{Aq33T`mnopN55F(3H@@`~Mr^J*Qdts_VL2~sA2{l$skEipvZ ziONJM4)3`91P$f-b_EhV5*FI8=P5Kb^*WFL=9r#%IDdilhuG&GUlvE(N-xsIuzq@6 z9Jg8w2PBQ#mhUcD&|-e9b&K!%!eWTUSIZcpGzvNM*V4ukXpeC#msY%K!PDqY0i1Y0 zE-(0}Gd#sbw8mg+6ecVTLunl{ER5jS; z>;rm1@v#amIjHB5)N_AbUZqaP=*S>IT_s}1BjTO$3E>}vK)gIpXVhcZ+_mAmQ5d#F z7aEVKk@s?T1$0G9U^Guw70%r1{jnSI$;3ble|&)0kQbZz^yyQQ(g2RW92i;?Hq98+ zgYI7Y%a+!)iQ5`GVH*iD{if*r(M>sa*L)#KCEyWSaaa9&jB|ZmpwEf2ShT@2U5vax zaq!9`_1tgA6GdXPKwmq6Dy&vGC@>qClYaZ)-^R;?0p+1`dG_VYmu}o*Fi?&wd=4PD zAX4L?%lJ93ds1Md6AUKC!8FiGRCw`xVkQ8Q?lad!#JFgBZA^zQN002$kNt!?GeBW8 zwrc0j66@qzQ{@xtxpE6n$z22Izh!WjvhsU?iNj_gb%(z$F+Th9E;t>WmxUEVC%NX& zFaLh8s$-{`S_PCI=9)|FCjxE`fMXBCA_h77H%z;L*49X^+D!f!X9|c5k_v<0 zJ```=BZTXN9-y|Yk9!o-(2XH(QMSUNxg@8%i)S^&vFIX`vbS=>EHH}T_@M7j)u=gE zPji=)l1iSJ+LH&>uIdhxXrOb_RwMqb>yZatP!7Gpa=ul*vJeHsQXT>~M&3!5sA-T% zg<$3x8Vx+N&i({tRzi9V5M-($3i{B}M&3qp7rGQGnW`k~AdJNvT_Gj44;NY{g=Zf@ zu?1tV>h}fVXcXL*(ENu>To#DtEJ7| zkM!ZCl+R}tJ$4BN6(Igt5vddI=FJ-D%^J1dA0mY6S}4wMG=wQc4`XvTdp6+y^9U65 zHsTtCyXM0}%a*MW5ZHvoC=oXZ&MBRCc<>&wBdEhGF$!RKWZ|^jpC@BMhQ3$#8Yp$# z(-e>R4tn>FKu|&O<53)r-Sk0(?$EQASC%@vDdqU_E39C! zVSk;5@_40!f&oPJPrEZvdd7CnN*Tsb1PQATqWRMd$}1{(Jmck8t=c73Yk%dghi9_a zQqn0^>N^GB^+-CyJVBSPU5fy3+=QFU2S1shiP;sLkZMr<@g-5EAJ@6qAYvzp`2Khe zE=ba*=02{ruPm8jkY|l6VM&fcM;+bphQL54zAYTD0X7apy?BzQ4cMYkv%%l)wn;xTOGt)AeJ&P0N+bdd{uaio|7lTMTMe027f5glaQf;_nW_Kk%gW&3O(< zPM0>Ss{4XKC?mOQc^qH3PI!J*Jb?|&5>Ic=Y4W$j$z_T)?&1(ZU|eyzYk=WPk8SIvv(-UK3!5kc{P(qdUCB_3aLijQ~6&Gt)fd~aPpphbAvZ2zJnffLg(ZJ8hZC@#R5R}V4V5H8c#Io-BR?* z{Kk70)LE^wEtFz+hiRWkcw@fxGEq8wyMXg>FrPZ8OyE-osZbYk4d=*O^VZSzZv1Ak z&=!)q98YpH$>q%(_~d8kE*ijcJ;KER`vDiVz)r3%sQ0;jdlBX<)IDvrb1w}c$c$ox z#-T&u%NsXb0&cxBctK98;{_!+&E(9CG;{esa-eB&OAE19x@vVw5;vA;C5#Paz#uj zFcdlPqjn*+4`dCL$3WY)xtfa?ccixBp5_uv6tl6MY4{b;gQ0NKj9TWmSkd6JIMAxT zp&bXtZGC>YDU|v=e+XH$2PV- z7J2;lZ|XXKkN#%MeCMNp7HA-SM7IWj9*7+pssp0xfmEOgg8-se=WI~d*3)}TjWVuC zN*%two^v2Rfo_mNYIkG$+IC@Otwd zas;|O8aWc0yM&aM#yL|bX!V}~sh{iP#~%d17pYK*Lbi=_h^c&CaVq<-G+wZwn=c=Y zH|94J#k{a^OhPh4=i_y(Aqcr*FqZcht~b38MSs$wXmlipp^eNWzXumeU!xK;=0xvz zEX>W_h7PICy>(t$ZFuslH*Q4Xmv8}MY5NKxV9KL9x;0(W@YGVDoVUPwQ$SZ(_xHcg z#007)6wMPEYX@J5%G)YAx$25VlhpubJqN4nT5w}WuyxLcEKB54uDFl98*t$bNi*Q( zK7@J{?qEQrY$alc8Wl$$&}AIgKe;Phs%(`wv{?@u4_7l|$5*-af-8kt3}Lh|i!%vzGDNei>z3 z()r+v9Jlvhhi6j-;d%V^8h&*^6_iCxc78rVwMcL%=KVCmuiXjU^UDflBh=hMU6wTrVm;l=0!#&o5{#)%vavawMlyAz*#j?nmXl zcZz?qugf)aJfXg-@dO76Gm&Nda*KCZ53Z-KOroHLi8b(uuJQB$(P`Y zDBlHZ4Xj#R#zW35jw?4QTYz$}UAoSs_k%4e5~f9WtXsZEnbjdXAkR>(uqu%X$&TAM zdSAYLxf@*R*|NcNoF1tBxqdk>lz`s4bSiKAu-b0CN3X!HsZ7oIV?^fz@vvWRNtYKb zQ`k-0xPz}@t48zt2>32QN>O=q0C0DRhBsEvheZW8b9Hr+yQZVQFpe- zJ)i@Er;IkUx5*S<;VvSr?ZuG>1v^yetR8Jgfx11VVP@9gN0gqebNot6N``FKqazg^ zbor;nzYjwDc5u*mq+?xtwotFLt`i*BeVf^+co#490Gt}Y-Elpymj*P^N_lWjSt=C^ z36tpKwT6h)1tvtG#^t-NHzDavl-u^& z6&6ei(R7o)Ug4ewYOxgPNmD%ZdN$5QQ9F017F_KJZj7!h>y_C?!pbI3&^KmvtgeTq zZbGxrmT!U-W%|vnqTAM3tUrG8&f0e?e;le%oxWbMT>1OzA;meB1Kg{gNXUl3&*NDv zFt9)%eif$4JVd70=KsE(6m6}Bqa~n$ES#=N5;_3&GwWuf9{3?dBCo)TQE+nT9_WgW z33jY9Ps3QW;dV=0>@xtJpx=e>@klbVgt#b@g0$=D??d<7AaA~;7u>71q2W=d=^*yh zqCuELW8;eJlhGBDaZ&hAj&ozL7)P%)M1Ya2KhZpi&mI-!<-$Tjd7Yl%ia=`5=-@ix zbKycs?7^4gErKpxx{DP=Wl{7DLIWV2LOzaK2K&A(&` z&^Quq@#xWt+(YQ+&-EUt!pMtQ+ws4U4i46ShvI#`!1;cN4^-TWxb8y>d`t86NjG_+ z#-GlF902-tjw`_2Z|kCV0EYSr$(%`u@!I|OY7r6f$7@%0NQoM_`_6C3G4(KHB=aFA z6@BLxvLAl$!aiVEjn;uvR~DJ%$?x_$WNO-iu8Aoh{q)04Omg8;rrV`tEfp44CYguo z;3w5U(dSn^3pxQGSAZ68=N4#1%3KVE`PUxTHvf~eX-b98(>IS5pP;EbeQCBj7<^JX zqepx~dRX5w_)-9XIH(cXV!2s0;9x44!t0an9Ae)wWKm|%7JpGvP+U&M802eZ@NoVI}#Kzg$eoq@F) z?%&Zufh*^f4Ly3U)oNf|%@QrHMT9t_J%>SaOu3&0^Pj{i^cQ9_bfp)BD_i6({?oo|un@X#kjLgSQ z1*ab$4myY6PZqk`qCRL8&DwI>TrYfBp8QKGwj|U& z8dp z;_kg4{y#TV>e=~y_BbBU_!X%Gg`fkQ^zrQOq=Ur_gbG}P8U;f=t!KM#X&z6sNaq{p zpHlDm*Gk%HNv!{Fa7!a}&t=5Wz#CIuPSibD@pycQW5I-;tsv6kZNWY~p77z3?f8?&Gi z#?Z8Qm1@0@(@B{RzjmZskQV#JZ2o zcNI!u{xW&%3NK(f1I*~t8kh;WagXc<2xQKT&iqNWYeM4_%PJ~c*I{176$MEIovfl( zbVpNGS^xI-MGkk^SiGC5kesES4PC2*2;PG^yx8{@4U# zT-i-Gvbxrvn6%l|?glE%+!Z&jnRNMbdA-kg9+ zH-}K16TjI3ROEY*vP>%beMkqIy~rS&G-cd876nShzCfbV3p&Um`Q3~VzR?5m&#g60#ERKN`mb+pxLX%=zHS6lURhXw}fw>~OneM4?^Yh#M zOCzD3mr<8_HdeLLI?%3vPCN8PkCO_An5=h9(POHxM(cFPd3@ z(ZwoQ&PZ4e-$vvM3UU%g*=z&^0K2a&LvOst@aV_%L2sU-(OLB!m+g1)9bYyOnQ)bF zs<5_@@U^H5@&#I9Io#DZ;uZ$^`E^)Xtxt-Zl;mQ{f6H7Ta<|2NRbg#S-P31I-M-g7 z_;M|0a9Ye@P2=5xjFEeG9#2{u9A#%!dgzC=j(B|i_Dx{J20p;#*98T8EHlu1Hy^@J zC1n5XIq1QgKqv8S-mFE^*+V>9`@BS6xfg*d%taNaynXwUOWFDP(@^7ALS4|v#%AQ} zD3|k)mwU&j4Ul3?LuG1*s_IsdZdDCX<{BfjKX>lj?)0?+`z31z`}?0470m*zd`4*r zMvaYw^XNn}gg&gkC>gJczvW`Ev z?R<+>8&J(YsUo-q0_D)YmP$craRP&a!a%v3eSEqcgFw6yFY8hKgyvwjwMieOSz>0z zp*&fuPS4&vSwKl|>fhtDMn~i@MI&FlF>IB1osQhCQ-fTs?o)QPXE(Tv7ufpNLQ6yA zxqGzE9bV|aHkT~nIdt&g33%?QEC1TJ8Z)*rF#0*#*v`P^o)6?R7a2cc!e@-9z|}=} zvFGZZ1{xYCpbEHp{rbI>6mD7k{fCa%(o3IlyoRCY<-J*gOW@Wb(VJG5+k7J_sFh< z*u8M*j}88|*2{EXh{`R%dA)+hyA*;xN?jgamm`4Enb4~$j-B&2b^S(Q>bkd|rP!63dxgk02Q?dKc zEb$G7?(H=)k-tSM(_l3i$+rz3c{=>}Z3L`!!;0|=Ytfi>4t&ZqWxtC;FtCZw+K(?1 z8W@@yI_MDk5Gl8hW=$!kIl=xqfB$~cHGuR_0EJR03xwcp%Bs}EwO9T`H=_wAx||#= zp0{e%s)@MU1J%vgq$E$x+k-Ma9M;81kT|R5dvaj8f6X~Fkwu%$!eOkN_p8_ zl|a!=DBt=w6oa=EvOEIf=O89pBFn5vcbetYUbD%-;EvhWFG#5_1_e#Sduj}n&cm>m z=@^`eej+nWO~bU{aq^xs9vNu4e}2J^`>l2+6kRSy9ctE16%HXGq30fxYqz{FYie*v zJNEfxePU<1wEq^|Tm&&X`vYzG6(6CFt&j>~j`IRCpv#v}!hj579MG(Ar10g77vs?- zwF!n19dP8(AyM1{$-jXI z*a%1P?%m_uDiWV#zM5W^Cm)8(;_x3HD8%)&VxY4$el5p-?sysI^(bI6Z7u!R956_q zQMJQWU_oZ=J_*k&D)uI1CZv82?&+qBF5oeEF}_JW<~Nvqj0Trd5?+9GFV}wanmpS; z(SzebcjrBNrupC%LZ^|5$x`tg+4qSfHzH#s1Ri2U7Q29e04zyBk;Ass#ir{BV*!ospk(G^0s?nGjUHhv_ltHk0Y68KJOeP%Dm!10=40S74BB+0v^m?j(eI@TARc=E{$$ioPU@|p5>BGyjw$aAF%u4j zHE+E&UQhNPmO$*=v1~5>WB=pB9MH{d{8{ZV>W1VxPtFMLTC{W5fB!CMF=s-ACJjs5 z5v}?HvlAyzn|A8#+3nAGb5vDSjEs$GR?16EzC^OafeGE-P$2w;qWQ6zaHF7KPMJ;8 zKVN`_pg%`F^LLF2Zc>O%NH~qD*n0Z<2py*b1GzDcamvn!xwspo$8#pC;|JGt_M=Q{ zgwFVtA(h66X{Mh35c7O_bLQ|KXftDheNgUCR(ZWQ;zJ^b<<*C4}GCA_EA1R0% z4y{!!K2lNy(e`pu-9DuS-I z`M4bK6T1Qo7c_$(o@tBVmCuT!{j+d*TKv*I1|@O9gAeK192Cc~VS278dKVH0imzhc z@k9=ehwew8WEL5ln@_<-VdQo*G8S>I(aVN##Kp_=K@s-P7d;_UGtbVRJNKlwxA*^{ z>P^70Uf1t&4H9K4Lm{FPDpLrV5>gRDh9ntEM1&$k37Ik_h02r+MIs6zl%XOsC1faL zrescj>v{Ly=l}ihYhRsnu2Xs6&*ypWVcl!3TlVYr?c2NYA~rN%v*`K$-52f^IA!Pn-pBAgW0u3dXwgWvr)(@9oDm}u-ffJ$l* zc2pqdC1?vc%=|RM7(BTv&lv4x+Xs1Fau)}83QZjTHx4H2U|>>#a^kr~6+^>5Hp7!A z`#`(dkXLsO`-(;5xiW&Jv}(_u>ae_c5z)TV{q24#7%;EFr?k=>l|iJ{7=>Rb{A$Ws z2;7!UKkl4q+xR_?|GN<`RJ6SN<;?q5^A3)V41RmXt4%$8(!kZx$LEr9e-0XPQLqoYsM!Ick(wmezSCGeNbsHexGtgLKiXSYYdR2SUY5Kxk)ytrecqvgKLfk3TeO0%Kh z_3L#DT=(FI5Vg1oI2(mcAirfN6(}EsoF6Cx3 ziCkPu1UE$bbEsw9`P*c9Ej?fG2$W=&(^2^-yuQTyqOfkcx_m z=n~I~y%G|>#l`aYcqHC~1Fgfb`BaIA4A6pYHoSY$6QBl5{KOZJw7Y4aJr~0Mw!t`M zRNlPzKH^`v&l&vzf(jqY8wnnaJPNmf_YuzLjb2G!?94*J;HxKO6>8UzR1vwTLqaU7 z-e%#eAo<+DVK)N=d7~G*Mr`&R`I8G;67BHo?DTP2d5<~mqcL)om#jydwr`-trV}UU z!Fq4OPq<;o2*?|%s6#-u`qd%p5!xs5w>X2h{?)({J91wZnJn~w{`@Hl-4T}S&Cr%?C=B)g8T>Oz1;=!HK>v{7LDH`_anr|KGf;I>PlGxYvasFcL6t1K+!vO zg56=!XMu?VS&)@?JcE!8ZDyI7m=f}m{Bb9ryy(`mgKOlwqMiXnbB$5`GsR+qKYmnr z1UX}2y{>!7ps}KsZd+{lIX_=tGeDF!-z+61B;Mh?F>`YZ3n*;cwhAS@{x1K@Va!$z zfk~S184!a7$T&83e>~u1&HQI+DH||;+0Ns*NZZh}-0^sa^5r>z;{)qfu1LVSMJVoR zd3kO5Z%wc$W=pv_iFd|tUQeY)PLLl1)@HNhrldrLT^1*Io8)UdIM$^i2$FV^z;)fd zhXHWc#2Zk;YxNXRv|B)IRsvv1VxJ|3#~{&!z{T)su|o`F?0CkO+Oidp8SZns1@Hf& z;^G){!+pk2Z-bHMuW;lS?NnmVvaSc=M;u)+hwXz#GFFl(Cm z{QP_~Z0WRNeb50)uRuY-4^(%mz!DM$n5!H&NnO~K)w>(D##(xMEABp^1vO$B&rZMj z^yjYvIy_Uq{nHWkbu{bPh4o&qO$`a52jCWr_P0gAc~^uwP!f@}mf5C3?l2q0KNG9K zXINc@CT{~+C+sF2Q|D2$A)0K=RA;1A9SRuryoE-70w*NcxFfPp`WCzsVfR;#{Ss#o zMU21Y4Ix4kue{5Oc&2=oZy9UZaVn-NGH6~%OG}qlR|lM@*YomHfU$IWY`YWrtj=NO zWo0Ws6*gN?FfcK>1y(KH;V>quQbd8(JR2H8xQ=*{eqXB1TR}5XyBovfjS~D+HSvl( z7-t=Sntv`2c$_(oEB4bq>sBDXc9*%89k~24-9LkecVn3`z7_HhUl{HJq(SP^ewqbV zR9cg(G4Z zXCA1KkGFy+JDdZ}F@>?=31Gu)IcjmO$~DZe*2)Hi^+^+F(i;3eea|ch%ycA8wdCaG zRb`Tct`EI$)g(8Li9PYI#(*g&bzmDiqU z!3c$iL?W$YXIWl6PsPd>a$4cfuo_*Ms6_Lpw)1ei&a)3cioWuptp2-O!!X&D?2krm zbAT@*0VFgMaqJQQF8?VO$^yxk5YFI)3N%j(~1Ws zp)1l^oHkq!h_noNzKRjodm0>9am%$%55jxz@4jn6fDA`bZgFR>PBcCdH3gI_F*kVUksRE+HKYY$4v`-Yc#m@Wwer!*e zZ}jiCJ>=w|bl|`WU3aueK<0bjzwyq(y?mZB^Ps$3IVDM#JgI&A{9z~CB<-9K;bj9k z9l=zuz5x$K)zEMg+U77Yivqe78+b@8hg{VR3bu&9ubqdIPVmZ7%`MG-n*=10_X`&I z45R`&kc}|=7JkyIds0r;!X6u6K*ufMm}e-rJlQT9{2)pc^&R_Tb)M783~y>ad{D;U zxF%=54dE}w0PF94SW~_#DFt9meRqoSbrC z)rge{Z1Y}c9tgDUX@c$>ucg(VA}m4u!SSi-^Sx+NQf69c)FN z=n_&CAJ2m@unrw1l@j_P)sg$wpU@yvU%QFNsrYvjE?bMWm;q|?KY-aQ$UC;M@PVWG zIz;TY&#vS_p5K&Ky7S+B8NOx|EW9~5AWR@c5O>_9>5qOcO;gU(af_s?(Ham1gBC5WO?(0TxTK(H8n4<^@*dt>m**j#?S2-Gj zH<~b@gA7s`e4-Wp)oUPe@x!w}QH65bGF0a3Zvlj|RPPJi``vzRchb<-4!7R{iAY^E(~0R)n*DIL0T)DfzsT9qq;vE028VJnY^mh)K^(C=b<;|}Z zx7)SWIuFQA@STP?H++1`u(BldEl6+yXtK)cwVfUxM+jj;8D=dKqnv0awDK7(iAd9> z@#pevTIfK4R6x(MdNxr{$fZOf&N{5V_ZI#-cA1T(*yFPdrzBB~i}DK#gSr%%q3GoW z1iHE^%OrD)X4ZdPfPxKB^fQS)Ds*#o?Z!)M8C;Yk_lJYw|Mas5gaiai(Q1mi4C|>J zIuzVG-o)9tQ!6f`HNC~$x+#SoI~n(u*irdu{bI znW@>rPo`#Oynda7Nq&l<=7sXdwx{;DPiRQ|fD^7V!joj{8z4Mroocxb`ElFG0wx5H zJGu|EOGXry^p?Nn5HyRxq(aA2lTGOEN@{<=5aBs{_N*~a8~9iCri zwN5Vn_&pREJ;)tZm}G=OAww(tOppyF<|*BHAB#@WuLS?SHuLM3d64Ge!)I)kGr(j^ znbErV!BWt}89hjfW58vWn~b$3J&lLc^ggb))05wt@>4(1-+c)w1sNBY==+;%GL zZaY1Jy%gWr^j15;rGrvau8ati+{C1$l}8@mmI-|vy?+;;T!YlkMtSZQ$g~6om$|7xm@d`pRu4cx zARgdNgPSNBDE7FiDOrtp2CbA~wmCHrX4R3eSXFe|Ykmie$-H5jZ}X=#YyqQ#Ri`~B zsdaVK3=9m&vNE*Q^=4=5C>O`PBtIi#J?eE0v4^rQD<|^1H-9{^m0)ePsn`I$edo?8 z`|F3B2Q`J$`vXO`RG0)%3V^(KUM8=$;G8*P(H?nQl($9 zhKL4Yr4}W%yuG5L^&h06)y8t2!0tJ;_&SOwS6m0+3uc_W2bhO97-cM4urI32uhC^G zE-7Rn2(1b!i>!H6^6;HhEoPYmyzu@QoYq%40{w4Ql2Sr#+TGXpXv#$|*$brwE7xnA z79p|-^#vuToHKfYks#Iqb13Y@phO_Dh+Ho#@y)18lJ{|T#m5erO z96<|761m*BYxnM31>M2Xz7NJc;73Jo`D<>qVXJ24@PlKSK`4`36|=A@fv!EjW}(23 zG@QwTaGFuUdOZ-Id~oP_Vq#*FrsXltB)vMw3reUyoJ-v1&P#loFG`W4!BBCVB?b%? zpTB&OpLc?dNK6S&y3@o4ccSTH+54ka}#G$W~8K~Bo$UkN?-(ZqZhL;)lVuO&S8g8 zR*7TbLa+=26>JH%5B`0`v>{N%LFYWBVm~FYYu8%>sG~kc@wEo%RMKx!G~C+k6YsS^ z3m2xlYU{?<5ikRFRG4_im?x8}~Ju_lcC_Is_ ziSonY@?|!blgE!IwVo4i%omJ0LX5{{>5~ou>N=>QaVz07p{7@!sij1KLbK$N)s*B( zeo-J$E?Q+sTAGq(_TvEf`ubYio$=KM98a18v;o?BdcL5-Vd$I)C>Nd9Ahs7^_;>~* z;ul;-?2=#F+gs<{ac!A-cvjQ6&nIq)A`*H9D_RP>N0l;THtBBjI{LNPg(tumZ$8=#|07ZU8}$kT0ur$r?b#0i09n{ z2s1IkBuR4$yZFjczQ*h`MhW`1v-8wJBW7|aBs5UvVVA^e0RN$IGi+G+A z?`CkpZ_qV>!o5*Vt^M?;-4W`d5Y%8XZ>ZoHOpDg8U*D{K;tA~@b)gjWA-J@OP)6>@SVZ$)<>Wlkk;_{sD4$hm1A%`v&u!qmHO+s&2{2_hQt3x{;?7tE^@5xAo$0%msA&ptbiB&P@iQ8~Y8)N+bE5{Cg z8RS7}LBI*bYuPE&wN#%=Johiat5e{bfAt&mJgY0f-mNbTp-b&-CL)?RV(8@Q?-9v-Of zLctO@LwE0R=~Cm+*(-j^WggpRzJ&CFE^szT5%s_BqD@BKwu=|XIj-G1@>pZ12af07 z5CfjV)+d3UnY0c4%2umZ`3!i`%$W&xH$;O?>?hNYmZ0s6xpVhq(!LYQY}M(u#6+j~ zSm_(T9Y)#0DNnU98Nr<79m_@zjwe$iJ5w;O5U-MWtQti5O4A^7R-uSOx9UxdeRF%` zfGh1iTSKr8AcN0lfsp{DU$%MT6BNQ8H(-UK2IY zDyIjAz!ziINnt`xhkMBJA?-3E`&GyAa1-Hk3msHcm?UFj|18Z7IrK)lJP-?rKGI|c zZ-n>qWvGt0c#lmsKg-G4fNfUmrld>zZj^=$b^SAuE5uHv5X>LVFg=(9-BNYem|*1l z36u~h_2}2q(KRmi#%b*p6Z4LY+z5co7hYi7 zD-I5>W9N2{1dy_o;mWfUMn-`ce@s&9oeq;oTzp@-5tLm4K|!ScocOeVJm7eT6TCTU z>a-GZp!L)pg+u#R*OsNdMZbii$1)VF(rj`UH(`P)3Y+qNw;mg8Okt7P)*1fZ@_9~< zc@U=B#?2rfdMW$Tc|MA zYMXnFi;sz+YZba!x^}s$oV3tBY2cr7vs0juMO@**P&di`*CX4^*w1aTOm-WOJ79SE zm7_ZOOu^M@AxuPL%+cc;jM#=sefj$JZEbCcAU_xvPqUnG-Y^hrX?JxwzWmGRZ zS#5X$G3)-UUcEX%szd?kRh`|fG{!wwcao340ss}c`$*lC0#Hh{wetOYT4*;22U01;;c|kI=_#7Yl*);Y7xWilOO4baKya_3bz4IKhrEd3_mQLRdJIau{VU zZP&f^8Iz`HCvBl9W07(>nD=3KsI^N?JGKUyVRlmEh^cN;Kl7F?was4m-?DqSMc7*F zHk9_+>O)K8ec|1KSyw%Hp|btH#?HL;~*Xl3iM&!S)2Gwy!NYP2O72CWOSlHVFA zA*Z~~1ASK1OrWF=I1)E{A(KyPTE$N(wd2&TFjA5bei!$G!z;Y z9EQP36mVFAA7fBeXJ-kZy%o9h&lN5eaN(~rUbL@gY2Y&HeD?qiroaeVrH(paK5MWT z8h6&;fCtOcaO5n6e!GAx)n(^h^(M8>2JV4eTwJafA1GWIT1CAH{sxG-)`w=t+TABHiP#7@lq`du?K7D|AA>7T&L?;9*NAZZf<#Wh%u$^ zLJNT4o9M1=wr-nlK=+BlFUF}?n&H5K12vA6U=vacj?eRRb=+KXuG-CBn1==eQ0n>? zMY}&%`6eQwC=XZpLh;A9Z~F@3zkL2II?a1_#i68= zsKxoOSNU(vJKwYh(T||T*x-!BU5^$Jys(4mdP%6nz!*URS@1lA3Hyc4c-hlE9&t%f zzLsjU>+@53U`$}ZSqTeW#)BoruE4HNP6=x!e3QyQuL<0PDySUN=z}rm!+`Zp4SY<= z|8%W6O-I9a(-SalPIFY>9E?POf7{X$HLq|;M~4}R3&5$Y#F~H-S*QM63HjHrQ$_5h z)C$a>wA*OOJ*GSjz@ZraQNfmQ0*NU2M29Xo8t_FS<_25ueVk5F(zn3(sA?{Gsr$ma zYG>RfuBzAZ1Z{9^YHEsU2ddJx;M7_>VjkD8fphG9N$PyH@9w{?zxm2^j1@Hii(QG0=~wXfG&i-4d{XSdPX?m z8Qr(up%y}DOFT%UQ`suXJIg}V4G>ugJcH^l0Y0b+#!wDd*VI^!DGCUvXPJsnUPSIF zutGzu_k*sF-`G(LtI448Jp+*?<~#|#aU5z>6;A?XPJ1jZxb(XlJfUOGVd?%@T}_6D zF_rSD*2Z6AB%SwZMRZJzSZ&Bd#cOd_PBw~yL`N7k=%oUJgDDLr*(eIBXC*S$Br4lp zbROWy9>PtlZ2Q5mNt6n6#vHXO*Vt!m-Z^ZlYp75|r?jbOyIs91UbS|Qa;rA78K1PY zq4os}w^N=#6QV6*&Aqiy97c`o96o+({ap!rG|xAB0c^Ken;u=O2*vXahT^HIse_my zONKL(cN-x3FB60O_hT>-=)thQ4D9m|xJBqJaEY0(Cc_l~oyz=?fsH%UIX|vZRGPl& zh*fk^_iJo7va|aGw(S~4n0I^iL;Bc{6fXVXmHNz1Z}*=XDb(@SY7EDvyeX5Co2$1f zMuLkV=Jyp>tz7v#W$+b-n^TpJc6&@wGHu8mIvvTiWlIb@F=Ob%+p!7T!p@Ep5BC7s zQ)W*NE61_x-HIkxM$-=zK?2DU>fF84Ud)fR0#$CnT+$qG3VpH=Oea-_?lp&yW7*2} z09Ztch?%YJ$&or(`oxrEfmb9N;@3ftx(V;ZIL~IskvA%mh?Mb$Qx(b#J=*#m zt#9A@r1RYEO(X5SmzTo$3~|Dq-}JG}4V@?S2`H?0&> znog3X(%|f3rK1KL5L6f|s~yqN&<3<*Mlt!ACAl zY#c5}Lr_0qq{1FgVTHg}?;CT&h? zYnSHoW<6VWYBhhNyl)TFQqS;k5b~foLOqI@c(p1lxF|&oa#MVDxak*W{i0PMRkcR5 zAAby37uqxp&ylaZA%yB=lU2JiemAv1?qe`CYWxN)%*|cp2k*EnmHVyc8%%qApV z3%$eYi?`NX$Gm`>jBn8N>@h!4PO>um6QZZEtXF8=7$p-)Ty7cRe%Jluhac;%6Wvf; z5VmUKsf5rYhoY;QV!*9*) z?C7yqLfQ*PQ6QEj9~8My#aodG`uy~-ZWVGaCG4F2z5h+T>OTG5-PeI2lz;pf%+@$m zjdu}k0me-7FEK9+o7A?=6+qQRaq#Lhbl_Q~bfp1D(TqQN# zCPcYnY~0-3ppiVLu98)8a+uy|%kV5A;d**;UY^TCr=6yzrkJeJjQ<4(vH_H=t6yOg zGBLJM>7i#1_gLfSeJiDQ05!wE(9>bZIU|e%7(;G3LAyyGc z1JBs-aB$Fpnp)O3v<*2MChn>e#Wz5DdWZeJXe}$TiOcz_Rutyt{KKhoSTAav%&Gf-U?TOgndBhsGXFEvK|WrweB5f~ZK%qtu#wmFLDAJZDLvJ^S4yQe2H z@z(EypiV^xzwAfGMjApf*#=Clv&56AMXEo2s>EXmzk9c`!#_B99hk6t(k6Zat%dTX)P0&k%kaH`(6*d=D?@|K9uvWfbPV=iBwTlog5yYo9rVS zDTX^AU^V84JCA~ck3O^`sr2tCUMy(o-JK;;&YAPfea0J;c4ee4DuBjzFh*j%vXnG8 zW~7LJ9Mx)@TAOZO>@0jt-sh3W#+&`4(A=xt+T@LxI2B5|9^@48*H(wPQ2=&uuVqE# zPV4LYWn}Dr_wLuN*XIt6|;W zCBw9I791YD0`taXqRCK1o3d+xh;R(Cw7Bc)$exBpetPhsqZ0CAXwZ6+>Ol3HrvPGl z@Gfs$YD8tfI%NjHKF5b-eiT)ix3>9$wXciKBS-=P-L-e||7qOM0;B~xS3>sh7y@p7 zdJqVP*}5?_61}ixdkdPAD8$}#i;H`ClyW`U+JUSUGv@Ofz3ZncBgR`ymlEiC zpWqXl!Ei}7=32wFY(1uB{Y1jkpVu6VlICNPX%0>VFigfoRg0|CZ=U6?j3=T2K%h); znEYVk1>@a>w?S0h5MbDZebb&EZ15>4O$~R`X`J}{_3Jii=}l;M**ie)6T7?HXeD^V zAfo_^p$8vuqu9};qi9ZQW=~(Q8i}KPuix~nbKCztri}@!X=w0Q7-sF;D=7&8*4$

h)N%S1T4UGb#C=_AohezdWQQcnmI~A1)#mAFW@o$CvZTb z&@tV^<~h;r{Y;laeQh`iY8U~<+t0EcSB&-PJ9JA%x|Kd>+Kz7xH#_Io9IJI%e~-n< z1)}2J0%C{IR|wsL&-X>VdUd7Pjxey@-@Zhx3BK1*occD)^XI|AS&MZF8(>9%h#8i) z1mug{P>2DZr!C#S`4mBr5MQ8NkLjJepim4ZwUYu)XAS56X-(*HipR5t5idDLPjBh( z@BbIycdL3=RfQQBI= zm&3bFM5J)^UK4m@c30F9!spw*gL3Kk5A#KI!@R~1^wQXU7oUwdS1(gepV;XPZ2{LX zgUpiN=+SnoQ*M#}aRKst&~uIR$pK-QW}CCzlic6aqchNlT4Pm}V-cgE{ovFI6-D*O z$7>$$XD5pQj2H?{X@o3`Z9SvJ~U+K(SCY_vG;qJr!u zjThQZQHUgU7RgqU=xcTAeU+&b6)zALM(muxeCHjKa7A)zoZGZuy4nj=?;0@}#+ro! zwEcc+cX2xoMRe79b<(}ItEmF`LIKZ<@i6MXkQ4p)hCmw4_;!e@w4y>)U6yi%HSa1X zmICN?1QFs?s`6i+TK1{bF^@?^yBLc(mI6*uGpg~wK+PO5+Jztk1N^Z%LjBx-IpakL znx3XvYhYeb*!f>^SB_)dv?+i*o!tDLM3bjXXG#}S)w-Iu;?9V>o$Y!JO-;;$s<=|q zZAqaAQc)4a?O-g%n6l1Z81`iw`QdarNWueH3|LaU(xDq4zd;R7MzK)VmLr1S|Gwm3 zsZ#B}rpnRTL6~wZHvHdk^!@wyZp>QLR8&?&)ZrSRd{m+j;S6$EtDv42gXI{`VQy8l zDChOZ^@K>d+Sc;mZ=#O@2Kh|anrsNq8ewr(KDka9yEOB}L$v{3 zX^ci4d7R+qPEl|fO>KCK(N&y>6hGxz(rW=12L9uZ5eFxdDmGg;yByKvs4bgJ9pf@V zk>|8Np8hL{5$5fBUWr>lc(9#b7n=4-y#HRfU70Id2aRRKLAeozWY9G)M(;iMOvu#KMR#HE`=Fb9nx=Q?!VijBp9?@G8s#5R z8cs>m(^feWssfq~A)7b&=oBuM@TnkxSvree9G!hSn$@;KBjc27wsr+FYOsN+8#Q2L z7Cp;{0m1#j^SW0`@+qaIp3slH&?u%7UH2D>cAsNt%9m69fh{5D;VAkoeyfmACb^3|5=f+XyU$XUB+p&q``221X z^#*wse93>3_>g=6i#^JqAY)=Tsot* zj3~wJX>IN6AZ${gE^%5eaqD6V=p`pRG@yx(%9U-}B@z=~ue@p1NQwqn&E4qyn zM#jeG;CdJqxn>L8kHL3HQ>S*j(I?%%Nr777Vn;sj_J?ai`lK^2Y_MI+*#M?kbUW0^ z;_TIC55Kll9MC9)1~~|3hS$@>R&*H%7BMZVZti;jKG5JbLYe3mWu3OX8eF+TgSWG#+wYoZ zwYV{r`(ujMR1%JF3Z0};_Gi738EWx9PqGCYPS zPTT}l(;R++zl}2o3|o2h9<7Ym3a9)p!671W8)1Wj|6LPY6mZp0>(ZL*5V-uZ85kU_&UMpodH)$UzC@%t z?lmX;WYu-b9P1=izQ??{?qX^~UTaq#zpuo4O_!-u%+{Xi)~~yH^JWca6-s|cMCh(j z#ODvq#EvGW{b?WiFLK#*b$BS}vQZSKLVf68E1`OLZueCR<;KxAK}kUgn$%*M{Qu^N z*8v-3y^M>CD_YbSiULZRF`bPfyK9N+I`o@am$9WyV+m`7UE?7J)_+T8=ymB-Y*g*^*Gm8Y!f;(2{DEK077#|cmb_F!3)X{5?fnDyQ8 z8}8=v2I_AKijZNLz49OKEowso1C}fd?}B*w)HVwyN7@1{zT`Ox5*z}g{(le^Z1xC& zyU_px9766V8aUu?%CJ2bSlZA6J#TdT*Uz65z`-eM$L>S%_y?!%gZ48q=0h2FPS`I4 zsF|=|_x!Yoi}{f8x;L$0y(gyI|IGz6&V}x(1sU;@MBUvo2C*X{qq~uE%}u1npba9- zY73N#q=%y!um&VHFAMhTc` zxZ+FPaWGYDjmL(zi7_%jz2XQOTWlh7MA71!>xki^c{@XV{%vB2!>P@5b)t&^{zfU3})kgEu?~$G zAp;XLiONcK2uz?Q$%cicj+9{&U?n(KzwgKbJ15+k@`X6)d3bn=V4$AFRY^EQsHQDQ z^OkLKC{nIjnccd?aQ{>V@FB29&IO$j4Eh2~qLdOX$RS4R`uh6ZW*e|Ct;=p1?yq>v zO3gmP0b^;4U2q$K;`k=*Mt*ESRw#voj4vP}3(%h-YL;{A`J8g|htiCVa(}j@_qcrb zIY~bmCtlU&chQU*Q0^f!>0rEi`LxP@Ult$MRu zP%0FqL2&pUH@1;A_TYJ?%wXh)2j1KA64Gn@NpK1>C#Rs|@9HBc|DH;-Q+Fbfhrss~ ztI)#?z1UV04ENaKel7gCQ>h9200aBsH4zjbRK|5;D_F!McK2}0^pu=n>n1AR_;b%a z&;&`(fY0?xt!f1~`--HMNt6%%6CMN&Q2b*mL4&%Ka9)7JH;?TDPZdSNU{fli^1*{K zbW$6n5S|{&;^zQXpWv?h`t`n`B0eF2 z%U|~J!=&NlKP3Y<5Z4U+!Ii64F>`VTqcl#0k8Gww)R7%h7rSmD z_-(@`EI{;NgR%)){E~w1(HjDaGk3RQ~=Y91bcoZ5zwaks;(>UZ1nt1+BbFzEyumDXrbuHWGTE9Nb9`?P)v zI;t*a=n}sxxkp?|suDL45FZbiV8<-{_Yhhx3O+@Wv4xs5Q+-+1rml=9Z@t0b{|tOg zapZ`GKorF=t^*CYC3>&xKqU-xFgL8bqdOD!9(j*gDHJiKAL8FWEiZ}Rto;n(^)5Nktk z3Nm8okTRo8KB>lX>jGdi{Odg0&WZt_sH7zH5JQplbbxWl-~!6C8xZC6L9c^ss6uA{ zGL*b7aRPKi$S(chtO7LqxzoTgn0BOhUc~W&S!EBk&u}10lHcjDLcG87`5EQUMtjiKIpw|E%7&S)x=7! zTgSHBx{;=8XczBn_`jl_->jLxC{!Ojha>}xg#uv9xeCkjHh^9*3H3sHXDYf`JWWtD z*ASG3&<)mwR!_mX@U6!OnUSH(m2fB-!a8W<9i>9p#v z;_@FK7*cmFVLK)Z5T2s1>l_JrDac(`T6!zMwo3&?U9;6l(FcU0l!c;NUB8uJWJ1im z^8S(fo)>!X@L|u-pSRFan86%LBVJM;@M{IyK{^biah}Pm&($_s{ZG{hm-3Vus`_+Y zq!c_te+~Y=Q@#>nV%e29N5SIhvOt{*DWT|(Dr1dli2F505BGf^8wUI4+Vj!XAjPavMvjZ5dNr*g5=@j3>)&zkD@lOC8_A@cTZqMU$yC+&h0 zSbHg4H`i~*&?8$M;$bv5M1l>F_yYE=Z1Yn9z#W3i4}xX<{Nh^JXqf50&ksPBYTrilQFgYt}>F%&Bc~P=>Jo$XL zGy}mQaJ-(w8ue%AYlCflq{&0!QU%X->Tj>M_F614tXzBT8wC<*kSO#~`nMrf5g{EL zm~;?!tS7TZBK>K+I34m33PLkDDGb6hRA5O;6~;$rL(iPjqoG0vU$n1i03g@%=M(RT zI?#9(RZadwUW&d18mYPQZyGt%Th)a_VgH>}rkv}k&`%MO*_s^QLKZHr8oll*Ohkxk z99(N#PdO>6yXXI)R}jlP=K}K~pet&b3NRM(!-+_QNWo^{(QqLJXbUgI$m0wOs_Ks) z-vWJ!3F1iy7IXuoItFNnm61(x+is$23=Fqx!U(GUz7HHGEo?4gZ(e9$v^kX-YTu&e zJ-}4Jpm5DOzYSA@S!rb{W`pJUUx*`qpmYgsQX-BYu)bN_E*Bji&xk8UZ>h>b$9vy? zWLNu6XI0f}leQl>ILyvlU}Rlz^4|0g3#oFBM-gB8ci&z5 z`}v}Md*{HC!g!s`xpP?J^mw-RY1j*=Pp0Fui_@2#-l7%G_FB5S9;>;(@aN+#ccaUD zhi?`EN&fx9?EziZ_7WUDP&LYh-Me?MzCRCdt#kfd@xGQ7ey?PLnL4-9Oc=3eSH9p+ z3OabU=PxQOSrz4%Gq7VXZ)wqYa)0sV7SFXm+3%K50EYn=Ol`^#gMo6+H>!XG&5&By zLMD-w%sxGkITGZ)0gou+2lv%MUJT+^p{zIrXfx{8d8zwQsGcT_OmcZ9&KL^4<1*p3 z{obu|`jNPQfOk2cwlPK_oib_eU}q%y{6(o)p1nCl&DGU)?eshdV15ITP+SI8SN>&_}*Y;!%rf09Z$<@#QHd>yOfkB_ht+aAyu%Yi3^LQXHV zc^@RH_&!yN%kx^O1Q{>~(h;|}dh3zx@~Z+JMme>;)vOBGj_2(`0=tqL(1o5Uxgh@4 zt9{s!vz_ZCf}3wU4;Yr@H%~F?@Wyb37k>}63YI=`^Qd8ley$@n1`y-DF@xwS4{*MS$p?^edEgleAcG5yW&@MIGpI^t=Tr~uEv-IH};Jc`1( zyxPvDI=Dc$y*iBtwu)_?#|T6y{Sl)vPoNh`;URSd=* zP@lQMKG|a(zh~9UR8`19$ z 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

_$p0Td4yumzn)(nQLUx2(Ab+O( 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�Z)e*N#! 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

-l^>#{F@>Kc0d6 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±{pP5Q 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 z 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�RbHg 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�JOhSA3tAFbNZH-QUGzz#-Tz_6#uJo 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%0AOsz`YriNyCj-?~jFK5*SwV>#D1kxhP> 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 x(CJkYxJ=>T_y^+uK. Sadinle, Mauricio, Jing Lei, and Larry Wasserman. 2019. “Least Ambiguous Set-Valued Classifiers with Bounded Error Levels.” *Journal of the American Statistical Association* 114 (525): 223–34. diff --git a/docs/src/reference.commonmark.md b/docs/src/reference.commonmark.md new file mode 100644 index 0000000..2e23bdb --- /dev/null +++ b/docs/src/reference.commonmark.md @@ -0,0 +1,35 @@ + +``` @meta +CurrentModule = ConformalPrediction +``` + +## Content + +``` @contents +Pages = ["reference.md"] +``` + +## Index + +``` @index +``` + +## Public Interface + +``` @autodocs +Modules = [ + ConformalPrediction, + ConformalPrediction.ConformalModels +] +Private = false +``` + +## Internal functions + +``` @autodocs +Modules = [ + ConformalPrediction, + ConformalPrediction.ConformalModels +] +Public = false +``` diff --git a/test/Manifest.toml b/test/Manifest.toml index a25928c..d564dda 100644 --- a/test/Manifest.toml +++ b/test/Manifest.toml @@ -2,7 +2,7 @@ julia_version = "1.8.1" manifest_format = "2.0" -project_hash = "988c4d4cb0a10e861795c29e95a79cf7c9c883cb" +project_hash = "c86d41ede7b316f1c0c615053739e4cfe0ac765b" [[deps.ANSIColoredPrinters]] git-tree-sha1 = "574baf8110975760d391c710b6341da1afa48d8c" @@ -117,6 +117,12 @@ git-tree-sha1 = "49549e2c28ffb9cc77b3689dc10e46e6271e9452" uuid = "052768ef-5323-5732-b1bb-66c8b64840ba" version = "3.12.0" +[[deps.Cairo_jll]] +deps = ["Artifacts", "Bzip2_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "4b859a208b2397a7a623a03449e4636bdb17bcf2" +uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" +version = "1.16.1+1" + [[deps.Calculus]] deps = ["LinearAlgebra"] git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad" @@ -349,6 +355,12 @@ git-tree-sha1 = "966e236ded10551a44b6e25ce4bbea4c12be1557" uuid = "f6006082-12f8-11e9-0c9c-0d5d367ab1e5" version = "0.12.4" +[[deps.Expat_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "bad72f730e9e91c08d9427d5e8db95478a3c323d" +uuid = "2e619515-83b5-522b-bb60-26c02a35a201" +version = "2.4.8+0" + [[deps.ExprTools]] git-tree-sha1 = "56559bbef6ca5ea0c0818fa5c90320398a6fbf8d" uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" @@ -359,6 +371,18 @@ git-tree-sha1 = "5e1e4c53fa39afe63a7d356e30452249365fba99" uuid = "411431e0-e8b7-467b-b5e0-f676ba4f2910" version = "0.1.1" +[[deps.FFMPEG]] +deps = ["FFMPEG_jll"] +git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8" +uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" +version = "0.4.1" + +[[deps.FFMPEG_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Pkg", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] +git-tree-sha1 = "74faea50c1d007c85837327f6775bea60b5492dd" +uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" +version = "4.4.2+2" + [[deps.FileIO]] deps = ["Pkg", "Requires", "UUIDs"] git-tree-sha1 = "7be5f99f7d15578798f338f5433b6c432ea8037b" @@ -386,6 +410,12 @@ git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" version = "0.8.4" +[[deps.Fontconfig_jll]] +deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Pkg", "Zlib_jll"] +git-tree-sha1 = "21efd19106a55620a188615da6d3d06cd7f6ee03" +uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" +version = "2.13.93+0" + [[deps.Formatting]] deps = ["Printf"] git-tree-sha1 = "8339d61043228fdd3eb658d86c926cb282ae72a8" @@ -410,10 +440,22 @@ git-tree-sha1 = "87eb71354d8ec1a96d4a7636bd57a7347dde3ef9" uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" version = "2.10.4+0" +[[deps.FriBidi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "aa31987c2ba8704e23c6c8ba8a4f769d5d7e4f91" +uuid = "559328eb-81f9-559d-9380-de523a88c83c" +version = "1.0.10+0" + [[deps.Future]] deps = ["Random"] uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" +[[deps.GLFW_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Pkg", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll"] +git-tree-sha1 = "d972031d28c8c8d9d7b41a536ad7bb0c2579caca" +uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89" +version = "3.3.8+0" + [[deps.GPUArrays]] deps = ["Adapt", "GPUArraysCore", "LLVM", "LinearAlgebra", "Printf", "Random", "Reexport", "Serialization", "Statistics"] git-tree-sha1 = "45d7deaf05cbb44116ba785d147c518ab46352d7" @@ -432,6 +474,18 @@ git-tree-sha1 = "323949b0bbdf38c93d2ea1f7d3e68ff163c3f081" uuid = "61eb1bfa-7361-4325-ad38-22787b887f55" version = "0.16.5" +[[deps.GR]] +deps = ["Artifacts", "Base64", "DelimitedFiles", "Downloads", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Pkg", "Preferences", "Printf", "Random", "Serialization", "Sockets", "TOML", "Tar", "Test", "UUIDs", "p7zip_jll"] +git-tree-sha1 = "051072ff2accc6e0e87b708ddee39b18aa04a0bc" +uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" +version = "0.71.1" + +[[deps.GR_jll]] +deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Pkg", "Qt5Base_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "501a4bf76fd679e7fcd678725d5072177392e756" +uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" +version = "0.71.1+0" + [[deps.GeoInterface]] deps = ["Extents"] git-tree-sha1 = "fb28b5dc239d0174d7297310ef7b84a11804dfab" @@ -444,12 +498,41 @@ git-tree-sha1 = "12a584db96f1d460421d5fb8860822971cdb8455" uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" version = "0.4.4" +[[deps.Gettext_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] +git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046" +uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" +version = "0.21.0+0" + +[[deps.Glib_jll]] +deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Pkg", "Zlib_jll"] +git-tree-sha1 = "fb83fbe02fe57f2c068013aa94bcdf6760d3a7a7" +uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" +version = "2.74.0+1" + +[[deps.Graphite2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011" +uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" +version = "1.3.14+0" + +[[deps.Grisu]] +git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2" +uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe" +version = "1.0.2" + [[deps.HTTP]] deps = ["Base64", "CodecZlib", "Dates", "IniFile", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] git-tree-sha1 = "a97d47758e933cd5fe5ea181d178936a9fc60427" uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" version = "1.5.1" +[[deps.HarfBuzz_jll]] +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"] +git-tree-sha1 = "129acf094d168394e80ee1dc4bc06ec835e510a3" +uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" +version = "2.8.1+1" + [[deps.HostCPUFeatures]] deps = ["BitTwiddlingConvenienceFunctions", "IfElse", "Libdl", "Static"] git-tree-sha1 = "b7b88a4716ac33fe31d6556c02fc60017594343c" @@ -520,6 +603,12 @@ git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" uuid = "82899510-4779-5014-852e-03e436cf321d" version = "1.0.0" +[[deps.JLFzf]] +deps = ["Pipe", "REPL", "Random", "fzf_jll"] +git-tree-sha1 = "f377670cda23b6b7c1c0b3893e37451c5c1a2185" +uuid = "1019f520-868f-41f5-a6de-eb00f4b6a39c" +version = "0.1.5" + [[deps.JLLWrappers]] deps = ["Preferences"] git-tree-sha1 = "abc9885a7ca2052a736a600f7fa66209f96506e1" @@ -532,6 +621,24 @@ git-tree-sha1 = "3c837543ddb02250ef42f4738347454f95079d4e" uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" version = "0.21.3" +[[deps.JpegTurbo_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "b53380851c6e6664204efb2e62cd24fa5c47e4ba" +uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" +version = "2.1.2+0" + +[[deps.LAME_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "f6250b16881adf048549549fba48b1161acdac8c" +uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" +version = "3.100.1+0" + +[[deps.LERC_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "bf36f528eec6634efc60d7ec062008f171071434" +uuid = "88015f11-f218-50d7-93a8-a6af411a945d" +version = "3.0.0+1" + [[deps.LLVM]] deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Printf", "Unicode"] git-tree-sha1 = "e7e9184b0bf0158ac4e4aa9daf00041b5909bf1a" @@ -544,6 +651,23 @@ git-tree-sha1 = "771bfe376249626d3ca12bcd58ba243d3f961576" uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab" version = "0.0.16+0" +[[deps.LZO_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "e5b909bcf985c5e2605737d2ce278ed791b89be6" +uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" +version = "2.10.1+0" + +[[deps.LaTeXStrings]] +git-tree-sha1 = "f2355693d6778a178ade15952b7ac47a4ff97996" +uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" +version = "1.3.0" + +[[deps.Latexify]] +deps = ["Formatting", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "OrderedCollections", "Printf", "Requires"] +git-tree-sha1 = "ab9aa169d2160129beb241cb2750ca499b4e90e9" +uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" +version = "0.15.17" + [[deps.LatinHypercubeSampling]] deps = ["Random", "StableRNGs", "StatsBase", "Test"] git-tree-sha1 = "42938ab65e9ed3c3029a8d2c58382ca75bdab243" @@ -582,6 +706,54 @@ version = "1.10.2+0" [[deps.Libdl]] uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" +[[deps.Libffi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "0b4a5d71f3e5200a7dff793393e09dfc2d874290" +uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" +version = "3.2.2+1" + +[[deps.Libgcrypt_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll", "Pkg"] +git-tree-sha1 = "64613c82a59c120435c067c2b809fc61cf5166ae" +uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" +version = "1.8.7+0" + +[[deps.Libglvnd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll"] +git-tree-sha1 = "6f73d1dd803986947b2c750138528a999a6c7733" +uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29" +version = "1.6.0+0" + +[[deps.Libgpg_error_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "c333716e46366857753e273ce6a69ee0945a6db9" +uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" +version = "1.42.0+0" + +[[deps.Libiconv_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "42b62845d70a619f063a7da093d995ec8e15e778" +uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" +version = "1.16.1+1" + +[[deps.Libmount_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "9c30530bf0effd46e15e0fdcf2b8636e78cbbd73" +uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" +version = "2.35.0+0" + +[[deps.Libtiff_jll]] +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "Pkg", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "3eb79b0ca5764d4799c06699573fd8f533259713" +uuid = "89763e89-9b03-5906-acba-b20f662cd828" +version = "4.4.0+0" + +[[deps.Libuuid_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "7f3efec06033682db852f8b3bc3c1d2b0a0ab066" +uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" +version = "2.36.0+0" + [[deps.LightGBM]] deps = ["Dates", "Libdl", "MLJModelInterface", "SparseArrays", "Statistics"] git-tree-sha1 = "658faa6a229fb5bb4aea5cc897cd99db66aafb51" @@ -723,6 +895,11 @@ deps = ["Artifacts", "Libdl"] uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" version = "2.28.0+0" +[[deps.Measures]] +git-tree-sha1 = "c13304c81eec1ed3af7fc20e75fb6b26092a1102" +uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" +version = "0.3.2" + [[deps.Missings]] deps = ["DataAPI"] git-tree-sha1 = "bf210ce90b6c9eed32d25dbcae1ebc565df2687f" @@ -776,6 +953,12 @@ git-tree-sha1 = "f71d8950b724e9ff6110fc948dff5a329f901d64" uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" version = "1.12.8" +[[deps.Ogg_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f" +uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" +version = "1.3.5+1" + [[deps.OpenBLAS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" @@ -816,11 +999,22 @@ git-tree-sha1 = "b9fe76d1a39807fdcf790b991981a922de0c3050" uuid = "429524aa-4258-5aef-a3af-852621145aeb" version = "1.7.3" +[[deps.Opus_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720" +uuid = "91d4177d-7536-5919-b921-800302f37372" +version = "1.3.2+0" + [[deps.OrderedCollections]] git-tree-sha1 = "85f8e6578bf1f9ee0d11e7bb1b1456435479d47c" uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" version = "1.4.1" +[[deps.PCRE2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" +version = "10.40.0+0" + [[deps.PDMats]] deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] git-tree-sha1 = "cf494dca75a69712a72b80bc48f59dcf3dea63ec" @@ -839,11 +1033,40 @@ git-tree-sha1 = "6c01a9b494f6d2a9fc180a08b182fcb06f0958a0" uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" version = "2.4.2" +[[deps.Pipe]] +git-tree-sha1 = "6842804e7867b115ca9de748a0cf6b364523c16d" +uuid = "b98c9c47-44ae-5843-9183-064241ee97a0" +version = "1.3.0" + +[[deps.Pixman_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "b4f5d02549a10e20780a24fce72bea96b6329e29" +uuid = "30392449-352a-5448-841d-b1acce4e97dc" +version = "0.40.1+0" + [[deps.Pkg]] deps = ["Artifacts", "Dates", "Downloads", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" version = "1.8.0" +[[deps.PlotThemes]] +deps = ["PlotUtils", "Statistics"] +git-tree-sha1 = "1f03a2d339f42dca4a4da149c7e15e9b896ad899" +uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a" +version = "3.1.0" + +[[deps.PlotUtils]] +deps = ["ColorSchemes", "Colors", "Dates", "Printf", "Random", "Reexport", "SnoopPrecompile", "Statistics"] +git-tree-sha1 = "21303256d239f6b484977314674aef4bb1fe4420" +uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" +version = "1.3.1" + +[[deps.Plots]] +deps = ["Base64", "Contour", "Dates", "Downloads", "FFMPEG", "FixedPointNumbers", "GR", "JLFzf", "JSON", "LaTeXStrings", "Latexify", "LinearAlgebra", "Measures", "NaNMath", "Pkg", "PlotThemes", "PlotUtils", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "RelocatableFolders", "Requires", "Scratch", "Showoff", "SnoopPrecompile", "SparseArrays", "Statistics", "StatsBase", "UUIDs", "UnicodeFun", "Unzip"] +git-tree-sha1 = "6a9521b955b816aa500462951aa67f3e4467248a" +uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" +version = "1.36.6" + [[deps.PolyesterWeave]] deps = ["BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "Static", "ThreadingUtilities"] git-tree-sha1 = "b42fb2292fbbaed36f25d33a15c8cc0b4f287fcf" @@ -895,6 +1118,12 @@ git-tree-sha1 = "53b8b07b721b77144a0fbbbc2675222ebf40a02d" uuid = "438e738f-606a-5dbb-bf0a-cddfbfd45ab0" version = "1.94.1" +[[deps.Qt5Base_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "xkbcommon_jll"] +git-tree-sha1 = "0c03844e2231e12fda4d0086fd7cbe4098ee8dc5" +uuid = "ea2cea3b-5b76-57ae-a6ef-0a8af62496e1" +version = "5.15.3+2" + [[deps.QuadGK]] deps = ["DataStructures", "LinearAlgebra"] git-tree-sha1 = "97aa253e65b784fd13e83774cadc95b38011d734" @@ -927,6 +1156,12 @@ git-tree-sha1 = "d12e612bba40d189cead6ff857ddb67bd2e6a387" uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" version = "1.3.1" +[[deps.RecipesPipeline]] +deps = ["Dates", "NaNMath", "PlotUtils", "RecipesBase", "SnoopPrecompile"] +git-tree-sha1 = "e974477be88cb5e3040009f3767611bc6357846f" +uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c" +version = "0.6.11" + [[deps.Reexport]] git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" uuid = "189a3867-3050-52da-a836-e630ba90ab69" @@ -1019,6 +1254,12 @@ version = "1.1.1" deps = ["Distributed", "Mmap", "Random", "Serialization"] uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" +[[deps.Showoff]] +deps = ["Dates", "Grisu"] +git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de" +uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" +version = "1.0.3" + [[deps.SimpleBufferStream]] git-tree-sha1 = "874e8867b33a00e784c8a7e4b60afe9e037b74e1" uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7" @@ -1176,6 +1417,12 @@ version = "1.0.2" [[deps.Unicode]] uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" +[[deps.UnicodeFun]] +deps = ["REPL"] +git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf" +uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" +version = "0.4.1" + [[deps.UnicodePlots]] deps = ["ColorSchemes", "ColorTypes", "Contour", "Crayons", "Dates", "FileIO", "FreeType", "LinearAlgebra", "MarchingCubes", "NaNMath", "Printf", "Requires", "SnoopPrecompile", "SparseArrays", "StaticArrays", "StatsBase", "Unitful"] git-tree-sha1 = "390b2e8e5535f5beb50885d1a1059f460547d3a5" @@ -1188,6 +1435,11 @@ git-tree-sha1 = "d57a4ed70b6f9ff1da6719f5f2713706d57e0d66" uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" version = "1.12.0" +[[deps.Unzip]] +git-tree-sha1 = "ca0969166a028236229f63514992fc073799bb78" +uuid = "41fe7b60-77ed-43a1-b4f0-825fd5a5650d" +version = "0.2.0" + [[deps.VectorizationBase]] deps = ["ArrayInterface", "CPUSummary", "HostCPUFeatures", "IfElse", "LayoutPointers", "Libdl", "LinearAlgebra", "SIMDTypes", "Static"] git-tree-sha1 = "ba9d398034a2ba78059391492730889c6e45cf15" @@ -1199,16 +1451,208 @@ git-tree-sha1 = "58d6e80b4ee071f5efd07fda82cb9fbe17200868" uuid = "81def892-9a0e-5fdd-b105-ffc91e053289" version = "1.3.0" +[[deps.Wayland_jll]] +deps = ["Artifacts", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg", "XML2_jll"] +git-tree-sha1 = "3e61f0b86f90dacb0bc0e73a0c5a83f6a8636e23" +uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89" +version = "1.19.0+0" + +[[deps.Wayland_protocols_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4528479aa01ee1b3b4cd0e6faef0e04cf16466da" +uuid = "2381bf8a-dfd0-557d-9999-79630e7b1b91" +version = "1.25.0+0" + +[[deps.XML2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "Zlib_jll"] +git-tree-sha1 = "58443b63fb7e465a8a7210828c91c08b92132dff" +uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" +version = "2.9.14+0" + +[[deps.XSLT_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"] +git-tree-sha1 = "91844873c4085240b95e795f692c4cec4d805f8a" +uuid = "aed1982a-8fda-507f-9586-7b0439959a61" +version = "1.1.34+0" + +[[deps.Xorg_libX11_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] +git-tree-sha1 = "5be649d550f3f4b95308bf0183b82e2582876527" +uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" +version = "1.6.9+4" + +[[deps.Xorg_libXau_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4e490d5c960c314f33885790ed410ff3a94ce67e" +uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" +version = "1.0.9+4" + +[[deps.Xorg_libXcursor_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"] +git-tree-sha1 = "12e0eb3bc634fa2080c1c37fccf56f7c22989afd" +uuid = "935fb764-8cf2-53bf-bb30-45bb1f8bf724" +version = "1.2.0+4" + +[[deps.Xorg_libXdmcp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4fe47bd2247248125c428978740e18a681372dd4" +uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" +version = "1.1.3+4" + +[[deps.Xorg_libXext_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "b7c0aa8c376b31e4852b360222848637f481f8c3" +uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" +version = "1.3.4+4" + +[[deps.Xorg_libXfixes_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "0e0dc7431e7a0587559f9294aeec269471c991a4" +uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" +version = "5.0.3+4" + +[[deps.Xorg_libXi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXfixes_jll"] +git-tree-sha1 = "89b52bc2160aadc84d707093930ef0bffa641246" +uuid = "a51aa0fd-4e3c-5386-b890-e753decda492" +version = "1.7.10+4" + +[[deps.Xorg_libXinerama_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll"] +git-tree-sha1 = "26be8b1c342929259317d8b9f7b53bf2bb73b123" +uuid = "d1454406-59df-5ea1-beac-c340f2130bc3" +version = "1.1.4+4" + +[[deps.Xorg_libXrandr_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll"] +git-tree-sha1 = "34cea83cb726fb58f325887bf0612c6b3fb17631" +uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484" +version = "1.5.2+4" + +[[deps.Xorg_libXrender_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "19560f30fd49f4d4efbe7002a1037f8c43d43b96" +uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" +version = "0.9.10+4" + +[[deps.Xorg_libpthread_stubs_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "6783737e45d3c59a4a4c4091f5f88cdcf0908cbb" +uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" +version = "0.1.0+3" + +[[deps.Xorg_libxcb_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] +git-tree-sha1 = "daf17f441228e7a3833846cd048892861cff16d6" +uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" +version = "1.13.0+3" + +[[deps.Xorg_libxkbfile_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "926af861744212db0eb001d9e40b5d16292080b2" +uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a" +version = "1.1.0+4" + +[[deps.Xorg_xcb_util_image_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "0fab0a40349ba1cba2c1da699243396ff8e94b97" +uuid = "12413925-8142-5f55-bb0e-6d7ca50bb09b" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll"] +git-tree-sha1 = "e7fd7b2881fa2eaa72717420894d3938177862d1" +uuid = "2def613f-5ad1-5310-b15b-b15d46f528f5" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_keysyms_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "d1151e2c45a544f32441a567d1690e701ec89b00" +uuid = "975044d2-76e6-5fbe-bf08-97ce7c6574c7" +version = "0.4.0+1" + +[[deps.Xorg_xcb_util_renderutil_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "dfd7a8f38d4613b6a575253b3174dd991ca6183e" +uuid = "0d47668e-0667-5a69-a72c-f761630bfb7e" +version = "0.3.9+1" + +[[deps.Xorg_xcb_util_wm_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"] +git-tree-sha1 = "e78d10aab01a4a154142c5006ed44fd9e8e31b67" +uuid = "c22f9ab0-d5fe-5066-847c-f4bb1cd4e361" +version = "0.4.1+1" + +[[deps.Xorg_xkbcomp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxkbfile_jll"] +git-tree-sha1 = "4bcbf660f6c2e714f87e960a171b119d06ee163b" +uuid = "35661453-b289-5fab-8a00-3d9160c6a3a4" +version = "1.4.2+4" + +[[deps.Xorg_xkeyboard_config_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xkbcomp_jll"] +git-tree-sha1 = "5c8424f8a67c3f2209646d4425f3d415fee5931d" +uuid = "33bec58e-1273-512f-9401-5d533626f822" +version = "2.27.0+4" + +[[deps.Xorg_xtrans_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "79c31e7844f6ecf779705fbc12146eb190b7d845" +uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" +version = "1.4.0+3" + [[deps.Zlib_jll]] deps = ["Libdl"] uuid = "83775a58-1f1d-513f-b197-d71354ab007a" version = "1.2.12+3" +[[deps.Zstd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "e45044cd873ded54b6a5bac0eb5c971392cf1927" +uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" +version = "1.5.2+0" + +[[deps.fzf_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "868e669ccb12ba16eaf50cb2957ee2ff61261c56" +uuid = "214eeab7-80f7-51ab-84ad-2988db7cef09" +version = "0.29.0+0" + +[[deps.libaom_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "3a2ea60308f0996d26f1e5354e10c24e9ef905d4" +uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" +version = "3.4.0+0" + +[[deps.libass_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47" +uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" +version = "0.15.1+0" + [[deps.libblastrampoline_jll]] deps = ["Artifacts", "Libdl", "OpenBLAS_jll"] uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" version = "5.1.1+0" +[[deps.libfdk_aac_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "daacc84a041563f965be61859a36e17c4e4fcd55" +uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" +version = "2.0.2+0" + +[[deps.libpng_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "94d180a6d2b5e55e447e2d27a29ed04fe79eb30c" +uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" +version = "1.6.38+0" + +[[deps.libvorbis_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] +git-tree-sha1 = "b910cb81ef3fe6e78bf6acee440bda86fd6ae00c" +uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" +version = "1.3.7+1" + [[deps.nghttp2_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" @@ -1218,3 +1662,21 @@ version = "1.48.0+0" deps = ["Artifacts", "Libdl"] uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" version = "17.4.0+0" + +[[deps.x264_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2" +uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" +version = "2021.5.5+0" + +[[deps.x265_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9" +uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" +version = "3.5.0+0" + +[[deps.xkbcommon_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Wayland_jll", "Wayland_protocols_jll", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"] +git-tree-sha1 = "9ebfc140cc56e8c2156a15ceac2f0302e327ac0a" +uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd" +version = "1.4.1+0" diff --git a/test/Project.toml b/test/Project.toml index 906e83c..76c06f2 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -8,4 +8,5 @@ MLJLinearModels = "6ee0df7b-362f-4a72-a706-9e79364fb692" MLJModelInterface = "e80e1ace-859a-464e-9ed9-23947d8ae3ea" MLJScikitLearnInterface = "5ae90465-5518-4432-b9d2-8a1def2f0cab" NearestNeighborModels = "636a865e-7cf4-491e-846c-de09b730eb36" +Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" diff --git a/test/classification.jl b/test/classification.jl index ca90fc4..8f2c98b 100644 --- a/test/classification.jl +++ b/test/classification.jl @@ -36,7 +36,7 @@ conformal_models = merge(values(available_models[:classification])...) predict(mach, selectrows(X, test)) # Plot - plot(mach.model, mach.fitresult, X, y) + # plot(mach.model, mach.fitresult, X, y) end From 010286020cef9c3b92aa4ffc675a0bb7f2a6a12e Mon Sep 17 00:00:00 2001 From: pat-alt Date: Thu, 1 Dec 2022 07:58:46 +0100 Subject: [PATCH 07/10] tests passing --- docs/src/classification.ipynb | 670 -------------------------------- src/ConformalModels/plotting.jl | 3 +- test/regression.jl | 2 +- 3 files changed, 3 insertions(+), 672 deletions(-) delete mode 100644 docs/src/classification.ipynb diff --git a/docs/src/classification.ipynb b/docs/src/classification.ipynb deleted file mode 100644 index ee5509c..0000000 --- a/docs/src/classification.ipynb +++ /dev/null @@ -1,670 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "824dfde5", - "metadata": {}, - "source": [ - "# Classification \n", - "\n", - "```@meta\n", - "CurrentModule = ConformalPrediction\n", - "```\n" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "a67104b4", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u001b[32m\u001b[1m Activating\u001b[22m\u001b[39m project at `~/code/ConformalPrediction.jl/docs`\n" - ] - } - ], - "source": [ - "#| echo: false\n", - "using Pkg; Pkg.activate(\"docs\")\n", - "using Plots\n", - "theme(:wong)" - ] - }, - { - "cell_type": "markdown", - "id": "2d254c95", - "metadata": {}, - "source": [ - "This tutorial is based in parts on this [blog post](https://www.paltmeyer.com/blog/posts/conformal-prediction/).\n", - "\n", - "### Split Conformal Classification {#sec-scp}\n", - "\n", - "We consider a simple binary classification problem. Let $(X_i, Y_i), \\ i=1,...,n$ denote our feature-label pairs and let $\\mu: \\mathcal{X} \\mapsto \\mathcal{Y}$ denote the mapping from features to labels. For illustration purposes we will use the moons dataset 🌙. Using [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) we first generate the data and split into into a training and test set:\n" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "b809784d", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "([110, 100, 420, 107, 85, 218, 34, 82, 289, 400 … 44, 484, 146, 412, 366, 355, 98, 457, 137, 104], [363, 479, 172, 185, 411, 268, 482, 301, 9, 243 … 52, 215, 78, 258, 149, 195, 57, 97, 344, 362])" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "using MLJ\n", - "using Random\n", - "Random.seed!(123)\n", - "\n", - "# Data:\n", - "X, y = make_moons(500; noise=0.15)\n", - "train, test = partition(eachindex(y), 0.8, shuffle=true)" - ] - }, - { - "cell_type": "markdown", - "id": "a45eb5fe", - "metadata": {}, - "source": [ - "Here we will use a specific case of CP called *split conformal prediction* which can then be summarized as follows:^[In other places split conformal prediction is sometimes referred to as *inductive* conformal prediction.]\n", - "\n", - "1. Partition the training into a proper training set and a separate calibration set: $\\mathcal{D}_n=\\mathcal{D}^{\\text{train}} \\cup \\mathcal{D}^{\\text{cali}}$.\n", - "2. Train the machine learning model on the proper training set: $\\hat\\mu_{i \\in \\mathcal{D}^{\\text{train}}}(X_i,Y_i)$.\n", - "3. Compute nonconformity scores, $\\mathcal{S}$, using the calibration data $\\mathcal{D}^{\\text{cali}}$ and the fitted model $\\hat\\mu_{i \\in \\mathcal{D}^{\\text{train}}}$. \n", - "4. For a user-specified desired coverage ratio $(1-\\alpha)$ compute the corresponding quantile, $\\hat{q}$, of the empirical distribution of nonconformity scores, $\\mathcal{S}$.\n", - "5. For the given quantile and test sample $X_{\\text{test}}$, form the corresponding conformal prediction set: \n", - "\n", - "$$\n", - "C(X_{\\text{test}})=\\{y:s(X_{\\text{test}},y) \\le \\hat{q}\\}\n", - "$$ {#eq-set}\n", - "\n", - "This is the default procedure used for classification and regression in [`ConformalPrediction.jl`](https://github.com/pat-alt/ConformalPrediction.jl). \n", - "\n", - "Now let's take this to our 🌙 data. To illustrate the package functionality we will demonstrate the envisioned workflow. We first define our atomic machine learning model following standard [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) conventions. Using [`ConformalPrediction.jl`](https://github.com/pat-alt/ConformalPrediction.jl) we then wrap our atomic model in a conformal model using the standard API call `conformal_model(model::Supervised; kwargs...)`. To train and predict from our conformal model we can then rely on the conventional [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) procedure again. In particular, we wrap our conformal model in data (turning it into a machine) and then fit it on the training set. Finally, we use our machine to predict the label for a new test sample `Xtest`:\n" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "55de461f", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "┌ Info: For silent loading, specify `verbosity=0`. \n", - "└ @ Main /Users/patrickaltmeyer/.julia/packages/MLJModels/K5pPR/src/loading.jl:159\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "import NearestNeighborModels ✔" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "┌ Info: Training machine(SimpleInductiveClassifier(model = KNNClassifier(K = 50, …), …), …).\n", - "└ @ MLJBase /Users/patrickaltmeyer/.julia/packages/MLJBase/6ooqv/src/machines.jl:496\n" - ] - }, - { - "data": { - "text/plain": [ - " \u001b[97;1mUnivariateFinite{Multiclass{2}}\u001b[0m \n", - " \u001b[38;5;8m┌ ┐\u001b[0m \n", - " 0 \u001b[38;5;8m┤\u001b[0m\u001b[38;5;2m■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\u001b[0m 0.94 \u001b[38;5;8m \u001b[0m \u001b[38;5;8m\u001b[0m\n", - " \u001b[38;5;8m└ ┘\u001b[0m " - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#| output: true\n", - "\n", - "# Model:\n", - "KNNClassifier = @load KNNClassifier pkg=NearestNeighborModels\n", - "model = KNNClassifier(;K=50) \n", - "\n", - "# Training:\n", - "using ConformalPrediction\n", - "conf_model = conformal_model(model; coverage=.9)\n", - "mach = machine(conf_model, X, y)\n", - "fit!(mach, rows=train)\n", - "\n", - "# Conformal Prediction:\n", - "Xtest = selectrows(X, first(test))\n", - "ytest = y[first(test)]\n", - "predict(mach, Xtest)[1]" - ] - }, - { - "cell_type": "markdown", - "id": "002f329c", - "metadata": {}, - "source": [ - "The final predictions are set-valued. While the softmax output remains unchanged for the `SimpleInductiveClassifier`, the size of the prediction set depends on the chosen coverage rate, $(1-\\alpha)$. " - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "16679c1d", - "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "When specifying a coverage rate very close to one, the prediction set will typically include many (in some cases all) of the possible labels. Below, for example, both classes are included in the prediction set when setting the coverage rate equal to $(1-\\alpha)$=1.0. This is intuitive, since high coverage quite literally requires that the true label is covered by the prediction set with high probability.\n", - "\n" - ], - "text/markdown": [ - "When specifying a coverage rate very close to one, the prediction set will typically include many (in some cases all) of the possible labels. Below, for example, both classes are included in the prediction set when setting the coverage rate equal to $(1-\\alpha)$=1.0. This is intuitive, since high coverage quite literally requires that the true label is covered by the prediction set with high probability.\n" - ], - "text/plain": [ - " When specifying a coverage rate very close to one, the prediction set will\n", - " typically include many (in some cases all) of the possible labels. Below,\n", - " for example, both classes are included in the prediction set when setting\n", - " the coverage rate equal to \u001b[35m(1-\\alpha)\u001b[39m=1.0. This is intuitive, since high\n", - " coverage quite literally requires that the true label is covered by the\n", - " prediction set with high probability." - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#| echo: false\n", - "#| output: true\n", - "\n", - "coverage = 1.0\n", - "using Markdown\n", - "Markdown.parse(\"\"\"\n", - "When specifying a coverage rate very close to one, the prediction set will typically include many (in some cases all) of the possible labels. Below, for example, both classes are included in the prediction set when setting the coverage rate equal to ``(1-\\\\alpha)``=$coverage. This is intuitive, since high coverage quite literally requires that the true label is covered by the prediction set with high probability.\n", - "\"\"\")" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "aaf34e08", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "┌ Info: Training machine(SimpleInductiveClassifier(model = KNNClassifier(K = 50, …), …), …).\n", - "└ @ MLJBase /Users/patrickaltmeyer/.julia/packages/MLJBase/6ooqv/src/machines.jl:496\n" - ] - }, - { - "data": { - "text/plain": [ - " \u001b[97;1mUnivariateFinite{Multiclass{2}}\u001b[0m \n", - " \u001b[38;5;8m┌ ┐\u001b[0m \n", - " 0 \u001b[38;5;8m┤\u001b[0m\u001b[38;5;2m■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\u001b[0m 0.5 \u001b[38;5;8m \u001b[0m \u001b[38;5;8m\u001b[0m\n", - " 1 \u001b[38;5;8m┤\u001b[0m\u001b[38;5;2m■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\u001b[0m 0.5 \u001b[38;5;8m \u001b[0m \u001b[38;5;8m\u001b[0m\n", - " \u001b[38;5;8m└ ┘\u001b[0m " - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#| output: true\n", - "\n", - "conf_model = conformal_model(model; coverage=coverage)\n", - "mach = machine(conf_model, X, y)\n", - "fit!(mach, rows=train)\n", - "\n", - "# Conformal Prediction:\n", - "Xtest = (x1=[1],x2=[0])\n", - "predict(mach, Xtest)[1]" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "2e9b2f54", - "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "Conversely, for low coverage rates, prediction sets can also be empty. For a choice of $(1-\\alpha)$=0.1, for example, the prediction set for our test sample is empty. This is a bit difficult to think about intuitively and I have not yet come across a satisfactory, intuitive interpretation.\\^{}[Any thoughts/comments welcome!] When the prediction set is empty, the \\texttt{predict} call currently returns \\texttt{missing}:\n", - "\n" - ], - "text/markdown": [ - "Conversely, for low coverage rates, prediction sets can also be empty. For a choice of $(1-\\alpha)$=0.1, for example, the prediction set for our test sample is empty. This is a bit difficult to think about intuitively and I have not yet come across a satisfactory, intuitive interpretation.^[Any thoughts/comments welcome!] When the prediction set is empty, the `predict` call currently returns `missing`:\n" - ], - "text/plain": [ - " Conversely, for low coverage rates, prediction sets can also be empty. For a\n", - " choice of \u001b[35m(1-\\alpha)\u001b[39m=0.1, for example, the prediction set for our test\n", - " sample is empty. This is a bit difficult to think about intuitively and I\n", - " have not yet come across a satisfactory, intuitive interpretation.^[Any\n", - " thoughts/comments welcome!] When the prediction set is empty, the \u001b[36mpredict\u001b[39m\n", - " call currently returns \u001b[36mmissing\u001b[39m:" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#| echo: false\n", - "#| output: true\n", - "\n", - "coverage = .1\n", - "using Markdown\n", - "Markdown.parse(\"\"\"\n", - "Conversely, for low coverage rates, prediction sets can also be empty. For a choice of ``(1-\\\\alpha)``=$coverage, for example, the prediction set for our test sample is empty. This is a bit difficult to think about intuitively and I have not yet come across a satisfactory, intuitive interpretation.^[Any thoughts/comments welcome!] When the prediction set is empty, the `predict` call currently returns `missing`:\n", - "\"\"\")" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "894e07c2", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "┌ Info: Training machine(SimpleInductiveClassifier(model = KNNClassifier(K = 50, …), …), …).\n", - "└ @ MLJBase /Users/patrickaltmeyer/.julia/packages/MLJBase/6ooqv/src/machines.jl:496\n" - ] - }, - { - "data": { - "text/plain": [ - "missing" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#| output: true\n", - "\n", - "conf_model = conformal_model(model; coverage=coverage)\n", - "mach = machine(conf_model, X, y)\n", - "fit!(mach, rows=train)\n", - "\n", - "# Conformal Prediction:\n", - "predict(mach, Xtest)[1]" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "e3f765cc", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - " \u001b[38;2;155;179;224m╭──── \u001b[38;2;227;172;141mFunction: \u001b[1m\u001b[38;5;12mcontourf_cp\u001b[22m\u001b[39m\u001b[39m\u001b[38;2;155;179;224m\u001b[38;2;155;179;224m ───────────────────────────────────────────╮\u001b[39m\u001b[0m\u001b[39m\u001b[38;2;155;179;224m\n", - " \u001b[0m\u001b[38;2;155;179;224m│\u001b[39m\u001b[0m \u001b[0m\u001b[38;2;155;179;224m│\u001b[39m\u001b[0m\n", - " \u001b[0m\u001b[38;2;155;179;224m│\u001b[39m\u001b[0m \u001b[1m\u001b[2m(1) \u001b[22m\u001b[22m \u001b[1m\u001b[38;2;165;198;217mcontourf_cp\u001b[22m\u001b[39m\u001b[38;2;255;245;157m(\u001b[39mmach\u001b[38;2;206;147;216m::Machine\u001b[39m, x1_range, x2_range; type, \u001b[0m\u001b[38;2;155;179;224m│\u001b[39m\u001b[0m\n", - " \u001b[0m\u001b[38;2;155;179;224m│\u001b[39m\u001b[0m kwargs...\u001b[38;2;255;245;157m)\u001b[39m \u001b[0m\u001b[38;2;155;179;224m│\u001b[39m\u001b[0m\n", - " \u001b[0m\u001b[38;2;155;179;224m│\u001b[39m\u001b[0m \u001b[0m\u001b[38;2;155;179;224m│\u001b[39m\u001b[0m\n", - " \u001b[38;2;155;179;224m╰───────────────────────────────────────────────────────── \u001b[1m\u001b[37m1\u001b[22m\u001b[39m method\u001b[38;2;155;179;224m ───╯\u001b[39m\u001b[0m\u001b[39m\u001b[0m\n", - "\u001b[2m\u001b[32m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Docstring\u001b[0m \u001b[2m\u001b[32m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[22m\u001b[39m\u001b[22m\u001b[39m\u001b[0m\n", - " No documentation found.\u001b[0m \n", - " \n", - " \u001b[3m\u001b[38;2;255;245;157m`\u001b[23m\u001b[39m\u001b[0m\u001b[38;2;222;222;222mcontourf_cp\u001b[39m\u001b[3m\u001b[38;2;255;245;157m`\u001b[23m\u001b[39m is a \u001b[3m\u001b[38;2;255;245;157m`\u001b[23m\u001b[39m\u001b[38;2;222;222;222mFunction\u001b[39m\u001b[3m\u001b[38;2;255;245;157m`\u001b[23m\u001b[39m.\u001b[0m \n", - " \n", - " \u001b[2m\u001b[37m\u001b[48;2;38;38;38m┌─────────────────────────────────────────────────────────┐\u001b[22m\u001b[39m\u001b[49m \n", - " \u001b[0m\u001b[2m\u001b[37m\u001b[48;2;38;38;38m│\u001b[22m\u001b[39m\u001b[49m\u001b[0m\u001b[48;2;38;38;38m \u001b[49m\u001b[0m\u001b[48;2;38;38;38m\u001b[3m\u001b[38;2;40;122;54m# 1 method for generic function \"contourf_cp\":\u001b[23m\u001b[39m\u001b[38;2;222;222;222m\u001b[48;2;38;38;38m \u001b[49m\u001b[38;2;222;222;222m\u001b[49m\u001b[48;2;38;38;38m \u001b[49m\u001b[0m\u001b[2m\u001b[37m\u001b[48;2;38;38;38m│\u001b[22m\u001b[39m\u001b[49m\u001b[0m \n", - " \u001b[0m\u001b[2m\u001b[37m\u001b[48;2;38;38;38m│\u001b[22m\u001b[39m\u001b[49m\u001b[0m\u001b[48;2;38;38;38m \u001b[49m\u001b[0m\u001b[48;2;38;38;38m\u001b[39m\u001b[38;2;227;136;100m[\u001b[39m\u001b[38;2;144;202;249m1\u001b[39m\u001b[38;2;227;136;100m]\u001b[39m\u001b[38;2;222;222;222m \u001b[39m\u001b[38;2;232;212;114mcontourf_cp\u001b[39m\u001b[38;2;227;136;100m(\u001b[39m\u001b[38;2;222;222;222mmach\u001b[39m\u001b[38;2;222;109;89m::\u001b[39m\u001b[38;2;222;222;222mMachine\u001b[39m\u001b[38;2;227;136;100m,\u001b[39m\u001b[38;2;222;222;222m \u001b[39m\u001b[38;2;222;222;222mx1_range\u001b[39m\u001b[38;2;227;136;100m,\u001b[39m\u001b[38;2;222;222;222m \u001b[39m\u001b[38;2;222;222;222mx2_range\u001b[39m\u001b[38;2;227;136;100m;\u001b[39m\u001b[38;2;222;222;222m \u001b[48;2;38;38;38m \u001b[49m\u001b[38;2;222;222;222m\u001b[49m\u001b[48;2;38;38;38m \u001b[49m\u001b[0m\u001b[2m\u001b[37m\u001b[48;2;38;38;38m│\u001b[22m\u001b[39m\u001b[49m\u001b[0m \n", - " \u001b[0m\u001b[2m\u001b[37m\u001b[48;2;38;38;38m│\u001b[22m\u001b[39m\u001b[49m\u001b[0m\u001b[48;2;38;38;38m \u001b[49m\u001b[0m\u001b[48;2;38;38;38m\u001b[39m\u001b[38;2;222;222;222mtype\u001b[39m\u001b[38;2;227;136;100m,\u001b[39m\u001b[38;2;222;222;222m \u001b[39m\u001b[38;2;222;222;222mkwargs\u001b[39m\u001b[38;2;222;109;89m...\u001b[39m\u001b[38;2;227;136;100m)\u001b[39m\u001b[38;2;222;222;222m \u001b[39m\u001b[38;2;122;147;245min\u001b[39m\u001b[38;2;222;222;222m \u001b[39m\u001b[38;2;222;222;222mMain\u001b[39m\u001b[38;2;222;222;222m \u001b[39m\u001b[38;2;222;222;222mat\u001b[39m\u001b[38;2;222;222;222m \u001b[39m\u001b[38;2;222;222;222mIn\u001b[39m\u001b[38;2;227;136;100m[\u001b[39m\u001b[38;2;144;202;249m9\u001b[39m\u001b[38;2;227;136;100m]\u001b[39m\u001b[38;2;222;109;89m:\u001b[39m\u001b[38;2;144;202;249m3\u001b[39m\u001b[48;2;38;38;38m \u001b[49m\u001b[39m\u001b[49m\u001b[48;2;38;38;38m \u001b[49m\u001b[0m\u001b[2m\u001b[37m\u001b[48;2;38;38;38m│\u001b[22m\u001b[39m\u001b[49m\u001b[0m \n", - " \u001b[2m\u001b[37m\u001b[48;2;38;38;38m└─────────────────────────────────────────────────────────┘\u001b[22m\u001b[39m\u001b[49m\u001b[0m \n" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#| echo: false\n", - "using Plots\n", - "\n", - "function contourf_cp(mach::Machine, x1_range, x2_range; type=:set_size, kwargs...)\n", - " set_size = []\n", - " proba = []\n", - " for x2 in x2_range, x1 in x1_range\n", - " Xnew = (x1 = [x1], x2 = [x2])\n", - " p̂ = predict(mach, Xnew)[1]\n", - " # Set size:\n", - " z = ismissing(p̂) ? 0 : sum(pdf.(p̂, p̂.decoder.classes) .> 0)\n", - " push!(set_size, z)\n", - " # Probability:\n", - " p = ismissing(p̂) ? p̂ : pdf.(p̂, 1)\n", - " push!(proba, p)\n", - " end\n", - " if type == :set_size\n", - " plt = contourf(x1_range, x2_range, set_size; clim=(0,2), c=cgrad(:blues, 3, categorical = true), kwargs...)\n", - " elseif type == :proba\n", - " plt = contourf(x1_range, x2_range, proba; c=:thermal, kwargs...)\n", - " end\n", - " return plt\n", - "end" - ] - }, - { - "cell_type": "markdown", - "id": "25d16d91", - "metadata": {}, - "source": [ - "@fig-anim should provide some more intuition as to what exactly is happening here. It illustrates the effect of the chosen coverage rate on the predicted softmax output and the set size in the two-dimensional feature space. Contours are overlayed with the moon data points (including test data). The two samples highlighted in red, $X_1$ and $X_2$, have been manually added for illustration purposes. Let's look at these one by one.\n", - "\n", - "Firstly, note that $X_1$ (red cross) falls into a region of the domain that is characterized by high predictive uncertainty. It sits right at the bottom-right corner of our class-zero moon 🌜 (orange), a region that is almost entirely enveloped by our class-one moon 🌛 (green). For low coverage rates the prediction set for $X_1$ is empty: on the left-hand side this is indicated by the missing contour for the softmax probability; on the right-hand side we can observe that the corresponding set size is indeed zero. For high coverage rates the prediction set includes both $y=0$ and $y=1$, indicative of the fact that the conformal classifier is uncertain about the true label.\n", - "\n", - "With respect to $X_2$, we observe that while also sitting on the fringe of our class-zero moon, this sample populates a region that is not fully enveloped by data points from the opposite class. In this region, the underlying atomic classifier can be expected to be more certain about its predictions, but still not highly confident. How is this reflected by our corresponding conformal prediction sets? \n" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "ee9d2b12", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "┌ Info: Training machine(SimpleInductiveClassifier(model = KNNClassifier(K = 50, …), …), …).\n", - "└ @ MLJBase /Users/patrickaltmeyer/.julia/packages/MLJBase/6ooqv/src/machines.jl:496\n" - ] - }, - { - "data": { - "text/plain": [ - "\u001b[38;2;144;202;249m0.72\u001b[39m" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#| code-fold: true\n", - "\n", - "Xtest_2 = (x1=[-0.5],x2=[0.25])\n", - "cov_ = .9\n", - "conf_model = conformal_model(model; coverage=cov_)\n", - "mach = machine(conf_model, X, y)\n", - "fit!(mach, rows=train)\n", - "p̂_2 = pdf(predict(mach, Xtest_2)[1], 0)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "9964ddea", - "metadata": {}, - "outputs": [ - { - "data": { - "text/latex": [ - "Well, for low coverage rates (roughly $<0.9$) the conformal prediction set does not include $y=0$: the set size is zero (right panel). Only for higher coverage rates do we have $C(X_2)=\\{0\\}$: the coverage rate is high enough to include $y=0$, but the corresponding softmax probability is still fairly low. For example, for $(1-\\alpha)=0.9$ we have $\\hat{p}(y=0|X_2)=0.72.$\n", - "\n" - ], - "text/markdown": [ - "Well, for low coverage rates (roughly $<0.9$) the conformal prediction set does not include $y=0$: the set size is zero (right panel). Only for higher coverage rates do we have $C(X_2)=\\{0\\}$: the coverage rate is high enough to include $y=0$, but the corresponding softmax probability is still fairly low. For example, for $(1-\\alpha)=0.9$ we have $\\hat{p}(y=0|X_2)=0.72.$\n" - ], - "text/plain": [ - " Well, for low coverage rates (roughly \u001b[35m<0.9\u001b[39m) the conformal prediction set\n", - " does not include \u001b[35my=0\u001b[39m: the set size is zero (right panel). Only for higher\n", - " coverage rates do we have \u001b[35mC(X_2)=\\{0\\}\u001b[39m: the coverage rate is high enough to\n", - " include \u001b[35my=0\u001b[39m, but the corresponding softmax probability is still fairly low.\n", - " For example, for \u001b[35m(1-\\alpha)=0.9\u001b[39m we have \u001b[35m\\hat{p}(y=0|X_2)=0.72.\u001b[39m" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#| echo: false\n", - "#| output: true\n", - "\n", - "Markdown.parse(\"\"\"\n", - "Well, for low coverage rates (roughly ``<0.9``) the conformal prediction set does not include ``y=0``: the set size is zero (right panel). Only for higher coverage rates do we have ``C(X_2)=\\\\{0\\\\}``: the coverage rate is high enough to include ``y=0``, but the corresponding softmax probability is still fairly low. For example, for ``(1-\\\\alpha)=$(cov_)`` we have ``\\\\hat{p}(y=0|X_2)=$(p̂_2).``\n", - "\"\"\")" - ] - }, - { - "cell_type": "markdown", - "id": "99debeef", - "metadata": {}, - "source": [ - "These two examples illustrate an interesting point: for regions characterised by high predictive uncertainty, conformal prediction sets are typically empty (for low coverage) or large (for high coverage). While set-valued predictions may be something to get used to, this notion is overall intuitive. \n" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "fig-anim", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "┌ Info: Training machine(SimpleInductiveClassifier(model = KNNClassifier(K = 50, …), …), …).\n", - "└ @ MLJBase /Users/patrickaltmeyer/.julia/packages/MLJBase/6ooqv/src/machines.jl:496\n", - "┌ Info: Training machine(SimpleInductiveClassifier(model = KNNClassifier(K = 50, …), …), …).\n", - "└ @ MLJBase /Users/patrickaltmeyer/.julia/packages/MLJBase/6ooqv/src/machines.jl:496\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "┌ Info: Training machine(SimpleInductiveClassifier(model = KNNClassifier(K = 50, …), …), …).\n", - "└ @ MLJBase /Users/patrickaltmeyer/.julia/packages/MLJBase/6ooqv/src/machines.jl:496\n", - "┌ Info: Training machine(SimpleInductiveClassifier(model = KNNClassifier(K = 50, …), …), …).\n", - "└ @ MLJBase /Users/patrickaltmeyer/.julia/packages/MLJBase/6ooqv/src/machines.jl:496\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "┌ Info: Training machine(SimpleInductiveClassifier(model = KNNClassifier(K = 50, …), …), …).\n", - "└ @ MLJBase /Users/patrickaltmeyer/.julia/packages/MLJBase/6ooqv/src/machines.jl:496\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "┌ Info: Saved animation to /Users/patrickaltmeyer/code/ConformalPrediction.jl/tmp.gif\n", - "└ @ Plots /Users/patrickaltmeyer/.julia/packages/Plots/Pn7Zn/src/animation.jl:149\n" - ] - }, - { - "data": { - "text/html": [ - "" - ], - "text/plain": [ - "Plots.AnimatedGif(\"/Users/patrickaltmeyer/code/ConformalPrediction.jl/tmp.gif\")" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#| output: true\n", - "#| label: fig-anim\n", - "#| fig-cap: The effect of the coverage rate on the conformal prediction set. Softmax probabilities are shown on the left. The size of the prediction set is shown on the right.\n", - "#| code-fold: true\n", - "\n", - "# Setup\n", - "coverages = range(0.75,1.0,length=5)\n", - "n = 100\n", - "x1_range = range(extrema(X.x1)...,length=n)\n", - "x2_range = range(extrema(X.x2)...,length=n)\n", - "\n", - "anim = @animate for coverage in coverages\n", - " conf_model = conformal_model(model; coverage=coverage)\n", - " mach = machine(conf_model, X, y)\n", - " fit!(mach, rows=train)\n", - " p1 = contourf_cp(mach, x1_range, x2_range; type=:proba, title=\"Softmax\", axis=nothing)\n", - " scatter!(p1, X.x1, X.x2, group=y, ms=2, msw=0, alpha=0.75)\n", - " scatter!(p1, Xtest.x1, Xtest.x2, ms=6, c=:red, label=\"X₁\", shape=:cross, msw=6)\n", - " scatter!(p1, Xtest_2.x1, Xtest_2.x2, ms=6, c=:red, label=\"X₂\", shape=:diamond, msw=6)\n", - " p2 = contourf_cp(mach, x1_range, x2_range; type=:set_size, title=\"Set size\", axis=nothing)\n", - " scatter!(p2, X.x1, X.x2, group=y, ms=2, msw=0, alpha=0.75)\n", - " scatter!(p2, Xtest.x1, Xtest.x2, ms=6, c=:red, label=\"X₁\", shape=:cross, msw=6)\n", - " scatter!(p2, Xtest_2.x1, Xtest_2.x2, ms=6, c=:red, label=\"X₂\", shape=:diamond, msw=6)\n", - " plot(p1, p2, plot_title=\"(1-α)=$(round(coverage,digits=2))\", size=(800,300))\n", - "end\n", - "\n", - "gif(anim, fps=0.5)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "dcb0aa9e", - "metadata": {}, - "outputs": [], - "source": [ - "#| echo: false\n", - "#| eval: false\n", - "\n", - "using Plots.PlotMeasures\n", - "\n", - "# Setup\n", - "coverages = range(0.75,1.0,length=25)\n", - "n = 100\n", - "x1_range = range(extrema(X.x1)...,length=n)\n", - "x2_range = range(extrema(X.x2)...,length=n)\n", - "anim = @animate for coverage in coverages\n", - " conf_model = conformal_model(model; coverage=coverage)\n", - " mach = machine(conf_model, X, y)\n", - " fit!(mach, rows=train)\n", - " plt = contourf_cp(mach, x1_range, x2_range; type=:proba, axis=nothing, size=(500,500), background_color=:transparent, colorbar=false, margin=-1.5mm)\n", - "\n", - " # Annotations\n", - "\n", - " # First:\n", - " p̂ = predict(mach, Xtest)[1]\n", - " if ismissing(p̂)\n", - " z = \"∅\"\n", - " else\n", - " L = p̂.decoder.classes\n", - " set_contents = reduce((x,y) -> x * \", \" * y, string.(L[pdf.(p̂, L) .> 0]))\n", - " z = \"{$(set_contents)}\"\n", - " end\n", - " ann_Xtest = (Xtest.x1, Xtest.x2, (\"ŷ₁=$z\", 20, :white))\n", - " annotate!(plt, ann_Xtest)\n", - "\n", - " # Second\n", - " p̂ = predict(mach, Xtest_2)[1]\n", - " if ismissing(p̂)\n", - " z = \"∅\"\n", - " else\n", - " L = p̂.decoder.classes\n", - " set_contents = reduce((x,y) -> x * \", \" * y, string.(L[pdf.(p̂, L) .> 0]))\n", - " z = \"{$(set_contents)}\"\n", - " end\n", - " ann_Xtest = (Xtest_2.x1, Xtest_2.x2, (\"ŷ₂=$z\", 20, :white))\n", - " annotate!(plt, ann_Xtest)\n", - "end\n", - "gif(anim, \"blog/posts/conformal-prediction/www/intro.gif\", fps=5)\n", - "\n", - "anim = @animate for coverage in coverages\n", - " conf_model = conformal_model(model; coverage=coverage)\n", - " mach = machine(conf_model, X, y)\n", - " fit!(mach, rows=train)\n", - " plt = contourf_cp(mach, x1_range, x2_range; type=:proba, axis=nothing, size=(1200,400), background_color=:transparent, colorbar=false, margin=-1.5mm)\n", - " \n", - " # Annotations\n", - "\n", - " # First:\n", - " p̂ = predict(mach, Xtest)[1]\n", - " if ismissing(p̂)\n", - " z = \"∅\"\n", - " else\n", - " L = p̂.decoder.classes\n", - " set_contents = reduce((x,y) -> x * \", \" * y, string.(L[pdf.(p̂, L) .> 0]))\n", - " z = \"{$(set_contents)}\"\n", - " end\n", - " ann_Xtest = (Xtest.x1, Xtest.x2, (\"ŷ₁=$z\", 20, :white))\n", - " annotate!(plt, ann_Xtest)\n", - "\n", - " # Second\n", - " p̂ = predict(mach, Xtest_2)[1]\n", - " if ismissing(p̂)\n", - " z = \"∅\"\n", - " else\n", - " L = p̂.decoder.classes\n", - " set_contents = reduce((x,y) -> x * \", \" * y, string.(L[pdf.(p̂, L) .> 0]))\n", - " z = \"{$(set_contents)}\"\n", - " end\n", - " ann_Xtest = (Xtest_2.x1, Xtest_2.x2, (\"ŷ₂=$z\", 20, :white))\n", - " annotate!(plt, ann_Xtest)\n", - "end\n", - "gif(anim, \"blog/posts/conformal-prediction/www/medium.gif\", fps=5)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Julia 1.8.1", - "language": "julia", - "name": "julia-1.8" - }, - "language_info": { - "file_extension": ".jl", - "mimetype": "application/julia", - "name": "julia", - "version": "1.8.1" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src/ConformalModels/plotting.jl b/src/ConformalModels/plotting.jl index f429c5f..a387fb9 100644 --- a/src/ConformalModels/plotting.jl +++ b/src/ConformalModels/plotting.jl @@ -1,3 +1,4 @@ +using MLJ using Plots function Plots.plot( @@ -7,7 +8,7 @@ function Plots.plot( kwargs... ) - X = permutedims(X) + X = permutedims(MLJ.matrix(X)) is_classifier = target_scitype(conf_model.model) <: AbstractVector{<:Finite} if !is_classifier diff --git a/test/regression.jl b/test/regression.jl index f0721f3..6dd4d3b 100644 --- a/test/regression.jl +++ b/test/regression.jl @@ -2,7 +2,7 @@ using MLJ using Plots # Data: -X, y = MLJ.make_regression(1000, 2) +X, y = MLJ.make_regression(1000, 1) train, test = partition(eachindex(y), 0.8) # Atomic and conformal models: From 0ad8296e85502a69086dd1fdc39e56469e7147f3 Mon Sep 17 00:00:00 2001 From: pat-alt Date: Thu, 1 Dec 2022 08:39:42 +0100 Subject: [PATCH 08/10] need to really understand what exactly is the standard format in MLJ that should be/is accepted by every model --- docs/src/classification.qmd | 80 --------------------------------- src/ConformalModels/plotting.jl | 1 - 2 files changed, 81 deletions(-) diff --git a/docs/src/classification.qmd b/docs/src/classification.qmd index f75938c..1b5264f 100644 --- a/docs/src/classification.qmd +++ b/docs/src/classification.qmd @@ -192,83 +192,3 @@ end gif(anim, fps=0.5) ``` - -```{julia} -#| echo: false -#| eval: false - -using Plots.PlotMeasures - -# Setup -coverages = range(0.75,1.0,length=25) -n = 100 -x1_range = range(extrema(X.x1)...,length=n) -x2_range = range(extrema(X.x2)...,length=n) -anim = @animate for coverage in coverages - conf_model = conformal_model(model; coverage=coverage) - mach = machine(conf_model, X, y) - fit!(mach, rows=train) - plt = contourf_cp(mach, x1_range, x2_range; type=:proba, axis=nothing, size=(500,500), background_color=:transparent, colorbar=false, margin=-1.5mm) - - # Annotations - - # First: - p̂ = predict(mach, Xtest)[1] - if ismissing(p̂) - z = "∅" - else - L = p̂.decoder.classes - set_contents = reduce((x,y) -> x * ", " * y, string.(L[pdf.(p̂, L) .> 0])) - z = "{$(set_contents)}" - end - ann_Xtest = (Xtest.x1, Xtest.x2, ("ŷ₁=$z", 20, :white)) - annotate!(plt, ann_Xtest) - - # Second - p̂ = predict(mach, Xtest_2)[1] - if ismissing(p̂) - z = "∅" - else - L = p̂.decoder.classes - set_contents = reduce((x,y) -> x * ", " * y, string.(L[pdf.(p̂, L) .> 0])) - z = "{$(set_contents)}" - end - ann_Xtest = (Xtest_2.x1, Xtest_2.x2, ("ŷ₂=$z", 20, :white)) - annotate!(plt, ann_Xtest) -end -gif(anim, "blog/posts/conformal-prediction/www/intro.gif", fps=5) - -anim = @animate for coverage in coverages - conf_model = conformal_model(model; coverage=coverage) - mach = machine(conf_model, X, y) - fit!(mach, rows=train) - plt = contourf_cp(mach, x1_range, x2_range; type=:proba, axis=nothing, size=(1200,400), background_color=:transparent, colorbar=false, margin=-1.5mm) - - # Annotations - - # First: - p̂ = predict(mach, Xtest)[1] - if ismissing(p̂) - z = "∅" - else - L = p̂.decoder.classes - set_contents = reduce((x,y) -> x * ", " * y, string.(L[pdf.(p̂, L) .> 0])) - z = "{$(set_contents)}" - end - ann_Xtest = (Xtest.x1, Xtest.x2, ("ŷ₁=$z", 20, :white)) - annotate!(plt, ann_Xtest) - - # Second - p̂ = predict(mach, Xtest_2)[1] - if ismissing(p̂) - z = "∅" - else - L = p̂.decoder.classes - set_contents = reduce((x,y) -> x * ", " * y, string.(L[pdf.(p̂, L) .> 0])) - z = "{$(set_contents)}" - end - ann_Xtest = (Xtest_2.x1, Xtest_2.x2, ("ŷ₂=$z", 20, :white)) - annotate!(plt, ann_Xtest) -end -gif(anim, "blog/posts/conformal-prediction/www/medium.gif", fps=5) -``` \ No newline at end of file diff --git a/src/ConformalModels/plotting.jl b/src/ConformalModels/plotting.jl index a387fb9..bd76d40 100644 --- a/src/ConformalModels/plotting.jl +++ b/src/ConformalModels/plotting.jl @@ -42,7 +42,6 @@ function Plots.plot( scatter(vec(X), vec(y), label=_lab, xlim=xlims, ylim=ylims, lw=lw, title=title; kwargs...) _x = reshape([x for x in x_range],:,1) _x = MLJ.table(_x) - MMI.reformat(conf_model.model,_x) ŷ = predict(conf_model, fitresult, _x) lb, ub = eachcol(reduce(vcat, map(y -> permutedims(collect(y)), ŷ))) ymid = (lb .+ ub)./2 From 767dd4fda0d5eb6eaa356b247ceeaed67fb10a37 Mon Sep 17 00:00:00 2001 From: pat-alt Date: Thu, 1 Dec 2022 09:11:45 +0100 Subject: [PATCH 09/10] rerendered docs. Will get test coverage up again, next. --- .../classification/execute-results/md.json | 4 +- .../docs/src/index/execute-results/md.json | 2 +- .../docs/src/intro/execute-results/md.json | 2 +- .../src/regression/execute-results/md.json | 4 +- .../figure-commonmark/fig-cp-output-1.svg | 4606 +++++++++++++++++ docs/src/classification.md | 6 +- docs/src/classification.qmd | 8 +- docs/src/index.md | 10 +- docs/src/intro.md | 20 +- docs/src/reference.commonmark.md | 35 - docs/src/regression.md | 2 + docs/src/regression.qmd | 1 + .../figure-commonmark/fig-cp-output-1.svg | 4606 +++++++++++++++++ docs/src/www/classification.gif | Bin 0 -> 86650 bytes 14 files changed, 9245 insertions(+), 61 deletions(-) create mode 100644 _freeze/docs/src/regression/figure-commonmark/fig-cp-output-1.svg delete mode 100644 docs/src/reference.commonmark.md create mode 100644 docs/src/regression_files/figure-commonmark/fig-cp-output-1.svg create mode 100644 docs/src/www/classification.gif diff --git a/_freeze/docs/src/classification/execute-results/md.json b/_freeze/docs/src/classification/execute-results/md.json index 14874fe..fdbf421 100644 --- a/_freeze/docs/src/classification/execute-results/md.json +++ b/_freeze/docs/src/classification/execute-results/md.json @@ -1,7 +1,7 @@ { - "hash": "442ff2462bc1aca2e32bbac33deb49a1", + "hash": "e40d23cf63b8c8ee30ed14854d0a0db5", "result": { - "markdown": "# Classification \n\n```@meta\nCurrentModule = ConformalPrediction\n```\n\n\n\nThis tutorial is based in parts on this [blog post](https://www.paltmeyer.com/blog/posts/conformal-prediction/).\n\n### Split Conformal Classification {#sec-scp}\n\nWe consider a simple binary classification problem. Let $(X_i, Y_i), \\ i=1,...,n$ denote our feature-label pairs and let $\\mu: \\mathcal{X} \\mapsto \\mathcal{Y}$ denote the mapping from features to labels. For illustration purposes we will use the moons dataset 🌙. Using [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) we first generate the data and split into into a training and test set:\n\n::: {.cell execution_count=2}\n``` {.julia .cell-code}\nusing MLJ\nusing Random\nRandom.seed!(123)\n\n# Data:\nX, y = make_moons(500; noise=0.15)\ntrain, test = partition(eachindex(y), 0.8, shuffle=true)\n```\n:::\n\n\nHere we will use a specific case of CP called *split conformal prediction* which can then be summarized as follows:^[In other places split conformal prediction is sometimes referred to as *inductive* conformal prediction.]\n\n1. Partition the training into a proper training set and a separate calibration set: $\\mathcal{D}_n=\\mathcal{D}^{\\text{train}} \\cup \\mathcal{D}^{\\text{cali}}$.\n2. Train the machine learning model on the proper training set: $\\hat\\mu_{i \\in \\mathcal{D}^{\\text{train}}}(X_i,Y_i)$.\n3. Compute nonconformity scores, $\\mathcal{S}$, using the calibration data $\\mathcal{D}^{\\text{cali}}$ and the fitted model $\\hat\\mu_{i \\in \\mathcal{D}^{\\text{train}}}$. \n4. For a user-specified desired coverage ratio $(1-\\alpha)$ compute the corresponding quantile, $\\hat{q}$, of the empirical distribution of nonconformity scores, $\\mathcal{S}$.\n5. For the given quantile and test sample $X_{\\text{test}}$, form the corresponding conformal prediction set: \n\n$$\nC(X_{\\text{test}})=\\{y:s(X_{\\text{test}},y) \\le \\hat{q}\\}\n$$ {#eq-set}\n\nThis is the default procedure used for classification and regression in [`ConformalPrediction.jl`](https://github.com/pat-alt/ConformalPrediction.jl). \n\nNow let's take this to our 🌙 data. To illustrate the package functionality we will demonstrate the envisioned workflow. We first define our atomic machine learning model following standard [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) conventions. Using [`ConformalPrediction.jl`](https://github.com/pat-alt/ConformalPrediction.jl) we then wrap our atomic model in a conformal model using the standard API call `conformal_model(model::Supervised; kwargs...)`. To train and predict from our conformal model we can then rely on the conventional [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) procedure again. In particular, we wrap our conformal model in data (turning it into a machine) and then fit it on the training set. Finally, we use our machine to predict the label for a new test sample `Xtest`:\n\n::: {.cell execution_count=3}\n``` {.julia .cell-code}\n# Model:\nKNNClassifier = @load KNNClassifier pkg=NearestNeighborModels\nmodel = KNNClassifier(;K=50) \n\n# Training:\nusing ConformalPrediction\nconf_model = conformal_model(model; coverage=.9)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n\n# Conformal Prediction:\nXtest = selectrows(X, first(test))\nytest = y[first(test)]\npredict(mach, Xtest)[1]\n```\n\n::: {.cell-output .cell-output-stdout}\n```\nimport NearestNeighborModels ✔\n```\n:::\n\n::: {.cell-output .cell-output-stdout}\n```\n\n```\n:::\n\n::: {.cell-output .cell-output-display execution_count=4}\n```\n UnivariateFinite{Multiclass{2}} \n ┌ ┐ \n 0 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.94 \n └ ┘ \n```\n:::\n:::\n\n\nThe final predictions are set-valued. While the softmax output remains unchanged for the `SimpleInductiveClassifier`, the size of the prediction set depends on the chosen coverage rate, $(1-\\alpha)$. \n\n::: {.cell execution_count=4}\n\n::: {.cell-output .cell-output-display execution_count=5}\nWhen specifying a coverage rate very close to one, the prediction set will typically include many (in some cases all) of the possible labels. Below, for example, both classes are included in the prediction set when setting the coverage rate equal to $(1-\\alpha)$=1.0. This is intuitive, since high coverage quite literally requires that the true label is covered by the prediction set with high probability.\n\n:::\n:::\n\n\n::: {.cell execution_count=5}\n``` {.julia .cell-code}\nconf_model = conformal_model(model; coverage=coverage)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n\n# Conformal Prediction:\nXtest = (x1=[1],x2=[0])\npredict(mach, Xtest)[1]\n```\n\n::: {.cell-output .cell-output-display execution_count=6}\n```\n UnivariateFinite{Multiclass{2}} \n ┌ ┐ \n 0 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.5 \n 1 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.5 \n └ ┘ \n```\n:::\n:::\n\n\n::: {.cell execution_count=6}\n\n::: {.cell-output .cell-output-display execution_count=7}\nConversely, for low coverage rates, prediction sets can also be empty. For a choice of $(1-\\alpha)$=0.1, for example, the prediction set for our test sample is empty. This is a bit difficult to think about intuitively and I have not yet come across a satisfactory, intuitive interpretation.^[Any thoughts/comments welcome!] When the prediction set is empty, the `predict` call currently returns `missing`:\n\n:::\n:::\n\n\n::: {.cell execution_count=7}\n``` {.julia .cell-code}\nconf_model = conformal_model(model; coverage=coverage)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n\n# Conformal Prediction:\npredict(mach, Xtest)[1]\n```\n\n::: {.cell-output .cell-output-display execution_count=8}\n```\nmissing\n```\n:::\n:::\n\n\n\n\n@fig-anim should provide some more intuition as to what exactly is happening here. It illustrates the effect of the chosen coverage rate on the predicted softmax output and the set size in the two-dimensional feature space. Contours are overlayed with the moon data points (including test data). The two samples highlighted in red, $X_1$ and $X_2$, have been manually added for illustration purposes. Let's look at these one by one.\n\nFirstly, note that $X_1$ (red cross) falls into a region of the domain that is characterized by high predictive uncertainty. It sits right at the bottom-right corner of our class-zero moon 🌜 (orange), a region that is almost entirely enveloped by our class-one moon 🌛 (green). For low coverage rates the prediction set for $X_1$ is empty: on the left-hand side this is indicated by the missing contour for the softmax probability; on the right-hand side we can observe that the corresponding set size is indeed zero. For high coverage rates the prediction set includes both $y=0$ and $y=1$, indicative of the fact that the conformal classifier is uncertain about the true label.\n\nWith respect to $X_2$, we observe that while also sitting on the fringe of our class-zero moon, this sample populates a region that is not fully enveloped by data points from the opposite class. In this region, the underlying atomic classifier can be expected to be more certain about its predictions, but still not highly confident. How is this reflected by our corresponding conformal prediction sets? \n\n::: {.cell execution_count=9}\n``` {.julia .cell-code code-fold=\"true\"}\nXtest_2 = (x1=[-0.5],x2=[0.25])\ncov_ = .9\nconf_model = conformal_model(model; coverage=cov_)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\np̂_2 = pdf(predict(mach, Xtest_2)[1], 0)\n```\n:::\n\n\n::: {.cell execution_count=10}\n\n::: {.cell-output .cell-output-display execution_count=11}\nWell, for low coverage rates (roughly $<0.9$) the conformal prediction set does not include $y=0$: the set size is zero (right panel). Only for higher coverage rates do we have $C(X_2)=\\{0\\}$: the coverage rate is high enough to include $y=0$, but the corresponding softmax probability is still fairly low. For example, for $(1-\\alpha)=0.9$ we have $\\hat{p}(y=0|X_2)=0.72.$\n\n:::\n:::\n\n\nThese two examples illustrate an interesting point: for regions characterised by high predictive uncertainty, conformal prediction sets are typically empty (for low coverage) or large (for high coverage). While set-valued predictions may be something to get used to, this notion is overall intuitive. \n\n::: {.cell execution_count=11}\n``` {.julia .cell-code code-fold=\"true\"}\n# Setup\ncoverages = range(0.75,1.0,length=5)\nn = 100\nx1_range = range(extrema(X.x1)...,length=n)\nx2_range = range(extrema(X.x2)...,length=n)\n\nanim = @animate for coverage in coverages\n conf_model = conformal_model(model; coverage=coverage)\n mach = machine(conf_model, X, y)\n fit!(mach, rows=train)\n p1 = contourf_cp(mach, x1_range, x2_range; type=:proba, title=\"Softmax\", axis=nothing)\n scatter!(p1, X.x1, X.x2, group=y, ms=2, msw=0, alpha=0.75)\n scatter!(p1, Xtest.x1, Xtest.x2, ms=6, c=:red, label=\"X₁\", shape=:cross, msw=6)\n scatter!(p1, Xtest_2.x1, Xtest_2.x2, ms=6, c=:red, label=\"X₂\", shape=:diamond, msw=6)\n p2 = contourf_cp(mach, x1_range, x2_range; type=:set_size, title=\"Set size\", axis=nothing)\n scatter!(p2, X.x1, X.x2, group=y, ms=2, msw=0, alpha=0.75)\n scatter!(p2, Xtest.x1, Xtest.x2, ms=6, c=:red, label=\"X₁\", shape=:cross, msw=6)\n scatter!(p2, Xtest_2.x1, Xtest_2.x2, ms=6, c=:red, label=\"X₂\", shape=:diamond, msw=6)\n plot(p1, p2, plot_title=\"(1-α)=$(round(coverage,digits=2))\", size=(800,300))\nend\n\ngif(anim, fps=0.5)\n```\n\n::: {#fig-anim .cell-output .cell-output-display execution_count=12}\n```{=html}\n\n```\n\nThe effect of the coverage rate on the conformal prediction set. Softmax probabilities are shown on the left. The size of the prediction set is shown on the right.\n:::\n:::\n\n\n\n\n", + "markdown": "# Classification \n\n```@meta\nCurrentModule = ConformalPrediction\n```\n\n\n\nThis tutorial is based in parts on this [blog post](https://www.paltmeyer.com/blog/posts/conformal-prediction/).\n\n### Split Conformal Classification {#sec-scp}\n\nWe consider a simple binary classification problem. Let $(X_i, Y_i), \\ i=1,...,n$ denote our feature-label pairs and let $\\mu: \\mathcal{X} \\mapsto \\mathcal{Y}$ denote the mapping from features to labels. For illustration purposes we will use the moons dataset 🌙. Using [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) we first generate the data and split into into a training and test set:\n\n::: {.cell execution_count=2}\n``` {.julia .cell-code}\nusing MLJ\nusing Random\nRandom.seed!(123)\n\n# Data:\nX, y = make_moons(500; noise=0.15)\ntrain, test = partition(eachindex(y), 0.8, shuffle=true)\n```\n:::\n\n\nHere we will use a specific case of CP called *split conformal prediction* which can then be summarized as follows:^[In other places split conformal prediction is sometimes referred to as *inductive* conformal prediction.]\n\n1. Partition the training into a proper training set and a separate calibration set: $\\mathcal{D}_n=\\mathcal{D}^{\\text{train}} \\cup \\mathcal{D}^{\\text{cali}}$.\n2. Train the machine learning model on the proper training set: $\\hat\\mu_{i \\in \\mathcal{D}^{\\text{train}}}(X_i,Y_i)$.\n3. Compute nonconformity scores, $\\mathcal{S}$, using the calibration data $\\mathcal{D}^{\\text{cali}}$ and the fitted model $\\hat\\mu_{i \\in \\mathcal{D}^{\\text{train}}}$. \n4. For a user-specified desired coverage ratio $(1-\\alpha)$ compute the corresponding quantile, $\\hat{q}$, of the empirical distribution of nonconformity scores, $\\mathcal{S}$.\n5. For the given quantile and test sample $X_{\\text{test}}$, form the corresponding conformal prediction set: \n\n$$\nC(X_{\\text{test}})=\\{y:s(X_{\\text{test}},y) \\le \\hat{q}\\}\n$$ {#eq-set}\n\nThis is the default procedure used for classification and regression in [`ConformalPrediction.jl`](https://github.com/pat-alt/ConformalPrediction.jl). \n\nNow let's take this to our 🌙 data. To illustrate the package functionality we will demonstrate the envisioned workflow. We first define our atomic machine learning model following standard [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) conventions. Using [`ConformalPrediction.jl`](https://github.com/pat-alt/ConformalPrediction.jl) we then wrap our atomic model in a conformal model using the standard API call `conformal_model(model::Supervised; kwargs...)`. To train and predict from our conformal model we can then rely on the conventional [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) procedure again. In particular, we wrap our conformal model in data (turning it into a machine) and then fit it on the training set. Finally, we use our machine to predict the label for a new test sample `Xtest`:\n\n::: {.cell execution_count=3}\n``` {.julia .cell-code}\n# Model:\nKNNClassifier = @load KNNClassifier pkg=NearestNeighborModels\nmodel = KNNClassifier(;K=50) \n\n# Training:\nusing ConformalPrediction\nconf_model = conformal_model(model; coverage=.9)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n\n# Conformal Prediction:\nXtest = selectrows(X, first(test))\nytest = y[first(test)]\npredict(mach, Xtest)[1]\n```\n\n::: {.cell-output .cell-output-stdout}\n```\nimport NearestNeighborModels ✔\n```\n:::\n\n::: {.cell-output .cell-output-display execution_count=17}\n```\n UnivariateFinite{Multiclass{2}} \n ┌ ┐ \n 0 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.94 \n └ ┘ \n```\n:::\n:::\n\n\nThe final predictions are set-valued. While the softmax output remains unchanged for the `SimpleInductiveClassifier`, the size of the prediction set depends on the chosen coverage rate, $(1-\\alpha)$. \n\n::: {.cell execution_count=4}\n\n::: {.cell-output .cell-output-display execution_count=18}\nWhen specifying a coverage rate very close to one, the prediction set will typically include many (in some cases all) of the possible labels. Below, for example, both classes are included in the prediction set when setting the coverage rate equal to $(1-\\alpha)$=1.0. This is intuitive, since high coverage quite literally requires that the true label is covered by the prediction set with high probability.\n\n:::\n:::\n\n\n::: {.cell execution_count=5}\n``` {.julia .cell-code}\nconf_model = conformal_model(model; coverage=coverage)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n\n# Conformal Prediction:\nXtest = (x1=[1],x2=[0])\npredict(mach, Xtest)[1]\n```\n\n::: {.cell-output .cell-output-display execution_count=19}\n```\n UnivariateFinite{Multiclass{2}} \n ┌ ┐ \n 0 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.5 \n 1 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.5 \n └ ┘ \n```\n:::\n:::\n\n\n::: {.cell execution_count=6}\n\n::: {.cell-output .cell-output-display execution_count=20}\nConversely, for low coverage rates, prediction sets can also be empty. For a choice of $(1-\\alpha)$=0.1, for example, the prediction set for our test sample is empty. This is a bit difficult to think about intuitively and I have not yet come across a satisfactory, intuitive interpretation.^[Any thoughts/comments welcome!] When the prediction set is empty, the `predict` call currently returns `missing`:\n\n:::\n:::\n\n\n::: {.cell execution_count=7}\n``` {.julia .cell-code}\nconf_model = conformal_model(model; coverage=coverage)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n\n# Conformal Prediction:\npredict(mach, Xtest)[1]\n```\n\n::: {.cell-output .cell-output-display execution_count=21}\n```\nmissing\n```\n:::\n:::\n\n\n\n\nThe animation below should provide some more intuition as to what exactly is happening here. It illustrates the effect of the chosen coverage rate on the predicted softmax output and the set size in the two-dimensional feature space. Contours are overlayed with the moon data points (including test data). The two samples highlighted in red, $X_1$ and $X_2$, have been manually added for illustration purposes. Let's look at these one by one.\n\nFirstly, note that $X_1$ (red cross) falls into a region of the domain that is characterized by high predictive uncertainty. It sits right at the bottom-right corner of our class-zero moon 🌜 (orange), a region that is almost entirely enveloped by our class-one moon 🌛 (green). For low coverage rates the prediction set for $X_1$ is empty: on the left-hand side this is indicated by the missing contour for the softmax probability; on the right-hand side we can observe that the corresponding set size is indeed zero. For high coverage rates the prediction set includes both $y=0$ and $y=1$, indicative of the fact that the conformal classifier is uncertain about the true label.\n\nWith respect to $X_2$, we observe that while also sitting on the fringe of our class-zero moon, this sample populates a region that is not fully enveloped by data points from the opposite class. In this region, the underlying atomic classifier can be expected to be more certain about its predictions, but still not highly confident. How is this reflected by our corresponding conformal prediction sets? \n\n::: {.cell execution_count=9}\n``` {.julia .cell-code code-fold=\"true\"}\nXtest_2 = (x1=[-0.5],x2=[0.25])\ncov_ = .9\nconf_model = conformal_model(model; coverage=cov_)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\np̂_2 = pdf(predict(mach, Xtest_2)[1], 0)\n```\n:::\n\n\n::: {.cell execution_count=10}\n\n::: {.cell-output .cell-output-display execution_count=24}\nWell, for low coverage rates (roughly $<0.9$) the conformal prediction set does not include $y=0$: the set size is zero (right panel). Only for higher coverage rates do we have $C(X_2)=\\{0\\}$: the coverage rate is high enough to include $y=0$, but the corresponding softmax probability is still fairly low. For example, for $(1-\\alpha)=0.9$ we have $\\hat{p}(y=0|X_2)=0.72.$\n\n:::\n:::\n\n\nThese two examples illustrate an interesting point: for regions characterised by high predictive uncertainty, conformal prediction sets are typically empty (for low coverage) or large (for high coverage). While set-valued predictions may be something to get used to, this notion is overall intuitive. \n\n::: {.cell execution_count=11}\n``` {.julia .cell-code}\n# Setup\ncoverages = range(0.75,1.0,length=5)\nn = 100\nx1_range = range(extrema(X.x1)...,length=n)\nx2_range = range(extrema(X.x2)...,length=n)\n\nanim = @animate for coverage in coverages\n conf_model = conformal_model(model; coverage=coverage)\n mach = machine(conf_model, X, y)\n fit!(mach, rows=train)\n p1 = contourf_cp(mach, x1_range, x2_range; type=:proba, title=\"Softmax\", axis=nothing)\n scatter!(p1, X.x1, X.x2, group=y, ms=2, msw=0, alpha=0.75)\n scatter!(p1, Xtest.x1, Xtest.x2, ms=6, c=:red, label=\"X₁\", shape=:cross, msw=6)\n scatter!(p1, Xtest_2.x1, Xtest_2.x2, ms=6, c=:red, label=\"X₂\", shape=:diamond, msw=6)\n p2 = contourf_cp(mach, x1_range, x2_range; type=:set_size, title=\"Set size\", axis=nothing)\n scatter!(p2, X.x1, X.x2, group=y, ms=2, msw=0, alpha=0.75)\n scatter!(p2, Xtest.x1, Xtest.x2, ms=6, c=:red, label=\"X₁\", shape=:cross, msw=6)\n scatter!(p2, Xtest_2.x1, Xtest_2.x2, ms=6, c=:red, label=\"X₂\", shape=:diamond, msw=6)\n plot(p1, p2, plot_title=\"(1-α)=$(round(coverage,digits=2))\", size=(800,300))\nend\n\ngif(anim, joinpath(www_path,\"classification.gif\"), fps=1)\n```\n\n::: {#fig-anim .cell-output .cell-output-display execution_count=25}\n```{=html}\n\n```\n\nThe effect of the coverage rate on the conformal prediction set. Softmax probabilities are shown on the left. The size of the prediction set is shown on the right.\n:::\n:::\n\n\n![](www/classification.gif)\n\n", "supporting": [ "classification_files" ], diff --git a/_freeze/docs/src/index/execute-results/md.json b/_freeze/docs/src/index/execute-results/md.json index 3c0ad8d..bc25f51 100644 --- a/_freeze/docs/src/index/execute-results/md.json +++ b/_freeze/docs/src/index/execute-results/md.json @@ -1,7 +1,7 @@ { "hash": "c56dcfed5fce5fece3f8dd90b08af0bd", "result": { - "markdown": "```@meta\nCurrentModule = ConformalPrediction\n```\n\n# ConformalPrediction\n\nDocumentation for [ConformalPrediction.jl](https://github.com/pat-alt/ConformalPrediction.jl).\n\n\n\n`ConformalPrediction.jl` is a package for Uncertainty Quantification (UQ) through Conformal Prediction (CP) in Julia. It is designed to work with supervised models trained in [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/) @blaom2020mlj. Conformal Prediction is distribution-free, easy-to-understand, easy-to-use and model-agnostic. \n\n# 📖 Background\n\nConformal Prediction is a scalable frequentist approach to uncertainty quantification and coverage control. It promises to be an easy-to-understand, distribution-free and model-agnostic way to generate statistically rigorous uncertainty estimates. Interestingly, it can even be used to complement Bayesian methods.\n\nThe animation below is lifted from a small blog post that introduces the topic and the package ([[TDS](https://towardsdatascience.com/conformal-prediction-in-julia-351b81309e30)], [[Quarto](https://www.paltmeyer.com/blog/posts/conformal-prediction/#fig-anim)]). It shows conformal prediction sets for two different samples and changing coverage rates. Standard conformal classifiers produce set-valued predictions: for ambiguous samples these sets are typically large (for high coverage) or empty (for low coverage).\n\n![Conformal Prediction in action: Prediction sets for two different samples and changing coverage rates. As coverage grows, so does the size of the prediction sets.](https://raw.githubusercontent.com/pat-alt/blog/main/posts/conformal-prediction/www/medium.gif)\n\n## 🚩 Installation \n\nYou can install the latest stable release from the general registry:\n\n```{.julia}\nusing Pkg\nPkg.add(\"ConformalPrediction\")\n```\n\nThe development version can be installed as follows:\n\n```{.julia}\nusing Pkg\nPkg.add(url=\"https://github.com/pat-alt/ConformalPrediction.jl\")\n```\n\n## 🔁 Status \n\nThis package is in its early stages of development and therefore still subject to changes to the core architecture and API. The following CP approaches have been implemented in the development version:\n\n**Regression**:\n\n- Inductive \n- Naive Transductive \n- Jackknife \n- Jackknife+ \n- Jackknife-minmax\n- CV+\n- CV-minmax\n\n**Classification**:\n\n- Inductive (LABEL [@sadinle2019least])\n- Adaptive Inductive\n\nThe package has been tested for the following supervised models offered by [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/).\n\n**Regression**:\n\n::: {.cell execution_count=2}\n``` {.julia .cell-code}\nusing ConformalPrediction\nkeys(tested_atomic_models[:regression])\n```\n\n::: {.cell-output .cell-output-display execution_count=3}\n```\nKeySet for a Dict{Symbol, Expr} with 4 entries. Keys:\n :nearest_neighbor\n :evo_tree\n :light_gbm\n :decision_tree\n```\n:::\n:::\n\n\n**Classification**:\n\n::: {.cell execution_count=3}\n``` {.julia .cell-code}\nkeys(tested_atomic_models[:classification])\n```\n\n::: {.cell-output .cell-output-display execution_count=4}\n```\nKeySet for a Dict{Symbol, Expr} with 4 entries. Keys:\n :nearest_neighbor\n :evo_tree\n :light_gbm\n :decision_tree\n```\n:::\n:::\n\n\n## 🔍 Usage Example \n\nTo illustrate the intended use of the package, let's have a quick look at a simple regression problem. Using [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/) we first generate some synthetic data and then determine indices for our training, calibration and test data:\n\n::: {.cell execution_count=4}\n``` {.julia .cell-code}\nusing MLJ\nX, y = MLJ.make_regression(1000, 2)\ntrain, test = partition(eachindex(y), 0.4, 0.4)\n```\n:::\n\n\nWe then import a decision tree ([`EvoTrees.jl`](https://github.com/Evovest/EvoTrees.jl)) following the standard [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/) procedure.\n\n::: {.cell execution_count=5}\n``` {.julia .cell-code}\nEvoTreeRegressor = @load EvoTreeRegressor pkg=EvoTrees\nmodel = EvoTreeRegressor() \n```\n:::\n\n\nTo turn our conventional model into a conformal model, we just need to declare it as such by using `conformal_model` wrapper function. The generated conformal model instance can wrapped in data to create a *machine*. Finally, we proceed by fitting the machine on training data using the generic `fit!` method:\n\n::: {.cell execution_count=6}\n``` {.julia .cell-code}\nusing ConformalPrediction\nconf_model = conformal_model(model)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n```\n:::\n\n\nPredictions can then be computed using the generic `predict` method. The code below produces predictions for the first `n` samples. Each tuple contains the lower and upper bound for the prediction interval.\n\n::: {.cell execution_count=7}\n``` {.julia .cell-code}\nn = 5\nXtest = selectrows(X, first(test,n))\nytest = y[first(test,n)]\npredict(mach, Xtest)\n```\n\n::: {.cell-output .cell-output-display execution_count=8}\n```\n╭─────────────────────────────────────────────────────────╮\n│ │\n│ (1) (1.9785806677967583, 3.555027766731997) │\n│ (2) (3.902150239475792, 5.4785973384110305) │\n│ (3) (0.5223306700743977, 2.0987777690096365) │\n│ (4) (2.3013653650067107, 3.8778124639419493) │\n│ (5) (2.380170088915079, 3.9566171878503176) │\n│ │\n│ │\n╰───────────────────────────────────────────── 5 items ───╯\n```\n:::\n:::\n\n\n## 🛠 Contribute \n\nContributions are welcome! Please follow the [SciML ColPrac guide](https://github.com/SciML/ColPrac).\n\n## 🎓 References \n\n", + "markdown": "```@meta\nCurrentModule = ConformalPrediction\n```\n\n# ConformalPrediction\n\nDocumentation for [ConformalPrediction.jl](https://github.com/pat-alt/ConformalPrediction.jl).\n\n\n\n`ConformalPrediction.jl` is a package for Uncertainty Quantification (UQ) through Conformal Prediction (CP) in Julia. It is designed to work with supervised models trained in [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/) @blaom2020mlj. Conformal Prediction is distribution-free, easy-to-understand, easy-to-use and model-agnostic. \n\n# 📖 Background\n\nConformal Prediction is a scalable frequentist approach to uncertainty quantification and coverage control. It promises to be an easy-to-understand, distribution-free and model-agnostic way to generate statistically rigorous uncertainty estimates. Interestingly, it can even be used to complement Bayesian methods.\n\nThe animation below is lifted from a small blog post that introduces the topic and the package ([[TDS](https://towardsdatascience.com/conformal-prediction-in-julia-351b81309e30)], [[Quarto](https://www.paltmeyer.com/blog/posts/conformal-prediction/#fig-anim)]). It shows conformal prediction sets for two different samples and changing coverage rates. Standard conformal classifiers produce set-valued predictions: for ambiguous samples these sets are typically large (for high coverage) or empty (for low coverage).\n\n![Conformal Prediction in action: Prediction sets for two different samples and changing coverage rates. As coverage grows, so does the size of the prediction sets.](https://raw.githubusercontent.com/pat-alt/blog/main/posts/conformal-prediction/www/medium.gif)\n\n## 🚩 Installation \n\nYou can install the latest stable release from the general registry:\n\n```{.julia}\nusing Pkg\nPkg.add(\"ConformalPrediction\")\n```\n\nThe development version can be installed as follows:\n\n```{.julia}\nusing Pkg\nPkg.add(url=\"https://github.com/pat-alt/ConformalPrediction.jl\")\n```\n\n## 🔁 Status \n\nThis package is in its early stages of development and therefore still subject to changes to the core architecture and API. The following CP approaches have been implemented in the development version:\n\n**Regression**:\n\n- Inductive \n- Naive Transductive \n- Jackknife \n- Jackknife+ \n- Jackknife-minmax\n- CV+\n- CV-minmax\n\n**Classification**:\n\n- Inductive (LABEL [@sadinle2019least])\n- Adaptive Inductive\n\nThe package has been tested for the following supervised models offered by [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/).\n\n**Regression**:\n\n::: {.cell execution_count=2}\n``` {.julia .cell-code}\nusing ConformalPrediction\nkeys(tested_atomic_models[:regression])\n```\n\n::: {.cell-output .cell-output-display execution_count=3}\n```\nKeySet for a Dict{Symbol, Expr} with 4 entries. Keys:\n :nearest_neighbor\n :evo_tree\n :light_gbm\n :decision_tree\n```\n:::\n:::\n\n\n**Classification**:\n\n::: {.cell execution_count=3}\n``` {.julia .cell-code}\nkeys(tested_atomic_models[:classification])\n```\n\n::: {.cell-output .cell-output-display execution_count=4}\n```\nKeySet for a Dict{Symbol, Expr} with 4 entries. Keys:\n :nearest_neighbor\n :evo_tree\n :light_gbm\n :decision_tree\n```\n:::\n:::\n\n\n## 🔍 Usage Example \n\nTo illustrate the intended use of the package, let's have a quick look at a simple regression problem. Using [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/) we first generate some synthetic data and then determine indices for our training, calibration and test data:\n\n::: {.cell execution_count=4}\n``` {.julia .cell-code}\nusing MLJ\nX, y = MLJ.make_regression(1000, 2)\ntrain, test = partition(eachindex(y), 0.4, 0.4)\n```\n:::\n\n\nWe then import a decision tree ([`EvoTrees.jl`](https://github.com/Evovest/EvoTrees.jl)) following the standard [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/) procedure.\n\n::: {.cell execution_count=5}\n``` {.julia .cell-code}\nEvoTreeRegressor = @load EvoTreeRegressor pkg=EvoTrees\nmodel = EvoTreeRegressor() \n```\n:::\n\n\nTo turn our conventional model into a conformal model, we just need to declare it as such by using `conformal_model` wrapper function. The generated conformal model instance can wrapped in data to create a *machine*. Finally, we proceed by fitting the machine on training data using the generic `fit!` method:\n\n::: {.cell execution_count=6}\n``` {.julia .cell-code}\nusing ConformalPrediction\nconf_model = conformal_model(model)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n```\n:::\n\n\nPredictions can then be computed using the generic `predict` method. The code below produces predictions for the first `n` samples. Each tuple contains the lower and upper bound for the prediction interval.\n\n::: {.cell execution_count=7}\n``` {.julia .cell-code}\nn = 5\nXtest = selectrows(X, first(test,n))\nytest = y[first(test,n)]\npredict(mach, Xtest)\n```\n\n::: {.cell-output .cell-output-display execution_count=8}\n```\n╭─────────────────────────────────────────────────────────╮\n│ │\n│ (1) (1.2801183281465092, 2.0024286641173816) │\n│ (2) (0.8012756658949756, 1.5235860018658482) │\n│ (3) (1.1850387604493555, 1.9073490964202282) │\n│ (4) (1.1185514282818692, 1.8408617642527418) │\n│ (5) (1.1651738766694149, 1.8874842126402875) │\n│ │\n│ │\n╰───────────────────────────────────────────── 5 items ───╯\n```\n:::\n:::\n\n\n## 🛠 Contribute \n\nContributions are welcome! Please follow the [SciML ColPrac guide](https://github.com/SciML/ColPrac).\n\n## 🎓 References \n\n", "supporting": [ "index_files" ], diff --git a/_freeze/docs/src/intro/execute-results/md.json b/_freeze/docs/src/intro/execute-results/md.json index 696ab98..966caac 100644 --- a/_freeze/docs/src/intro/execute-results/md.json +++ b/_freeze/docs/src/intro/execute-results/md.json @@ -1,7 +1,7 @@ { "hash": "4b0109965d9339b1ffd867a3c20a947b", "result": { - "markdown": "\n\n`ConformalPrediction.jl` is a package for Uncertainty Quantification (UQ) through Conformal Prediction (CP) in Julia. It is designed to work with supervised models trained in [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/) @blaom2020mlj. Conformal Prediction is distribution-free, easy-to-understand, easy-to-use and model-agnostic. \n\n# 📖 Background\n\nConformal Prediction is a scalable frequentist approach to uncertainty quantification and coverage control. It promises to be an easy-to-understand, distribution-free and model-agnostic way to generate statistically rigorous uncertainty estimates. Interestingly, it can even be used to complement Bayesian methods.\n\nThe animation below is lifted from a small blog post that introduces the topic and the package ([[TDS](https://towardsdatascience.com/conformal-prediction-in-julia-351b81309e30)], [[Quarto](https://www.paltmeyer.com/blog/posts/conformal-prediction/#fig-anim)]). It shows conformal prediction sets for two different samples and changing coverage rates. Standard conformal classifiers produce set-valued predictions: for ambiguous samples these sets are typically large (for high coverage) or empty (for low coverage).\n\n![Conformal Prediction in action: Prediction sets for two different samples and changing coverage rates. As coverage grows, so does the size of the prediction sets.](https://raw.githubusercontent.com/pat-alt/blog/main/posts/conformal-prediction/www/medium.gif)\n\n## 🚩 Installation \n\nYou can install the latest stable release from the general registry:\n\n```{.julia}\nusing Pkg\nPkg.add(\"ConformalPrediction\")\n```\n\nThe development version can be installed as follows:\n\n```{.julia}\nusing Pkg\nPkg.add(url=\"https://github.com/pat-alt/ConformalPrediction.jl\")\n```\n\n## 🔁 Status \n\nThis package is in its early stages of development and therefore still subject to changes to the core architecture and API. The following CP approaches have been implemented in the development version:\n\n**Regression**:\n\n- Inductive \n- Naive Transductive \n- Jackknife \n- Jackknife+ \n- Jackknife-minmax\n- CV+\n- CV-minmax\n\n**Classification**:\n\n- Inductive (LABEL [@sadinle2019least])\n- Adaptive Inductive\n\nThe package has been tested for the following supervised models offered by [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/).\n\n**Regression**:\n\n::: {.cell execution_count=2}\n``` {.julia .cell-code}\nusing ConformalPrediction\nkeys(tested_atomic_models[:regression])\n```\n\n::: {.cell-output .cell-output-display execution_count=3}\n```\nKeySet for a Dict{Symbol, Expr} with 4 entries. Keys:\n :nearest_neighbor\n :evo_tree\n :light_gbm\n :decision_tree\n```\n:::\n:::\n\n\n**Classification**:\n\n::: {.cell execution_count=3}\n``` {.julia .cell-code}\nkeys(tested_atomic_models[:classification])\n```\n\n::: {.cell-output .cell-output-display execution_count=4}\n```\nKeySet for a Dict{Symbol, Expr} with 4 entries. Keys:\n :nearest_neighbor\n :evo_tree\n :light_gbm\n :decision_tree\n```\n:::\n:::\n\n\n## 🔍 Usage Example \n\nTo illustrate the intended use of the package, let's have a quick look at a simple regression problem. Using [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/) we first generate some synthetic data and then determine indices for our training, calibration and test data:\n\n::: {.cell execution_count=4}\n``` {.julia .cell-code}\nusing MLJ\nX, y = MLJ.make_regression(1000, 2)\ntrain, test = partition(eachindex(y), 0.4, 0.4)\n```\n:::\n\n\nWe then import a decision tree ([`EvoTrees.jl`](https://github.com/Evovest/EvoTrees.jl)) following the standard [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/) procedure.\n\n::: {.cell execution_count=5}\n``` {.julia .cell-code}\nEvoTreeRegressor = @load EvoTreeRegressor pkg=EvoTrees\nmodel = EvoTreeRegressor() \n```\n:::\n\n\nTo turn our conventional model into a conformal model, we just need to declare it as such by using `conformal_model` wrapper function. The generated conformal model instance can wrapped in data to create a *machine*. Finally, we proceed by fitting the machine on training data using the generic `fit!` method:\n\n::: {.cell execution_count=6}\n``` {.julia .cell-code}\nusing ConformalPrediction\nconf_model = conformal_model(model)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n```\n:::\n\n\nPredictions can then be computed using the generic `predict` method. The code below produces predictions for the first `n` samples. Each tuple contains the lower and upper bound for the prediction interval.\n\n::: {.cell execution_count=7}\n``` {.julia .cell-code}\nn = 5\nXtest = selectrows(X, first(test,n))\nytest = y[first(test,n)]\npredict(mach, Xtest)\n```\n\n::: {.cell-output .cell-output-display execution_count=8}\n```\n╭───────────────────────────────────────────────────────────╮\n│ │\n│ (1) (-2.3533542827227794, 1.1215603803363177) │\n│ (2) (-5.386746248140736, -1.9118315850816388) │\n│ (3) (-4.084485418193179, -0.6095707551340814) │\n│ (4) (-2.5544886119708683, 0.9204260510882288) │\n│ (5) (-3.9127608429516876, -0.4378461798925908) │\n│ │\n│ │\n╰─────────────────────────────────────────────── 5 items ───╯\n```\n:::\n:::\n\n\n## 🛠 Contribute \n\nContributions are welcome! Please follow the [SciML ColPrac guide](https://github.com/SciML/ColPrac).\n\n## 🎓 References \n\n", + "markdown": "\n\n`ConformalPrediction.jl` is a package for Uncertainty Quantification (UQ) through Conformal Prediction (CP) in Julia. It is designed to work with supervised models trained in [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/) @blaom2020mlj. Conformal Prediction is distribution-free, easy-to-understand, easy-to-use and model-agnostic. \n\n# 📖 Background\n\nConformal Prediction is a scalable frequentist approach to uncertainty quantification and coverage control. It promises to be an easy-to-understand, distribution-free and model-agnostic way to generate statistically rigorous uncertainty estimates. Interestingly, it can even be used to complement Bayesian methods.\n\nThe animation below is lifted from a small blog post that introduces the topic and the package ([[TDS](https://towardsdatascience.com/conformal-prediction-in-julia-351b81309e30)], [[Quarto](https://www.paltmeyer.com/blog/posts/conformal-prediction/#fig-anim)]). It shows conformal prediction sets for two different samples and changing coverage rates. Standard conformal classifiers produce set-valued predictions: for ambiguous samples these sets are typically large (for high coverage) or empty (for low coverage).\n\n![Conformal Prediction in action: Prediction sets for two different samples and changing coverage rates. As coverage grows, so does the size of the prediction sets.](https://raw.githubusercontent.com/pat-alt/blog/main/posts/conformal-prediction/www/medium.gif)\n\n## 🚩 Installation \n\nYou can install the latest stable release from the general registry:\n\n```{.julia}\nusing Pkg\nPkg.add(\"ConformalPrediction\")\n```\n\nThe development version can be installed as follows:\n\n```{.julia}\nusing Pkg\nPkg.add(url=\"https://github.com/pat-alt/ConformalPrediction.jl\")\n```\n\n## 🔁 Status \n\nThis package is in its early stages of development and therefore still subject to changes to the core architecture and API. The following CP approaches have been implemented in the development version:\n\n**Regression**:\n\n- Inductive \n- Naive Transductive \n- Jackknife \n- Jackknife+ \n- Jackknife-minmax\n- CV+\n- CV-minmax\n\n**Classification**:\n\n- Inductive (LABEL [@sadinle2019least])\n- Adaptive Inductive\n\nThe package has been tested for the following supervised models offered by [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/).\n\n**Regression**:\n\n::: {.cell execution_count=2}\n``` {.julia .cell-code}\nusing ConformalPrediction\nkeys(tested_atomic_models[:regression])\n```\n\n::: {.cell-output .cell-output-display execution_count=3}\n```\nKeySet for a Dict{Symbol, Expr} with 4 entries. Keys:\n :nearest_neighbor\n :evo_tree\n :light_gbm\n :decision_tree\n```\n:::\n:::\n\n\n**Classification**:\n\n::: {.cell execution_count=3}\n``` {.julia .cell-code}\nkeys(tested_atomic_models[:classification])\n```\n\n::: {.cell-output .cell-output-display execution_count=4}\n```\nKeySet for a Dict{Symbol, Expr} with 4 entries. Keys:\n :nearest_neighbor\n :evo_tree\n :light_gbm\n :decision_tree\n```\n:::\n:::\n\n\n## 🔍 Usage Example \n\nTo illustrate the intended use of the package, let's have a quick look at a simple regression problem. Using [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/) we first generate some synthetic data and then determine indices for our training, calibration and test data:\n\n::: {.cell execution_count=4}\n``` {.julia .cell-code}\nusing MLJ\nX, y = MLJ.make_regression(1000, 2)\ntrain, test = partition(eachindex(y), 0.4, 0.4)\n```\n:::\n\n\nWe then import a decision tree ([`EvoTrees.jl`](https://github.com/Evovest/EvoTrees.jl)) following the standard [MLJ](https://alan-turing-institute.github.io/MLJ.jl/dev/) procedure.\n\n::: {.cell execution_count=5}\n``` {.julia .cell-code}\nEvoTreeRegressor = @load EvoTreeRegressor pkg=EvoTrees\nmodel = EvoTreeRegressor() \n```\n:::\n\n\nTo turn our conventional model into a conformal model, we just need to declare it as such by using `conformal_model` wrapper function. The generated conformal model instance can wrapped in data to create a *machine*. Finally, we proceed by fitting the machine on training data using the generic `fit!` method:\n\n::: {.cell execution_count=6}\n``` {.julia .cell-code}\nusing ConformalPrediction\nconf_model = conformal_model(model)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n```\n:::\n\n\nPredictions can then be computed using the generic `predict` method. The code below produces predictions for the first `n` samples. Each tuple contains the lower and upper bound for the prediction interval.\n\n::: {.cell execution_count=7}\n``` {.julia .cell-code}\nn = 5\nXtest = selectrows(X, first(test,n))\nytest = y[first(test,n)]\npredict(mach, Xtest)\n```\n\n::: {.cell-output .cell-output-display execution_count=8}\n```\n╭──────────────────────────────────────────────────────────╮\n│ │\n│ (1) (-0.9864061984981062, 2.2503222170961554) │\n│ (2) (-0.7192196826151477, 2.5175087329791137) │\n│ (3) (-0.33838267507136344, 2.898345740522898) │\n│ (4) (-2.838413186252051, 0.39831522934221053) │\n│ (5) (-0.7192196826151477, 2.5175087329791137) │\n│ │\n│ │\n╰────────────────────────────────────────────── 5 items ───╯\n```\n:::\n:::\n\n\n## 🛠 Contribute \n\nContributions are welcome! Please follow the [SciML ColPrac guide](https://github.com/SciML/ColPrac).\n\n## 🎓 References \n\n", "supporting": [ "intro_files" ], diff --git a/_freeze/docs/src/regression/execute-results/md.json b/_freeze/docs/src/regression/execute-results/md.json index e2001a8..0499fa3 100644 --- a/_freeze/docs/src/regression/execute-results/md.json +++ b/_freeze/docs/src/regression/execute-results/md.json @@ -1,7 +1,7 @@ { - "hash": "e0fd6af2834acab7a9aedb62c278b6a4", + "hash": "f2f3a2a6c8e2023197fe550406131d55", "result": { - "markdown": "# Regression\n\n```@meta\nCurrentModule = ConformalPrediction\n```\n\n\n\nThis tutorial mostly replicates this [tutorial](https://mapie.readthedocs.io/en/latest/examples_regression/4-tutorials/plot_main-tutorial-regression.html#) from MAPIE.\n\n## Data\n\nWe begin by generating some synthetic regression data below:\n\n::: {#fig-data .cell execution_count=2}\n``` {.julia .cell-code}\n# Regression data:\n\n# Inputs:\nN = 600\nxmax = 3.0\nusing Distributions\nd = Uniform(-xmax, xmax)\nX = rand(d, N)\nX = reshape(X, :, 1)\n\n# Outputs:\nnoise = 0.5\nfun(X) = X * sin(X)\nε = randn(N) .* noise\ny = @.(fun(X)) + ε\nusing MLJ\ntrain, test = partition(eachindex(y), 0.4, 0.4, shuffle=true)\n\nusing Plots\nscatter(X, y, label=\"Observed\")\nxrange = range(-xmax,xmax,length=N)\nplot!(xrange, @.(fun(xrange)), lw=4, label=\"Ground truth\", ls=:dash, colour=:black)\n```\n:::\n\n\n## Model\n\nTo model this data we will use polynomial regression. There is currently no out-of-the-box support for polynomial feature transformations in `MLJ`, but it is easy enough to add a little helper function for this. Note how we define a linear pipeline `pipe` here. Since pipelines in `MLJ` are just models, we can use the generated object as an input to `conformal_model` below.\n\n::: {.cell execution_count=3}\n``` {.julia .cell-code}\nLinearRegressor = @load LinearRegressor pkg=MLJLinearModels\ndegree_polynomial = 10\npolynomial_features(X, degree::Int) = reduce(hcat, map(i -> X.^i, 1:degree))\npipe = (X -> MLJ.table(polynomial_features(MLJ.matrix(X), degree_polynomial))) |> LinearRegressor()\n```\n:::\n\n\nNext, we conformalize our polynomial regressor using every available approach (except the Naive approach):\n\n::: {.cell execution_count=4}\n``` {.julia .cell-code}\nusing ConformalPrediction\nconformal_models = merge(values(available_models[:regression])...)\ndelete!(conformal_models, :naive)\n# delete!(conformal_models, :jackknife)\nresults = Dict()\nfor _mod in keys(conformal_models) \n conf_model = conformal_model(pipe; method=_mod, coverage=0.95)\n mach = machine(conf_model, X, y)\n fit!(mach, rows=train)\n results[_mod] = mach\nend\n```\n:::\n\n\nFinally, let us look at the resulting conformal predictions in each case.\n\n::: {#fig-cp .cell execution_count=5}\n``` {.julia .cell-code}\nusing Plots\nzoom = -3\nxrange = range(-xmax+zoom,xmax-zoom,length=N)\nplt_list = []\n\nfor (_mod, mach) in results\n plt = plot(mach.model, mach.fitresult, X, y, zoom=zoom, title=_mod)\n plot!(plt, xrange, @.(fun(xrange)), lw=1, ls=:dash, colour=:black, label=\"Ground truth\")\n push!(plt_list, plt)\nend\n\nplot(plt_list..., size=(1600,1000))\n```\n:::\n\n\n", + "markdown": "# Regression\n\n```@meta\nCurrentModule = ConformalPrediction\n```\n\n\n\nThis tutorial mostly replicates this [tutorial](https://mapie.readthedocs.io/en/latest/examples_regression/4-tutorials/plot_main-tutorial-regression.html#) from MAPIE.\n\n## Data\n\nWe begin by generating some synthetic regression data below:\n\n::: {#fig-data .cell execution_count=2}\n``` {.julia .cell-code}\n# Regression data:\n\n# Inputs:\nN = 600\nxmax = 3.0\nusing Distributions\nd = Uniform(-xmax, xmax)\nX = rand(d, N)\nX = reshape(X, :, 1)\n\n# Outputs:\nnoise = 0.5\nfun(X) = X * sin(X)\nε = randn(N) .* noise\ny = @.(fun(X)) + ε\nusing MLJ\ntrain, test = partition(eachindex(y), 0.4, 0.4, shuffle=true)\n\nusing Plots\nscatter(X, y, label=\"Observed\")\nxrange = range(-xmax,xmax,length=N)\nplot!(xrange, @.(fun(xrange)), lw=4, label=\"Ground truth\", ls=:dash, colour=:black)\n```\n:::\n\n\n## Model\n\nTo model this data we will use polynomial regression. There is currently no out-of-the-box support for polynomial feature transformations in `MLJ`, but it is easy enough to add a little helper function for this. Note how we define a linear pipeline `pipe` here. Since pipelines in `MLJ` are just models, we can use the generated object as an input to `conformal_model` below.\n\n::: {.cell execution_count=3}\n``` {.julia .cell-code}\nLinearRegressor = @load LinearRegressor pkg=MLJLinearModels\ndegree_polynomial = 10\npolynomial_features(X, degree::Int) = reduce(hcat, map(i -> X.^i, 1:degree))\npipe = (X -> MLJ.table(polynomial_features(MLJ.matrix(X), degree_polynomial))) |> LinearRegressor()\n```\n:::\n\n\nNext, we conformalize our polynomial regressor using every available approach (except the Naive approach):\n\n::: {.cell execution_count=4}\n``` {.julia .cell-code}\nusing ConformalPrediction\nconformal_models = merge(values(available_models[:regression])...)\ndelete!(conformal_models, :naive)\n# delete!(conformal_models, :jackknife)\nresults = Dict()\nfor _mod in keys(conformal_models) \n conf_model = conformal_model(pipe; method=_mod, coverage=0.95)\n mach = machine(conf_model, X, y)\n fit!(mach, rows=train)\n results[_mod] = mach\nend\n```\n:::\n\n\nFinally, let us look at the resulting conformal predictions in each case.\n\n::: {.cell execution_count=5}\n``` {.julia .cell-code}\nusing Plots\nzoom = -3\nxrange = range(-xmax+zoom,xmax-zoom,length=N)\nplt_list = []\n\nfor (_mod, mach) in results\n plt = plot(mach.model, mach.fitresult, X, y, zoom=zoom, title=_mod)\n plot!(plt, xrange, @.(fun(xrange)), lw=1, ls=:dash, colour=:black, label=\"Ground truth\")\n push!(plt_list, plt)\nend\n\nplot(plt_list..., size=(1600,1000))\n```\n\n::: {.cell-output .cell-output-display execution_count=6}\n![Conformal prediction regions.](regression_files/figure-commonmark/fig-cp-output-1.svg){#fig-cp}\n:::\n:::\n\n\n", "supporting": [ "regression_files" ], diff --git a/_freeze/docs/src/regression/figure-commonmark/fig-cp-output-1.svg b/_freeze/docs/src/regression/figure-commonmark/fig-cp-output-1.svg new file mode 100644 index 0000000..a1fba3e --- /dev/null +++ b/_freeze/docs/src/regression/figure-commonmark/fig-cp-output-1.svg @@ -0,0 +1,4606 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/src/classification.md b/docs/src/classification.md index 5591e48..ca0c316 100644 --- a/docs/src/classification.md +++ b/docs/src/classification.md @@ -92,7 +92,7 @@ predict(mach, Xtest)[1] missing -**?@fig-anim** should provide some more intuition as to what exactly is happening here. It illustrates the effect of the chosen coverage rate on the predicted softmax output and the set size in the two-dimensional feature space. Contours are overlayed with the moon data points (including test data). The two samples highlighted in red, *X*₁ and *X*₂, have been manually added for illustration purposes. Let’s look at these one by one. +The animation below should provide some more intuition as to what exactly is happening here. It illustrates the effect of the chosen coverage rate on the predicted softmax output and the set size in the two-dimensional feature space. Contours are overlayed with the moon data points (including test data). The two samples highlighted in red, *X*₁ and *X*₂, have been manually added for illustration purposes. Let’s look at these one by one. Firstly, note that *X*₁ (red cross) falls into a region of the domain that is characterized by high predictive uncertainty. It sits right at the bottom-right corner of our class-zero moon 🌜 (orange), a region that is almost entirely enveloped by our class-one moon 🌛 (green). For low coverage rates the prediction set for *X*₁ is empty: on the left-hand side this is indicated by the missing contour for the softmax probability; on the right-hand side we can observe that the corresponding set size is indeed zero. For high coverage rates the prediction set includes both *y* = 0 and *y* = 1, indicative of the fact that the conformal classifier is uncertain about the true label. @@ -133,11 +133,13 @@ anim = @animate for coverage in coverages plot(p1, p2, plot_title="(1-α)=$(round(coverage,digits=2))", size=(800,300)) end -gif(anim, fps=0.5) +gif(anim, joinpath(www_path,"classification.gif"), fps=1) ``` The effect of the coverage rate on the conformal prediction set. Softmax probabilities are shown on the left. The size of the prediction set is shown on the right. +![](www/classification.gif) + [1] In other places split conformal prediction is sometimes referred to as *inductive* conformal prediction. [2] Any thoughts/comments welcome! diff --git a/docs/src/classification.qmd b/docs/src/classification.qmd index 1b5264f..44e62cd 100644 --- a/docs/src/classification.qmd +++ b/docs/src/classification.qmd @@ -9,6 +9,7 @@ CurrentModule = ConformalPrediction using Pkg; Pkg.activate("docs") using Plots theme(:wong) +www_path = "docs/src/www" # output path for files don't get automatically saved in auto-generated path (e.g. GIFs) ``` @@ -135,7 +136,7 @@ function contourf_cp(mach::Machine, x1_range, x2_range; type=:set_size, kwargs.. end ``` -@fig-anim should provide some more intuition as to what exactly is happening here. It illustrates the effect of the chosen coverage rate on the predicted softmax output and the set size in the two-dimensional feature space. Contours are overlayed with the moon data points (including test data). The two samples highlighted in red, $X_1$ and $X_2$, have been manually added for illustration purposes. Let's look at these one by one. +The animation below should provide some more intuition as to what exactly is happening here. It illustrates the effect of the chosen coverage rate on the predicted softmax output and the set size in the two-dimensional feature space. Contours are overlayed with the moon data points (including test data). The two samples highlighted in red, $X_1$ and $X_2$, have been manually added for illustration purposes. Let's look at these one by one. Firstly, note that $X_1$ (red cross) falls into a region of the domain that is characterized by high predictive uncertainty. It sits right at the bottom-right corner of our class-zero moon 🌜 (orange), a region that is almost entirely enveloped by our class-one moon 🌛 (green). For low coverage rates the prediction set for $X_1$ is empty: on the left-hand side this is indicated by the missing contour for the softmax probability; on the right-hand side we can observe that the corresponding set size is indeed zero. For high coverage rates the prediction set includes both $y=0$ and $y=1$, indicative of the fact that the conformal classifier is uncertain about the true label. @@ -167,7 +168,6 @@ These two examples illustrate an interesting point: for regions characterised by #| output: true #| label: fig-anim #| fig-cap: "The effect of the coverage rate on the conformal prediction set. Softmax probabilities are shown on the left. The size of the prediction set is shown on the right." -#| code-fold: true # Setup coverages = range(0.75,1.0,length=5) @@ -190,5 +190,7 @@ anim = @animate for coverage in coverages plot(p1, p2, plot_title="(1-α)=$(round(coverage,digits=2))", size=(800,300)) end -gif(anim, fps=0.5) +gif(anim, joinpath(www_path,"classification.gif"), fps=1) ``` + +![](www/classification.gif) diff --git a/docs/src/index.md b/docs/src/index.md index 14be195..7d71acd 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -116,11 +116,11 @@ predict(mach, Xtest) ╭─────────────────────────────────────────────────────────╮ │ │ - │ (1) (1.9785806677967583, 3.555027766731997) │ - │ (2) (3.902150239475792, 5.4785973384110305) │ - │ (3) (0.5223306700743977, 2.0987777690096365) │ - │ (4) (2.3013653650067107, 3.8778124639419493) │ - │ (5) (2.380170088915079, 3.9566171878503176) │ + │ (1) (1.2801183281465092, 2.0024286641173816) │ + │ (2) (0.8012756658949756, 1.5235860018658482) │ + │ (3) (1.1850387604493555, 1.9073490964202282) │ + │ (4) (1.1185514282818692, 1.8408617642527418) │ + │ (5) (1.1651738766694149, 1.8874842126402875) │ │ │ │ │ ╰───────────────────────────────────────────── 5 items ───╯ diff --git a/docs/src/intro.md b/docs/src/intro.md index df47c05..d37b5cd 100644 --- a/docs/src/intro.md +++ b/docs/src/intro.md @@ -106,16 +106,16 @@ ytest = y[first(test,n)] predict(mach, Xtest) ``` - ╭───────────────────────────────────────────────────────────╮ - │ │ - │ (1) (-2.3533542827227794, 1.1215603803363177) │ - │ (2) (-5.386746248140736, -1.9118315850816388) │ - │ (3) (-4.084485418193179, -0.6095707551340814) │ - │ (4) (-2.5544886119708683, 0.9204260510882288) │ - │ (5) (-3.9127608429516876, -0.4378461798925908) │ - │ │ - │ │ - ╰─────────────────────────────────────────────── 5 items ───╯ + ╭──────────────────────────────────────────────────────────╮ + │ │ + │ (1) (-0.9864061984981062, 2.2503222170961554) │ + │ (2) (-0.7192196826151477, 2.5175087329791137) │ + │ (3) (-0.33838267507136344, 2.898345740522898) │ + │ (4) (-2.838413186252051, 0.39831522934221053) │ + │ (5) (-0.7192196826151477, 2.5175087329791137) │ + │ │ + │ │ + ╰────────────────────────────────────────────── 5 items ───╯ ## 🛠 Contribute diff --git a/docs/src/reference.commonmark.md b/docs/src/reference.commonmark.md deleted file mode 100644 index 2e23bdb..0000000 --- a/docs/src/reference.commonmark.md +++ /dev/null @@ -1,35 +0,0 @@ - -``` @meta -CurrentModule = ConformalPrediction -``` - -## Content - -``` @contents -Pages = ["reference.md"] -``` - -## Index - -``` @index -``` - -## Public Interface - -``` @autodocs -Modules = [ - ConformalPrediction, - ConformalPrediction.ConformalModels -] -Private = false -``` - -## Internal functions - -``` @autodocs -Modules = [ - ConformalPrediction, - ConformalPrediction.ConformalModels -] -Public = false -``` diff --git a/docs/src/regression.md b/docs/src/regression.md index 0bce4e7..5c7dc9a 100644 --- a/docs/src/regression.md +++ b/docs/src/regression.md @@ -79,3 +79,5 @@ end plot(plt_list..., size=(1600,1000)) ``` + +![Figure 1: Conformal prediction regions.](regression_files/figure-commonmark/fig-cp-output-1.svg) diff --git a/docs/src/regression.qmd b/docs/src/regression.qmd index 3525755..ebfd51f 100644 --- a/docs/src/regression.qmd +++ b/docs/src/regression.qmd @@ -75,6 +75,7 @@ end Finally, let us look at the resulting conformal predictions in each case. ```{julia} +#| output: true #| label: fig-cp #| fig-cap: "Conformal prediction regions." diff --git a/docs/src/regression_files/figure-commonmark/fig-cp-output-1.svg b/docs/src/regression_files/figure-commonmark/fig-cp-output-1.svg new file mode 100644 index 0000000..a1fba3e --- /dev/null +++ b/docs/src/regression_files/figure-commonmark/fig-cp-output-1.svg @@ -0,0 +1,4606 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/src/www/classification.gif b/docs/src/www/classification.gif new file mode 100644 index 0000000000000000000000000000000000000000..7f3cecd5f8b7d563b784a9a80197ff2c4fbc29a9 GIT binary patch literal 86650 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 literal 0 HcmV?d00001 From ce09ef77607a617ba9c216d5a2a98be1863d2d8c Mon Sep 17 00:00:00 2001 From: pat-alt Date: Thu, 1 Dec 2022 12:19:42 +0100 Subject: [PATCH 10/10] added plots to test suite. updated classification docs --- Project.toml | 1 + .../classification/execute-results/md.json | 6 +- .../figure-commonmark/cell-10-output-1.svg | 2671 +++++++++++++++++ .../figure-commonmark/cell-9-output-1.svg | 2671 +++++++++++++++++ docs/Manifest.toml | 303 +- docs/Project.toml | 1 + docs/src/classification.md | 34 +- docs/src/classification.qmd | 53 +- .../figure-commonmark/cell-10-output-1.svg | 2671 +++++++++++++++++ .../figure-commonmark/cell-9-output-1.svg | 2671 +++++++++++++++++ docs/src/regression.qmd | 6 +- docs/src/www/classification.gif | Bin 86650 -> 70331 bytes src/ConformalModels/ConformalModels.jl | 11 +- src/ConformalModels/inductive_bayes.jl | 122 +- .../inductive_classification.jl | 4 +- src/ConformalModels/plotting.jl | 69 +- .../transductive_classification.jl | 2 +- test/classification.jl | 2 +- 18 files changed, 11013 insertions(+), 285 deletions(-) create mode 100644 _freeze/docs/src/classification/figure-commonmark/cell-10-output-1.svg create mode 100644 _freeze/docs/src/classification/figure-commonmark/cell-9-output-1.svg create mode 100644 docs/src/classification_files/figure-commonmark/cell-10-output-1.svg create mode 100644 docs/src/classification_files/figure-commonmark/cell-9-output-1.svg diff --git a/Project.toml b/Project.toml index b2918fd..4b58b20 100644 --- a/Project.toml +++ b/Project.toml @@ -4,6 +4,7 @@ authors = ["Patrick Altmeyer"] version = "0.1.3" [deps] +CategoricalArrays = "324d7699-5711-5eae-9e2f-1d82baa6b597" MLJ = "add582a8-e3ab-11e8-2d5e-e98b27df1bc7" MLJBase = "a7f614a8-145f-11e9-1d2a-a57a1082229d" MLJModelInterface = "e80e1ace-859a-464e-9ed9-23947d8ae3ea" diff --git a/_freeze/docs/src/classification/execute-results/md.json b/_freeze/docs/src/classification/execute-results/md.json index fdbf421..2216aa0 100644 --- a/_freeze/docs/src/classification/execute-results/md.json +++ b/_freeze/docs/src/classification/execute-results/md.json @@ -1,9 +1,9 @@ { - "hash": "e40d23cf63b8c8ee30ed14854d0a0db5", + "hash": "a9026c438717b315a2ac33b3ad7cabcd", "result": { - "markdown": "# Classification \n\n```@meta\nCurrentModule = ConformalPrediction\n```\n\n\n\nThis tutorial is based in parts on this [blog post](https://www.paltmeyer.com/blog/posts/conformal-prediction/).\n\n### Split Conformal Classification {#sec-scp}\n\nWe consider a simple binary classification problem. Let $(X_i, Y_i), \\ i=1,...,n$ denote our feature-label pairs and let $\\mu: \\mathcal{X} \\mapsto \\mathcal{Y}$ denote the mapping from features to labels. For illustration purposes we will use the moons dataset 🌙. Using [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) we first generate the data and split into into a training and test set:\n\n::: {.cell execution_count=2}\n``` {.julia .cell-code}\nusing MLJ\nusing Random\nRandom.seed!(123)\n\n# Data:\nX, y = make_moons(500; noise=0.15)\ntrain, test = partition(eachindex(y), 0.8, shuffle=true)\n```\n:::\n\n\nHere we will use a specific case of CP called *split conformal prediction* which can then be summarized as follows:^[In other places split conformal prediction is sometimes referred to as *inductive* conformal prediction.]\n\n1. Partition the training into a proper training set and a separate calibration set: $\\mathcal{D}_n=\\mathcal{D}^{\\text{train}} \\cup \\mathcal{D}^{\\text{cali}}$.\n2. Train the machine learning model on the proper training set: $\\hat\\mu_{i \\in \\mathcal{D}^{\\text{train}}}(X_i,Y_i)$.\n3. Compute nonconformity scores, $\\mathcal{S}$, using the calibration data $\\mathcal{D}^{\\text{cali}}$ and the fitted model $\\hat\\mu_{i \\in \\mathcal{D}^{\\text{train}}}$. \n4. For a user-specified desired coverage ratio $(1-\\alpha)$ compute the corresponding quantile, $\\hat{q}$, of the empirical distribution of nonconformity scores, $\\mathcal{S}$.\n5. For the given quantile and test sample $X_{\\text{test}}$, form the corresponding conformal prediction set: \n\n$$\nC(X_{\\text{test}})=\\{y:s(X_{\\text{test}},y) \\le \\hat{q}\\}\n$$ {#eq-set}\n\nThis is the default procedure used for classification and regression in [`ConformalPrediction.jl`](https://github.com/pat-alt/ConformalPrediction.jl). \n\nNow let's take this to our 🌙 data. To illustrate the package functionality we will demonstrate the envisioned workflow. We first define our atomic machine learning model following standard [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) conventions. Using [`ConformalPrediction.jl`](https://github.com/pat-alt/ConformalPrediction.jl) we then wrap our atomic model in a conformal model using the standard API call `conformal_model(model::Supervised; kwargs...)`. To train and predict from our conformal model we can then rely on the conventional [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) procedure again. In particular, we wrap our conformal model in data (turning it into a machine) and then fit it on the training set. Finally, we use our machine to predict the label for a new test sample `Xtest`:\n\n::: {.cell execution_count=3}\n``` {.julia .cell-code}\n# Model:\nKNNClassifier = @load KNNClassifier pkg=NearestNeighborModels\nmodel = KNNClassifier(;K=50) \n\n# Training:\nusing ConformalPrediction\nconf_model = conformal_model(model; coverage=.9)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n\n# Conformal Prediction:\nXtest = selectrows(X, first(test))\nytest = y[first(test)]\npredict(mach, Xtest)[1]\n```\n\n::: {.cell-output .cell-output-stdout}\n```\nimport NearestNeighborModels ✔\n```\n:::\n\n::: {.cell-output .cell-output-display execution_count=17}\n```\n UnivariateFinite{Multiclass{2}} \n ┌ ┐ \n 0 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.94 \n └ ┘ \n```\n:::\n:::\n\n\nThe final predictions are set-valued. While the softmax output remains unchanged for the `SimpleInductiveClassifier`, the size of the prediction set depends on the chosen coverage rate, $(1-\\alpha)$. \n\n::: {.cell execution_count=4}\n\n::: {.cell-output .cell-output-display execution_count=18}\nWhen specifying a coverage rate very close to one, the prediction set will typically include many (in some cases all) of the possible labels. Below, for example, both classes are included in the prediction set when setting the coverage rate equal to $(1-\\alpha)$=1.0. This is intuitive, since high coverage quite literally requires that the true label is covered by the prediction set with high probability.\n\n:::\n:::\n\n\n::: {.cell execution_count=5}\n``` {.julia .cell-code}\nconf_model = conformal_model(model; coverage=coverage)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n\n# Conformal Prediction:\nXtest = (x1=[1],x2=[0])\npredict(mach, Xtest)[1]\n```\n\n::: {.cell-output .cell-output-display execution_count=19}\n```\n UnivariateFinite{Multiclass{2}} \n ┌ ┐ \n 0 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.5 \n 1 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.5 \n └ ┘ \n```\n:::\n:::\n\n\n::: {.cell execution_count=6}\n\n::: {.cell-output .cell-output-display execution_count=20}\nConversely, for low coverage rates, prediction sets can also be empty. For a choice of $(1-\\alpha)$=0.1, for example, the prediction set for our test sample is empty. This is a bit difficult to think about intuitively and I have not yet come across a satisfactory, intuitive interpretation.^[Any thoughts/comments welcome!] When the prediction set is empty, the `predict` call currently returns `missing`:\n\n:::\n:::\n\n\n::: {.cell execution_count=7}\n``` {.julia .cell-code}\nconf_model = conformal_model(model; coverage=coverage)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n\n# Conformal Prediction:\npredict(mach, Xtest)[1]\n```\n\n::: {.cell-output .cell-output-display execution_count=21}\n```\nmissing\n```\n:::\n:::\n\n\n\n\nThe animation below should provide some more intuition as to what exactly is happening here. It illustrates the effect of the chosen coverage rate on the predicted softmax output and the set size in the two-dimensional feature space. Contours are overlayed with the moon data points (including test data). The two samples highlighted in red, $X_1$ and $X_2$, have been manually added for illustration purposes. Let's look at these one by one.\n\nFirstly, note that $X_1$ (red cross) falls into a region of the domain that is characterized by high predictive uncertainty. It sits right at the bottom-right corner of our class-zero moon 🌜 (orange), a region that is almost entirely enveloped by our class-one moon 🌛 (green). For low coverage rates the prediction set for $X_1$ is empty: on the left-hand side this is indicated by the missing contour for the softmax probability; on the right-hand side we can observe that the corresponding set size is indeed zero. For high coverage rates the prediction set includes both $y=0$ and $y=1$, indicative of the fact that the conformal classifier is uncertain about the true label.\n\nWith respect to $X_2$, we observe that while also sitting on the fringe of our class-zero moon, this sample populates a region that is not fully enveloped by data points from the opposite class. In this region, the underlying atomic classifier can be expected to be more certain about its predictions, but still not highly confident. How is this reflected by our corresponding conformal prediction sets? \n\n::: {.cell execution_count=9}\n``` {.julia .cell-code code-fold=\"true\"}\nXtest_2 = (x1=[-0.5],x2=[0.25])\ncov_ = .9\nconf_model = conformal_model(model; coverage=cov_)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\np̂_2 = pdf(predict(mach, Xtest_2)[1], 0)\n```\n:::\n\n\n::: {.cell execution_count=10}\n\n::: {.cell-output .cell-output-display execution_count=24}\nWell, for low coverage rates (roughly $<0.9$) the conformal prediction set does not include $y=0$: the set size is zero (right panel). Only for higher coverage rates do we have $C(X_2)=\\{0\\}$: the coverage rate is high enough to include $y=0$, but the corresponding softmax probability is still fairly low. For example, for $(1-\\alpha)=0.9$ we have $\\hat{p}(y=0|X_2)=0.72.$\n\n:::\n:::\n\n\nThese two examples illustrate an interesting point: for regions characterised by high predictive uncertainty, conformal prediction sets are typically empty (for low coverage) or large (for high coverage). While set-valued predictions may be something to get used to, this notion is overall intuitive. \n\n::: {.cell execution_count=11}\n``` {.julia .cell-code}\n# Setup\ncoverages = range(0.75,1.0,length=5)\nn = 100\nx1_range = range(extrema(X.x1)...,length=n)\nx2_range = range(extrema(X.x2)...,length=n)\n\nanim = @animate for coverage in coverages\n conf_model = conformal_model(model; coverage=coverage)\n mach = machine(conf_model, X, y)\n fit!(mach, rows=train)\n p1 = contourf_cp(mach, x1_range, x2_range; type=:proba, title=\"Softmax\", axis=nothing)\n scatter!(p1, X.x1, X.x2, group=y, ms=2, msw=0, alpha=0.75)\n scatter!(p1, Xtest.x1, Xtest.x2, ms=6, c=:red, label=\"X₁\", shape=:cross, msw=6)\n scatter!(p1, Xtest_2.x1, Xtest_2.x2, ms=6, c=:red, label=\"X₂\", shape=:diamond, msw=6)\n p2 = contourf_cp(mach, x1_range, x2_range; type=:set_size, title=\"Set size\", axis=nothing)\n scatter!(p2, X.x1, X.x2, group=y, ms=2, msw=0, alpha=0.75)\n scatter!(p2, Xtest.x1, Xtest.x2, ms=6, c=:red, label=\"X₁\", shape=:cross, msw=6)\n scatter!(p2, Xtest_2.x1, Xtest_2.x2, ms=6, c=:red, label=\"X₂\", shape=:diamond, msw=6)\n plot(p1, p2, plot_title=\"(1-α)=$(round(coverage,digits=2))\", size=(800,300))\nend\n\ngif(anim, joinpath(www_path,\"classification.gif\"), fps=1)\n```\n\n::: {#fig-anim .cell-output .cell-output-display execution_count=25}\n```{=html}\n\n```\n\nThe effect of the coverage rate on the conformal prediction set. Softmax probabilities are shown on the left. The size of the prediction set is shown on the right.\n:::\n:::\n\n\n![](www/classification.gif)\n\n", + "markdown": "# Classification \n\n```@meta\nCurrentModule = ConformalPrediction\n```\n\n\n\nThis tutorial is based in parts on this [blog post](https://www.paltmeyer.com/blog/posts/conformal-prediction/).\n\n### Split Conformal Classification {#sec-scp}\n\nWe consider a simple binary classification problem. Let $(X_i, Y_i), \\ i=1,...,n$ denote our feature-label pairs and let $\\mu: \\mathcal{X} \\mapsto \\mathcal{Y}$ denote the mapping from features to labels. For illustration purposes we will use the moons dataset 🌙. Using [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) we first generate the data and split into into a training and test set:\n\n::: {.cell execution_count=2}\n``` {.julia .cell-code}\nusing MLJ\nusing Random\nRandom.seed!(123)\n\n# Data:\nX, y = make_moons(500; noise=0.15)\ntrain, test = partition(eachindex(y), 0.8, shuffle=true)\n```\n:::\n\n\nHere we will use a specific case of CP called *split conformal prediction* which can then be summarized as follows:^[In other places split conformal prediction is sometimes referred to as *inductive* conformal prediction.]\n\n1. Partition the training into a proper training set and a separate calibration set: $\\mathcal{D}_n=\\mathcal{D}^{\\text{train}} \\cup \\mathcal{D}^{\\text{cali}}$.\n2. Train the machine learning model on the proper training set: $\\hat\\mu_{i \\in \\mathcal{D}^{\\text{train}}}(X_i,Y_i)$.\n3. Compute nonconformity scores, $\\mathcal{S}$, using the calibration data $\\mathcal{D}^{\\text{cali}}$ and the fitted model $\\hat\\mu_{i \\in \\mathcal{D}^{\\text{train}}}$. \n4. For a user-specified desired coverage ratio $(1-\\alpha)$ compute the corresponding quantile, $\\hat{q}$, of the empirical distribution of nonconformity scores, $\\mathcal{S}$.\n5. For the given quantile and test sample $X_{\\text{test}}$, form the corresponding conformal prediction set: \n\n$$\nC(X_{\\text{test}})=\\{y:s(X_{\\text{test}},y) \\le \\hat{q}\\}\n$$ {#eq-set}\n\nThis is the default procedure used for classification and regression in [`ConformalPrediction.jl`](https://github.com/pat-alt/ConformalPrediction.jl). \n\nNow let's take this to our 🌙 data. To illustrate the package functionality we will demonstrate the envisioned workflow. We first define our atomic machine learning model following standard [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) conventions. Using [`ConformalPrediction.jl`](https://github.com/pat-alt/ConformalPrediction.jl) we then wrap our atomic model in a conformal model using the standard API call `conformal_model(model::Supervised; kwargs...)`. To train and predict from our conformal model we can then rely on the conventional [`MLJ.jl`](https://alan-turing-institute.github.io/MLJ.jl/v0.18/) procedure again. In particular, we wrap our conformal model in data (turning it into a machine) and then fit it on the training set. Finally, we use our machine to predict the label for a new test sample `Xtest`:\n\n::: {.cell execution_count=3}\n``` {.julia .cell-code}\n# Model:\nKNNClassifier = @load KNNClassifier pkg=NearestNeighborModels\nmodel = KNNClassifier(;K=50) \n\n# Training:\nusing ConformalPrediction\nconf_model = conformal_model(model; coverage=.9)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n\n# Conformal Prediction:\nXtest = selectrows(X, first(test))\nytest = y[first(test)]\npredict(mach, Xtest)[1]\n```\n\n::: {.cell-output .cell-output-stdout}\n```\nimport NearestNeighborModels ✔\n```\n:::\n\n::: {.cell-output .cell-output-stdout}\n```\n\n```\n:::\n\n::: {.cell-output .cell-output-display execution_count=4}\n```\n UnivariateFinite{Multiclass{2}} \n ┌ ┐ \n 0 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.94 \n └ ┘ \n```\n:::\n:::\n\n\nThe final predictions are set-valued. While the softmax output remains unchanged for the `SimpleInductiveClassifier`, the size of the prediction set depends on the chosen coverage rate, $(1-\\alpha)$. \n\n::: {.cell execution_count=4}\n\n::: {.cell-output .cell-output-display execution_count=5}\nWhen specifying a coverage rate very close to one, the prediction set will typically include many (in some cases all) of the possible labels. Below, for example, both classes are included in the prediction set when setting the coverage rate equal to $(1-\\alpha)$=1.0. This is intuitive, since high coverage quite literally requires that the true label is covered by the prediction set with high probability.\n\n:::\n:::\n\n\n::: {.cell execution_count=5}\n``` {.julia .cell-code}\nconf_model = conformal_model(model; coverage=coverage)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n\n# Conformal Prediction:\nXtest = (x1=[1],x2=[0])\npredict(mach, Xtest)[1]\n```\n\n::: {.cell-output .cell-output-display execution_count=6}\n```\n UnivariateFinite{Multiclass{2}} \n ┌ ┐ \n 0 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.5 \n 1 ┤■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.5 \n └ ┘ \n```\n:::\n:::\n\n\n::: {.cell execution_count=6}\n\n::: {.cell-output .cell-output-display execution_count=7}\nConversely, for low coverage rates, prediction sets can also be empty. For a choice of $(1-\\alpha)$=0.1, for example, the prediction set for our test sample is empty. This is a bit difficult to think about intuitively and I have not yet come across a satisfactory, intuitive interpretation.^[Any thoughts/comments welcome!] When the prediction set is empty, the `predict` call currently returns `missing`:\n\n:::\n:::\n\n\n::: {.cell execution_count=7}\n``` {.julia .cell-code}\nconf_model = conformal_model(model; coverage=coverage)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\n\n# Conformal Prediction:\npredict(mach, Xtest)[1]\n```\n\n::: {.cell-output .cell-output-display execution_count=8}\n```\nmissing\n```\n:::\n:::\n\n\n::: {.cell execution_count=8}\n``` {.julia .cell-code}\ncov_ = .9\nconf_model = conformal_model(model; coverage=cov_)\nmach = machine(conf_model, X, y)\nfit!(mach, rows=train)\nMarkdown.parse(\"\"\"\nThe following chart shows the resulting predicted probabilities for ``y=1`` (left) and set size (right) for a choice of ``(1-\\\\alpha)``=$cov_.\n\"\"\")\n```\n\n::: {.cell-output .cell-output-display execution_count=9}\nThe following chart shows the resulting predicted probabilities for $y=1$ (left) and set size (right) for a choice of $(1-\\alpha)$=0.9.\n\n:::\n:::\n\n\n::: {.cell execution_count=9}\n``` {.julia .cell-code}\nusing Plots\np_proba = plot(mach.model, mach.fitresult, X, y)\np_set_size = plot(mach.model, mach.fitresult, X, y; plot_set_size=true)\nplot(p_proba, p_set_size, size=(800,250))\n```\n\n::: {.cell-output .cell-output-display execution_count=10}\n![](classification_files/figure-commonmark/cell-10-output-1.svg){}\n:::\n:::\n\n\nThe animation below should provide some more intuition as to what exactly is happening here. It illustrates the effect of the chosen coverage rate on the predicted softmax output and the set size in the two-dimensional feature space. Contours are overlayed with the moon data points (including test data). The two samples highlighted in red, $X_1$ and $X_2$, have been manually added for illustration purposes. Let's look at these one by one.\n\nFirstly, note that $X_1$ (red cross) falls into a region of the domain that is characterized by high predictive uncertainty. It sits right at the bottom-right corner of our class-zero moon 🌜 (orange), a region that is almost entirely enveloped by our class-one moon 🌛 (green). For low coverage rates the prediction set for $X_1$ is empty: on the left-hand side this is indicated by the missing contour for the softmax probability; on the right-hand side we can observe that the corresponding set size is indeed zero. For high coverage rates the prediction set includes both $y=0$ and $y=1$, indicative of the fact that the conformal classifier is uncertain about the true label.\n\nWith respect to $X_2$, we observe that while also sitting on the fringe of our class-zero moon, this sample populates a region that is not fully enveloped by data points from the opposite class. In this region, the underlying atomic classifier can be expected to be more certain about its predictions, but still not highly confident. How is this reflected by our corresponding conformal prediction sets? \n\n::: {.cell execution_count=10}\n``` {.julia .cell-code code-fold=\"true\"}\nXtest_2 = (x1=[-0.5],x2=[0.25])\np̂_2 = pdf(predict(mach, Xtest_2)[1], 0)\n```\n:::\n\n\n::: {.cell execution_count=11}\n\n::: {.cell-output .cell-output-display execution_count=12}\nWell, for low coverage rates (roughly $<0.9$) the conformal prediction set does not include $y=0$: the set size is zero (right panel). Only for higher coverage rates do we have $C(X_2)=\\{0\\}$: the coverage rate is high enough to include $y=0$, but the corresponding softmax probability is still fairly low. For example, for $(1-\\alpha)=0.9$ we have $\\hat{p}(y=0|X_2)=0.72.$\n\n:::\n:::\n\n\nThese two examples illustrate an interesting point: for regions characterized by high predictive uncertainty, conformal prediction sets are typically empty (for low coverage) or large (for high coverage). While set-valued predictions may be something to get used to, this notion is overall intuitive. \n\n::: {.cell execution_count=12}\n``` {.julia .cell-code}\n# Setup\ncoverages = range(0.75,1.0,length=5)\nn = 100\nx1_range = range(extrema(X.x1)...,length=n)\nx2_range = range(extrema(X.x2)...,length=n)\n\nanim = @animate for coverage in coverages\n conf_model = conformal_model(model; coverage=coverage)\n mach = machine(conf_model, X, y)\n fit!(mach, rows=train)\n # Probabilities:\n p1 = plot(mach.model, mach.fitresult, X, y)\n scatter!(p1, Xtest.x1, Xtest.x2, ms=6, c=:red, label=\"X₁\", shape=:cross, msw=6)\n scatter!(p1, Xtest_2.x1, Xtest_2.x2, ms=6, c=:red, label=\"X₂\", shape=:diamond, msw=6)\n p2 = plot(mach.model, mach.fitresult, X, y; plot_set_size=true)\n scatter!(p2, Xtest.x1, Xtest.x2, ms=6, c=:red, label=\"X₁\", shape=:cross, msw=6)\n scatter!(p2, Xtest_2.x1, Xtest_2.x2, ms=6, c=:red, label=\"X₂\", shape=:diamond, msw=6)\n plot(p1, p2, plot_title=\"(1-α)=$(round(coverage,digits=2))\", size=(800,300))\nend\n\ngif(anim, joinpath(www_path,\"classification.gif\"), fps=1)\n```\n\n::: {#fig-anim .cell-output .cell-output-display execution_count=13}\n```{=html}\n\n```\n\nThe effect of the coverage rate on the conformal prediction set. Softmax probabilities are shown on the left. The size of the prediction set is shown on the right.\n:::\n:::\n\n\n![](www/classification.gif)\n\n", "supporting": [ - "classification_files" + "classification_files/figure-commonmark" ], "filters": [] } diff --git a/_freeze/docs/src/classification/figure-commonmark/cell-10-output-1.svg b/_freeze/docs/src/classification/figure-commonmark/cell-10-output-1.svg new file mode 100644 index 0000000..de81765 --- /dev/null +++ b/_freeze/docs/src/classification/figure-commonmark/cell-10-output-1.svg @@ -0,0 +1,2671 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_freeze/docs/src/classification/figure-commonmark/cell-9-output-1.svg b/_freeze/docs/src/classification/figure-commonmark/cell-9-output-1.svg new file mode 100644 index 0000000..8791f3f --- /dev/null +++ b/_freeze/docs/src/classification/figure-commonmark/cell-9-output-1.svg @@ -0,0 +1,2671 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/Manifest.toml b/docs/Manifest.toml index 29b884a..ac17c5a 100644 --- a/docs/Manifest.toml +++ b/docs/Manifest.toml @@ -2,7 +2,7 @@ julia_version = "1.8.1" manifest_format = "2.0" -project_hash = "28fe83b4a7735a52aeb539eca5a8329b34ea0fc4" +project_hash = "3d726f20636a3ccda39ed827011f908499c4d97d" [[deps.ANSIColoredPrinters]] git-tree-sha1 = "574baf8110975760d391c710b6341da1afa48d8c" @@ -49,27 +49,27 @@ version = "1.1.1" [[deps.ArrayInterface]] deps = ["ArrayInterfaceCore", "Compat", "IfElse", "LinearAlgebra", "Static"] -git-tree-sha1 = "d6173480145eb632d6571c148d94b9d3d773820e" +git-tree-sha1 = "6d0918cb9c0d3db7fe56bea2bc8638fc4014ac35" uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" -version = "6.0.23" +version = "6.0.24" [[deps.ArrayInterfaceCore]] deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] -git-tree-sha1 = "e6cba4aadba7e8a7574ab2ba2fcfb307b4c4b02a" +git-tree-sha1 = "c46fb7dd1d8ca1d213ba25848a5ec4e47a1a1b08" uuid = "30b0a656-2188-435a-8636-2ec0e6a096e2" -version = "0.1.23" +version = "0.1.26" [[deps.ArrayInterfaceOffsetArrays]] deps = ["ArrayInterface", "OffsetArrays", "Static"] -git-tree-sha1 = "c49f6bad95a30defff7c637731f00934c7289c50" +git-tree-sha1 = "3d1a9a01976971063b3930d1aed1d9c4af0817f8" uuid = "015c0d05-e682-4f19-8f0a-679ce4c54826" -version = "0.1.6" +version = "0.1.7" [[deps.ArrayInterfaceStaticArrays]] -deps = ["Adapt", "ArrayInterface", "ArrayInterfaceStaticArraysCore", "LinearAlgebra", "Static", "StaticArrays"] -git-tree-sha1 = "efb000a9f643f018d5154e56814e338b5746c560" +deps = ["Adapt", "ArrayInterface", "ArrayInterfaceCore", "ArrayInterfaceStaticArraysCore", "LinearAlgebra", "Static", "StaticArrays"] +git-tree-sha1 = "f12dc65aef03d0a49650b20b2fdaf184928fd886" uuid = "b0d46f97-bff5-4637-a19a-dd75974142cd" -version = "0.1.4" +version = "0.1.5" [[deps.ArrayInterfaceStaticArraysCore]] deps = ["Adapt", "ArrayInterfaceCore", "LinearAlgebra", "StaticArraysCore"] @@ -93,9 +93,9 @@ uuid = "ab4f0b2a-ad5b-11e8-123f-65d77653426b" version = "0.2.0" [[deps.BSON]] -git-tree-sha1 = "306bb5574b0c1c56d7e1207581516c557d105cad" +git-tree-sha1 = "86e9781ac28f4e80e9b98f7f96eae21891332ac2" uuid = "fbb218c0-5317-5bc6-957e-2ee96dd4b1f0" -version = "0.3.5" +version = "0.3.6" [[deps.BangBang]] deps = ["Compat", "ConstructionBase", "Future", "InitialValues", "LinearAlgebra", "Requires", "Setfield", "Tables", "ZygoteRules"] @@ -112,15 +112,15 @@ uuid = "9718e550-a3fa-408a-8086-8db961cd8217" version = "0.1.1" [[deps.BitFlags]] -git-tree-sha1 = "84259bb6172806304b9101094a7cc4bc6f56dbc6" +git-tree-sha1 = "43b1a4a8f797c1cddadf60499a8a077d4af2cd2d" uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" -version = "0.1.5" +version = "0.1.7" [[deps.BitTwiddlingConvenienceFunctions]] deps = ["Static"] -git-tree-sha1 = "eaee37f76339077f86679787a71990c4e465477f" +git-tree-sha1 = "0c5f81f47bbbcf4aea7b2959135713459170798b" uuid = "62783981-4cbd-42fc-bca8-16325de8dc4b" -version = "0.1.4" +version = "0.1.5" [[deps.Bzip2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -135,9 +135,9 @@ version = "0.4.2" [[deps.CPUSummary]] deps = ["CpuId", "IfElse", "Static"] -git-tree-sha1 = "9bdd5aceea9fa109073ace6b430a24839d79315e" +git-tree-sha1 = "a7157ab6bcda173f533db4c93fc8a27a48843757" uuid = "2a0fbf3d-bb9c-48f3-b0a9-814d99fd7ab9" -version = "0.1.27" +version = "0.1.30" [[deps.CUDA]] deps = ["AbstractFFTs", "Adapt", "BFloat16s", "CEnum", "CompilerSupportLibraries_jll", "ExprTools", "GPUArrays", "GPUCompiler", "LLVM", "LazyArtifacts", "Libdl", "LinearAlgebra", "Logging", "Printf", "Random", "Random123", "RandomNumbers", "Reexport", "Requires", "SparseArrays", "SpecialFunctions", "TimerOutputs"] @@ -189,9 +189,9 @@ version = "0.1.4" [[deps.CloseOpenIntervals]] deps = ["ArrayInterface", "Static"] -git-tree-sha1 = "5522c338564580adf5d58d91e43a55db0fa5fb39" +git-tree-sha1 = "d61300b9895f129f4bd684b2aff97cf319b6c493" uuid = "fb6a15b2-703c-40df-9091-08a04967cfa9" -version = "0.1.10" +version = "0.1.11" [[deps.CodecZlib]] deps = ["TranscodingStreams", "Zlib_jll"] @@ -200,10 +200,10 @@ uuid = "944b1d66-785c-5afd-91f1-9de20f533193" version = "0.7.0" [[deps.ColorSchemes]] -deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "Random"] -git-tree-sha1 = "1fd869cc3875b57347f7027521f561cf46d1fcd8" +deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "Random", "SnoopPrecompile"] +git-tree-sha1 = "aa3edc8f8dea6cbfa176ee12f7c2fc82f0608ed3" uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" -version = "3.19.0" +version = "3.20.0" [[deps.ColorTypes]] deps = ["FixedPointNumbers", "Random"] @@ -236,9 +236,9 @@ version = "0.3.0" [[deps.Compat]] deps = ["Dates", "LinearAlgebra", "UUIDs"] -git-tree-sha1 = "3ca828fe1b75fa84b021a7860bd039eaea84d2f2" +git-tree-sha1 = "00a2cccc7f098ff3b66806862d275ca3db9e6e5a" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "4.3.0" +version = "4.5.0" [[deps.CompilerSupportLibraries_jll]] deps = ["Artifacts", "Libdl"] @@ -256,7 +256,7 @@ uuid = "ed09eef8-17a6-5b46-8889-db040fac31e3" version = "0.3.2" [[deps.ConformalPrediction]] -deps = ["MLJ", "MLJBase", "MLJModelInterface", "Plots", "Statistics"] +deps = ["CategoricalArrays", "MLJ", "MLJBase", "MLJModelInterface", "Plots", "Statistics"] path = ".." uuid = "98bfc277-1877-43dc-819b-a3e38c30242f" version = "0.1.3" @@ -290,15 +290,15 @@ uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" version = "4.1.1" [[deps.DataAPI]] -git-tree-sha1 = "46d2680e618f8abd007bce0c3026cb0c4a8f2032" +git-tree-sha1 = "e08915633fcb3ea83bf9d6126292e5bc5c739922" uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" -version = "1.12.0" +version = "1.13.0" [[deps.DataFrames]] deps = ["Compat", "DataAPI", "Future", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrettyTables", "Printf", "REPL", "Random", "Reexport", "SnoopPrecompile", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] -git-tree-sha1 = "558078b0b78278683a7445c626ee78c86b9bb000" +git-tree-sha1 = "0f44494fe4271cc966ac4fea524111bef63ba86c" uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" -version = "1.4.1" +version = "1.4.3" [[deps.DataStructures]] deps = ["Compat", "InteractiveUtils", "OrderedCollections"] @@ -317,9 +317,9 @@ uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" [[deps.DecisionTree]] deps = ["AbstractTrees", "DelimitedFiles", "LinearAlgebra", "Random", "ScikitLearnBase", "Statistics"] -git-tree-sha1 = "fb3f7ff27befb9877bee84076dd9173185d7d86a" +git-tree-sha1 = "5ab40e9f5a554a642bc5ab1d20a198f76a1e6958" uuid = "7806a523-6efd-50cb-b5f6-3fa6f1930dbb" -version = "0.11.2" +version = "0.12.0" [[deps.DefineSingletons]] git-tree-sha1 = "0fba8b706d0178b4dc7fd44a96a92382c9065c2c" @@ -344,9 +344,9 @@ version = "1.1.0" [[deps.DiffRules]] deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] -git-tree-sha1 = "8b7a4d23e22f5d44883671da70865ca98f2ebf9d" +git-tree-sha1 = "c5b6685d53f933c11404a3ae9822afe30d522494" uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" -version = "1.12.0" +version = "1.12.2" [[deps.Distances]] deps = ["LinearAlgebra", "SparseArrays", "Statistics", "StatsAPI"] @@ -401,9 +401,9 @@ version = "0.3.0" [[deps.EvoTrees]] deps = ["BSON", "CUDA", "CategoricalArrays", "Distributions", "LoopVectorization", "MLJModelInterface", "NetworkLayout", "Random", "RecipesBase", "Statistics", "StatsBase", "Tables"] -git-tree-sha1 = "966e236ded10551a44b6e25ce4bbea4c12be1557" +git-tree-sha1 = "7509d36427e6fd08aa7e591d783713263fdac57e" uuid = "f6006082-12f8-11e9-0c9c-0d5d367ab1e5" -version = "0.12.4" +version = "0.14.2" [[deps.Expat_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -474,9 +474,9 @@ version = "0.13.5" [[deps.FiniteDiff]] deps = ["ArrayInterfaceCore", "LinearAlgebra", "Requires", "Setfield", "SparseArrays", "StaticArrays"] -git-tree-sha1 = "5a2cff9b6b77b33b89f3d97a4d367747adce647e" +git-tree-sha1 = "04ed1f0029b6b3af88343e439b995141cb0d0b8d" uuid = "6a86dc24-6348-571c-b903-95158fe2bd41" -version = "2.15.0" +version = "2.17.0" [[deps.FixedPointNumbers]] deps = ["Statistics"] @@ -485,10 +485,10 @@ uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" version = "0.8.4" [[deps.Flux]] -deps = ["Adapt", "ArrayInterface", "CUDA", "ChainRulesCore", "Functors", "LinearAlgebra", "MLUtils", "MacroTools", "NNlib", "NNlibCUDA", "Optimisers", "ProgressLogging", "Random", "Reexport", "SparseArrays", "SpecialFunctions", "Statistics", "StatsBase", "Test", "Zygote"] -git-tree-sha1 = "96dc065bf4a998e8adeebc0ff1302902b6e59362" +deps = ["Adapt", "CUDA", "ChainRulesCore", "Functors", "LinearAlgebra", "MLUtils", "MacroTools", "NNlib", "NNlibCUDA", "OneHotArrays", "Optimisers", "ProgressLogging", "Random", "Reexport", "SparseArrays", "SpecialFunctions", "Statistics", "StatsBase", "Zygote"] +git-tree-sha1 = "2b85cb85f5d71f05e41089a2446ac33b8e94ebed" uuid = "587475ba-b771-5e3f-ad9e-33799f191a9c" -version = "0.13.4" +version = "0.13.9" [[deps.FoldsThreads]] deps = ["Accessors", "FunctionWrappers", "InitialValues", "SplittablesBase", "Transducers"] @@ -510,9 +510,9 @@ version = "0.4.2" [[deps.ForwardDiff]] deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions", "StaticArrays"] -git-tree-sha1 = "187198a4ed8ccd7b5d99c41b69c679269ea2b2d4" +git-tree-sha1 = "10fa12fe96e4d76acfa738f4df2126589a67374f" uuid = "f6369f11-7733-5829-9624-2563aa707210" -version = "0.10.32" +version = "0.10.33" [[deps.FreeType]] deps = ["CEnum", "FreeType2_jll"] @@ -538,9 +538,10 @@ uuid = "069b7b12-0de2-55c6-9aab-29f3d0a68a2e" version = "1.1.3" [[deps.Functors]] -git-tree-sha1 = "223fffa49ca0ff9ce4f875be001ffe173b2b7de4" +deps = ["LinearAlgebra"] +git-tree-sha1 = "993c2b4a9a54496b6d8e265db1244db418f37e01" uuid = "d9f16b24-f501-4c13-a1f2-28368ffc5196" -version = "0.2.8" +version = "0.4.1" [[deps.Future]] deps = ["Random"] @@ -566,21 +567,21 @@ version = "0.1.2" [[deps.GPUCompiler]] deps = ["ExprTools", "InteractiveUtils", "LLVM", "Libdl", "Logging", "TimerOutputs", "UUIDs"] -git-tree-sha1 = "323949b0bbdf38c93d2ea1f7d3e68ff163c3f081" +git-tree-sha1 = "76f70a337a153c1632104af19d29023dbb6f30dd" uuid = "61eb1bfa-7361-4325-ad38-22787b887f55" -version = "0.16.5" +version = "0.16.6" [[deps.GR]] -deps = ["Base64", "DelimitedFiles", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Pkg", "Preferences", "Printf", "Random", "Serialization", "Sockets", "Test", "UUIDs"] -git-tree-sha1 = "00a9d4abadc05b9476e937a5557fcce476b9e547" +deps = ["Artifacts", "Base64", "DelimitedFiles", "Downloads", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Pkg", "Preferences", "Printf", "Random", "Serialization", "Sockets", "TOML", "Tar", "Test", "UUIDs", "p7zip_jll"] +git-tree-sha1 = "051072ff2accc6e0e87b708ddee39b18aa04a0bc" uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" -version = "0.69.5" +version = "0.71.1" [[deps.GR_jll]] deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Pkg", "Qt5Base_jll", "Zlib_jll", "libpng_jll"] -git-tree-sha1 = "bc9f7725571ddb4ab2c4bc74fa397c1c5ad08943" +git-tree-sha1 = "501a4bf76fd679e7fcd678725d5072177392e756" uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" -version = "0.69.1+0" +version = "0.71.1+0" [[deps.GeoInterface]] deps = ["Extents"] @@ -590,9 +591,9 @@ version = "1.0.1" [[deps.GeometryBasics]] deps = ["EarCut_jll", "GeoInterface", "IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"] -git-tree-sha1 = "12a584db96f1d460421d5fb8860822971cdb8455" +git-tree-sha1 = "fe9aea4ed3ec6afdfbeb5a4f39a2208909b162a6" uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" -version = "0.4.4" +version = "0.4.5" [[deps.Gettext_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] @@ -631,9 +632,9 @@ version = "1.12.2+2" [[deps.HTTP]] deps = ["Base64", "CodecZlib", "Dates", "IniFile", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] -git-tree-sha1 = "a97d47758e933cd5fe5ea181d178936a9fc60427" +git-tree-sha1 = "e1acc37ed078d99a714ed8376446f92a5535ca65" uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" -version = "1.5.1" +version = "1.5.5" [[deps.HarfBuzz_jll]] deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"] @@ -643,9 +644,9 @@ version = "2.8.1+1" [[deps.HostCPUFeatures]] deps = ["BitTwiddlingConvenienceFunctions", "IfElse", "Libdl", "Static"] -git-tree-sha1 = "b7b88a4716ac33fe31d6556c02fc60017594343c" +git-tree-sha1 = "f64b890b2efa4de81520d2b0fbdc9aadb65bdf53" uuid = "3e5b6fbb-0976-4d2c-9146-d79de83f2fb0" -version = "0.1.8" +version = "0.1.13" [[deps.HypergeometricFunctions]] deps = ["DualNumbers", "LinearAlgebra", "OpenLibm_jll", "SpecialFunctions", "Test"] @@ -703,9 +704,9 @@ uuid = "3587e190-3f89-42d0-90ee-14403ec27112" version = "0.1.8" [[deps.InvertedIndices]] -git-tree-sha1 = "bee5f1ef5bf65df56bdd2e40447590b272a5471f" +git-tree-sha1 = "82aec7a3dd64f4d9584659dc0b62ef7db2ef3e19" uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" -version = "1.1.0" +version = "1.2.0" [[deps.IrrationalConstants]] git-tree-sha1 = "7fd44fd4ff43fc60815f8e764c0f352b83c49151" @@ -784,9 +785,9 @@ version = "3.0.0+1" [[deps.LLVM]] deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Printf", "Unicode"] -git-tree-sha1 = "e7e9184b0bf0158ac4e4aa9daf00041b5909bf1a" +git-tree-sha1 = "088dd02b2797f0233d92583562ab669de8517fd1" uuid = "929cbde3-209d-540e-8aea-75f648917ca0" -version = "4.14.0" +version = "4.14.1" [[deps.LLVMExtra_jll]] deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "Pkg", "TOML"] @@ -819,9 +820,9 @@ version = "1.8.0" [[deps.LayoutPointers]] deps = ["ArrayInterface", "ArrayInterfaceOffsetArrays", "ArrayInterfaceStaticArrays", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static"] -git-tree-sha1 = "73e2e40eb02d6ccd191a8a9f8cee20db8d5df010" +git-tree-sha1 = "7e34177793212f6d64d045ee47d2883f09fffacc" uuid = "10f19ff3-798f-405d-979b-55457f8fc047" -version = "0.1.11" +version = "0.1.12" [[deps.LazyArtifacts]] deps = ["Artifacts", "Pkg"] @@ -863,9 +864,9 @@ version = "1.8.7+0" [[deps.Libglvnd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll"] -git-tree-sha1 = "7739f837d6447403596a75d19ed01fd08d6f56bf" +git-tree-sha1 = "6f73d1dd803986947b2c750138528a999a6c7733" uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29" -version = "1.3.0+3" +version = "1.6.0+0" [[deps.Libgpg_error_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -915,24 +916,24 @@ version = "3.8.0" [[deps.LogExpFunctions]] deps = ["ChainRulesCore", "ChangesOfVariables", "DocStringExtensions", "InverseFunctions", "IrrationalConstants", "LinearAlgebra"] -git-tree-sha1 = "94d9c52ca447e23eac0c0f074effbcd38830deb5" +git-tree-sha1 = "946607f84feb96220f480e0422d3484c49c00239" uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" -version = "0.3.18" +version = "0.3.19" [[deps.Logging]] uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" [[deps.LoggingExtras]] deps = ["Dates", "Logging"] -git-tree-sha1 = "5d4d2d9904227b8bd66386c1138cf4d5ffa826bf" +git-tree-sha1 = "cedb76b37bc5a6c702ade66be44f831fa23c681e" uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" -version = "0.4.9" +version = "1.0.0" [[deps.LoopVectorization]] deps = ["ArrayInterface", "ArrayInterfaceCore", "ArrayInterfaceOffsetArrays", "ArrayInterfaceStaticArrays", "CPUSummary", "ChainRulesCore", "CloseOpenIntervals", "DocStringExtensions", "ForwardDiff", "HostCPUFeatures", "IfElse", "LayoutPointers", "LinearAlgebra", "OffsetArrays", "PolyesterWeave", "SIMDDualNumbers", "SIMDTypes", "SLEEFPirates", "SnoopPrecompile", "SpecialFunctions", "Static", "ThreadingUtilities", "UnPack", "VectorizationBase"] -git-tree-sha1 = "9f6030ca92d1a816e931abb657219c9fc4991a96" +git-tree-sha1 = "da5317a78e2a9f692730345cf3ff820109f406d3" uuid = "bdcacae8-1622-11e9-2a5c-532679323890" -version = "0.12.136" +version = "0.12.141" [[deps.LossFunctions]] deps = ["InteractiveUtils", "Markdown", "RecipesBase"] @@ -948,57 +949,57 @@ version = "2022.2.0+0" [[deps.MLJ]] deps = ["CategoricalArrays", "ComputationalResources", "Distributed", "Distributions", "LinearAlgebra", "MLJBase", "MLJEnsembles", "MLJIteration", "MLJModels", "MLJTuning", "OpenML", "Pkg", "ProgressMeter", "Random", "ScientificTypes", "Statistics", "StatsBase", "Tables"] -git-tree-sha1 = "025706ea81e635ac530a1d3dd365af971805bf79" +git-tree-sha1 = "9d79ef8684eb15a6fe4c3654cdb9c5de4868a81e" uuid = "add582a8-e3ab-11e8-2d5e-e98b27df1bc7" -version = "0.18.5" +version = "0.19.0" [[deps.MLJBase]] deps = ["CategoricalArrays", "CategoricalDistributions", "ComputationalResources", "Dates", "DelimitedFiles", "Distributed", "Distributions", "InteractiveUtils", "InvertedIndices", "LinearAlgebra", "LossFunctions", "MLJModelInterface", "Missings", "OrderedCollections", "Parameters", "PrettyTables", "ProgressMeter", "Random", "ScientificTypes", "Serialization", "StatisticalTraits", "Statistics", "StatsBase", "Tables"] -git-tree-sha1 = "ace5668bc6c4fd46f3e6af67ead3778804f23e5b" +git-tree-sha1 = "decaf881165c0b3c7abf1130dfe3221ee88ef99a" uuid = "a7f614a8-145f-11e9-1d2a-a57a1082229d" -version = "0.20.20" +version = "0.21.2" [[deps.MLJDecisionTreeInterface]] deps = ["DecisionTree", "MLJModelInterface", "Random", "Tables"] -git-tree-sha1 = "d0d682ef8504e1ab705f10307c587239ebb20c4d" +git-tree-sha1 = "74e8076ea6f64fcb490783f2033070b18fa3466f" uuid = "c6f25543-311c-4c74-83dc-3ea6d1015661" -version = "0.2.5" +version = "0.3.0" [[deps.MLJEnsembles]] deps = ["CategoricalArrays", "CategoricalDistributions", "ComputationalResources", "Distributed", "Distributions", "MLJBase", "MLJModelInterface", "ProgressMeter", "Random", "ScientificTypesBase", "StatsBase"] -git-tree-sha1 = "ed2f724be26d0023cade9d59b55da93f528c3f26" +git-tree-sha1 = "bb8a1056b1d8b40f2f27167fc3ef6412a6719fbf" uuid = "50ed68f4-41fd-4504-931a-ed422449fee0" -version = "0.3.1" +version = "0.3.2" [[deps.MLJFlux]] -deps = ["CategoricalArrays", "ColorTypes", "ComputationalResources", "Flux", "MLJModelInterface", "Metalhead", "ProgressMeter", "Random", "Statistics", "Tables"] -git-tree-sha1 = "2ecdce4dd9214789ee1796103d29eaee7619ebd0" +deps = ["CategoricalArrays", "ColorTypes", "ComputationalResources", "Flux", "MLJModelInterface", "ProgressMeter", "Random", "Statistics", "Tables"] +git-tree-sha1 = "a47257705ebca405a25320b111345a978925bcd5" uuid = "094fc8d1-fd35-5302-93ea-dabda2abf845" -version = "0.2.9" +version = "0.2.7" [[deps.MLJIteration]] deps = ["IterationControl", "MLJBase", "Random", "Serialization"] -git-tree-sha1 = "024d0bd22bf4a5b273f626e89d742a9db95285ef" +git-tree-sha1 = "be6d5c71ab499a59e82d65e00a89ceba8732fcd5" uuid = "614be32b-d00c-4edb-bd02-1eb411ab5e55" -version = "0.5.0" +version = "0.5.1" [[deps.MLJLinearModels]] deps = ["DocStringExtensions", "IterativeSolvers", "LinearAlgebra", "LinearMaps", "MLJModelInterface", "Optim", "Parameters"] -git-tree-sha1 = "bfebb824a1b9a0c6d58e417e680f5e99317534e3" +git-tree-sha1 = "7c191a2975e05387da3cd12a4c8a835a3d5186f4" uuid = "6ee0df7b-362f-4a72-a706-9e79364fb692" -version = "0.7.1" +version = "0.8.0" [[deps.MLJModelInterface]] deps = ["Random", "ScientificTypesBase", "StatisticalTraits"] -git-tree-sha1 = "0a36882e73833d60dac49b00d203f73acfd50b85" +git-tree-sha1 = "c8b7e632d6754a5e36c0d94a4b466a5ba3a30128" uuid = "e80e1ace-859a-464e-9ed9-23947d8ae3ea" -version = "1.7.0" +version = "1.8.0" [[deps.MLJModels]] deps = ["CategoricalArrays", "CategoricalDistributions", "Combinatorics", "Dates", "Distances", "Distributions", "InteractiveUtils", "LinearAlgebra", "MLJModelInterface", "Markdown", "OrderedCollections", "Parameters", "Pkg", "PrettyPrinting", "REPL", "Random", "RelocatableFolders", "ScientificTypes", "StatisticalTraits", "Statistics", "StatsBase", "Tables"] -git-tree-sha1 = "147a8e7939601f8c37204addbbe29f2bcfb876a8" +git-tree-sha1 = "08203fc87a7f992cee24e7a1b2353e594c73c41c" uuid = "d491faf4-2d78-11e9-2867-c94bc002c0b7" -version = "0.15.14" +version = "0.16.2" [[deps.MLJNaiveBayesInterface]] deps = ["LogExpFunctions", "MLJModelInterface", "NaiveBayes"] @@ -1008,9 +1009,9 @@ version = "0.1.6" [[deps.MLJTuning]] deps = ["ComputationalResources", "Distributed", "Distributions", "LatinHypercubeSampling", "MLJBase", "ProgressMeter", "Random", "RecipesBase"] -git-tree-sha1 = "77209966cc028c1d7730001dc32bffe17a198f29" +git-tree-sha1 = "02688098bd77827b64ed8ad747c14f715f98cfc4" uuid = "03970b2e-30c4-11ea-3135-d1576263f10f" -version = "0.7.3" +version = "0.7.4" [[deps.MLStyle]] git-tree-sha1 = "060ef7956fef2dc06b0e63b294f7dbfbcbdc7ea2" @@ -1018,10 +1019,10 @@ uuid = "d8e11817-5142-5d16-987a-aa16d5891078" version = "0.4.16" [[deps.MLUtils]] -deps = ["ChainRulesCore", "DelimitedFiles", "FLoops", "FoldsThreads", "Random", "ShowCases", "Statistics", "StatsBase", "Transducers"] -git-tree-sha1 = "824e9dfc7509cab1ec73ba77b55a916bb2905e26" +deps = ["ChainRulesCore", "DataAPI", "DelimitedFiles", "FLoops", "FoldsThreads", "NNlib", "Random", "ShowCases", "SimpleTraits", "Statistics", "StatsBase", "Tables", "Transducers"] +git-tree-sha1 = "82c1104919d664ab1024663ad851701415300c5f" uuid = "f1d291b0-491e-4a28-83b9-f70985020b54" -version = "0.2.11" +version = "0.3.1" [[deps.MacroTools]] deps = ["Markdown", "Random"] @@ -1056,15 +1057,9 @@ uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" version = "2.28.0+0" [[deps.Measures]] -git-tree-sha1 = "e498ddeee6f9fdb4551ce855a46f54dbd900245f" +git-tree-sha1 = "c13304c81eec1ed3af7fc20e75fb6b26092a1102" uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" -version = "0.3.1" - -[[deps.Metalhead]] -deps = ["Artifacts", "BSON", "Flux", "Functors", "LazyArtifacts", "MLUtils", "NNlib", "Random", "Statistics"] -git-tree-sha1 = "a8513152030f7210ccc0b871e03d60c9b13ed0b1" -uuid = "dbeba491-748d-5e0e-a39e-b530a07fa0cc" -version = "0.7.3" +version = "0.3.2" [[deps.MicroCollections]] deps = ["BangBang", "InitialValues", "Setfield"] @@ -1087,9 +1082,9 @@ version = "2022.2.1" [[deps.NLSolversBase]] deps = ["DiffResults", "Distributed", "FiniteDiff", "ForwardDiff"] -git-tree-sha1 = "50310f934e55e5ca3912fb941dec199b49ca9b68" +git-tree-sha1 = "a0b464d183da839699f4c79e7606d9d186ec172c" uuid = "d41bc354-129a-5804-8e4c-c37616107c6c" -version = "7.8.2" +version = "7.8.3" [[deps.NNlib]] deps = ["Adapt", "ChainRulesCore", "LinearAlgebra", "Pkg", "Requires", "Statistics"] @@ -1155,6 +1150,12 @@ git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f" uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" version = "1.3.5+1" +[[deps.OneHotArrays]] +deps = ["Adapt", "ChainRulesCore", "GPUArraysCore", "LinearAlgebra", "MLUtils", "NNlib"] +git-tree-sha1 = "aee0130122fa7c1f3d394231376f07869f1e097c" +uuid = "0b1bfda6-eb8a-41d2-88d8-f5af5cad476f" +version = "0.2.0" + [[deps.OpenBLAS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" @@ -1173,15 +1174,15 @@ version = "0.3.0" [[deps.OpenSSL]] deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"] -git-tree-sha1 = "3c3c4a401d267b04942545b1e964a20279587fd7" +git-tree-sha1 = "df6830e37943c7aaa10023471ca47fb3065cc3c4" uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c" -version = "1.3.0" +version = "1.3.2" [[deps.OpenSSL_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "e60321e3f2616584ff98f0a4f18d98ae6f89bbb3" +git-tree-sha1 = "f6e9dba33f9f2c44e08a020b0caf6903be540004" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "1.1.17+0" +version = "1.1.19+0" [[deps.OpenSpecFun_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] @@ -1191,15 +1192,15 @@ version = "0.5.5+0" [[deps.Optim]] deps = ["Compat", "FillArrays", "ForwardDiff", "LineSearches", "LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "PositiveFactorizations", "Printf", "SparseArrays", "StatsBase"] -git-tree-sha1 = "b9fe76d1a39807fdcf790b991981a922de0c3050" +git-tree-sha1 = "1903afc76b7d01719d9c30d3c7d501b61db96721" uuid = "429524aa-4258-5aef-a3af-852621145aeb" -version = "1.7.3" +version = "1.7.4" [[deps.Optimisers]] deps = ["ChainRulesCore", "Functors", "LinearAlgebra", "Random", "Statistics"] -git-tree-sha1 = "1ef34738708e3f31994b52693286dabcb3d29f6b" +git-tree-sha1 = "f1cccb9f879dd4eaa4d92b115ab793545965d763" uuid = "3bd65402-5787-11e9-1adc-39752487f4e2" -version = "0.2.9" +version = "0.2.13" [[deps.Opus_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -1230,10 +1231,10 @@ uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" version = "0.12.3" [[deps.Parsers]] -deps = ["Dates"] -git-tree-sha1 = "6c01a9b494f6d2a9fc180a08b182fcb06f0958a0" +deps = ["Dates", "SnoopPrecompile"] +git-tree-sha1 = "b64719e8b4504983c7fca6cc9db3ebc8acc2a4d6" uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" -version = "2.4.2" +version = "2.5.1" [[deps.Pipe]] git-tree-sha1 = "6842804e7867b115ca9de748a0cf6b364523c16d" @@ -1265,15 +1266,15 @@ version = "1.3.1" [[deps.Plots]] deps = ["Base64", "Contour", "Dates", "Downloads", "FFMPEG", "FixedPointNumbers", "GR", "JLFzf", "JSON", "LaTeXStrings", "Latexify", "LinearAlgebra", "Measures", "NaNMath", "Pkg", "PlotThemes", "PlotUtils", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "RelocatableFolders", "Requires", "Scratch", "Showoff", "SnoopPrecompile", "SparseArrays", "Statistics", "StatsBase", "UUIDs", "UnicodeFun", "Unzip"] -git-tree-sha1 = "0a56829d264eb1bc910cf7c39ac008b5bcb5a0d9" +git-tree-sha1 = "6a9521b955b816aa500462951aa67f3e4467248a" uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" -version = "1.35.5" +version = "1.36.6" [[deps.PolyesterWeave]] deps = ["BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "Static", "ThreadingUtilities"] -git-tree-sha1 = "b42fb2292fbbaed36f25d33a15c8cc0b4f287fcf" +git-tree-sha1 = "050ca4aa2ca31484b51b849d8180caf8e4449c49" uuid = "1d0040c9-8b98-4ee7-8388-3f51789ca0ad" -version = "0.1.10" +version = "0.1.11" [[deps.Polynomials]] deps = ["LinearAlgebra", "RecipesBase"] @@ -1310,10 +1311,10 @@ uuid = "54e16d92-306c-5ea0-a30b-337be88ac337" version = "0.4.0" [[deps.PrettyTables]] -deps = ["Crayons", "Formatting", "Markdown", "Reexport", "StringManipulation", "Tables"] -git-tree-sha1 = "460d9e154365e058c4d886f6f7d6df5ffa1ea80e" +deps = ["Crayons", "Formatting", "LaTeXStrings", "Markdown", "Reexport", "StringManipulation", "Tables"] +git-tree-sha1 = "96f6db03ab535bdb901300f88335257b0018689d" uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" -version = "2.1.2" +version = "2.2.2" [[deps.Printf]] deps = ["Unicode"] @@ -1377,15 +1378,15 @@ version = "0.1.0" [[deps.RecipesBase]] deps = ["SnoopPrecompile"] -git-tree-sha1 = "d12e612bba40d189cead6ff857ddb67bd2e6a387" +git-tree-sha1 = "18c35ed630d7229c5584b945641a73ca83fb5213" uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" -version = "1.3.1" +version = "1.3.2" [[deps.RecipesPipeline]] deps = ["Dates", "NaNMath", "PlotUtils", "RecipesBase", "SnoopPrecompile"] -git-tree-sha1 = "9b1c0c8e9188950e66fc28f40bfe0f8aac311fe0" +git-tree-sha1 = "e974477be88cb5e3040009f3767611bc6357846f" uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c" -version = "0.6.7" +version = "0.6.11" [[deps.Reexport]] git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" @@ -1433,9 +1434,9 @@ version = "0.1.0" [[deps.SLEEFPirates]] deps = ["IfElse", "Static", "VectorizationBase"] -git-tree-sha1 = "938c9ecffb28338a6b8b970bda0f3806a65e7906" +git-tree-sha1 = "c8679919df2d3c71f74451321f1efea6433536cc" uuid = "476501e8-09a2-5ece-8869-fb82de89a1fa" -version = "0.6.36" +version = "0.6.37" [[deps.ScientificTypes]] deps = ["CategoricalArrays", "ColorTypes", "Dates", "Distributions", "PrettyTables", "Reexport", "ScientificTypesBase", "StatisticalTraits", "Tables"] @@ -1489,6 +1490,12 @@ git-tree-sha1 = "874e8867b33a00e784c8a7e4b60afe9e037b74e1" uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7" version = "1.1.0" +[[deps.SimpleTraits]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231" +uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" +version = "0.9.4" + [[deps.SnoopPrecompile]] git-tree-sha1 = "f604441450a3c0569830946e5b33b78c928e1a85" uuid = "66db9d55-30c0-4569-8b51-7e840670fc0c" @@ -1499,9 +1506,9 @@ uuid = "6462fe0b-24de-5631-8697-dd941f90decc" [[deps.SortingAlgorithms]] deps = ["DataStructures"] -git-tree-sha1 = "b3363d7460f7d098ca0912c69b082f75625d7508" +git-tree-sha1 = "a4ada03f999bd01b3a25dcaa30b2d929fe537e00" uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" -version = "1.0.1" +version = "1.1.0" [[deps.SparseArrays]] deps = ["LinearAlgebra", "Random"] @@ -1527,15 +1534,15 @@ version = "1.0.0" [[deps.Static]] deps = ["IfElse"] -git-tree-sha1 = "de4f0a4f049a4c87e4948c04acff37baf1be01a6" +git-tree-sha1 = "0559586098f3cbd2e835461254ea2fcffa4a61ba" uuid = "aedffcd0-7271-4cad-89d0-dc628f76c6d3" -version = "0.7.7" +version = "0.8.2" [[deps.StaticArrays]] deps = ["LinearAlgebra", "Random", "StaticArraysCore", "Statistics"] -git-tree-sha1 = "f86b3a049e5d05227b10e15dbb315c5b90f14988" +git-tree-sha1 = "ffc098086f35909741f71ce21d03dadf0d2bfa76" uuid = "90137ffa-7385-5640-81b9-e52037218182" -version = "1.5.9" +version = "1.5.11" [[deps.StaticArraysCore]] git-tree-sha1 = "6b7ba252635a5eff6a0b0664a41ee140a1c9e72a" @@ -1566,9 +1573,9 @@ version = "0.33.21" [[deps.StatsFuns]] deps = ["ChainRulesCore", "HypergeometricFunctions", "InverseFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] -git-tree-sha1 = "5783b877201a82fc0014cbf381e7e6eb130473a4" +git-tree-sha1 = "89a3bfe98f5400f4ff58bb5cd1a9e46f95d08352" uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" -version = "1.0.1" +version = "1.1.0" [[deps.StringManipulation]] git-tree-sha1 = "46da2434b41f41ac3594ee9816ce5541c6096123" @@ -1625,9 +1632,9 @@ version = "0.5.0" [[deps.TimerOutputs]] deps = ["ExprTools", "Printf"] -git-tree-sha1 = "9dfcb767e17b0849d6aaf85997c98a5aea292513" +git-tree-sha1 = "f2fd3f288dfc6f507b0c3a2eb3bac009251e548b" uuid = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f" -version = "0.5.21" +version = "0.5.22" [[deps.TranscodingStreams]] deps = ["Random", "Test"] @@ -1642,9 +1649,9 @@ uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" version = "0.4.75" [[deps.URIs]] -git-tree-sha1 = "e59ecc5a41b000fa94423a578d29290c7266fc10" +git-tree-sha1 = "ac00576f90d8a259f2c9d823e91d1de3fd44d348" uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" -version = "1.4.0" +version = "1.4.1" [[deps.UUIDs]] deps = ["Random", "SHA"] @@ -1666,15 +1673,15 @@ version = "0.4.1" [[deps.UnicodePlots]] deps = ["ColorSchemes", "ColorTypes", "Contour", "Crayons", "Dates", "FileIO", "FreeType", "LinearAlgebra", "MarchingCubes", "NaNMath", "Printf", "Requires", "SnoopPrecompile", "SparseArrays", "StaticArrays", "StatsBase", "Unitful"] -git-tree-sha1 = "390b2e8e5535f5beb50885d1a1059f460547d3a5" +git-tree-sha1 = "e20b01d50cd162593cfd9691628c830769f68987" uuid = "b8865327-cd53-5732-bb35-84acbb429228" -version = "3.1.6" +version = "3.3.1" [[deps.Unitful]] deps = ["ConstructionBase", "Dates", "LinearAlgebra", "Random"] -git-tree-sha1 = "d57a4ed70b6f9ff1da6719f5f2713706d57e0d66" +git-tree-sha1 = "d670a70dd3cdbe1c1186f2f17c9a68a7ec24838c" uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" -version = "1.12.0" +version = "1.12.2" [[deps.Unzip]] git-tree-sha1 = "ca0969166a028236229f63514992fc073799bb78" @@ -1683,9 +1690,9 @@ version = "0.2.0" [[deps.VectorizationBase]] deps = ["ArrayInterface", "CPUSummary", "HostCPUFeatures", "IfElse", "LayoutPointers", "Libdl", "LinearAlgebra", "SIMDTypes", "Static"] -git-tree-sha1 = "ba9d398034a2ba78059391492730889c6e45cf15" +git-tree-sha1 = "fc79d0f926592ecaeaee164f6a4ca81b51115c3b" uuid = "3d5dd08c-fd9d-11e8-17fa-ed2836048c2f" -version = "0.21.54" +version = "0.21.56" [[deps.Wayland_jll]] deps = ["Artifacts", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg", "XML2_jll"] diff --git a/docs/Project.toml b/docs/Project.toml index 0a2759d..6291faf 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -1,4 +1,5 @@ [deps] +CategoricalArrays = "324d7699-5711-5eae-9e2f-1d82baa6b597" ConformalPrediction = "98bfc277-1877-43dc-819b-a3e38c30242f" DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" DecisionTree = "7806a523-6efd-50cb-b5f6-3fa6f1930dbb" diff --git a/docs/src/classification.md b/docs/src/classification.md index ca0c316..99a1994 100644 --- a/docs/src/classification.md +++ b/docs/src/classification.md @@ -92,6 +92,27 @@ predict(mach, Xtest)[1] missing +``` julia +cov_ = .9 +conf_model = conformal_model(model; coverage=cov_) +mach = machine(conf_model, X, y) +fit!(mach, rows=train) +Markdown.parse(""" +The following chart shows the resulting predicted probabilities for ``y=1`` (left) and set size (right) for a choice of ``(1-\\alpha)``=$cov_. +""") +``` + +The following chart shows the resulting predicted probabilities for *y* = 1 (left) and set size (right) for a choice of (1−*α*)=0.9. + +``` julia +using Plots +p_proba = plot(mach.model, mach.fitresult, X, y) +p_set_size = plot(mach.model, mach.fitresult, X, y; plot_set_size=true) +plot(p_proba, p_set_size, size=(800,250)) +``` + +![](classification_files/figure-commonmark/cell-10-output-1.svg) + The animation below should provide some more intuition as to what exactly is happening here. It illustrates the effect of the chosen coverage rate on the predicted softmax output and the set size in the two-dimensional feature space. Contours are overlayed with the moon data points (including test data). The two samples highlighted in red, *X*₁ and *X*₂, have been manually added for illustration purposes. Let’s look at these one by one. Firstly, note that *X*₁ (red cross) falls into a region of the domain that is characterized by high predictive uncertainty. It sits right at the bottom-right corner of our class-zero moon 🌜 (orange), a region that is almost entirely enveloped by our class-one moon 🌛 (green). For low coverage rates the prediction set for *X*₁ is empty: on the left-hand side this is indicated by the missing contour for the softmax probability; on the right-hand side we can observe that the corresponding set size is indeed zero. For high coverage rates the prediction set includes both *y* = 0 and *y* = 1, indicative of the fact that the conformal classifier is uncertain about the true label. @@ -100,16 +121,12 @@ With respect to *X*₂, we observe that while also sitting on the fringe of our ``` julia Xtest_2 = (x1=[-0.5],x2=[0.25]) -cov_ = .9 -conf_model = conformal_model(model; coverage=cov_) -mach = machine(conf_model, X, y) -fit!(mach, rows=train) p̂_2 = pdf(predict(mach, Xtest_2)[1], 0) ``` Well, for low coverage rates (roughly  \< 0.9) the conformal prediction set does not include *y* = 0: the set size is zero (right panel). Only for higher coverage rates do we have *C*(*X*₂) = {0}: the coverage rate is high enough to include *y* = 0, but the corresponding softmax probability is still fairly low. For example, for (1−*α*) = 0.9 we have *p̂*(*y*=0|*X*₂) = 0.72. -These two examples illustrate an interesting point: for regions characterised by high predictive uncertainty, conformal prediction sets are typically empty (for low coverage) or large (for high coverage). While set-valued predictions may be something to get used to, this notion is overall intuitive. +These two examples illustrate an interesting point: for regions characterized by high predictive uncertainty, conformal prediction sets are typically empty (for low coverage) or large (for high coverage). While set-valued predictions may be something to get used to, this notion is overall intuitive. ``` julia # Setup @@ -122,12 +139,11 @@ anim = @animate for coverage in coverages conf_model = conformal_model(model; coverage=coverage) mach = machine(conf_model, X, y) fit!(mach, rows=train) - p1 = contourf_cp(mach, x1_range, x2_range; type=:proba, title="Softmax", axis=nothing) - scatter!(p1, X.x1, X.x2, group=y, ms=2, msw=0, alpha=0.75) + # Probabilities: + p1 = plot(mach.model, mach.fitresult, X, y) scatter!(p1, Xtest.x1, Xtest.x2, ms=6, c=:red, label="X₁", shape=:cross, msw=6) scatter!(p1, Xtest_2.x1, Xtest_2.x2, ms=6, c=:red, label="X₂", shape=:diamond, msw=6) - p2 = contourf_cp(mach, x1_range, x2_range; type=:set_size, title="Set size", axis=nothing) - scatter!(p2, X.x1, X.x2, group=y, ms=2, msw=0, alpha=0.75) + p2 = plot(mach.model, mach.fitresult, X, y; plot_set_size=true) scatter!(p2, Xtest.x1, Xtest.x2, ms=6, c=:red, label="X₁", shape=:cross, msw=6) scatter!(p2, Xtest_2.x1, Xtest_2.x2, ms=6, c=:red, label="X₂", shape=:diamond, msw=6) plot(p1, p2, plot_title="(1-α)=$(round(coverage,digits=2))", size=(800,300)) diff --git a/docs/src/classification.qmd b/docs/src/classification.qmd index 44e62cd..b5ab560 100644 --- a/docs/src/classification.qmd +++ b/docs/src/classification.qmd @@ -111,31 +111,27 @@ predict(mach, Xtest)[1] ``` ```{julia} -#| echo: false -using Plots +#| output: true -function contourf_cp(mach::Machine, x1_range, x2_range; type=:set_size, kwargs...) - set_size = [] - proba = [] - for x2 in x2_range, x1 in x1_range - Xnew = (x1 = [x1], x2 = [x2]) - p̂ = predict(mach, Xnew)[1] - # Set size: - z = ismissing(p̂) ? 0 : sum(pdf.(p̂, p̂.decoder.classes) .> 0) - push!(set_size, z) - # Probability: - p = ismissing(p̂) ? p̂ : pdf.(p̂, 1) - push!(proba, p) - end - if type == :set_size - plt = contourf(x1_range, x2_range, set_size; clim=(0,2), c=cgrad(:blues, 3, categorical = true), kwargs...) - elseif type == :proba - plt = contourf(x1_range, x2_range, proba; c=:thermal, kwargs...) - end - return plt -end +cov_ = .9 +conf_model = conformal_model(model; coverage=cov_) +mach = machine(conf_model, X, y) +fit!(mach, rows=train) +Markdown.parse(""" +The following chart shows the resulting predicted probabilities for ``y=1`` (left) and set size (right) for a choice of ``(1-\\alpha)``=$cov_. +""") ``` +```{julia} +#| output: true + +using Plots +p_proba = plot(mach.model, mach.fitresult, X, y) +p_set_size = plot(mach.model, mach.fitresult, X, y; plot_set_size=true) +plot(p_proba, p_set_size, size=(800,250)) +``` + + The animation below should provide some more intuition as to what exactly is happening here. It illustrates the effect of the chosen coverage rate on the predicted softmax output and the set size in the two-dimensional feature space. Contours are overlayed with the moon data points (including test data). The two samples highlighted in red, $X_1$ and $X_2$, have been manually added for illustration purposes. Let's look at these one by one. Firstly, note that $X_1$ (red cross) falls into a region of the domain that is characterized by high predictive uncertainty. It sits right at the bottom-right corner of our class-zero moon 🌜 (orange), a region that is almost entirely enveloped by our class-one moon 🌛 (green). For low coverage rates the prediction set for $X_1$ is empty: on the left-hand side this is indicated by the missing contour for the softmax probability; on the right-hand side we can observe that the corresponding set size is indeed zero. For high coverage rates the prediction set includes both $y=0$ and $y=1$, indicative of the fact that the conformal classifier is uncertain about the true label. @@ -146,10 +142,6 @@ With respect to $X_2$, we observe that while also sitting on the fringe of our c #| code-fold: true Xtest_2 = (x1=[-0.5],x2=[0.25]) -cov_ = .9 -conf_model = conformal_model(model; coverage=cov_) -mach = machine(conf_model, X, y) -fit!(mach, rows=train) p̂_2 = pdf(predict(mach, Xtest_2)[1], 0) ``` @@ -162,7 +154,7 @@ Well, for low coverage rates (roughly ``<0.9``) the conformal prediction set doe """) ``` -These two examples illustrate an interesting point: for regions characterised by high predictive uncertainty, conformal prediction sets are typically empty (for low coverage) or large (for high coverage). While set-valued predictions may be something to get used to, this notion is overall intuitive. +These two examples illustrate an interesting point: for regions characterized by high predictive uncertainty, conformal prediction sets are typically empty (for low coverage) or large (for high coverage). While set-valued predictions may be something to get used to, this notion is overall intuitive. ```{julia} #| output: true @@ -179,12 +171,11 @@ anim = @animate for coverage in coverages conf_model = conformal_model(model; coverage=coverage) mach = machine(conf_model, X, y) fit!(mach, rows=train) - p1 = contourf_cp(mach, x1_range, x2_range; type=:proba, title="Softmax", axis=nothing) - scatter!(p1, X.x1, X.x2, group=y, ms=2, msw=0, alpha=0.75) + # Probabilities: + p1 = plot(mach.model, mach.fitresult, X, y) scatter!(p1, Xtest.x1, Xtest.x2, ms=6, c=:red, label="X₁", shape=:cross, msw=6) scatter!(p1, Xtest_2.x1, Xtest_2.x2, ms=6, c=:red, label="X₂", shape=:diamond, msw=6) - p2 = contourf_cp(mach, x1_range, x2_range; type=:set_size, title="Set size", axis=nothing) - scatter!(p2, X.x1, X.x2, group=y, ms=2, msw=0, alpha=0.75) + p2 = plot(mach.model, mach.fitresult, X, y; plot_set_size=true) scatter!(p2, Xtest.x1, Xtest.x2, ms=6, c=:red, label="X₁", shape=:cross, msw=6) scatter!(p2, Xtest_2.x1, Xtest_2.x2, ms=6, c=:red, label="X₂", shape=:diamond, msw=6) plot(p1, p2, plot_title="(1-α)=$(round(coverage,digits=2))", size=(800,300)) diff --git a/docs/src/classification_files/figure-commonmark/cell-10-output-1.svg b/docs/src/classification_files/figure-commonmark/cell-10-output-1.svg new file mode 100644 index 0000000..de81765 --- /dev/null +++ b/docs/src/classification_files/figure-commonmark/cell-10-output-1.svg @@ -0,0 +1,2671 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/src/classification_files/figure-commonmark/cell-9-output-1.svg b/docs/src/classification_files/figure-commonmark/cell-9-output-1.svg new file mode 100644 index 0000000..8791f3f --- /dev/null +++ b/docs/src/classification_files/figure-commonmark/cell-9-output-1.svg @@ -0,0 +1,2671 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/src/regression.qmd b/docs/src/regression.qmd index ebfd51f..384b5bd 100644 --- a/docs/src/regression.qmd +++ b/docs/src/regression.qmd @@ -56,6 +56,8 @@ polynomial_features(X, degree::Int) = reduce(hcat, map(i -> X.^i, 1:degree)) pipe = (X -> MLJ.table(polynomial_features(MLJ.matrix(X), degree_polynomial))) |> LinearRegressor() ``` +## Conformal Prediction + Next, we conformalize our polynomial regressor using every available approach (except the Naive approach): ```{julia} @@ -80,7 +82,7 @@ Finally, let us look at the resulting conformal predictions in each case. #| fig-cap: "Conformal prediction regions." using Plots -zoom = -3 +zoom = 0 xrange = range(-xmax+zoom,xmax-zoom,length=N) plt_list = [] @@ -92,3 +94,5 @@ end plot(plt_list..., size=(1600,1000)) ``` + + diff --git a/docs/src/www/classification.gif b/docs/src/www/classification.gif index 7f3cecd5f8b7d563b784a9a80197ff2c4fbc29a9..60ea94ab4449fe9a2ef685a8146f4d3953cf28ed 100644 GIT binary patch literal 70331 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 Yhp8{Gx0ibe_=mcu`@4U8S`P>SJLo7_j{pDw literal 86650 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 diff --git a/src/ConformalModels/ConformalModels.jl b/src/ConformalModels/ConformalModels.jl index e60893b..f68ac89 100644 --- a/src/ConformalModels/ConformalModels.jl +++ b/src/ConformalModels/ConformalModels.jl @@ -5,20 +5,17 @@ import MLJModelInterface as MMI import MLJModelInterface: predict, fit, save, restore "An abstract base type for conformal models that produce interval-valued predictions. This includes most conformal regression models." -abstract type ConformalInterval <: MMI.Interval end - -"An abstract base type for conformal models that produce set-valued deterministic predictions. This includes most conformal classification models." -abstract type ConformalSet <: MMI.Supervised end # ideally we'd have MMI.Set +abstract type ConformalInterval <: MMI.Interval end "An abstract base type for conformal models that produce set-valued probabilistic predictions. This includes most conformal classification models." -abstract type ConformalProbabilisticSet <: MMI.Supervised end # ideally we'd have MMI.ProbabilisticSet +abstract type ConformalProbabilisticSet <: MMI.ProbabilisticSet end "An abstract base type for conformal models that produce probabilistic predictions. This includes some conformal classifier like Venn-ABERS." abstract type ConformalProbabilistic <: MMI.Probabilistic end -const ConformalModel = Union{ConformalInterval, ConformalSet, ConformalProbabilistic} +const ConformalModel = Union{ConformalInterval, ConformalProbabilisticSet, ConformalProbabilistic} -export ConformalInterval, ConformalSet, ConformalProbabilistic, ConformalModel +export ConformalInterval, ConformalProbabilistic, ConformalModel include("utils.jl") include("plotting.jl") diff --git a/src/ConformalModels/inductive_bayes.jl b/src/ConformalModels/inductive_bayes.jl index 82e720a..7ce425c 100644 --- a/src/ConformalModels/inductive_bayes.jl +++ b/src/ConformalModels/inductive_bayes.jl @@ -1,74 +1,74 @@ -# Simple -"The `SimpleInductiveBayes` is the simplest approach to Inductive Conformalized Bayes." -mutable struct SimpleInductiveBayes{Model <: Supervised} <: ConformalModel - model::Model - coverage::AbstractFloat - scores::Union{Nothing,AbstractArray} - heuristic::Function - train_ratio::AbstractFloat -end +# # Simple +# "The `SimpleInductiveBayes` is the simplest approach to Inductive Conformalized Bayes." +# mutable struct SimpleInductiveBayes{Model <: Supervised} <: ConformalModel +# model::Model +# coverage::AbstractFloat +# scores::Union{Nothing,AbstractArray} +# heuristic::Function +# train_ratio::AbstractFloat +# end -function SimpleInductiveBayes(model::Supervised; coverage::AbstractFloat=0.95, heuristic::Function=f(y, ŷ)=-ŷ, train_ratio::AbstractFloat=0.5) - return SimpleInductiveBayes(model, coverage, nothing, heuristic, train_ratio) -end +# function SimpleInductiveBayes(model::Supervised; coverage::AbstractFloat=0.95, heuristic::Function=f(y, ŷ)=-ŷ, train_ratio::AbstractFloat=0.5) +# return SimpleInductiveBayes(model, coverage, nothing, heuristic, train_ratio) +# end -@doc raw""" - MMI.fit(conf_model::SimpleInductiveBayes, verbosity, X, y) +# @doc raw""" +# MMI.fit(conf_model::SimpleInductiveBayes, verbosity, X, y) -For the [`SimpleInductiveBayes`](@ref) nonconformity scores are computed as follows: +# For the [`SimpleInductiveBayes`](@ref) nonconformity scores are computed as follows: -`` -S_i^{\text{CAL}} = s(X_i, Y_i) = h(\hat\mu(X_i), Y_i), \ i \in \mathcal{D}_{\text{calibration}} -`` +# `` +# S_i^{\text{CAL}} = s(X_i, Y_i) = h(\hat\mu(X_i), Y_i), \ i \in \mathcal{D}_{\text{calibration}} +# `` -A typical choice for the heuristic function is ``h(\hat\mu(X_i), Y_i)=1-\hat\mu(X_i)_{Y_i}`` where ``\hat\mu(X_i)_{Y_i}`` denotes the softmax output of the true class and ``\hat\mu`` denotes the model fitted on training data ``\mathcal{D}_{\text{train}}``. The simple approach only takes the softmax probability of the true label into account. -""" -function MMI.fit(conf_model::SimpleInductiveBayes, verbosity, X, y) +# A typical choice for the heuristic function is ``h(\hat\mu(X_i), Y_i)=1-\hat\mu(X_i)_{Y_i}`` where ``\hat\mu(X_i)_{Y_i}`` denotes the softmax output of the true class and ``\hat\mu`` denotes the model fitted on training data ``\mathcal{D}_{\text{train}}``. The simple approach only takes the softmax probability of the true label into account. +# """ +# function MMI.fit(conf_model::SimpleInductiveBayes, verbosity, X, y) - # Data Splitting: - train, calibration = partition(eachindex(y), conf_model.train_ratio) - Xtrain = selectrows(X, train) - ytrain = y[train] - Xtrain, ytrain = MMI.reformat(conf_model.model, Xtrain, ytrain) - Xcal = selectrows(X, calibration) - ycal = y[calibration] - Xcal, ycal = MMI.reformat(conf_model.model, Xcal, ycal) +# # Data Splitting: +# train, calibration = partition(eachindex(y), conf_model.train_ratio) +# Xtrain = selectrows(X, train) +# ytrain = y[train] +# Xtrain, ytrain = MMI.reformat(conf_model.model, Xtrain, ytrain) +# Xcal = selectrows(X, calibration) +# ycal = y[calibration] +# Xcal, ycal = MMI.reformat(conf_model.model, Xcal, ycal) - # Training: - fitresult, cache, report = MMI.fit(conf_model.model, verbosity, Xtrain, ytrain) +# # Training: +# fitresult, cache, report = MMI.fit(conf_model.model, verbosity, Xtrain, ytrain) - # Nonconformity Scores: - ŷ = pdf.(MMI.predict(conf_model.model, fitresult, Xcal), ycal) # predict returns a vector of distributions - conf_model.scores = @.(conf_model.heuristic(ycal, ŷ)) +# # Nonconformity Scores: +# ŷ = pdf.(MMI.predict(conf_model.model, fitresult, Xcal), ycal) # predict returns a vector of distributions +# conf_model.scores = @.(conf_model.heuristic(ycal, ŷ)) - return (fitresult, cache, report) -end +# return (fitresult, cache, report) +# end -@doc raw""" - MMI.predict(conf_model::SimpleInductiveBayes, fitresult, Xnew) +# @doc raw""" +# MMI.predict(conf_model::SimpleInductiveBayes, fitresult, Xnew) -For the [`SimpleInductiveBayes`](@ref) prediction sets are computed as follows, +# For the [`SimpleInductiveBayes`](@ref) prediction sets are computed as follows, -`` -\hat{C}_{n,\alpha}(X_{n+1}) = \left\{y: s(X_{n+1},y) \le \hat{q}_{n, \alpha}^{+} \{S_i^{\text{CAL}}\} \right\}, \ i \in \mathcal{D}_{\text{calibration}} -`` +# `` +# \hat{C}_{n,\alpha}(X_{n+1}) = \left\{y: s(X_{n+1},y) \le \hat{q}_{n, \alpha}^{+} \{S_i^{\text{CAL}}\} \right\}, \ i \in \mathcal{D}_{\text{calibration}} +# `` -where ``\mathcal{D}_{\text{calibration}}`` denotes the designated calibration data. -""" -function MMI.predict(conf_model::SimpleInductiveBayes, fitresult, Xnew) - p̂ = MMI.predict(conf_model.model, fitresult, MMI.reformat(conf_model.model, Xnew)...) - v = conf_model.scores - q̂ = Statistics.quantile(v, conf_model.coverage) - p̂ = map(p̂) do pp - L = p̂.decoder.classes - probas = pdf.(pp, L) - is_in_set = 1.0 .- probas .<= q̂ - if !all(is_in_set .== false) - pp = UnivariateFinite(L[is_in_set], probas[is_in_set]) - else - pp = missing - end - return pp - end - return p̂ -end \ No newline at end of file +# where ``\mathcal{D}_{\text{calibration}}`` denotes the designated calibration data. +# """ +# function MMI.predict(conf_model::SimpleInductiveBayes, fitresult, Xnew) +# p̂ = MMI.predict(conf_model.model, fitresult, MMI.reformat(conf_model.model, Xnew)...) +# v = conf_model.scores +# q̂ = Statistics.quantile(v, conf_model.coverage) +# p̂ = map(p̂) do pp +# L = p̂.decoder.classes +# probas = pdf.(pp, L) +# is_in_set = 1.0 .- probas .<= q̂ +# if !all(is_in_set .== false) +# pp = UnivariateFinite(L[is_in_set], probas[is_in_set]) +# else +# pp = missing +# end +# return pp +# end +# return p̂ +# end \ No newline at end of file diff --git a/src/ConformalModels/inductive_classification.jl b/src/ConformalModels/inductive_classification.jl index 071c952..e88774f 100644 --- a/src/ConformalModels/inductive_classification.jl +++ b/src/ConformalModels/inductive_classification.jl @@ -1,6 +1,6 @@ # Simple "The `SimpleInductiveClassifier` is the simplest approach to Inductive Conformal Classification. Contrary to the [`NaiveClassifier`](@ref) it computes nonconformity scores using a designated calibration dataset." -mutable struct SimpleInductiveClassifier{Model <: Supervised} <: ConformalSet +mutable struct SimpleInductiveClassifier{Model <: Supervised} <: ConformalProbabilisticSet model::Model coverage::AbstractFloat scores::Union{Nothing,AbstractArray} @@ -75,7 +75,7 @@ end # Adaptive "The `AdaptiveInductiveClassifier` is an improvement to the [`SimpleInductiveClassifier`](@ref) and the [`NaiveClassifier`](@ref). Contrary to the [`NaiveClassifier`](@ref) it computes nonconformity scores using a designated calibration dataset like the [`SimpleInductiveClassifier`](@ref). Contrary to the [`SimpleInductiveClassifier`](@ref) it utilizes the softmax output of all classes." -mutable struct AdaptiveInductiveClassifier{Model <: Supervised} <: ConformalSet +mutable struct AdaptiveInductiveClassifier{Model <: Supervised} <: ConformalProbabilisticSet model::Model coverage::AbstractFloat scores::Union{Nothing,AbstractArray} diff --git a/src/ConformalModels/plotting.jl b/src/ConformalModels/plotting.jl index bd76d40..1d5eb8c 100644 --- a/src/ConformalModels/plotting.jl +++ b/src/ConformalModels/plotting.jl @@ -1,10 +1,12 @@ +using CategoricalArrays using MLJ using Plots function Plots.plot( conf_model::ConformalModel,fitresult,X,y; target::Union{Nothing,Real}=nothing, - colorbar=true,title=nothing,length_out=50,zoom=-1,xlims=nothing,ylims=nothing,linewidth=0.1,lw=4,train_lab=nothing,hat_lab=nothing, + colorbar=true,title=nothing,length_out=50,zoom=-1,xlims=nothing,ylims=nothing,linewidth=0.1,lw=4, + train_lab=nothing,hat_lab=nothing,plot_set_size=false, kwargs... ) @@ -67,37 +69,62 @@ function Plots.plot( x_range = range(xlims[1],stop=xlims[2],length=length_out) y_range = range(ylims[1],stop=ylims[2],length=length_out) - # Plot - predict_ = function(X::AbstractVector) - z = la(X; link_approx=link_approx) - if outdim(la) == 1 # binary - z = [1.0 - z[1], z[1]] - end - return z + # Target + if !isnothing(target) + @assert target in unique(y) "Specified target does not match any of the labels." end - Z = [predict_([x,y]) for x=x_range, y=y_range] - Z = reduce(hcat, Z) - if outdim(la) > 1 + if length(unique(y)) > 1 if isnothing(target) @info "No target label supplied, using first." end target = isnothing(target) ? 1 : target - title = isnothing(title) ? "p̂(y=$(target))" : title + _default_title = plot_set_size ? "Set size" : "p̂(y=$(target))" else target = isnothing(target) ? 2 : target - title = isnothing(title) ? "p̂(y=$(target-1))" : title + _default_title = plot_set_size ? "Set size" : "p̂(y=$(target-1))" + end + title = isnothing(title) ? _default_title : title + + # Predictions + Z = [] + for y=y_range, x=x_range + p̂ = predict(conf_model, fitresult, [x y])[1] + if plot_set_size + z = ismissing(p̂) ? 0 : sum(pdf.(p̂, p̂.decoder.classes) .> 0) + else + z = ismissing(p̂) ? p̂ : pdf.(p̂, 1) + end + push!(Z, z) end + Z = reduce(hcat, Z) + Z = Z[Int(target),:] # Contour: - contourf( - x_range, y_range, Z[Int(target),:]; - colorbar=colorbar, title=title, linewidth=linewidth, - xlims=xlims, - ylims=ylims, - kwargs... - ) + if plot_set_size + _n = length(unique(y)) + clim=(0,_n) + plt = contourf( + x_range, y_range, Z; + colorbar=colorbar, title=title, linewidth=linewidth, + xlims=xlims, + ylims=ylims, + c=cgrad(:blues, _n+1, categorical = true), + clim=clim, + kwargs... + ) + else + plt = contourf( + x_range, y_range, Z; + colorbar=colorbar, title=title, linewidth=linewidth, + xlims=xlims, + ylims=ylims, + kwargs... + ) + end + # Samples: - scatter!(X[1,:],X[2,:],group=Int.(y); kwargs...) + y = typeof(y) <: CategoricalArrays.CategoricalArray ? y : Int.(y) + scatter!(plt, X[1,:],X[2,:],group=y; kwargs...) end diff --git a/src/ConformalModels/transductive_classification.jl b/src/ConformalModels/transductive_classification.jl index b9480ab..9f5b6af 100644 --- a/src/ConformalModels/transductive_classification.jl +++ b/src/ConformalModels/transductive_classification.jl @@ -1,6 +1,6 @@ # Simple "The `NaiveClassifier` is the simplest approach to Inductive Conformal Classification. Contrary to the [`NaiveClassifier`](@ref) it computes nonconformity scores using a designated trainibration dataset." -mutable struct NaiveClassifier{Model <: Supervised} <: ConformalSet +mutable struct NaiveClassifier{Model <: Supervised} <: ConformalProbabilisticSet model::Model coverage::AbstractFloat scores::Union{Nothing,AbstractArray} diff --git a/test/classification.jl b/test/classification.jl index 8f2c98b..ca90fc4 100644 --- a/test/classification.jl +++ b/test/classification.jl @@ -36,7 +36,7 @@ conformal_models = merge(values(available_models[:classification])...) predict(mach, selectrows(X, test)) # Plot - # plot(mach.model, mach.fitresult, X, y) + plot(mach.model, mach.fitresult, X, y) end