diff --git a/docs/build/html/Datasets.html b/docs/build/html/Datasets.html
deleted file mode 100644
index 775690d..0000000
--- a/docs/build/html/Datasets.html
+++ /dev/null
@@ -1,831 +0,0 @@
-
-
-<!doctype html>
-
-<html lang="en">
-  <head>
-    <meta charset="utf-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
-
-    <title>Datasets &#8212; QuaPy 0.1.7 documentation</title>
-    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
-    <link rel="stylesheet" type="text/css" href="_static/bizstyle.css" />
-    
-    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
-    <script src="_static/jquery.js"></script>
-    <script src="_static/underscore.js"></script>
-    <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
-    <script src="_static/doctools.js"></script>
-    <script src="_static/sphinx_highlight.js"></script>
-    <script src="_static/bizstyle.js"></script>
-    <link rel="index" title="Index" href="genindex.html" />
-    <link rel="search" title="Search" href="search.html" />
-    <link rel="next" title="Evaluation" href="Evaluation.html" />
-    <link rel="prev" title="Installation" href="Installation.html" />
-    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
-    <!--[if lt IE 9]>
-    <script src="_static/css3-mediaqueries.js"></script>
-    <![endif]-->
-  </head><body>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             accesskey="I">index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="right" >
-          <a href="Evaluation.html" title="Evaluation"
-             accesskey="N">next</a> |</li>
-        <li class="right" >
-          <a href="Installation.html" title="Installation"
-             accesskey="P">previous</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">Datasets</a></li> 
-      </ul>
-    </div>  
-
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          <div class="body" role="main">
-            
-  <section id="datasets">
-<h1>Datasets<a class="headerlink" href="#datasets" title="Permalink to this heading">¶</a></h1>
-<p>QuaPy makes available several datasets that have been used in
-quantification literature, as well as an interface to allow
-anyone import their custom datasets.</p>
-<p>A <em>Dataset</em> object in QuaPy is roughly a pair of <em>LabelledCollection</em> objects,
-one playing the role of the training set, another the test set.
-<em>LabelledCollection</em> is a data class consisting of the (iterable)
-instances and labels. This class handles most of the sampling functionality in QuaPy.
-Take a look at the following code:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">quapy</span> <span class="k">as</span> <span class="nn">qp</span>
-<span class="kn">import</span> <span class="nn">quapy.functional</span> <span class="k">as</span> <span class="nn">F</span>
-
-<span class="n">instances</span> <span class="o">=</span> <span class="p">[</span>
-    <span class="s1">&#39;1st positive document&#39;</span><span class="p">,</span> <span class="s1">&#39;2nd positive document&#39;</span><span class="p">,</span>
-    <span class="s1">&#39;the only negative document&#39;</span><span class="p">,</span>
-    <span class="s1">&#39;1st neutral document&#39;</span><span class="p">,</span> <span class="s1">&#39;2nd neutral document&#39;</span><span class="p">,</span> <span class="s1">&#39;3rd neutral document&#39;</span>
-<span class="p">]</span>
-<span class="n">labels</span> <span class="o">=</span> <span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">]</span>
-
-<span class="n">data</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">LabelledCollection</span><span class="p">(</span><span class="n">instances</span><span class="p">,</span> <span class="n">labels</span><span class="p">)</span>
-<span class="nb">print</span><span class="p">(</span><span class="n">F</span><span class="o">.</span><span class="n">strprev</span><span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">prevalence</span><span class="p">(),</span> <span class="n">prec</span><span class="o">=</span><span class="mi">2</span><span class="p">))</span>
-</pre></div>
-</div>
-<p>Output the class prevalences (showing 2 digit precision):</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mf">0.17</span><span class="p">,</span> <span class="mf">0.50</span><span class="p">,</span> <span class="mf">0.33</span><span class="p">]</span>
-</pre></div>
-</div>
-<p>One can easily produce new samples at desired class prevalence values:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sample_size</span> <span class="o">=</span> <span class="mi">10</span>
-<span class="n">prev</span> <span class="o">=</span> <span class="p">[</span><span class="mf">0.4</span><span class="p">,</span> <span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">]</span>
-<span class="n">sample</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">sampling</span><span class="p">(</span><span class="n">sample_size</span><span class="p">,</span> <span class="o">*</span><span class="n">prev</span><span class="p">)</span>
-
-<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;instances:&#39;</span><span class="p">,</span> <span class="n">sample</span><span class="o">.</span><span class="n">instances</span><span class="p">)</span>
-<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;labels:&#39;</span><span class="p">,</span> <span class="n">sample</span><span class="o">.</span><span class="n">labels</span><span class="p">)</span>
-<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;prevalence:&#39;</span><span class="p">,</span> <span class="n">F</span><span class="o">.</span><span class="n">strprev</span><span class="p">(</span><span class="n">sample</span><span class="o">.</span><span class="n">prevalence</span><span class="p">(),</span> <span class="n">prec</span><span class="o">=</span><span class="mi">2</span><span class="p">))</span>
-</pre></div>
-</div>
-<p>Which outputs:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">instances</span><span class="p">:</span> <span class="p">[</span><span class="s1">&#39;the only negative document&#39;</span> <span class="s1">&#39;2nd positive document&#39;</span>
- <span class="s1">&#39;2nd positive document&#39;</span> <span class="s1">&#39;2nd neutral document&#39;</span> <span class="s1">&#39;1st positive document&#39;</span>
- <span class="s1">&#39;the only negative document&#39;</span> <span class="s1">&#39;the only negative document&#39;</span>
- <span class="s1">&#39;the only negative document&#39;</span> <span class="s1">&#39;2nd positive document&#39;</span>
- <span class="s1">&#39;1st positive document&#39;</span><span class="p">]</span>
-<span class="n">labels</span><span class="p">:</span> <span class="p">[</span><span class="mi">0</span> <span class="mi">2</span> <span class="mi">2</span> <span class="mi">1</span> <span class="mi">2</span> <span class="mi">0</span> <span class="mi">0</span> <span class="mi">0</span> <span class="mi">2</span> <span class="mi">2</span><span class="p">]</span>
-<span class="n">prevalence</span><span class="p">:</span> <span class="p">[</span><span class="mf">0.40</span><span class="p">,</span> <span class="mf">0.10</span><span class="p">,</span> <span class="mf">0.50</span><span class="p">]</span>
-</pre></div>
-</div>
-<p>Samples can be made consistent across different runs (e.g., to test
-different methods on the same exact samples) by sampling and retaining
-the indexes, that can then be used to generate the sample:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">index</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">sampling_index</span><span class="p">(</span><span class="n">sample_size</span><span class="p">,</span> <span class="o">*</span><span class="n">prev</span><span class="p">)</span>
-<span class="k">for</span> <span class="n">method</span> <span class="ow">in</span> <span class="n">methods</span><span class="p">:</span>
-    <span class="n">sample</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">sampling_from_index</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-    <span class="o">...</span>
-</pre></div>
-</div>
-<p>However, generating samples for evaluation purposes is tackled in QuaPy
-by means of the evaluation protocols (see the dedicated entries in the Wiki
-for <a class="reference external" href="https://github.com/HLT-ISTI/QuaPy/wiki/Evaluation">evaluation</a> and
-<a class="reference external" href="https://github.com/HLT-ISTI/QuaPy/wiki/Protocols">protocols</a>).</p>
-<section id="reviews-datasets">
-<h2>Reviews Datasets<a class="headerlink" href="#reviews-datasets" title="Permalink to this heading">¶</a></h2>
-<p>Three datasets of reviews about Kindle devices, Harry Potter’s series, and
-the well-known IMDb movie reviews can be fetched using a unified interface.
-For example:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">quapy</span> <span class="k">as</span> <span class="nn">qp</span>
-<span class="n">data</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">fetch_reviews</span><span class="p">(</span><span class="s1">&#39;kindle&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>These datasets have been used in:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Esuli</span><span class="p">,</span> <span class="n">A</span><span class="o">.</span><span class="p">,</span> <span class="n">Moreo</span><span class="p">,</span> <span class="n">A</span><span class="o">.</span><span class="p">,</span> <span class="o">&amp;</span> <span class="n">Sebastiani</span><span class="p">,</span> <span class="n">F</span><span class="o">.</span> <span class="p">(</span><span class="mi">2018</span><span class="p">,</span> <span class="n">October</span><span class="p">)</span><span class="o">.</span> 
-<span class="n">A</span> <span class="n">recurrent</span> <span class="n">neural</span> <span class="n">network</span> <span class="k">for</span> <span class="n">sentiment</span> <span class="n">quantification</span><span class="o">.</span> 
-<span class="n">In</span> <span class="n">Proceedings</span> <span class="n">of</span> <span class="n">the</span> <span class="mi">27</span><span class="n">th</span> <span class="n">ACM</span> <span class="n">International</span> <span class="n">Conference</span> <span class="n">on</span> 
-<span class="n">Information</span> <span class="ow">and</span> <span class="n">Knowledge</span> <span class="n">Management</span> <span class="p">(</span><span class="n">pp</span><span class="o">.</span> <span class="mi">1775</span><span class="o">-</span><span class="mi">1778</span><span class="p">)</span><span class="o">.</span>
-</pre></div>
-</div>
-<p>The list of reviews ids is available in:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">qp</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">REVIEWS_SENTIMENT_DATASETS</span>
-</pre></div>
-</div>
-<p>Some statistics of the fhe available datasets are summarized below:</p>
-<table class="docutils align-default">
-<thead>
-<tr class="row-odd"><th class="head"><p>Dataset</p></th>
-<th class="head text-center"><p>classes</p></th>
-<th class="head text-center"><p>train size</p></th>
-<th class="head text-center"><p>test size</p></th>
-<th class="head text-center"><p>train prev</p></th>
-<th class="head text-center"><p>test prev</p></th>
-<th class="head"><p>type</p></th>
-</tr>
-</thead>
-<tbody>
-<tr class="row-even"><td><p>hp</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>9533</p></td>
-<td class="text-center"><p>18399</p></td>
-<td class="text-center"><p>[0.018, 0.982]</p></td>
-<td class="text-center"><p>[0.065, 0.935]</p></td>
-<td><p>text</p></td>
-</tr>
-<tr class="row-odd"><td><p>kindle</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>3821</p></td>
-<td class="text-center"><p>21591</p></td>
-<td class="text-center"><p>[0.081, 0.919]</p></td>
-<td class="text-center"><p>[0.063, 0.937]</p></td>
-<td><p>text</p></td>
-</tr>
-<tr class="row-even"><td><p>imdb</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>25000</p></td>
-<td class="text-center"><p>25000</p></td>
-<td class="text-center"><p>[0.500, 0.500]</p></td>
-<td class="text-center"><p>[0.500, 0.500]</p></td>
-<td><p>text</p></td>
-</tr>
-</tbody>
-</table>
-</section>
-<section id="twitter-sentiment-datasets">
-<h2>Twitter Sentiment Datasets<a class="headerlink" href="#twitter-sentiment-datasets" title="Permalink to this heading">¶</a></h2>
-<p>11 Twitter datasets for sentiment analysis.
-Text is not accessible, and the documents were made available
-in tf-idf format. Each dataset presents two splits: a train/val
-split for model selection purposes, and a train+val/test split
-for model evaluation. The following code exemplifies how to load
-a twitter dataset for model selection.</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">quapy</span> <span class="k">as</span> <span class="nn">qp</span>
-<span class="n">data</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">fetch_twitter</span><span class="p">(</span><span class="s1">&#39;gasp&#39;</span><span class="p">,</span> <span class="n">for_model_selection</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>The datasets were used in:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Gao</span><span class="p">,</span> <span class="n">W</span><span class="o">.</span><span class="p">,</span> <span class="o">&amp;</span> <span class="n">Sebastiani</span><span class="p">,</span> <span class="n">F</span><span class="o">.</span> <span class="p">(</span><span class="mi">2015</span><span class="p">,</span> <span class="n">August</span><span class="p">)</span><span class="o">.</span> 
-<span class="n">Tweet</span> <span class="n">sentiment</span><span class="p">:</span> <span class="n">From</span> <span class="n">classification</span> <span class="n">to</span> <span class="n">quantification</span><span class="o">.</span> 
-<span class="n">In</span> <span class="mi">2015</span> <span class="n">IEEE</span><span class="o">/</span><span class="n">ACM</span> <span class="n">International</span> <span class="n">Conference</span> <span class="n">on</span> <span class="n">Advances</span> <span class="ow">in</span> 
-<span class="n">Social</span> <span class="n">Networks</span> <span class="n">Analysis</span> <span class="ow">and</span> <span class="n">Mining</span> <span class="p">(</span><span class="n">ASONAM</span><span class="p">)</span> <span class="p">(</span><span class="n">pp</span><span class="o">.</span> <span class="mi">97</span><span class="o">-</span><span class="mi">104</span><span class="p">)</span><span class="o">.</span> <span class="n">IEEE</span><span class="o">.</span>
-</pre></div>
-</div>
-<p>Three of the datasets (semeval13, semeval14, and semeval15) share the
-same training set (semeval), meaning that the training split one would get
-when requesting any of them is the same. The dataset “semeval” can only
-be requested with “for_model_selection=True”.
-The lists of the Twitter dataset’s ids can be consulted in:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># a list of 11 dataset ids that can be used for model selection or model evaluation</span>
-<span class="n">qp</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">TWITTER_SENTIMENT_DATASETS_TEST</span>
-
-<span class="c1"># 9 dataset ids in which &quot;semeval13&quot;, &quot;semeval14&quot;, and &quot;semeval15&quot; are replaced with &quot;semeval&quot;</span>
-<span class="n">qp</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">TWITTER_SENTIMENT_DATASETS_TRAIN</span>  
-</pre></div>
-</div>
-<p>Some details can be found below:</p>
-<table class="docutils align-default">
-<thead>
-<tr class="row-odd"><th class="head"><p>Dataset</p></th>
-<th class="head text-center"><p>classes</p></th>
-<th class="head text-center"><p>train size</p></th>
-<th class="head text-center"><p>test size</p></th>
-<th class="head text-center"><p>features</p></th>
-<th class="head text-center"><p>train prev</p></th>
-<th class="head text-center"><p>test prev</p></th>
-<th class="head"><p>type</p></th>
-</tr>
-</thead>
-<tbody>
-<tr class="row-even"><td><p>gasp</p></td>
-<td class="text-center"><p>3</p></td>
-<td class="text-center"><p>8788</p></td>
-<td class="text-center"><p>3765</p></td>
-<td class="text-center"><p>694582</p></td>
-<td class="text-center"><p>[0.421, 0.496, 0.082]</p></td>
-<td class="text-center"><p>[0.407, 0.507, 0.086]</p></td>
-<td><p>sparse</p></td>
-</tr>
-<tr class="row-odd"><td><p>hcr</p></td>
-<td class="text-center"><p>3</p></td>
-<td class="text-center"><p>1594</p></td>
-<td class="text-center"><p>798</p></td>
-<td class="text-center"><p>222046</p></td>
-<td class="text-center"><p>[0.546, 0.211, 0.243]</p></td>
-<td class="text-center"><p>[0.640, 0.167, 0.193]</p></td>
-<td><p>sparse</p></td>
-</tr>
-<tr class="row-even"><td><p>omd</p></td>
-<td class="text-center"><p>3</p></td>
-<td class="text-center"><p>1839</p></td>
-<td class="text-center"><p>787</p></td>
-<td class="text-center"><p>199151</p></td>
-<td class="text-center"><p>[0.463, 0.271, 0.266]</p></td>
-<td class="text-center"><p>[0.437, 0.283, 0.280]</p></td>
-<td><p>sparse</p></td>
-</tr>
-<tr class="row-odd"><td><p>sanders</p></td>
-<td class="text-center"><p>3</p></td>
-<td class="text-center"><p>2155</p></td>
-<td class="text-center"><p>923</p></td>
-<td class="text-center"><p>229399</p></td>
-<td class="text-center"><p>[0.161, 0.691, 0.148]</p></td>
-<td class="text-center"><p>[0.164, 0.688, 0.148]</p></td>
-<td><p>sparse</p></td>
-</tr>
-<tr class="row-even"><td><p>semeval13</p></td>
-<td class="text-center"><p>3</p></td>
-<td class="text-center"><p>11338</p></td>
-<td class="text-center"><p>3813</p></td>
-<td class="text-center"><p>1215742</p></td>
-<td class="text-center"><p>[0.159, 0.470, 0.372]</p></td>
-<td class="text-center"><p>[0.158, 0.430, 0.412]</p></td>
-<td><p>sparse</p></td>
-</tr>
-<tr class="row-odd"><td><p>semeval14</p></td>
-<td class="text-center"><p>3</p></td>
-<td class="text-center"><p>11338</p></td>
-<td class="text-center"><p>1853</p></td>
-<td class="text-center"><p>1215742</p></td>
-<td class="text-center"><p>[0.159, 0.470, 0.372]</p></td>
-<td class="text-center"><p>[0.109, 0.361, 0.530]</p></td>
-<td><p>sparse</p></td>
-</tr>
-<tr class="row-even"><td><p>semeval15</p></td>
-<td class="text-center"><p>3</p></td>
-<td class="text-center"><p>11338</p></td>
-<td class="text-center"><p>2390</p></td>
-<td class="text-center"><p>1215742</p></td>
-<td class="text-center"><p>[0.159, 0.470, 0.372]</p></td>
-<td class="text-center"><p>[0.153, 0.413, 0.434]</p></td>
-<td><p>sparse</p></td>
-</tr>
-<tr class="row-odd"><td><p>semeval16</p></td>
-<td class="text-center"><p>3</p></td>
-<td class="text-center"><p>8000</p></td>
-<td class="text-center"><p>2000</p></td>
-<td class="text-center"><p>889504</p></td>
-<td class="text-center"><p>[0.157, 0.351, 0.492]</p></td>
-<td class="text-center"><p>[0.163, 0.341, 0.497]</p></td>
-<td><p>sparse</p></td>
-</tr>
-<tr class="row-even"><td><p>sst</p></td>
-<td class="text-center"><p>3</p></td>
-<td class="text-center"><p>2971</p></td>
-<td class="text-center"><p>1271</p></td>
-<td class="text-center"><p>376132</p></td>
-<td class="text-center"><p>[0.261, 0.452, 0.288]</p></td>
-<td class="text-center"><p>[0.207, 0.481, 0.312]</p></td>
-<td><p>sparse</p></td>
-</tr>
-<tr class="row-odd"><td><p>wa</p></td>
-<td class="text-center"><p>3</p></td>
-<td class="text-center"><p>2184</p></td>
-<td class="text-center"><p>936</p></td>
-<td class="text-center"><p>248563</p></td>
-<td class="text-center"><p>[0.305, 0.414, 0.281]</p></td>
-<td class="text-center"><p>[0.282, 0.446, 0.272]</p></td>
-<td><p>sparse</p></td>
-</tr>
-<tr class="row-even"><td><p>wb</p></td>
-<td class="text-center"><p>3</p></td>
-<td class="text-center"><p>4259</p></td>
-<td class="text-center"><p>1823</p></td>
-<td class="text-center"><p>404333</p></td>
-<td class="text-center"><p>[0.270, 0.392, 0.337]</p></td>
-<td class="text-center"><p>[0.274, 0.392, 0.335]</p></td>
-<td><p>sparse</p></td>
-</tr>
-</tbody>
-</table>
-</section>
-<section id="uci-machine-learning">
-<h2>UCI Machine Learning<a class="headerlink" href="#uci-machine-learning" title="Permalink to this heading">¶</a></h2>
-<p>A set of 32 datasets from the <a class="reference external" href="https://archive.ics.uci.edu/ml/datasets.php">UCI Machine Learning repository</a>
-used in:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Pérez</span><span class="o">-</span><span class="n">Gállego</span><span class="p">,</span> <span class="n">P</span><span class="o">.</span><span class="p">,</span> <span class="n">Quevedo</span><span class="p">,</span> <span class="n">J</span><span class="o">.</span> <span class="n">R</span><span class="o">.</span><span class="p">,</span> <span class="o">&amp;</span> <span class="k">del</span> <span class="n">Coz</span><span class="p">,</span> <span class="n">J</span><span class="o">.</span> <span class="n">J</span><span class="o">.</span> <span class="p">(</span><span class="mi">2017</span><span class="p">)</span><span class="o">.</span>
-<span class="n">Using</span> <span class="n">ensembles</span> <span class="k">for</span> <span class="n">problems</span> <span class="k">with</span> <span class="n">characterizable</span> <span class="n">changes</span> 
-<span class="ow">in</span> <span class="n">data</span> <span class="n">distribution</span><span class="p">:</span> <span class="n">A</span> <span class="n">case</span> <span class="n">study</span> <span class="n">on</span> <span class="n">quantification</span><span class="o">.</span>
-<span class="n">Information</span> <span class="n">Fusion</span><span class="p">,</span> <span class="mi">34</span><span class="p">,</span> <span class="mi">87</span><span class="o">-</span><span class="mf">100.</span>
-</pre></div>
-</div>
-<p>The list does not exactly coincide with that used in Pérez-Gállego et al. 2017
-since we were unable to find the datasets with ids “diabetes” and “phoneme”.</p>
-<p>These dataset can be loaded by calling, e.g.:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">quapy</span> <span class="k">as</span> <span class="nn">qp</span>
-<span class="n">data</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">fetch_UCIDataset</span><span class="p">(</span><span class="s1">&#39;yeast&#39;</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>This call will return a <em>Dataset</em> object in which the training and
-test splits are randomly drawn, in a stratified manner, from the whole
-collection at 70% and 30%, respectively. The <em>verbose=True</em> option indicates
-that the dataset description should be printed in standard output.
-The original data is not split,
-and some papers submit the entire collection to a kFCV validation.
-In order to accommodate with these practices, one could first instantiate
-the entire collection, and then creating a generator that will return one
-training+test dataset at a time, following a kFCV protocol:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">quapy</span> <span class="k">as</span> <span class="nn">qp</span>
-<span class="n">collection</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">fetch_UCILabelledCollection</span><span class="p">(</span><span class="s2">&quot;yeast&quot;</span><span class="p">)</span>
-<span class="k">for</span> <span class="n">data</span> <span class="ow">in</span> <span class="n">qp</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">Dataset</span><span class="o">.</span><span class="n">kFCV</span><span class="p">(</span><span class="n">collection</span><span class="p">,</span> <span class="n">nfolds</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">nrepeats</span><span class="o">=</span><span class="mi">2</span><span class="p">):</span>
-    <span class="o">...</span>
-</pre></div>
-</div>
-<p>Above code will allow to conduct a 2x5FCV evaluation on the “yeast” dataset.</p>
-<p>All datasets come in numerical form (dense matrices); some statistics
-are summarized below.</p>
-<table class="docutils align-default">
-<thead>
-<tr class="row-odd"><th class="head"><p>Dataset</p></th>
-<th class="head text-center"><p>classes</p></th>
-<th class="head text-center"><p>instances</p></th>
-<th class="head text-center"><p>features</p></th>
-<th class="head text-center"><p>prev</p></th>
-<th class="head"><p>type</p></th>
-</tr>
-</thead>
-<tbody>
-<tr class="row-even"><td><p>acute.a</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>120</p></td>
-<td class="text-center"><p>6</p></td>
-<td class="text-center"><p>[0.508, 0.492]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-odd"><td><p>acute.b</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>120</p></td>
-<td class="text-center"><p>6</p></td>
-<td class="text-center"><p>[0.583, 0.417]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-even"><td><p>balance.1</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>625</p></td>
-<td class="text-center"><p>4</p></td>
-<td class="text-center"><p>[0.539, 0.461]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-odd"><td><p>balance.2</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>625</p></td>
-<td class="text-center"><p>4</p></td>
-<td class="text-center"><p>[0.922, 0.078]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-even"><td><p>balance.3</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>625</p></td>
-<td class="text-center"><p>4</p></td>
-<td class="text-center"><p>[0.539, 0.461]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-odd"><td><p>breast-cancer</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>683</p></td>
-<td class="text-center"><p>9</p></td>
-<td class="text-center"><p>[0.350, 0.650]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-even"><td><p>cmc.1</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>1473</p></td>
-<td class="text-center"><p>9</p></td>
-<td class="text-center"><p>[0.573, 0.427]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-odd"><td><p>cmc.2</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>1473</p></td>
-<td class="text-center"><p>9</p></td>
-<td class="text-center"><p>[0.774, 0.226]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-even"><td><p>cmc.3</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>1473</p></td>
-<td class="text-center"><p>9</p></td>
-<td class="text-center"><p>[0.653, 0.347]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-odd"><td><p>ctg.1</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>2126</p></td>
-<td class="text-center"><p>22</p></td>
-<td class="text-center"><p>[0.222, 0.778]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-even"><td><p>ctg.2</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>2126</p></td>
-<td class="text-center"><p>22</p></td>
-<td class="text-center"><p>[0.861, 0.139]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-odd"><td><p>ctg.3</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>2126</p></td>
-<td class="text-center"><p>22</p></td>
-<td class="text-center"><p>[0.917, 0.083]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-even"><td><p>german</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>1000</p></td>
-<td class="text-center"><p>24</p></td>
-<td class="text-center"><p>[0.300, 0.700]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-odd"><td><p>haberman</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>306</p></td>
-<td class="text-center"><p>3</p></td>
-<td class="text-center"><p>[0.735, 0.265]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-even"><td><p>ionosphere</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>351</p></td>
-<td class="text-center"><p>34</p></td>
-<td class="text-center"><p>[0.641, 0.359]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-odd"><td><p>iris.1</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>150</p></td>
-<td class="text-center"><p>4</p></td>
-<td class="text-center"><p>[0.667, 0.333]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-even"><td><p>iris.2</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>150</p></td>
-<td class="text-center"><p>4</p></td>
-<td class="text-center"><p>[0.667, 0.333]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-odd"><td><p>iris.3</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>150</p></td>
-<td class="text-center"><p>4</p></td>
-<td class="text-center"><p>[0.667, 0.333]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-even"><td><p>mammographic</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>830</p></td>
-<td class="text-center"><p>5</p></td>
-<td class="text-center"><p>[0.514, 0.486]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-odd"><td><p>pageblocks.5</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>5473</p></td>
-<td class="text-center"><p>10</p></td>
-<td class="text-center"><p>[0.979, 0.021]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-even"><td><p>semeion</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>1593</p></td>
-<td class="text-center"><p>256</p></td>
-<td class="text-center"><p>[0.901, 0.099]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-odd"><td><p>sonar</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>208</p></td>
-<td class="text-center"><p>60</p></td>
-<td class="text-center"><p>[0.534, 0.466]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-even"><td><p>spambase</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>4601</p></td>
-<td class="text-center"><p>57</p></td>
-<td class="text-center"><p>[0.606, 0.394]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-odd"><td><p>spectf</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>267</p></td>
-<td class="text-center"><p>44</p></td>
-<td class="text-center"><p>[0.794, 0.206]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-even"><td><p>tictactoe</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>958</p></td>
-<td class="text-center"><p>9</p></td>
-<td class="text-center"><p>[0.653, 0.347]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-odd"><td><p>transfusion</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>748</p></td>
-<td class="text-center"><p>4</p></td>
-<td class="text-center"><p>[0.762, 0.238]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-even"><td><p>wdbc</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>569</p></td>
-<td class="text-center"><p>30</p></td>
-<td class="text-center"><p>[0.627, 0.373]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-odd"><td><p>wine.1</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>178</p></td>
-<td class="text-center"><p>13</p></td>
-<td class="text-center"><p>[0.669, 0.331]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-even"><td><p>wine.2</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>178</p></td>
-<td class="text-center"><p>13</p></td>
-<td class="text-center"><p>[0.601, 0.399]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-odd"><td><p>wine.3</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>178</p></td>
-<td class="text-center"><p>13</p></td>
-<td class="text-center"><p>[0.730, 0.270]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-even"><td><p>wine-q-red</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>1599</p></td>
-<td class="text-center"><p>11</p></td>
-<td class="text-center"><p>[0.465, 0.535]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-odd"><td><p>wine-q-white</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>4898</p></td>
-<td class="text-center"><p>11</p></td>
-<td class="text-center"><p>[0.335, 0.665]</p></td>
-<td><p>dense</p></td>
-</tr>
-<tr class="row-even"><td><p>yeast</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>1484</p></td>
-<td class="text-center"><p>8</p></td>
-<td class="text-center"><p>[0.711, 0.289]</p></td>
-<td><p>dense</p></td>
-</tr>
-</tbody>
-</table>
-<section id="issues">
-<h3>Issues:<a class="headerlink" href="#issues" title="Permalink to this heading">¶</a></h3>
-<p>All datasets will be downloaded automatically the first time they are requested, and
-stored in the <em>quapy_data</em> folder for faster further reuse.
-However, some datasets require special actions that at the moment are not fully
-automated.</p>
-<ul class="simple">
-<li><p>Datasets with ids “ctg.1”, “ctg.2”, and “ctg.3” (<em>Cardiotocography Data Set</em>) load
-an Excel file, which requires the user to install the <em>xlrd</em> Python module in order
-to open it.</p></li>
-<li><p>The dataset with id “pageblocks.5” (<em>Page Blocks Classification (5)</em>) needs to
-open a “unix compressed file” (extension .Z), which is not directly doable with
-standard Pythons packages like gzip or zip. This file would need to be uncompressed using
-OS-dependent software manually. Information on how to do it will be printed the first
-time the dataset is invoked.</p></li>
-</ul>
-</section>
-</section>
-<section id="lequa-datasets">
-<h2>LeQua Datasets<a class="headerlink" href="#lequa-datasets" title="Permalink to this heading">¶</a></h2>
-<p>QuaPy also provides the datasets used for the LeQua competition.
-In brief, there are 4 tasks (T1A, T1B, T2A, T2B) having to do with text quantification
-problems. Tasks T1A and T1B provide documents in vector form, while T2A and T2B provide
-raw documents instead.
-Tasks T1A and T2A are binary sentiment quantification problems, while T2A and T2B
-are multiclass quantification problems consisting of estimating the class prevalence
-values of 28 different merchandise products.</p>
-<p>Every task consists of a training set, a set of validation samples (for model selection)
-and a set of test samples (for evaluation). QuaPy returns this data as a LabelledCollection
-(training) and two generation protocols (for validation and test samples), as follows:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">training</span><span class="p">,</span> <span class="n">val_generator</span><span class="p">,</span> <span class="n">test_generator</span> <span class="o">=</span> <span class="n">fetch_lequa2022</span><span class="p">(</span><span class="n">task</span><span class="o">=</span><span class="n">task</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>See the <code class="docutils literal notranslate"><span class="pre">lequa2022_experiments.py</span></code> in the examples folder for further details on how to
-carry out experiments using these datasets.</p>
-<p>The datasets are downloaded only once, and stored for fast reuse.</p>
-<p>Some statistics are summarized below:</p>
-<table class="docutils align-default">
-<thead>
-<tr class="row-odd"><th class="head"><p>Dataset</p></th>
-<th class="head text-center"><p>classes</p></th>
-<th class="head text-center"><p>train size</p></th>
-<th class="head text-center"><p>validation samples</p></th>
-<th class="head text-center"><p>test samples</p></th>
-<th class="head text-center"><p>docs by sample</p></th>
-<th class="head text-center"><p>type</p></th>
-</tr>
-</thead>
-<tbody>
-<tr class="row-even"><td><p>T1A</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>5000</p></td>
-<td class="text-center"><p>1000</p></td>
-<td class="text-center"><p>5000</p></td>
-<td class="text-center"><p>250</p></td>
-<td class="text-center"><p>vector</p></td>
-</tr>
-<tr class="row-odd"><td><p>T1B</p></td>
-<td class="text-center"><p>28</p></td>
-<td class="text-center"><p>20000</p></td>
-<td class="text-center"><p>1000</p></td>
-<td class="text-center"><p>5000</p></td>
-<td class="text-center"><p>1000</p></td>
-<td class="text-center"><p>vector</p></td>
-</tr>
-<tr class="row-even"><td><p>T2A</p></td>
-<td class="text-center"><p>2</p></td>
-<td class="text-center"><p>5000</p></td>
-<td class="text-center"><p>1000</p></td>
-<td class="text-center"><p>5000</p></td>
-<td class="text-center"><p>250</p></td>
-<td class="text-center"><p>text</p></td>
-</tr>
-<tr class="row-odd"><td><p>T2B</p></td>
-<td class="text-center"><p>28</p></td>
-<td class="text-center"><p>20000</p></td>
-<td class="text-center"><p>1000</p></td>
-<td class="text-center"><p>5000</p></td>
-<td class="text-center"><p>1000</p></td>
-<td class="text-center"><p>text</p></td>
-</tr>
-</tbody>
-</table>
-<p>For further details on the datasets, we refer to the original
-<a class="reference external" href="https://ceur-ws.org/Vol-3180/paper-146.pdf">paper</a>:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Esuli</span><span class="p">,</span> <span class="n">A</span><span class="o">.</span><span class="p">,</span> <span class="n">Moreo</span><span class="p">,</span> <span class="n">A</span><span class="o">.</span><span class="p">,</span> <span class="n">Sebastiani</span><span class="p">,</span> <span class="n">F</span><span class="o">.</span><span class="p">,</span> <span class="o">&amp;</span> <span class="n">Sperduti</span><span class="p">,</span> <span class="n">G</span><span class="o">.</span> <span class="p">(</span><span class="mi">2022</span><span class="p">)</span><span class="o">.</span>
-<span class="n">A</span> <span class="n">Detailed</span> <span class="n">Overview</span> <span class="n">of</span> <span class="n">LeQua</span><span class="o">@</span> <span class="n">CLEF</span> <span class="mi">2022</span><span class="p">:</span> <span class="n">Learning</span> <span class="n">to</span> <span class="n">Quantify</span><span class="o">.</span>
-</pre></div>
-</div>
-</section>
-<section id="adding-custom-datasets">
-<h2>Adding Custom Datasets<a class="headerlink" href="#adding-custom-datasets" title="Permalink to this heading">¶</a></h2>
-<p>QuaPy provides data loaders for simple formats dealing with
-text, following the format:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">class</span><span class="o">-</span><span class="nb">id</span> \<span class="n">t</span> <span class="n">first</span> <span class="n">document</span><span class="s1">&#39;s pre-processed text </span><span class="se">\n</span>
-<span class="n">class</span><span class="o">-</span><span class="nb">id</span> \<span class="n">t</span> <span class="n">second</span> <span class="n">document</span><span class="s1">&#39;s pre-processed text </span><span class="se">\n</span>
-<span class="o">...</span>
-</pre></div>
-</div>
-<p>and sparse representations of the form:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="ow">or</span> <span class="o">+</span><span class="mi">1</span><span class="p">}</span> <span class="n">col</span><span class="p">(</span><span class="nb">int</span><span class="p">):</span><span class="n">val</span><span class="p">(</span><span class="nb">float</span><span class="p">)</span> <span class="n">col</span><span class="p">(</span><span class="nb">int</span><span class="p">):</span><span class="n">val</span><span class="p">(</span><span class="nb">float</span><span class="p">)</span> <span class="o">...</span> \<span class="n">n</span>
-<span class="o">...</span>
-</pre></div>
-</div>
-<p>The code in charge in loading a LabelledCollection is:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="nd">@classmethod</span>
-<span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span><span class="nb">str</span><span class="p">,</span> <span class="n">loader_func</span><span class="p">:</span><span class="n">callable</span><span class="p">):</span>
-    <span class="k">return</span> <span class="n">LabelledCollection</span><span class="p">(</span><span class="o">*</span><span class="n">loader_func</span><span class="p">(</span><span class="n">path</span><span class="p">))</span>
-</pre></div>
-</div>
-<p>indicating that any <em>loader_func</em> (e.g., a user-defined one) which
-returns valid arguments for initializing a <em>LabelledCollection</em> object will allow
-to load any collection. In particular, the <em>LabelledCollection</em> receives as
-arguments the instances (as an iterable) and the labels (as an iterable) and,
-additionally, the number of classes can be specified (it would otherwise be
-inferred from the labels, but that requires at least one positive example for
-all classes to be present in the collection).</p>
-<p>The same <em>loader_func</em> can be passed to a Dataset, along with two
-paths, in order to create a training and test pair of <em>LabelledCollection</em>,
-e.g.:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">quapy</span> <span class="k">as</span> <span class="nn">qp</span>
-
-<span class="n">train_path</span> <span class="o">=</span> <span class="s1">&#39;../my_data/train.dat&#39;</span>
-<span class="n">test_path</span> <span class="o">=</span> <span class="s1">&#39;../my_data/test.dat&#39;</span>
-
-<span class="k">def</span> <span class="nf">my_custom_loader</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
-    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s1">&#39;rb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">fin</span><span class="p">:</span>
-        <span class="o">...</span>
-    <span class="k">return</span> <span class="n">instances</span><span class="p">,</span> <span class="n">labels</span>
-
-<span class="n">data</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">Dataset</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">train_path</span><span class="p">,</span> <span class="n">test_path</span><span class="p">,</span> <span class="n">my_custom_loader</span><span class="p">)</span>
-</pre></div>
-</div>
-<section id="data-processing">
-<h3>Data Processing<a class="headerlink" href="#data-processing" title="Permalink to this heading">¶</a></h3>
-<p>QuaPy implements a number of preprocessing functions in the package <em>qp.data.preprocessing</em>, including:</p>
-<ul class="simple">
-<li><p><em>text2tfidf</em>: tfidf vectorization</p></li>
-<li><p><em>reduce_columns</em>: reducing the number of columns based on term frequency</p></li>
-<li><p><em>standardize</em>: transforms the column values into z-scores (i.e., subtract the mean and normalizes by the standard deviation, so
-that the column values have zero mean and unit variance).</p></li>
-<li><p><em>index</em>: transforms textual tokens into lists of numeric ids)</p></li>
-</ul>
-</section>
-</section>
-</section>
-
-
-            <div class="clearer"></div>
-          </div>
-        </div>
-      </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-  <div>
-    <h3><a href="index.html">Table of Contents</a></h3>
-    <ul>
-<li><a class="reference internal" href="#">Datasets</a><ul>
-<li><a class="reference internal" href="#reviews-datasets">Reviews Datasets</a></li>
-<li><a class="reference internal" href="#twitter-sentiment-datasets">Twitter Sentiment Datasets</a></li>
-<li><a class="reference internal" href="#uci-machine-learning">UCI Machine Learning</a><ul>
-<li><a class="reference internal" href="#issues">Issues:</a></li>
-</ul>
-</li>
-<li><a class="reference internal" href="#lequa-datasets">LeQua Datasets</a></li>
-<li><a class="reference internal" href="#adding-custom-datasets">Adding Custom Datasets</a><ul>
-<li><a class="reference internal" href="#data-processing">Data Processing</a></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-
-  </div>
-  <div>
-    <h4>Previous topic</h4>
-    <p class="topless"><a href="Installation.html"
-                          title="previous chapter">Installation</a></p>
-  </div>
-  <div>
-    <h4>Next topic</h4>
-    <p class="topless"><a href="Evaluation.html"
-                          title="next chapter">Evaluation</a></p>
-  </div>
-  <div role="note" aria-label="source link">
-    <h3>This Page</h3>
-    <ul class="this-page-menu">
-      <li><a href="_sources/Datasets.md.txt"
-            rel="nofollow">Show Source</a></li>
-    </ul>
-   </div>
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Quick search</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
-      <input type="submit" value="Go" />
-    </form>
-    </div>
-</div>
-<script>document.getElementById('searchbox').style.display = "block"</script>
-        </div>
-      </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             >index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="right" >
-          <a href="Evaluation.html" title="Evaluation"
-             >next</a> |</li>
-        <li class="right" >
-          <a href="Installation.html" title="Installation"
-             >previous</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">Datasets</a></li> 
-      </ul>
-    </div>
-    <div class="footer" role="contentinfo">
-        &#169; Copyright 2021, Alejandro Moreo.
-      Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
-    </div>
-  </body>
-</html>
\ No newline at end of file
diff --git a/docs/build/html/Evaluation.html b/docs/build/html/Evaluation.html
deleted file mode 100644
index 1b41a03..0000000
--- a/docs/build/html/Evaluation.html
+++ /dev/null
@@ -1,281 +0,0 @@
-
-
-<!doctype html>
-
-<html lang="en">
-  <head>
-    <meta charset="utf-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
-
-    <title>Evaluation &#8212; QuaPy 0.1.7 documentation</title>
-    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
-    <link rel="stylesheet" type="text/css" href="_static/bizstyle.css" />
-    
-    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
-    <script src="_static/jquery.js"></script>
-    <script src="_static/underscore.js"></script>
-    <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
-    <script src="_static/doctools.js"></script>
-    <script src="_static/sphinx_highlight.js"></script>
-    <script src="_static/bizstyle.js"></script>
-    <link rel="index" title="Index" href="genindex.html" />
-    <link rel="search" title="Search" href="search.html" />
-    <link rel="next" title="Protocols" href="Protocols.html" />
-    <link rel="prev" title="Datasets" href="Datasets.html" />
-    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
-    <!--[if lt IE 9]>
-    <script src="_static/css3-mediaqueries.js"></script>
-    <![endif]-->
-  </head><body>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             accesskey="I">index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="right" >
-          <a href="Protocols.html" title="Protocols"
-             accesskey="N">next</a> |</li>
-        <li class="right" >
-          <a href="Datasets.html" title="Datasets"
-             accesskey="P">previous</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">Evaluation</a></li> 
-      </ul>
-    </div>  
-
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          <div class="body" role="main">
-            
-  <section id="evaluation">
-<h1>Evaluation<a class="headerlink" href="#evaluation" title="Permalink to this heading">¶</a></h1>
-<p>Quantification is an appealing tool in scenarios of dataset shift,
-and particularly in scenarios of prior-probability shift.
-That is, the interest in estimating the class prevalences arises
-under the belief that those class prevalences might have changed
-with respect to the ones observed during training.
-In other words, one could simply return the training prevalence
-as a predictor of the test prevalence if this change is assumed
-to be unlikely (as is the case in general scenarios of
-machine learning governed by the iid assumption).
-In brief, quantification requires dedicated evaluation protocols,
-which are implemented in QuaPy and explained here.</p>
-<section id="error-measures">
-<h2>Error Measures<a class="headerlink" href="#error-measures" title="Permalink to this heading">¶</a></h2>
-<p>The module quapy.error implements the following error measures for quantification:</p>
-<ul class="simple">
-<li><p><em>mae</em>: mean absolute error</p></li>
-<li><p><em>mrae</em>: mean relative absolute error</p></li>
-<li><p><em>mse</em>: mean squared error</p></li>
-<li><p><em>mkld</em>: mean Kullback-Leibler Divergence</p></li>
-<li><p><em>mnkld</em>: mean normalized Kullback-Leibler Divergence</p></li>
-</ul>
-<p>Functions <em>ae</em>, <em>rae</em>, <em>se</em>, <em>kld</em>, and <em>nkld</em> are also available,
-which return the individual errors (i.e., without averaging the whole).</p>
-<p>Some errors of classification are also available:</p>
-<ul class="simple">
-<li><p><em>acce</em>: accuracy error (1-accuracy)</p></li>
-<li><p><em>f1e</em>: F-1 score error (1-F1 score)</p></li>
-</ul>
-<p>The error functions implement the following interface, e.g.:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">mae</span><span class="p">(</span><span class="n">true_prevs</span><span class="p">,</span> <span class="n">prevs_hat</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>in which the first argument is a ndarray containing the true
-prevalences, and the second argument is another ndarray with
-the estimations produced by some method.</p>
-<p>Some error functions, e.g., <em>mrae</em>, <em>mkld</em>, and <em>mnkld</em>, are
-smoothed for numerical stability. In those cases, there is a
-third argument, e.g.:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">mrae</span><span class="p">(</span><span class="n">true_prevs</span><span class="p">,</span> <span class="n">prevs_hat</span><span class="p">,</span> <span class="n">eps</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> <span class="o">...</span>
-</pre></div>
-</div>
-<p>indicating the value for the smoothing parameter epsilon.
-Traditionally, this value is set to 1/(2T) in past literature,
-with T the sampling size. One could either pass this value
-to the function each time, or to set a QuaPy’s environment
-variable <em>SAMPLE_SIZE</em> once, and omit this argument
-thereafter (recommended);
-e.g.:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">qp</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s1">&#39;SAMPLE_SIZE&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">100</span>  <span class="c1"># once for all</span>
-<span class="n">true_prev</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">([</span><span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.3</span><span class="p">,</span> <span class="mf">0.2</span><span class="p">])</span>  <span class="c1"># let&#39;s assume 3 classes</span>
-<span class="n">estim_prev</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">asarray</span><span class="p">([</span><span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.3</span><span class="p">,</span> <span class="mf">0.6</span><span class="p">])</span>
-<span class="n">error</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">error</span><span class="o">.</span><span class="n">mrae</span><span class="p">(</span><span class="n">true_prev</span><span class="p">,</span> <span class="n">estim_prev</span><span class="p">)</span>
-<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;mrae(</span><span class="si">{</span><span class="n">true_prev</span><span class="si">}</span><span class="s1">, </span><span class="si">{</span><span class="n">estim_prev</span><span class="si">}</span><span class="s1">) = </span><span class="si">{</span><span class="n">error</span><span class="si">:</span><span class="s1">.3f</span><span class="si">}</span><span class="s1">&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>will print:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">mrae</span><span class="p">([</span><span class="mf">0.500</span><span class="p">,</span> <span class="mf">0.300</span><span class="p">,</span> <span class="mf">0.200</span><span class="p">],</span> <span class="p">[</span><span class="mf">0.100</span><span class="p">,</span> <span class="mf">0.300</span><span class="p">,</span> <span class="mf">0.600</span><span class="p">])</span> <span class="o">=</span> <span class="mf">0.914</span>
-</pre></div>
-</div>
-<p>Finally, it is possible to instantiate QuaPy’s quantification
-error functions from strings using, e.g.:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">error_function</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">error</span><span class="o">.</span><span class="n">from_name</span><span class="p">(</span><span class="s1">&#39;mse&#39;</span><span class="p">)</span>
-<span class="n">error</span> <span class="o">=</span> <span class="n">error_function</span><span class="p">(</span><span class="n">true_prev</span><span class="p">,</span> <span class="n">estim_prev</span><span class="p">)</span>
-</pre></div>
-</div>
-</section>
-<section id="evaluation-protocols">
-<h2>Evaluation Protocols<a class="headerlink" href="#evaluation-protocols" title="Permalink to this heading">¶</a></h2>
-<p>An <em>evaluation protocol</em> is an evaluation procedure that uses
-one specific <em>sample generation procotol</em> to genereate many
-samples, typically characterized by widely varying amounts of
-<em>shift</em> with respect to the original distribution, that are then
-used to evaluate the performance of a (trained) quantifier.
-These protocols are explained in more detail in a dedicated <a class="reference internal" href="Protocols.html"><span class="doc std std-doc">entry
-in the wiki</span></a>. For the moment being, let us assume we already have
-chosen and instantiated one specific such protocol, that we here
-simply call <em>prot</em>. Let also assume our model is called
-<em>quantifier</em> and that our evaluatio measure of choice is
-<em>mae</em>. The evaluation comes down to:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">mae</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">evaluation</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="n">quantifier</span><span class="p">,</span> <span class="n">protocol</span><span class="o">=</span><span class="n">prot</span><span class="p">,</span> <span class="n">error_metric</span><span class="o">=</span><span class="s1">&#39;mae&#39;</span><span class="p">)</span>
-<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;MAE = </span><span class="si">{</span><span class="n">mae</span><span class="si">:</span><span class="s1">.4f</span><span class="si">}</span><span class="s1">&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>It is often desirable to evaluate our system using more than one
-single evaluatio measure. In this case, it is convenient to generate
-a <em>report</em>. A report in QuaPy is a dataframe accounting for all the
-true prevalence values with their corresponding prevalence values
-as estimated by the quantifier, along with the error each has given
-rise.</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">report</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">evaluation</span><span class="o">.</span><span class="n">evaluation_report</span><span class="p">(</span><span class="n">quantifier</span><span class="p">,</span> <span class="n">protocol</span><span class="o">=</span><span class="n">prot</span><span class="p">,</span> <span class="n">error_metrics</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;mae&#39;</span><span class="p">,</span> <span class="s1">&#39;mrae&#39;</span><span class="p">,</span> <span class="s1">&#39;mkld&#39;</span><span class="p">])</span>
-</pre></div>
-</div>
-<p>From a pandas’ dataframe, it is straightforward to visualize all the results,
-and compute the averaged values, e.g.:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">pd</span><span class="o">.</span><span class="n">set_option</span><span class="p">(</span><span class="s1">&#39;display.expand_frame_repr&#39;</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
-<span class="n">report</span><span class="p">[</span><span class="s1">&#39;estim-prev&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">report</span><span class="p">[</span><span class="s1">&#39;estim-prev&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">F</span><span class="o">.</span><span class="n">strprev</span><span class="p">)</span>
-<span class="nb">print</span><span class="p">(</span><span class="n">report</span><span class="p">)</span>
-
-<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Averaged values:&#39;</span><span class="p">)</span>
-<span class="nb">print</span><span class="p">(</span><span class="n">report</span><span class="o">.</span><span class="n">mean</span><span class="p">())</span>
-</pre></div>
-</div>
-<p>This will produce an output like:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>           <span class="n">true</span><span class="o">-</span><span class="n">prev</span>      <span class="n">estim</span><span class="o">-</span><span class="n">prev</span>       <span class="n">mae</span>      <span class="n">mrae</span>      <span class="n">mkld</span>
-<span class="mi">0</span>     <span class="p">[</span><span class="mf">0.308</span><span class="p">,</span> <span class="mf">0.692</span><span class="p">]</span>  <span class="p">[</span><span class="mf">0.314</span><span class="p">,</span> <span class="mf">0.686</span><span class="p">]</span>  <span class="mf">0.005649</span>  <span class="mf">0.013182</span>  <span class="mf">0.000074</span>
-<span class="mi">1</span>     <span class="p">[</span><span class="mf">0.896</span><span class="p">,</span> <span class="mf">0.104</span><span class="p">]</span>  <span class="p">[</span><span class="mf">0.909</span><span class="p">,</span> <span class="mf">0.091</span><span class="p">]</span>  <span class="mf">0.013145</span>  <span class="mf">0.069323</span>  <span class="mf">0.000985</span>
-<span class="mi">2</span>     <span class="p">[</span><span class="mf">0.848</span><span class="p">,</span> <span class="mf">0.152</span><span class="p">]</span>  <span class="p">[</span><span class="mf">0.809</span><span class="p">,</span> <span class="mf">0.191</span><span class="p">]</span>  <span class="mf">0.039063</span>  <span class="mf">0.149806</span>  <span class="mf">0.005175</span>
-<span class="mi">3</span>     <span class="p">[</span><span class="mf">0.016</span><span class="p">,</span> <span class="mf">0.984</span><span class="p">]</span>  <span class="p">[</span><span class="mf">0.033</span><span class="p">,</span> <span class="mf">0.967</span><span class="p">]</span>  <span class="mf">0.017236</span>  <span class="mf">0.487529</span>  <span class="mf">0.005298</span>
-<span class="mi">4</span>     <span class="p">[</span><span class="mf">0.728</span><span class="p">,</span> <span class="mf">0.272</span><span class="p">]</span>  <span class="p">[</span><span class="mf">0.751</span><span class="p">,</span> <span class="mf">0.249</span><span class="p">]</span>  <span class="mf">0.022769</span>  <span class="mf">0.057146</span>  <span class="mf">0.001350</span>
-<span class="o">...</span>              <span class="o">...</span>             <span class="o">...</span>       <span class="o">...</span>       <span class="o">...</span>       <span class="o">...</span>
-<span class="mi">4995</span>    <span class="p">[</span><span class="mf">0.72</span><span class="p">,</span> <span class="mf">0.28</span><span class="p">]</span>  <span class="p">[</span><span class="mf">0.698</span><span class="p">,</span> <span class="mf">0.302</span><span class="p">]</span>  <span class="mf">0.021752</span>  <span class="mf">0.053631</span>  <span class="mf">0.001133</span>
-<span class="mi">4996</span>  <span class="p">[</span><span class="mf">0.868</span><span class="p">,</span> <span class="mf">0.132</span><span class="p">]</span>  <span class="p">[</span><span class="mf">0.888</span><span class="p">,</span> <span class="mf">0.112</span><span class="p">]</span>  <span class="mf">0.020490</span>  <span class="mf">0.088230</span>  <span class="mf">0.001985</span>
-<span class="mi">4997</span>  <span class="p">[</span><span class="mf">0.292</span><span class="p">,</span> <span class="mf">0.708</span><span class="p">]</span>  <span class="p">[</span><span class="mf">0.298</span><span class="p">,</span> <span class="mf">0.702</span><span class="p">]</span>  <span class="mf">0.006149</span>  <span class="mf">0.014788</span>  <span class="mf">0.000090</span>
-<span class="mi">4998</span>    <span class="p">[</span><span class="mf">0.24</span><span class="p">,</span> <span class="mf">0.76</span><span class="p">]</span>  <span class="p">[</span><span class="mf">0.220</span><span class="p">,</span> <span class="mf">0.780</span><span class="p">]</span>  <span class="mf">0.019950</span>  <span class="mf">0.054309</span>  <span class="mf">0.001127</span>
-<span class="mi">4999</span>  <span class="p">[</span><span class="mf">0.948</span><span class="p">,</span> <span class="mf">0.052</span><span class="p">]</span>  <span class="p">[</span><span class="mf">0.965</span><span class="p">,</span> <span class="mf">0.035</span><span class="p">]</span>  <span class="mf">0.016941</span>  <span class="mf">0.165776</span>  <span class="mf">0.003538</span>
-
-<span class="p">[</span><span class="mi">5000</span> <span class="n">rows</span> <span class="n">x</span> <span class="mi">5</span> <span class="n">columns</span><span class="p">]</span>
-<span class="n">Averaged</span> <span class="n">values</span><span class="p">:</span>
-<span class="n">mae</span>     <span class="mf">0.023588</span>
-<span class="n">mrae</span>    <span class="mf">0.108779</span>
-<span class="n">mkld</span>    <span class="mf">0.003631</span>
-<span class="n">dtype</span><span class="p">:</span> <span class="n">float64</span>
-
-<span class="n">Process</span> <span class="n">finished</span> <span class="k">with</span> <span class="n">exit</span> <span class="n">code</span> <span class="mi">0</span>
-</pre></div>
-</div>
-<p>Alternatively, we can simply generate all the predictions by:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">true_prevs</span><span class="p">,</span> <span class="n">estim_prevs</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">evaluation</span><span class="o">.</span><span class="n">prediction</span><span class="p">(</span><span class="n">quantifier</span><span class="p">,</span> <span class="n">protocol</span><span class="o">=</span><span class="n">prot</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>All the evaluation functions implement specific optimizations for speeding-up
-the evaluation of aggregative quantifiers (i.e., of instances of <em>AggregativeQuantifier</em>).
-The optimization comes down to generating classification predictions (either crisp or soft)
-only once for the entire test set, and then applying the sampling procedure to the
-predictions, instead of generating samples of instances and then computing the
-classification predictions every time. This is only possible when the protocol
-is an instance of <em>OnLabelledCollectionProtocol</em>. The optimization is only
-carried out when the number of classification predictions thus generated would be
-smaller than the number of predictions required for the entire protocol; e.g.,
-if the original dataset contains 1M instances, but the protocol is such that it would
-at most generate 20 samples of 100 instances, then it would be preferable to postpone the
-classification for each sample. This behaviour is indicated by setting
-<em>aggr_speedup=”auto”</em>. Conversely, when indicating <em>aggr_speedup=”force”</em> QuaPy will
-precompute all the predictions irrespectively of the number of instances and number of samples.
-Finally, this can be deactivated by setting <em>aggr_speedup=False</em>. Note that this optimization
-is not only applied for the final evaluation, but also for the internal evaluations carried
-out during <em>model selection</em>. Since these are typically many, the heuristic can help reduce the
-execution time a lot.</p>
-</section>
-</section>
-
-
-            <div class="clearer"></div>
-          </div>
-        </div>
-      </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-  <div>
-    <h3><a href="index.html">Table of Contents</a></h3>
-    <ul>
-<li><a class="reference internal" href="#">Evaluation</a><ul>
-<li><a class="reference internal" href="#error-measures">Error Measures</a></li>
-<li><a class="reference internal" href="#evaluation-protocols">Evaluation Protocols</a></li>
-</ul>
-</li>
-</ul>
-
-  </div>
-  <div>
-    <h4>Previous topic</h4>
-    <p class="topless"><a href="Datasets.html"
-                          title="previous chapter">Datasets</a></p>
-  </div>
-  <div>
-    <h4>Next topic</h4>
-    <p class="topless"><a href="Protocols.html"
-                          title="next chapter">Protocols</a></p>
-  </div>
-  <div role="note" aria-label="source link">
-    <h3>This Page</h3>
-    <ul class="this-page-menu">
-      <li><a href="_sources/Evaluation.md.txt"
-            rel="nofollow">Show Source</a></li>
-    </ul>
-   </div>
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Quick search</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
-      <input type="submit" value="Go" />
-    </form>
-    </div>
-</div>
-<script>document.getElementById('searchbox').style.display = "block"</script>
-        </div>
-      </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             >index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="right" >
-          <a href="Protocols.html" title="Protocols"
-             >next</a> |</li>
-        <li class="right" >
-          <a href="Datasets.html" title="Datasets"
-             >previous</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">Evaluation</a></li> 
-      </ul>
-    </div>
-    <div class="footer" role="contentinfo">
-        &#169; Copyright 2021, Alejandro Moreo.
-      Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
-    </div>
-  </body>
-</html>
\ No newline at end of file
diff --git a/docs/build/html/Installation.html b/docs/build/html/Installation.html
deleted file mode 100644
index b63e795..0000000
--- a/docs/build/html/Installation.html
+++ /dev/null
@@ -1,178 +0,0 @@
-
-
-<!doctype html>
-
-<html lang="en">
-  <head>
-    <meta charset="utf-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
-
-    <title>Installation &#8212; QuaPy 0.1.7 documentation</title>
-    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
-    <link rel="stylesheet" type="text/css" href="_static/bizstyle.css" />
-    
-    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
-    <script src="_static/jquery.js"></script>
-    <script src="_static/underscore.js"></script>
-    <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
-    <script src="_static/doctools.js"></script>
-    <script src="_static/sphinx_highlight.js"></script>
-    <script src="_static/bizstyle.js"></script>
-    <link rel="index" title="Index" href="genindex.html" />
-    <link rel="search" title="Search" href="search.html" />
-    <link rel="next" title="Datasets" href="Datasets.html" />
-    <link rel="prev" title="Welcome to QuaPy’s documentation!" href="index.html" />
-    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
-    <!--[if lt IE 9]>
-    <script src="_static/css3-mediaqueries.js"></script>
-    <![endif]-->
-  </head><body>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             accesskey="I">index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="right" >
-          <a href="Datasets.html" title="Datasets"
-             accesskey="N">next</a> |</li>
-        <li class="right" >
-          <a href="index.html" title="Welcome to QuaPy’s documentation!"
-             accesskey="P">previous</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">Installation</a></li> 
-      </ul>
-    </div>  
-
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          <div class="body" role="main">
-            
-  <section id="installation">
-<h1>Installation<a class="headerlink" href="#installation" title="Permalink to this heading">¶</a></h1>
-<p>QuaPy can be easily installed via <cite>pip</cite></p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pip</span> <span class="n">install</span> <span class="n">quapy</span>
-</pre></div>
-</div>
-<p>See <a class="reference external" href="https://pypi.org/project/QuaPy/">pip page</a> for older versions.</p>
-<section id="requirements">
-<h2>Requirements<a class="headerlink" href="#requirements" title="Permalink to this heading">¶</a></h2>
-<ul class="simple">
-<li><p>scikit-learn, numpy, scipy</p></li>
-<li><p>pytorch (for QuaNet)</p></li>
-<li><p>svmperf patched for quantification (see below)</p></li>
-<li><p>joblib</p></li>
-<li><p>tqdm</p></li>
-<li><p>pandas, xlrd</p></li>
-<li><p>matplotlib</p></li>
-</ul>
-</section>
-<section id="svm-perf-with-quantification-oriented-losses">
-<h2>SVM-perf with quantification-oriented losses<a class="headerlink" href="#svm-perf-with-quantification-oriented-losses" title="Permalink to this heading">¶</a></h2>
-<p>In order to run experiments involving SVM(Q), SVM(KLD), SVM(NKLD),
-SVM(AE), or SVM(RAE), you have to first download the
-<a class="reference external" href="http://www.cs.cornell.edu/people/tj/svm_light/svm_perf.html">svmperf</a>
-package, apply the patch
-<a class="reference external" href="https://github.com/HLT-ISTI/QuaPy/blob/master/svm-perf-quantification-ext.patch">svm-perf-quantification-ext.patch</a>,
-and compile the sources.
-The script
-<a class="reference external" href="https://github.com/HLT-ISTI/QuaPy/blob/master/prepare_svmperf.sh">prepare_svmperf.sh</a>,
-does all the job. Simply run:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">./</span><span class="n">prepare_svmperf</span><span class="o">.</span><span class="n">sh</span>
-</pre></div>
-</div>
-<p>The resulting directory <cite>./svm_perf_quantification</cite> contains the
-patched version of <cite>svmperf</cite> with quantification-oriented losses.</p>
-<p>The
-<a class="reference external" href="https://github.com/HLT-ISTI/QuaPy/blob/master/svm-perf-quantification-ext.patch">svm-perf-quantification-ext.patch</a>
-is an extension of the patch made available by
-<a class="reference external" href="https://dl.acm.org/doi/abs/10.1145/2700406?casa_token=8D2fHsGCVn0AAAAA:ZfThYOvrzWxMGfZYlQW_y8Cagg-o_l6X_PcF09mdETQ4Tu7jK98mxFbGSXp9ZSO14JkUIYuDGFG0">Esuli et al. 2015</a>
-that allows SVMperf to optimize for
-the <cite>Q</cite> measure as proposed by
-<a class="reference external" href="https://www.sciencedirect.com/science/article/abs/pii/S003132031400291X">Barranquero et al. 2015</a>
-and for the <cite>KLD</cite> and <cite>NKLD</cite> as proposed by
-<a class="reference external" href="https://dl.acm.org/doi/abs/10.1145/2700406?casa_token=8D2fHsGCVn0AAAAA:ZfThYOvrzWxMGfZYlQW_y8Cagg-o_l6X_PcF09mdETQ4Tu7jK98mxFbGSXp9ZSO14JkUIYuDGFG0">Esuli et al. 2015</a>
-for quantification.
-This patch extends the former by also allowing SVMperf to optimize for
-<cite>AE</cite> and <cite>RAE</cite>.</p>
-</section>
-</section>
-
-
-            <div class="clearer"></div>
-          </div>
-        </div>
-      </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-  <div>
-    <h3><a href="index.html">Table of Contents</a></h3>
-    <ul>
-<li><a class="reference internal" href="#">Installation</a><ul>
-<li><a class="reference internal" href="#requirements">Requirements</a></li>
-<li><a class="reference internal" href="#svm-perf-with-quantification-oriented-losses">SVM-perf with quantification-oriented losses</a></li>
-</ul>
-</li>
-</ul>
-
-  </div>
-  <div>
-    <h4>Previous topic</h4>
-    <p class="topless"><a href="index.html"
-                          title="previous chapter">Welcome to QuaPy’s documentation!</a></p>
-  </div>
-  <div>
-    <h4>Next topic</h4>
-    <p class="topless"><a href="Datasets.html"
-                          title="next chapter">Datasets</a></p>
-  </div>
-  <div role="note" aria-label="source link">
-    <h3>This Page</h3>
-    <ul class="this-page-menu">
-      <li><a href="_sources/Installation.rst.txt"
-            rel="nofollow">Show Source</a></li>
-    </ul>
-   </div>
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Quick search</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
-      <input type="submit" value="Go" />
-    </form>
-    </div>
-</div>
-<script>document.getElementById('searchbox').style.display = "block"</script>
-        </div>
-      </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             >index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="right" >
-          <a href="Datasets.html" title="Datasets"
-             >next</a> |</li>
-        <li class="right" >
-          <a href="index.html" title="Welcome to QuaPy’s documentation!"
-             >previous</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">Installation</a></li> 
-      </ul>
-    </div>
-    <div class="footer" role="contentinfo">
-        &#169; Copyright 2021, Alejandro Moreo.
-      Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
-    </div>
-  </body>
-</html>
\ No newline at end of file
diff --git a/docs/build/html/Methods.html b/docs/build/html/Methods.html
deleted file mode 100644
index 8471f3d..0000000
--- a/docs/build/html/Methods.html
+++ /dev/null
@@ -1,539 +0,0 @@
-
-
-<!doctype html>
-
-<html lang="en">
-  <head>
-    <meta charset="utf-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
-
-    <title>Quantification Methods &#8212; QuaPy 0.1.7 documentation</title>
-    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
-    <link rel="stylesheet" type="text/css" href="_static/bizstyle.css" />
-    
-    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
-    <script src="_static/jquery.js"></script>
-    <script src="_static/underscore.js"></script>
-    <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
-    <script src="_static/doctools.js"></script>
-    <script src="_static/sphinx_highlight.js"></script>
-    <script src="_static/bizstyle.js"></script>
-    <link rel="index" title="Index" href="genindex.html" />
-    <link rel="search" title="Search" href="search.html" />
-    <link rel="next" title="Model Selection" href="Model-Selection.html" />
-    <link rel="prev" title="Protocols" href="Protocols.html" />
-    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
-    <!--[if lt IE 9]>
-    <script src="_static/css3-mediaqueries.js"></script>
-    <![endif]-->
-  </head><body>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             accesskey="I">index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="right" >
-          <a href="Model-Selection.html" title="Model Selection"
-             accesskey="N">next</a> |</li>
-        <li class="right" >
-          <a href="Protocols.html" title="Protocols"
-             accesskey="P">previous</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">Quantification Methods</a></li> 
-      </ul>
-    </div>  
-
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          <div class="body" role="main">
-            
-  <section id="quantification-methods">
-<h1>Quantification Methods<a class="headerlink" href="#quantification-methods" title="Permalink to this heading">¶</a></h1>
-<p>Quantification methods can be categorized as belonging to
-<em>aggregative</em> and <em>non-aggregative</em> groups.
-Most methods included in QuaPy at the moment are of type <em>aggregative</em>
-(though we plan to add many more methods in the near future), i.e.,
-are methods characterized by the fact that
-quantification is performed as an aggregation function of the individual
-products of classification.</p>
-<p>Any quantifier in QuaPy shoud extend the class <em>BaseQuantifier</em>,
-and implement some abstract methods:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span>    <span class="nd">@abstractmethod</span>
-    <span class="k">def</span> <span class="nf">fit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span> <span class="n">LabelledCollection</span><span class="p">):</span> <span class="o">...</span>
-
-    <span class="nd">@abstractmethod</span>
-    <span class="k">def</span> <span class="nf">quantify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">instances</span><span class="p">):</span> <span class="o">...</span>
-</pre></div>
-</div>
-<p>The meaning of those functions should be familiar to those
-used to work with scikit-learn since the class structure of QuaPy
-is directly inspired by scikit-learn’s <em>Estimators</em>. Functions
-<em>fit</em> and <em>quantify</em> are used to train the model and to provide
-class estimations (the reason why
-scikit-learn’ structure has not been adopted <em>as is</em> in QuaPy responds to
-the fact that scikit-learn’s <em>predict</em> function is expected to return
-one output for each input element –e.g., a predicted label for each
-instance in a sample– while in quantification the output for a sample
-is one single array of class prevalences).
-Quantifiers also extend from scikit-learn’s <code class="docutils literal notranslate"><span class="pre">BaseEstimator</span></code>, in order
-to simplify the use of <em>set_params</em> and <em>get_params</em> used in
-<a class="reference external" href="https://github.com/HLT-ISTI/QuaPy/wiki/Model-Selection">model selector</a>.</p>
-<section id="aggregative-methods">
-<h2>Aggregative Methods<a class="headerlink" href="#aggregative-methods" title="Permalink to this heading">¶</a></h2>
-<p>All quantification methods are implemented as part of the
-<em>qp.method</em> package. In particular, <em>aggregative</em> methods are defined in
-<em>qp.method.aggregative</em>, and extend <em>AggregativeQuantifier(BaseQuantifier)</em>.
-The methods that any <em>aggregative</em> quantifier must implement are:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span>    <span class="nd">@abstractmethod</span>
-    <span class="k">def</span> <span class="nf">fit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span> <span class="n">LabelledCollection</span><span class="p">,</span> <span class="n">fit_learner</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span> <span class="o">...</span>
-
-    <span class="nd">@abstractmethod</span>
-    <span class="k">def</span> <span class="nf">aggregate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">classif_predictions</span><span class="p">:</span><span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">):</span> <span class="o">...</span>
-</pre></div>
-</div>
-<p>since, as mentioned before, aggregative methods base their prediction on the
-individual predictions of a classifier. Indeed, a default implementation
-of <em>BaseQuantifier.quantify</em> is already provided, which looks like:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span>    <span class="k">def</span> <span class="nf">quantify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">instances</span><span class="p">):</span>
-    <span class="n">classif_predictions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">classify</span><span class="p">(</span><span class="n">instances</span><span class="p">)</span>
-    <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">aggregate</span><span class="p">(</span><span class="n">classif_predictions</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>Aggregative quantifiers are expected to maintain a classifier (which is
-accessed through the <em>&#64;property</em> <em>classifier</em>). This classifier is
-given as input to the quantifier, and can be already fit
-on external data (in which case, the <em>fit_learner</em> argument should
-be set to False), or be fit by the quantifier’s fit (default).</p>
-<p>Another class of <em>aggregative</em> methods are the <em>probabilistic</em>
-aggregative methods, that should inherit from the abstract class
-<em>AggregativeProbabilisticQuantifier(AggregativeQuantifier)</em>.
-The particularity of <em>probabilistic</em> aggregative methods (w.r.t.
-non-probabilistic ones), is that the default quantifier is defined
-in terms of the posterior probabilities returned by a probabilistic
-classifier, and not by the crisp decisions of a hard classifier.
-In any case, the interface <em>classify(instances)</em> remains unchanged.</p>
-<p>One advantage of <em>aggregative</em> methods (either probabilistic or not)
-is that the evaluation according to any sampling procedure (e.g.,
-the <a class="reference external" href="https://github.com/HLT-ISTI/QuaPy/wiki/Evaluation">artificial sampling protocol</a>)
-can be achieved very efficiently, since the entire set can be pre-classified
-once, and the quantification estimations for different samples can directly
-reuse these predictions, without requiring to classify each element every time.
-QuaPy leverages this property to speed-up any procedure having to do with
-quantification over samples, as is customarily done in model selection or
-in evaluation.</p>
-<section id="the-classify-count-variants">
-<h3>The Classify &amp; Count variants<a class="headerlink" href="#the-classify-count-variants" title="Permalink to this heading">¶</a></h3>
-<p>QuaPy implements the four CC variants, i.e.:</p>
-<ul class="simple">
-<li><p><em>CC</em> (Classify &amp; Count), the simplest aggregative quantifier; one that
-simply relies on the label predictions of a classifier to deliver class estimates.</p></li>
-<li><p><em>ACC</em> (Adjusted Classify &amp; Count), the adjusted variant of CC.</p></li>
-<li><p><em>PCC</em> (Probabilistic Classify &amp; Count), the probabilistic variant of CC that
-relies on the soft estimations (or posterior probabilities) returned by a (probabilistic) classifier.</p></li>
-<li><p><em>PACC</em> (Probabilistic Adjusted Classify &amp; Count), the adjusted variant of PCC.</p></li>
-</ul>
-<p>The following code serves as a complete example using CC equipped
-with a SVM as the classifier:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">quapy</span> <span class="k">as</span> <span class="nn">qp</span>
-<span class="kn">import</span> <span class="nn">quapy.functional</span> <span class="k">as</span> <span class="nn">F</span>
-<span class="kn">from</span> <span class="nn">sklearn.svm</span> <span class="kn">import</span> <span class="n">LinearSVC</span>
-
-<span class="n">training</span><span class="p">,</span> <span class="n">test</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">fetch_twitter</span><span class="p">(</span><span class="s1">&#39;hcr&#39;</span><span class="p">,</span> <span class="n">pickle</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="o">.</span><span class="n">train_test</span>
-
-<span class="c1"># instantiate a classifier learner, in this case a SVM</span>
-<span class="n">svm</span> <span class="o">=</span> <span class="n">LinearSVC</span><span class="p">()</span>
-
-<span class="c1"># instantiate a Classify &amp; Count with the SVM</span>
-<span class="c1"># (an alias is available in qp.method.aggregative.ClassifyAndCount)</span>
-<span class="n">model</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">method</span><span class="o">.</span><span class="n">aggregative</span><span class="o">.</span><span class="n">CC</span><span class="p">(</span><span class="n">svm</span><span class="p">)</span>
-<span class="n">model</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">training</span><span class="p">)</span>
-<span class="n">estim_prevalence</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">quantify</span><span class="p">(</span><span class="n">test</span><span class="o">.</span><span class="n">instances</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>The same code could be used to instantiate an ACC, by simply replacing
-the instantiation of the model with:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">model</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">method</span><span class="o">.</span><span class="n">aggregative</span><span class="o">.</span><span class="n">ACC</span><span class="p">(</span><span class="n">svm</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>Note that the adjusted variants (ACC and PACC) need to estimate
-some parameters for performing the adjustment (e.g., the
-<em>true positive rate</em> and the <em>false positive rate</em> in case of
-binary classification) that are estimated on a validation split
-of the labelled set. In this case, the <strong>init</strong> method of
-ACC defines an additional parameter, <em>val_split</em> which, by
-default, is set to 0.4 and so, the 40% of the labelled data
-will be used for estimating the parameters for adjusting the
-predictions. This parameters can also be set with an integer,
-indicating that the parameters should be estimated by means of
-<em>k</em>-fold cross-validation, for which the integer indicates the
-number <em>k</em> of folds. Finally, <em>val_split</em> can be set to a
-specific held-out validation set (i.e., an instance of <em>LabelledCollection</em>).</p>
-<p>The specification of <em>val_split</em> can be
-postponed to the invokation of the fit method (if <em>val_split</em> was also
-set in the constructor, the one specified at fit time would prevail),
-e.g.:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">model</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">method</span><span class="o">.</span><span class="n">aggregative</span><span class="o">.</span><span class="n">ACC</span><span class="p">(</span><span class="n">svm</span><span class="p">)</span>
-<span class="c1"># perform 5-fold cross validation for estimating ACC&#39;s parameters</span>
-<span class="c1"># (overrides the default val_split=0.4 in the constructor)</span>
-<span class="n">model</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">training</span><span class="p">,</span> <span class="n">val_split</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>The following code illustrates the case in which PCC is used:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">model</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">method</span><span class="o">.</span><span class="n">aggregative</span><span class="o">.</span><span class="n">PCC</span><span class="p">(</span><span class="n">svm</span><span class="p">)</span>
-<span class="n">model</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">training</span><span class="p">)</span>
-<span class="n">estim_prevalence</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">quantify</span><span class="p">(</span><span class="n">test</span><span class="o">.</span><span class="n">instances</span><span class="p">)</span>
-<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;classifier:&#39;</span><span class="p">,</span> <span class="n">model</span><span class="o">.</span><span class="n">classifier</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>In this case, QuaPy will print:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">The</span> <span class="n">learner</span> <span class="n">LinearSVC</span> <span class="n">does</span> <span class="ow">not</span> <span class="n">seem</span> <span class="n">to</span> <span class="n">be</span> <span class="n">probabilistic</span><span class="o">.</span> <span class="n">The</span> <span class="n">learner</span> <span class="n">will</span> <span class="n">be</span> <span class="n">calibrated</span><span class="o">.</span>
-<span class="n">classifier</span><span class="p">:</span> <span class="n">CalibratedClassifierCV</span><span class="p">(</span><span class="n">base_estimator</span><span class="o">=</span><span class="n">LinearSVC</span><span class="p">(),</span> <span class="n">cv</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>The first output indicates that the learner (<em>LinearSVC</em> in this case)
-is not a probabilistic classifier (i.e., it does not implement the
-<em>predict_proba</em> method) and so, the classifier will be converted to
-a probabilistic one through <a class="reference external" href="https://scikit-learn.org/stable/modules/calibration.html">calibration</a>.
-As a result, the classifier that is printed in the second line points
-to a <em>CalibratedClassifier</em> instance. Note that calibration can only
-be applied to hard classifiers when <em>fit_learner=True</em>; an exception
-will be raised otherwise.</p>
-<p>Lastly, everything we said aboud ACC and PCC
-applies to PACC as well.</p>
-</section>
-<section id="expectation-maximization-emq">
-<h3>Expectation Maximization (EMQ)<a class="headerlink" href="#expectation-maximization-emq" title="Permalink to this heading">¶</a></h3>
-<p>The Expectation Maximization Quantifier (EMQ), also known as
-the SLD, is available at <em>qp.method.aggregative.EMQ</em> or via the
-alias <em>qp.method.aggregative.ExpectationMaximizationQuantifier</em>.
-The method is described in:</p>
-<p><em>Saerens, M., Latinne, P., and Decaestecker, C. (2002). Adjusting the outputs of a classifier
-to new a priori probabilities: A simple procedure. Neural Computation, 14(1):21–41.</em></p>
-<p>EMQ works with a probabilistic classifier (if the classifier
-given as input is a hard one, a calibration will be attempted).
-Although this method was originally proposed for improving the
-posterior probabilities of a probabilistic classifier, and not
-for improving the estimation of prior probabilities, EMQ ranks
-almost always among the most effective quantifiers in the
-experiments we have carried out.</p>
-<p>An example of use can be found below:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">quapy</span> <span class="k">as</span> <span class="nn">qp</span>
-<span class="kn">from</span> <span class="nn">sklearn.linear_model</span> <span class="kn">import</span> <span class="n">LogisticRegression</span>
-
-<span class="n">dataset</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">fetch_twitter</span><span class="p">(</span><span class="s1">&#39;hcr&#39;</span><span class="p">,</span> <span class="n">pickle</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-
-<span class="n">model</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">method</span><span class="o">.</span><span class="n">aggregative</span><span class="o">.</span><span class="n">EMQ</span><span class="p">(</span><span class="n">LogisticRegression</span><span class="p">())</span>
-<span class="n">model</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">dataset</span><span class="o">.</span><span class="n">training</span><span class="p">)</span>
-<span class="n">estim_prevalence</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">quantify</span><span class="p">(</span><span class="n">dataset</span><span class="o">.</span><span class="n">test</span><span class="o">.</span><span class="n">instances</span><span class="p">)</span>
-</pre></div>
-</div>
-<p><em>New in v0.1.7</em>: EMQ now accepts two new parameters in the construction method, namely
-<em>exact_train_prev</em> which allows to use the true training prevalence as the departing
-prevalence estimation (default behaviour), or instead an approximation of it as
-suggested by <a class="reference external" href="http://proceedings.mlr.press/v119/alexandari20a.html">Alexandari et al. (2020)</a>
-(by setting <em>exact_train_prev=False</em>).
-The other parameter is <em>recalib</em> which allows to indicate a calibration method, among those
-proposed by <a class="reference external" href="http://proceedings.mlr.press/v119/alexandari20a.html">Alexandari et al. (2020)</a>,
-including the Bias-Corrected Temperature Scaling, Vector Scaling, etc.
-See the API documentation for further details.</p>
-</section>
-<section id="hellinger-distance-y-hdy">
-<h3>Hellinger Distance y (HDy)<a class="headerlink" href="#hellinger-distance-y-hdy" title="Permalink to this heading">¶</a></h3>
-<p>Implementation of the method based on the Hellinger Distance y (HDy) proposed by
-<a class="reference external" href="https://www.sciencedirect.com/science/article/pii/S0020025512004069">González-Castro, V., Alaiz-Rodrı́guez, R., and Alegre, E. (2013). Class distribution
-estimation based on the Hellinger distance. Information Sciences, 218:146–164.</a></p>
-<p>It is implemented in <em>qp.method.aggregative.HDy</em> (also accessible
-through the allias <em>qp.method.aggregative.HellingerDistanceY</em>).
-This method works with a probabilistic classifier (hard classifiers
-can be used as well and will be calibrated) and requires a validation
-set to estimate parameter for the mixture model. Just like
-ACC and PACC, this quantifier receives a <em>val_split</em> argument
-in the constructor (or in the fit method, in which case the previous
-value is overridden) that can either be a float indicating the proportion
-of training data to be taken as the validation set (in a random
-stratified split), or a validation set (i.e., an instance of
-<em>LabelledCollection</em>) itself.</p>
-<p>HDy was proposed as a binary classifier and the implementation
-provided in QuaPy accepts only binary datasets.</p>
-<p>The following code shows an example of use:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">quapy</span> <span class="k">as</span> <span class="nn">qp</span>
-<span class="kn">from</span> <span class="nn">sklearn.linear_model</span> <span class="kn">import</span> <span class="n">LogisticRegression</span>
-
-<span class="c1"># load a binary dataset</span>
-<span class="n">dataset</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">fetch_reviews</span><span class="p">(</span><span class="s1">&#39;hp&#39;</span><span class="p">,</span> <span class="n">pickle</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-<span class="n">qp</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">preprocessing</span><span class="o">.</span><span class="n">text2tfidf</span><span class="p">(</span><span class="n">dataset</span><span class="p">,</span> <span class="n">min_df</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-
-<span class="n">model</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">method</span><span class="o">.</span><span class="n">aggregative</span><span class="o">.</span><span class="n">HDy</span><span class="p">(</span><span class="n">LogisticRegression</span><span class="p">())</span>
-<span class="n">model</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">dataset</span><span class="o">.</span><span class="n">training</span><span class="p">)</span>
-<span class="n">estim_prevalence</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">quantify</span><span class="p">(</span><span class="n">dataset</span><span class="o">.</span><span class="n">test</span><span class="o">.</span><span class="n">instances</span><span class="p">)</span>
-</pre></div>
-</div>
-<p><em>New in v0.1.7:</em> QuaPy now provides an implementation of the generalized
-“Distribution Matching” approaches for multiclass, inspired by the framework
-of <a class="reference external" href="https://arxiv.org/abs/1606.00868">Firat (2016)</a>. One can instantiate
-a variant of HDy for multiclass quantification as follows:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">mutliclassHDy</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">method</span><span class="o">.</span><span class="n">aggregative</span><span class="o">.</span><span class="n">DistributionMatching</span><span class="p">(</span><span class="n">classifier</span><span class="o">=</span><span class="n">LogisticRegression</span><span class="p">(),</span> <span class="n">divergence</span><span class="o">=</span><span class="s1">&#39;HD&#39;</span><span class="p">,</span> <span class="n">cdf</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</pre></div>
-</div>
-<p><em>New in v0.1.7:</em> QuaPy now provides an implementation of the “DyS”
-framework proposed by <a class="reference external" href="https://ojs.aaai.org/index.php/AAAI/article/view/4376">Maletzke et al (2020)</a>
-and the “SMM” method proposed by <a class="reference external" href="https://ieeexplore.ieee.org/document/9260028">Hassan et al (2019)</a>
-(thanks to <em>Pablo González</em> for the contributions!)</p>
-</section>
-<section id="threshold-optimization-methods">
-<h3>Threshold Optimization methods<a class="headerlink" href="#threshold-optimization-methods" title="Permalink to this heading">¶</a></h3>
-<p><em>New in v0.1.7:</em> QuaPy now implements Forman’s threshold optimization methods;
-see, e.g., <a class="reference external" href="https://dl.acm.org/doi/abs/10.1145/1150402.1150423">(Forman 2006)</a>
-and <a class="reference external" href="https://link.springer.com/article/10.1007/s10618-008-0097-y">(Forman 2008)</a>.
-These include: T50, MAX, X, Median Sweep (MS), and its variant MS2.</p>
-</section>
-<section id="explicit-loss-minimization">
-<h3>Explicit Loss Minimization<a class="headerlink" href="#explicit-loss-minimization" title="Permalink to this heading">¶</a></h3>
-<p>The Explicit Loss Minimization (ELM) represent a family of methods
-based on structured output learning, i.e., quantifiers relying on
-classifiers that have been optimized targeting a
-quantification-oriented evaluation measure.
-The original methods are implemented in QuaPy as classify &amp; count (CC)
-quantifiers that use Joachim’s <a class="reference external" href="https://www.cs.cornell.edu/people/tj/svm_light/svm_perf.html">SVMperf</a>
-as the underlying classifier, properly set to optimize for the desired loss.</p>
-<p>In QuaPy, this can be more achieved by calling the functions:</p>
-<ul class="simple">
-<li><p><em>newSVMQ</em>: returns the quantification method called SVM(Q) that optimizes for the metric <em>Q</em> defined
-in <a class="reference external" href="https://www.sciencedirect.com/science/article/pii/S003132031400291X"><em>Barranquero, J., Díez, J., and del Coz, J. J. (2015). Quantification-oriented learning based
-on reliable classifiers. Pattern Recognition, 48(2):591–604.</em></a></p></li>
-<li><p><em>newSVMKLD</em> and <em>newSVMNKLD</em>: returns the quantification method called SVM(KLD) and SVM(nKLD), standing for
-Kullback-Leibler Divergence and Normalized Kullback-Leibler Divergence, as proposed in <a class="reference external" href="https://dl.acm.org/doi/abs/10.1145/2700406"><em>Esuli, A. and Sebastiani, F. (2015).
-Optimizing text quantifiers for multivariate loss functions.
-ACM Transactions on Knowledge Discovery and Data, 9(4):Article 27.</em></a></p></li>
-<li><p><em>newSVMAE</em> and <em>newSVMRAE</em>: returns a quantification method called SVM(AE) and SVM(RAE) that optimizes for the (Mean) Absolute Error and for the
-(Mean) Relative Absolute Error, as first used by
-<a class="reference external" href="https://arxiv.org/abs/2011.02552"><em>Moreo, A. and Sebastiani, F. (2021). Tweet sentiment quantification: An experimental re-evaluation. PLOS ONE 17 (9), 1-23.</em></a></p></li>
-</ul>
-<p>the last two methods (SVM(AE) and SVM(RAE)) have been implemented in
-QuaPy in order to make available ELM variants for what nowadays
-are considered the most well-behaved evaluation metrics in quantification.</p>
-<p>In order to make these models work, you would need to run the script
-<em>prepare_svmperf.sh</em> (distributed along with QuaPy) that
-downloads <em>SVMperf</em>’ source code, applies a patch that
-implements the quantification oriented losses, and compiles the
-sources.</p>
-<p>If you want to add any custom loss, you would need to modify
-the source code of <em>SVMperf</em> in order to implement it, and
-assign a valid loss code to it. Then you must re-compile
-the whole thing and instantiate the quantifier in QuaPy
-as follows:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># you can either set the path to your custom svm_perf_quantification implementation</span>
-<span class="c1"># in the environment variable, or as an argument to the constructor of ELM</span>
-<span class="n">qp</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s1">&#39;SVMPERF_HOME&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;./path/to/svm_perf_quantification&#39;</span>
-
-<span class="c1"># assign an alias to your custom loss and the id you have assigned to it</span>
-<span class="n">svmperf</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">classification</span><span class="o">.</span><span class="n">svmperf</span><span class="o">.</span><span class="n">SVMperf</span>
-<span class="n">svmperf</span><span class="o">.</span><span class="n">valid_losses</span><span class="p">[</span><span class="s1">&#39;mycustomloss&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">28</span>
-
-<span class="c1"># instantiate the ELM method indicating the loss</span>
-<span class="n">model</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">method</span><span class="o">.</span><span class="n">aggregative</span><span class="o">.</span><span class="n">ELM</span><span class="p">(</span><span class="n">loss</span><span class="o">=</span><span class="s1">&#39;mycustomloss&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>All ELM are binary quantifiers since they rely on <em>SVMperf</em>, that
-currently supports only binary classification.
-ELM variants (any binary quantifier in general) can be extended
-to operate in single-label scenarios trivially by adopting a
-“one-vs-all” strategy (as, e.g., in
-<a class="reference external" href="https://link.springer.com/article/10.1007/s13278-016-0327-z"><em>Gao, W. and Sebastiani, F. (2016). From classification to quantification in tweet sentiment
-analysis. Social Network Analysis and Mining, 6(19):1–22</em></a>).
-In QuaPy this is possible by using the <em>OneVsAll</em> class.</p>
-<p>There are two ways for instantiating this class, <em>OneVsAllGeneric</em> that works for
-any quantifier, and <em>OneVsAllAggregative</em> that is optimized for aggregative quantifiers.
-In general, you can simply use the <em>getOneVsAll</em> function and QuaPy will choose
-the more convenient of the two.</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">quapy</span> <span class="k">as</span> <span class="nn">qp</span>
-<span class="kn">from</span> <span class="nn">quapy.method.aggregative</span> <span class="kn">import</span> <span class="n">SVMQ</span>
-
-<span class="c1"># load a single-label dataset (this one contains 3 classes)</span>
-<span class="n">dataset</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">fetch_twitter</span><span class="p">(</span><span class="s1">&#39;hcr&#39;</span><span class="p">,</span> <span class="n">pickle</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-
-<span class="c1"># let qp know where svmperf is</span>
-<span class="n">qp</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s1">&#39;SVMPERF_HOME&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;../svm_perf_quantification&#39;</span>
-
-<span class="n">model</span> <span class="o">=</span> <span class="n">getOneVsAll</span><span class="p">(</span><span class="n">SVMQ</span><span class="p">(),</span> <span class="n">n_jobs</span><span class="o">=-</span><span class="mi">1</span><span class="p">)</span>  <span class="c1"># run them on parallel</span>
-<span class="n">model</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">dataset</span><span class="o">.</span><span class="n">training</span><span class="p">)</span>
-<span class="n">estim_prevalence</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">quantify</span><span class="p">(</span><span class="n">dataset</span><span class="o">.</span><span class="n">test</span><span class="o">.</span><span class="n">instances</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>Check the examples <em><span class="xref myst">explicit_loss_minimization.py</span></em>
-and <span class="xref myst">one_vs_all.py</span> for more details.</p>
-</section>
-</section>
-<section id="meta-models">
-<h2>Meta Models<a class="headerlink" href="#meta-models" title="Permalink to this heading">¶</a></h2>
-<p>By <em>meta</em> models we mean quantification methods that are defined on top of other
-quantification methods, and that thus do not squarely belong to the aggregative nor
-the non-aggregative group (indeed, <em>meta</em> models could use quantifiers from any of those
-groups).
-<em>Meta</em> models are implemented in the <em>qp.method.meta</em> module.</p>
-<section id="ensembles">
-<h3>Ensembles<a class="headerlink" href="#ensembles" title="Permalink to this heading">¶</a></h3>
-<p>QuaPy implements (some of) the variants proposed in:</p>
-<ul class="simple">
-<li><p><a class="reference external" href="https://www.sciencedirect.com/science/article/pii/S1566253516300628"><em>Pérez-Gállego, P., Quevedo, J. R., &amp; del Coz, J. J. (2017).
-Using ensembles for problems with characterizable changes in data distribution: A case study on quantification.
-Information Fusion, 34, 87-100.</em></a></p></li>
-<li><p><a class="reference external" href="https://www.sciencedirect.com/science/article/pii/S1566253517303652"><em>Pérez-Gállego, P., Castano, A., Quevedo, J. R., &amp; del Coz, J. J. (2019).
-Dynamic ensemble selection for quantification tasks.
-Information Fusion, 45, 1-15.</em></a></p></li>
-</ul>
-<p>The following code shows how to instantiate an Ensemble of 30 <em>Adjusted Classify &amp; Count</em> (ACC)
-quantifiers operating with a <em>Logistic Regressor</em> (LR) as the base classifier, and using the
-<em>average</em> as the aggregation policy (see the original article for further details).
-The last parameter indicates to use all processors for parallelization.</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">quapy</span> <span class="k">as</span> <span class="nn">qp</span>
-<span class="kn">from</span> <span class="nn">quapy.method.aggregative</span> <span class="kn">import</span> <span class="n">ACC</span>
-<span class="kn">from</span> <span class="nn">quapy.method.meta</span> <span class="kn">import</span> <span class="n">Ensemble</span>
-<span class="kn">from</span> <span class="nn">sklearn.linear_model</span> <span class="kn">import</span> <span class="n">LogisticRegression</span>
-
-<span class="n">dataset</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">fetch_UCIDataset</span><span class="p">(</span><span class="s1">&#39;haberman&#39;</span><span class="p">)</span>
-
-<span class="n">model</span> <span class="o">=</span> <span class="n">Ensemble</span><span class="p">(</span><span class="n">quantifier</span><span class="o">=</span><span class="n">ACC</span><span class="p">(</span><span class="n">LogisticRegression</span><span class="p">()),</span> <span class="n">size</span><span class="o">=</span><span class="mi">30</span><span class="p">,</span> <span class="n">policy</span><span class="o">=</span><span class="s1">&#39;ave&#39;</span><span class="p">,</span> <span class="n">n_jobs</span><span class="o">=-</span><span class="mi">1</span><span class="p">)</span>
-<span class="n">model</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">dataset</span><span class="o">.</span><span class="n">training</span><span class="p">)</span>
-<span class="n">estim_prevalence</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">quantify</span><span class="p">(</span><span class="n">dataset</span><span class="o">.</span><span class="n">test</span><span class="o">.</span><span class="n">instances</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>Other aggregation policies implemented in QuaPy include:</p>
-<ul class="simple">
-<li><p>‘ptr’ for applying a dynamic selection based on the training prevalence of the ensemble’s members</p></li>
-<li><p>‘ds’ for applying a dynamic selection based on the Hellinger Distance</p></li>
-<li><p><em>any valid quantification measure</em> (e.g., ‘mse’) for performing a static selection based on
-the performance estimated for each member of the ensemble in terms of that evaluation metric.</p></li>
-</ul>
-<p>When using any of the above options, it is important to set the <em>red_size</em> parameter, which
-informs of the number of members to retain.</p>
-<p>Please, check the <a class="reference external" href="https://github.com/HLT-ISTI/QuaPy/wiki/Model-Selection">model selection</a>
-wiki if you want to optimize the hyperparameters of ensemble for classification or quantification.</p>
-</section>
-<section id="the-quanet-neural-network">
-<h3>The QuaNet neural network<a class="headerlink" href="#the-quanet-neural-network" title="Permalink to this heading">¶</a></h3>
-<p>QuaPy offers an implementation of QuaNet, a deep learning model presented in:</p>
-<p><a class="reference external" href="https://dl.acm.org/doi/abs/10.1145/3269206.3269287"><em>Esuli, A., Moreo, A., &amp; Sebastiani, F. (2018, October).
-A recurrent neural network for sentiment quantification.
-In Proceedings of the 27th ACM International Conference on
-Information and Knowledge Management (pp. 1775-1778).</em></a></p>
-<p>This model requires <em>torch</em> to be installed.
-QuaNet also requires a classifier that can provide embedded representations
-of the inputs.
-In the original paper, QuaNet was tested using an LSTM as the base classifier.
-In the following example, we show an instantiation of QuaNet that instead uses CNN as a probabilistic classifier, taking its last layer representation as the document embedding:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">quapy</span> <span class="k">as</span> <span class="nn">qp</span>
-<span class="kn">from</span> <span class="nn">quapy.method.meta</span> <span class="kn">import</span> <span class="n">QuaNet</span>
-<span class="kn">from</span> <span class="nn">quapy.classification.neural</span> <span class="kn">import</span> <span class="n">NeuralClassifierTrainer</span><span class="p">,</span> <span class="n">CNNnet</span>
-
-<span class="c1"># use samples of 100 elements</span>
-<span class="n">qp</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s1">&#39;SAMPLE_SIZE&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">100</span>
-
-<span class="c1"># load the kindle dataset as text, and convert words to numerical indexes</span>
-<span class="n">dataset</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">fetch_reviews</span><span class="p">(</span><span class="s1">&#39;kindle&#39;</span><span class="p">,</span> <span class="n">pickle</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-<span class="n">qp</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">preprocessing</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">dataset</span><span class="p">,</span> <span class="n">min_df</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-
-<span class="c1"># the text classifier is a CNN trained by NeuralClassifierTrainer</span>
-<span class="n">cnn</span> <span class="o">=</span> <span class="n">CNNnet</span><span class="p">(</span><span class="n">dataset</span><span class="o">.</span><span class="n">vocabulary_size</span><span class="p">,</span> <span class="n">dataset</span><span class="o">.</span><span class="n">n_classes</span><span class="p">)</span>
-<span class="n">learner</span> <span class="o">=</span> <span class="n">NeuralClassifierTrainer</span><span class="p">(</span><span class="n">cnn</span><span class="p">,</span> <span class="n">device</span><span class="o">=</span><span class="s1">&#39;cuda&#39;</span><span class="p">)</span>
-
-<span class="c1"># train QuaNet</span>
-<span class="n">model</span> <span class="o">=</span> <span class="n">QuaNet</span><span class="p">(</span><span class="n">learner</span><span class="p">,</span> <span class="n">device</span><span class="o">=</span><span class="s1">&#39;cuda&#39;</span><span class="p">)</span>
-<span class="n">model</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">dataset</span><span class="o">.</span><span class="n">training</span><span class="p">)</span>
-<span class="n">estim_prevalence</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">quantify</span><span class="p">(</span><span class="n">dataset</span><span class="o">.</span><span class="n">test</span><span class="o">.</span><span class="n">instances</span><span class="p">)</span>
-</pre></div>
-</div>
-</section>
-</section>
-</section>
-
-
-            <div class="clearer"></div>
-          </div>
-        </div>
-      </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-  <div>
-    <h3><a href="index.html">Table of Contents</a></h3>
-    <ul>
-<li><a class="reference internal" href="#">Quantification Methods</a><ul>
-<li><a class="reference internal" href="#aggregative-methods">Aggregative Methods</a><ul>
-<li><a class="reference internal" href="#the-classify-count-variants">The Classify &amp; Count variants</a></li>
-<li><a class="reference internal" href="#expectation-maximization-emq">Expectation Maximization (EMQ)</a></li>
-<li><a class="reference internal" href="#hellinger-distance-y-hdy">Hellinger Distance y (HDy)</a></li>
-<li><a class="reference internal" href="#threshold-optimization-methods">Threshold Optimization methods</a></li>
-<li><a class="reference internal" href="#explicit-loss-minimization">Explicit Loss Minimization</a></li>
-</ul>
-</li>
-<li><a class="reference internal" href="#meta-models">Meta Models</a><ul>
-<li><a class="reference internal" href="#ensembles">Ensembles</a></li>
-<li><a class="reference internal" href="#the-quanet-neural-network">The QuaNet neural network</a></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-
-  </div>
-  <div>
-    <h4>Previous topic</h4>
-    <p class="topless"><a href="Protocols.html"
-                          title="previous chapter">Protocols</a></p>
-  </div>
-  <div>
-    <h4>Next topic</h4>
-    <p class="topless"><a href="Model-Selection.html"
-                          title="next chapter">Model Selection</a></p>
-  </div>
-  <div role="note" aria-label="source link">
-    <h3>This Page</h3>
-    <ul class="this-page-menu">
-      <li><a href="_sources/Methods.md.txt"
-            rel="nofollow">Show Source</a></li>
-    </ul>
-   </div>
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Quick search</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
-      <input type="submit" value="Go" />
-    </form>
-    </div>
-</div>
-<script>document.getElementById('searchbox').style.display = "block"</script>
-        </div>
-      </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             >index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="right" >
-          <a href="Model-Selection.html" title="Model Selection"
-             >next</a> |</li>
-        <li class="right" >
-          <a href="Protocols.html" title="Protocols"
-             >previous</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">Quantification Methods</a></li> 
-      </ul>
-    </div>
-    <div class="footer" role="contentinfo">
-        &#169; Copyright 2021, Alejandro Moreo.
-      Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
-    </div>
-  </body>
-</html>
\ No newline at end of file
diff --git a/docs/build/html/Model-Selection.html b/docs/build/html/Model-Selection.html
deleted file mode 100644
index 03a399e..0000000
--- a/docs/build/html/Model-Selection.html
+++ /dev/null
@@ -1,268 +0,0 @@
-
-
-<!doctype html>
-
-<html lang="en">
-  <head>
-    <meta charset="utf-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
-
-    <title>Model Selection &#8212; QuaPy 0.1.7 documentation</title>
-    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
-    <link rel="stylesheet" type="text/css" href="_static/bizstyle.css" />
-    
-    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
-    <script src="_static/jquery.js"></script>
-    <script src="_static/underscore.js"></script>
-    <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
-    <script src="_static/doctools.js"></script>
-    <script src="_static/sphinx_highlight.js"></script>
-    <script src="_static/bizstyle.js"></script>
-    <link rel="index" title="Index" href="genindex.html" />
-    <link rel="search" title="Search" href="search.html" />
-    <link rel="next" title="Plotting" href="Plotting.html" />
-    <link rel="prev" title="Quantification Methods" href="Methods.html" />
-    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
-    <!--[if lt IE 9]>
-    <script src="_static/css3-mediaqueries.js"></script>
-    <![endif]-->
-  </head><body>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             accesskey="I">index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="right" >
-          <a href="Plotting.html" title="Plotting"
-             accesskey="N">next</a> |</li>
-        <li class="right" >
-          <a href="Methods.html" title="Quantification Methods"
-             accesskey="P">previous</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">Model Selection</a></li> 
-      </ul>
-    </div>  
-
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          <div class="body" role="main">
-            
-  <section id="model-selection">
-<h1>Model Selection<a class="headerlink" href="#model-selection" title="Permalink to this heading">¶</a></h1>
-<p>As a supervised machine learning task, quantification methods
-can strongly depend on a good choice of model hyper-parameters.
-The process whereby those hyper-parameters are chosen is
-typically known as <em>Model Selection</em>, and typically consists of
-testing different settings and picking the one that performed
-best in a held-out validation set in terms of any given
-evaluation measure.</p>
-<section id="targeting-a-quantification-oriented-loss">
-<h2>Targeting a Quantification-oriented loss<a class="headerlink" href="#targeting-a-quantification-oriented-loss" title="Permalink to this heading">¶</a></h2>
-<p>The task being optimized determines the evaluation protocol,
-i.e., the criteria according to which the performance of
-any given method for solving is to be assessed.
-As a task on its own right, quantification should impose
-its own model selection strategies, i.e., strategies
-aimed at finding appropriate configurations
-specifically designed for the task of quantification.</p>
-<p>Quantification has long been regarded as an add-on of
-classification, and thus the model selection strategies
-customarily adopted in classification have simply been
-applied to quantification (see the next section).
-It has been argued in <a class="reference external" href="https://link.springer.com/chapter/10.1007/978-3-030-72240-1_6">Moreo, Alejandro, and Fabrizio Sebastiani.
-Re-Assessing the “Classify and Count” Quantification Method.
-ECIR 2021: Advances in Information Retrieval pp 75–91.</a>
-that specific model selection strategies should
-be adopted for quantification. That is, model selection
-strategies for quantification should target
-quantification-oriented losses and be tested in a variety
-of scenarios exhibiting different degrees of prior
-probability shift.</p>
-<p>The class <em>qp.model_selection.GridSearchQ</em> implements a grid-search exploration over the space of
-hyper-parameter combinations that <a class="reference external" href="https://github.com/HLT-ISTI/QuaPy/wiki/Evaluation">evaluates</a>
-each combination of hyper-parameters by means of a given quantification-oriented
-error metric (e.g., any of the error functions implemented
-in <em>qp.error</em>) and according to a
-<a class="reference external" href="https://github.com/HLT-ISTI/QuaPy/wiki/Protocols">sampling generation protocol</a>.</p>
-<p>The following is an example (also included in the examples folder) of model selection for quantification:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">quapy</span> <span class="k">as</span> <span class="nn">qp</span>
-<span class="kn">from</span> <span class="nn">quapy.protocol</span> <span class="kn">import</span> <span class="n">APP</span>
-<span class="kn">from</span> <span class="nn">quapy.method.aggregative</span> <span class="kn">import</span> <span class="n">DistributionMatching</span>
-<span class="kn">from</span> <span class="nn">sklearn.linear_model</span> <span class="kn">import</span> <span class="n">LogisticRegression</span>
-<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
-
-<span class="sd">&quot;&quot;&quot;</span>
-<span class="sd">In this example, we show how to perform model selection on a DistributionMatching quantifier.</span>
-<span class="sd">&quot;&quot;&quot;</span>
-
-<span class="n">model</span> <span class="o">=</span> <span class="n">DistributionMatching</span><span class="p">(</span><span class="n">LogisticRegression</span><span class="p">())</span>
-
-<span class="n">qp</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s1">&#39;SAMPLE_SIZE&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">100</span>
-<span class="n">qp</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s1">&#39;N_JOBS&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>  <span class="c1"># explore hyper-parameters in parallel</span>
-
-<span class="n">training</span><span class="p">,</span> <span class="n">test</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">fetch_reviews</span><span class="p">(</span><span class="s1">&#39;imdb&#39;</span><span class="p">,</span> <span class="n">tfidf</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">min_df</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span><span class="o">.</span><span class="n">train_test</span>
-
-<span class="c1"># The model will be returned by the fit method of GridSearchQ.</span>
-<span class="c1"># Every combination of hyper-parameters will be evaluated by confronting the</span>
-<span class="c1"># quantifier thus configured against a series of samples generated by means</span>
-<span class="c1"># of a sample generation protocol. For this example, we will use the</span>
-<span class="c1"># artificial-prevalence protocol (APP), that generates samples with prevalence</span>
-<span class="c1"># values in the entire range of values from a grid (e.g., [0, 0.1, 0.2, ..., 1]).</span>
-<span class="c1"># We devote 30% of the dataset for this exploration.</span>
-<span class="n">training</span><span class="p">,</span> <span class="n">validation</span> <span class="o">=</span> <span class="n">training</span><span class="o">.</span><span class="n">split_stratified</span><span class="p">(</span><span class="n">train_prop</span><span class="o">=</span><span class="mf">0.7</span><span class="p">)</span>
-<span class="n">protocol</span> <span class="o">=</span> <span class="n">APP</span><span class="p">(</span><span class="n">validation</span><span class="p">)</span>
-
-<span class="c1"># We will explore a classification-dependent hyper-parameter (e.g., the &#39;C&#39;</span>
-<span class="c1"># hyper-parameter of LogisticRegression) and a quantification-dependent hyper-parameter</span>
-<span class="c1"># (e.g., the number of bins in a DistributionMatching quantifier.</span>
-<span class="c1"># Classifier-dependent hyper-parameters have to be marked with a prefix &quot;classifier__&quot;</span>
-<span class="c1"># in order to let the quantifier know this hyper-parameter belongs to its underlying</span>
-<span class="c1"># classifier.</span>
-<span class="n">param_grid</span> <span class="o">=</span> <span class="p">{</span>
-    <span class="s1">&#39;classifier__C&#39;</span><span class="p">:</span> <span class="n">np</span><span class="o">.</span><span class="n">logspace</span><span class="p">(</span><span class="o">-</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">7</span><span class="p">),</span>
-    <span class="s1">&#39;nbins&#39;</span><span class="p">:</span> <span class="p">[</span><span class="mi">8</span><span class="p">,</span> <span class="mi">16</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="mi">64</span><span class="p">],</span>
-<span class="p">}</span>
-
-<span class="n">model</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">model_selection</span><span class="o">.</span><span class="n">GridSearchQ</span><span class="p">(</span>
-    <span class="n">model</span><span class="o">=</span><span class="n">model</span><span class="p">,</span>
-    <span class="n">param_grid</span><span class="o">=</span><span class="n">param_grid</span><span class="p">,</span>
-    <span class="n">protocol</span><span class="o">=</span><span class="n">protocol</span><span class="p">,</span>
-    <span class="n">error</span><span class="o">=</span><span class="s1">&#39;mae&#39;</span><span class="p">,</span>  <span class="c1"># the error to optimize is the MAE (a quantification-oriented loss)</span>
-    <span class="n">refit</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>   <span class="c1"># retrain on the whole labelled set once done</span>
-    <span class="n">verbose</span><span class="o">=</span><span class="kc">True</span>  <span class="c1"># show information as the process goes on</span>
-<span class="p">)</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">training</span><span class="p">)</span>
-
-<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;model selection ended: best hyper-parameters=</span><span class="si">{</span><span class="n">model</span><span class="o">.</span><span class="n">best_params_</span><span class="si">}</span><span class="s1">&#39;</span><span class="p">)</span>
-<span class="n">model</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">best_model_</span>
-
-<span class="c1"># evaluation in terms of MAE</span>
-<span class="c1"># we use the same evaluation protocol (APP) on the test set</span>
-<span class="n">mae_score</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">evaluation</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">protocol</span><span class="o">=</span><span class="n">APP</span><span class="p">(</span><span class="n">test</span><span class="p">),</span> <span class="n">error_metric</span><span class="o">=</span><span class="s1">&#39;mae&#39;</span><span class="p">)</span>
-
-<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;MAE=</span><span class="si">{</span><span class="n">mae_score</span><span class="si">:</span><span class="s1">.5f</span><span class="si">}</span><span class="s1">&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>In this example, the system outputs:</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">GridSearchQ</span><span class="p">]:</span> <span class="n">starting</span> <span class="n">model</span> <span class="n">selection</span> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">n_jobs</span> <span class="o">=-</span><span class="mi">1</span>
-<span class="p">[</span><span class="n">GridSearchQ</span><span class="p">]:</span> <span class="n">hyperparams</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;classifier__C&#39;</span><span class="p">:</span> <span class="mf">0.01</span><span class="p">,</span> <span class="s1">&#39;nbins&#39;</span><span class="p">:</span> <span class="mi">64</span><span class="p">}</span>	 <span class="n">got</span> <span class="n">mae</span> <span class="n">score</span> <span class="mf">0.04021</span> <span class="p">[</span><span class="n">took</span> <span class="mf">1.1356</span><span class="n">s</span><span class="p">]</span>
-<span class="p">[</span><span class="n">GridSearchQ</span><span class="p">]:</span> <span class="n">hyperparams</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;classifier__C&#39;</span><span class="p">:</span> <span class="mf">0.01</span><span class="p">,</span> <span class="s1">&#39;nbins&#39;</span><span class="p">:</span> <span class="mi">32</span><span class="p">}</span>	 <span class="n">got</span> <span class="n">mae</span> <span class="n">score</span> <span class="mf">0.04286</span> <span class="p">[</span><span class="n">took</span> <span class="mf">1.2139</span><span class="n">s</span><span class="p">]</span>
-<span class="p">[</span><span class="n">GridSearchQ</span><span class="p">]:</span> <span class="n">hyperparams</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;classifier__C&#39;</span><span class="p">:</span> <span class="mf">0.01</span><span class="p">,</span> <span class="s1">&#39;nbins&#39;</span><span class="p">:</span> <span class="mi">16</span><span class="p">}</span>	 <span class="n">got</span> <span class="n">mae</span> <span class="n">score</span> <span class="mf">0.04888</span> <span class="p">[</span><span class="n">took</span> <span class="mf">1.2491</span><span class="n">s</span><span class="p">]</span>
-<span class="p">[</span><span class="n">GridSearchQ</span><span class="p">]:</span> <span class="n">hyperparams</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;classifier__C&#39;</span><span class="p">:</span> <span class="mf">0.001</span><span class="p">,</span> <span class="s1">&#39;nbins&#39;</span><span class="p">:</span> <span class="mi">8</span><span class="p">}</span>	 <span class="n">got</span> <span class="n">mae</span> <span class="n">score</span> <span class="mf">0.05163</span> <span class="p">[</span><span class="n">took</span> <span class="mf">1.5372</span><span class="n">s</span><span class="p">]</span>
-<span class="p">[</span><span class="o">...</span><span class="p">]</span>
-<span class="p">[</span><span class="n">GridSearchQ</span><span class="p">]:</span> <span class="n">hyperparams</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;classifier__C&#39;</span><span class="p">:</span> <span class="mf">1000.0</span><span class="p">,</span> <span class="s1">&#39;nbins&#39;</span><span class="p">:</span> <span class="mi">32</span><span class="p">}</span>	 <span class="n">got</span> <span class="n">mae</span> <span class="n">score</span> <span class="mf">0.02445</span> <span class="p">[</span><span class="n">took</span> <span class="mf">2.9056</span><span class="n">s</span><span class="p">]</span>
-<span class="p">[</span><span class="n">GridSearchQ</span><span class="p">]:</span> <span class="n">optimization</span> <span class="n">finished</span><span class="p">:</span> <span class="n">best</span> <span class="n">params</span> <span class="p">{</span><span class="s1">&#39;classifier__C&#39;</span><span class="p">:</span> <span class="mf">100.0</span><span class="p">,</span> <span class="s1">&#39;nbins&#39;</span><span class="p">:</span> <span class="mi">32</span><span class="p">}</span> <span class="p">(</span><span class="n">score</span><span class="o">=</span><span class="mf">0.02234</span><span class="p">)</span> <span class="p">[</span><span class="n">took</span> <span class="mf">7.3114</span><span class="n">s</span><span class="p">]</span>
-<span class="p">[</span><span class="n">GridSearchQ</span><span class="p">]:</span> <span class="n">refitting</span> <span class="n">on</span> <span class="n">the</span> <span class="n">whole</span> <span class="n">development</span> <span class="nb">set</span>
-<span class="n">model</span> <span class="n">selection</span> <span class="n">ended</span><span class="p">:</span> <span class="n">best</span> <span class="n">hyper</span><span class="o">-</span><span class="n">parameters</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;classifier__C&#39;</span><span class="p">:</span> <span class="mf">100.0</span><span class="p">,</span> <span class="s1">&#39;nbins&#39;</span><span class="p">:</span> <span class="mi">32</span><span class="p">}</span>
-<span class="n">MAE</span><span class="o">=</span><span class="mf">0.03102</span>
-</pre></div>
-</div>
-<p>The parameter <em>val_split</em> can alternatively be used to indicate
-a validation set (i.e., an instance of <em>LabelledCollection</em>) instead
-of a proportion. This could be useful if one wants to have control
-on the specific data split to be used across different model selection
-experiments.</p>
-</section>
-<section id="targeting-a-classification-oriented-loss">
-<h2>Targeting a Classification-oriented loss<a class="headerlink" href="#targeting-a-classification-oriented-loss" title="Permalink to this heading">¶</a></h2>
-<p>Optimizing a model for quantification could rather be
-computationally costly.
-In aggregative methods, one could alternatively try to optimize
-the classifier’s hyper-parameters for classification.
-Although this is theoretically suboptimal, many articles in
-quantification literature have opted for this strategy.</p>
-<p>In QuaPy, this is achieved by simply instantiating the
-classifier learner as a GridSearchCV from scikit-learn.
-The following code illustrates how to do that:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">learner</span> <span class="o">=</span> <span class="n">GridSearchCV</span><span class="p">(</span>
-    <span class="n">LogisticRegression</span><span class="p">(),</span>
-    <span class="n">param_grid</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;C&#39;</span><span class="p">:</span> <span class="n">np</span><span class="o">.</span><span class="n">logspace</span><span class="p">(</span><span class="o">-</span><span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">10</span><span class="p">),</span> <span class="s1">&#39;class_weight&#39;</span><span class="p">:</span> <span class="p">[</span><span class="s1">&#39;balanced&#39;</span><span class="p">,</span> <span class="kc">None</span><span class="p">]},</span>
-    <span class="n">cv</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span>
-<span class="n">model</span> <span class="o">=</span> <span class="n">DistributionMatching</span><span class="p">(</span><span class="n">learner</span><span class="p">)</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">dataset</span><span class="o">.</span><span class="n">training</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>However, this is conceptually flawed, since the model should be
-optimized for the task at hand (quantification), and not for a surrogate task (classification),
-i.e., the model should be requested to deliver low quantification errors, rather
-than low classification errors.</p>
-</section>
-</section>
-
-
-            <div class="clearer"></div>
-          </div>
-        </div>
-      </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-  <div>
-    <h3><a href="index.html">Table of Contents</a></h3>
-    <ul>
-<li><a class="reference internal" href="#">Model Selection</a><ul>
-<li><a class="reference internal" href="#targeting-a-quantification-oriented-loss">Targeting a Quantification-oriented loss</a></li>
-<li><a class="reference internal" href="#targeting-a-classification-oriented-loss">Targeting a Classification-oriented loss</a></li>
-</ul>
-</li>
-</ul>
-
-  </div>
-  <div>
-    <h4>Previous topic</h4>
-    <p class="topless"><a href="Methods.html"
-                          title="previous chapter">Quantification Methods</a></p>
-  </div>
-  <div>
-    <h4>Next topic</h4>
-    <p class="topless"><a href="Plotting.html"
-                          title="next chapter">Plotting</a></p>
-  </div>
-  <div role="note" aria-label="source link">
-    <h3>This Page</h3>
-    <ul class="this-page-menu">
-      <li><a href="_sources/Model-Selection.md.txt"
-            rel="nofollow">Show Source</a></li>
-    </ul>
-   </div>
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Quick search</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
-      <input type="submit" value="Go" />
-    </form>
-    </div>
-</div>
-<script>document.getElementById('searchbox').style.display = "block"</script>
-        </div>
-      </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             >index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="right" >
-          <a href="Plotting.html" title="Plotting"
-             >next</a> |</li>
-        <li class="right" >
-          <a href="Methods.html" title="Quantification Methods"
-             >previous</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">Model Selection</a></li> 
-      </ul>
-    </div>
-    <div class="footer" role="contentinfo">
-        &#169; Copyright 2021, Alejandro Moreo.
-      Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
-    </div>
-  </body>
-</html>
\ No newline at end of file
diff --git a/docs/build/html/Plotting.html b/docs/build/html/Plotting.html
deleted file mode 100644
index d41bef6..0000000
--- a/docs/build/html/Plotting.html
+++ /dev/null
@@ -1,350 +0,0 @@
-
-
-<!doctype html>
-
-<html lang="en">
-  <head>
-    <meta charset="utf-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
-
-    <title>Plotting &#8212; QuaPy 0.1.7 documentation</title>
-    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
-    <link rel="stylesheet" type="text/css" href="_static/bizstyle.css" />
-    
-    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
-    <script src="_static/jquery.js"></script>
-    <script src="_static/underscore.js"></script>
-    <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
-    <script src="_static/doctools.js"></script>
-    <script src="_static/sphinx_highlight.js"></script>
-    <script src="_static/bizstyle.js"></script>
-    <link rel="index" title="Index" href="genindex.html" />
-    <link rel="search" title="Search" href="search.html" />
-    <link rel="next" title="quapy" href="modules.html" />
-    <link rel="prev" title="Model Selection" href="Model-Selection.html" />
-    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
-    <!--[if lt IE 9]>
-    <script src="_static/css3-mediaqueries.js"></script>
-    <![endif]-->
-  </head><body>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             accesskey="I">index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="right" >
-          <a href="modules.html" title="quapy"
-             accesskey="N">next</a> |</li>
-        <li class="right" >
-          <a href="Model-Selection.html" title="Model Selection"
-             accesskey="P">previous</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">Plotting</a></li> 
-      </ul>
-    </div>  
-
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          <div class="body" role="main">
-            
-  <section id="plotting">
-<h1>Plotting<a class="headerlink" href="#plotting" title="Permalink to this heading">¶</a></h1>
-<p>The module <em>qp.plot</em> implements some basic plotting functions
-that can help analyse the performance of a quantification method.</p>
-<p>All plotting functions receive as inputs the outcomes of
-some experiments and include, for each experiment,
-the following three main arguments:</p>
-<ul class="simple">
-<li><p><em>method_names</em> a list containing the names of the quantification methods</p></li>
-<li><p><em>true_prevs</em> a list containing matrices of true prevalences</p></li>
-<li><p><em>estim_prevs</em> a list containing matrices of estimated prevalences
-(should be of the same shape as the corresponding matrix in <em>true_prevs</em>)</p></li>
-</ul>
-<p>Note that a method (as indicated by a name in <em>method_names</em>) can
-appear more than once. This could occur when various datasets are
-involved in the experiments. In this case, all experiments for the
-method will be merged and the plot will represent the method’s
-performance across various datasets.</p>
-<p>This is a very simple example of a valid input for the plotting functions:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">method_names</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;classify &amp; count&#39;</span><span class="p">,</span> <span class="s1">&#39;EMQ&#39;</span><span class="p">,</span> <span class="s1">&#39;classify &amp; count&#39;</span><span class="p">]</span>
-<span class="n">true_prevs</span> <span class="o">=</span> <span class="p">[</span>
-    <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">],</span> <span class="p">[</span><span class="mf">0.25</span><span class="p">,</span> <span class="mf">0.75</span><span class="p">]]),</span>
-    <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">],</span> <span class="p">[</span><span class="mf">0.25</span><span class="p">,</span> <span class="mf">0.75</span><span class="p">],</span> <span class="p">[</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.1</span><span class="p">]]),</span>
-    <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">],</span> <span class="p">[</span><span class="mf">0.25</span><span class="p">,</span> <span class="mf">0.75</span><span class="p">],</span> <span class="p">[</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.1</span><span class="p">]]),</span>
-<span class="p">]</span>
-<span class="n">estim_prevs</span> <span class="o">=</span> <span class="p">[</span>
-    <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="mf">0.45</span><span class="p">,</span> <span class="mf">0.55</span><span class="p">],</span> <span class="p">[</span><span class="mf">0.6</span><span class="p">,</span> <span class="mf">0.4</span><span class="p">]]),</span>
-    <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">],</span> <span class="p">[</span><span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">],</span> <span class="p">[</span><span class="mf">0.2</span><span class="p">,</span> <span class="mf">0.8</span><span class="p">]]),</span>
-    <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.9</span><span class="p">],</span> <span class="p">[</span><span class="mf">0.3</span><span class="p">,</span> <span class="mf">0.7</span><span class="p">],</span> <span class="p">[</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.1</span><span class="p">]]),</span>
-<span class="p">]</span>
-</pre></div>
-</div>
-<p>in which the <em>classify &amp; count</em> has been tested in two datasets and
-the <em>EMQ</em> method has been tested only in one dataset. For the first
-experiment, only two (binary) quantifications have been tested,
-while for the second and third experiments three instances have
-been tested.</p>
-<p>In general, we would like to test the performance of the
-quantification methods across different scenarios showcasing
-the accuracy of the quantifier in predicting class prevalences
-for a wide range of prior distributions. This can easily be
-achieved by means of the
-<a class="reference external" href="https://github.com/HLT-ISTI/QuaPy/wiki/Protocols">artificial sampling protocol</a>
-that is implemented in QuaPy.</p>
-<p>The following code shows how to perform one simple experiment
-in which the 4 <em>CC-variants</em>, all equipped with a linear SVM, are
-applied to one binary dataset of reviews about <em>Kindle</em> devices and
-tested across the entire spectrum of class priors (taking 21 splits
-of the interval [0,1], i.e., using prevalence steps of 0.05, and
-generating 100 random samples at each prevalence).</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">quapy</span> <span class="k">as</span> <span class="nn">qp</span>
-<span class="kn">from</span> <span class="nn">protocol</span> <span class="kn">import</span> <span class="n">APP</span>
-<span class="kn">from</span> <span class="nn">quapy.method.aggregative</span> <span class="kn">import</span> <span class="n">CC</span><span class="p">,</span> <span class="n">ACC</span><span class="p">,</span> <span class="n">PCC</span><span class="p">,</span> <span class="n">PACC</span>
-<span class="kn">from</span> <span class="nn">sklearn.svm</span> <span class="kn">import</span> <span class="n">LinearSVC</span>
-
-<span class="n">qp</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s1">&#39;SAMPLE_SIZE&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">500</span>
-
-<span class="k">def</span> <span class="nf">gen_data</span><span class="p">():</span>
-
-    <span class="k">def</span> <span class="nf">base_classifier</span><span class="p">():</span>
-        <span class="k">return</span> <span class="n">LinearSVC</span><span class="p">(</span><span class="n">class_weight</span><span class="o">=</span><span class="s1">&#39;balanced&#39;</span><span class="p">)</span>
-
-    <span class="k">def</span> <span class="nf">models</span><span class="p">():</span>
-        <span class="k">yield</span> <span class="s1">&#39;CC&#39;</span><span class="p">,</span> <span class="n">CC</span><span class="p">(</span><span class="n">base_classifier</span><span class="p">())</span>
-        <span class="k">yield</span> <span class="s1">&#39;ACC&#39;</span><span class="p">,</span> <span class="n">ACC</span><span class="p">(</span><span class="n">base_classifier</span><span class="p">())</span>
-        <span class="k">yield</span> <span class="s1">&#39;PCC&#39;</span><span class="p">,</span> <span class="n">PCC</span><span class="p">(</span><span class="n">base_classifier</span><span class="p">())</span>
-        <span class="k">yield</span> <span class="s1">&#39;PACC&#39;</span><span class="p">,</span> <span class="n">PACC</span><span class="p">(</span><span class="n">base_classifier</span><span class="p">())</span>
-
-    <span class="n">train</span><span class="p">,</span> <span class="n">test</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">fetch_reviews</span><span class="p">(</span><span class="s1">&#39;kindle&#39;</span><span class="p">,</span> <span class="n">tfidf</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">min_df</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span><span class="o">.</span><span class="n">train_test</span>
-
-    <span class="n">method_names</span><span class="p">,</span> <span class="n">true_prevs</span><span class="p">,</span> <span class="n">estim_prevs</span><span class="p">,</span> <span class="n">tr_prevs</span> <span class="o">=</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[]</span>
-
-    <span class="k">for</span> <span class="n">method_name</span><span class="p">,</span> <span class="n">model</span> <span class="ow">in</span> <span class="n">models</span><span class="p">():</span>
-        <span class="n">model</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">train</span><span class="p">)</span>
-        <span class="n">true_prev</span><span class="p">,</span> <span class="n">estim_prev</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">evaluation</span><span class="o">.</span><span class="n">prediction</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">APP</span><span class="p">(</span><span class="n">test</span><span class="p">,</span> <span class="n">repeats</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span> <span class="n">random_state</span><span class="o">=</span><span class="mi">0</span><span class="p">))</span>
-
-        <span class="n">method_names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">method_name</span><span class="p">)</span>
-        <span class="n">true_prevs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">true_prev</span><span class="p">)</span>
-        <span class="n">estim_prevs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">estim_prev</span><span class="p">)</span>
-        <span class="n">tr_prevs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">train</span><span class="o">.</span><span class="n">prevalence</span><span class="p">())</span>
-
-    <span class="k">return</span> <span class="n">method_names</span><span class="p">,</span> <span class="n">true_prevs</span><span class="p">,</span> <span class="n">estim_prevs</span><span class="p">,</span> <span class="n">tr_prevs</span>
-
-<span class="n">method_names</span><span class="p">,</span> <span class="n">true_prevs</span><span class="p">,</span> <span class="n">estim_prevs</span><span class="p">,</span> <span class="n">tr_prevs</span> <span class="o">=</span> <span class="n">gen_data</span><span class="p">()</span>
-</pre></div>
-</div>
-<p>the plots that can be generated are explained below.</p>
-<section id="diagonal-plot">
-<h2>Diagonal Plot<a class="headerlink" href="#diagonal-plot" title="Permalink to this heading">¶</a></h2>
-<p>The <em>diagonal</em> plot shows a very insightful view of the
-quantifier’s performance. It plots the predicted class
-prevalence (in the y-axis) against the true class prevalence
-(in the x-axis). Unfortunately, it is limited to binary quantification,
-although one can simply generate as many <em>diagonal</em> plots as
-classes there are by indicating which class should be considered
-the target of the plot.</p>
-<p>The following call will produce the plot:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">qp</span><span class="o">.</span><span class="n">plot</span><span class="o">.</span><span class="n">binary_diagonal</span><span class="p">(</span><span class="n">method_names</span><span class="p">,</span> <span class="n">true_prevs</span><span class="p">,</span> <span class="n">estim_prevs</span><span class="p">,</span> <span class="n">train_prev</span><span class="o">=</span><span class="n">tr_prevs</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">savepath</span><span class="o">=</span><span class="s1">&#39;./plots/bin_diag.png&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>the last argument is optional, and indicates the path where to save
-the plot (the file extension will determine the format – typical extensions
-are ‘.png’ or ‘.pdf’). If this path is not provided, then the plot
-will be shown but not saved.
-The resulting plot should look like:</p>
-<p><img alt="diagonal plot on Kindle" src="_images/bin_diag.png" /></p>
-<p>Note that in this case, we are also indicating the training
-prevalence, which is plotted in the diagonal a as cyan dot.
-The color bands indicate the standard deviations of the predictions,
-and can be hidden by setting the argument <em>show_std=False</em> (see
-the complete list of arguments in the documentation).</p>
-<p>Finally, note how most quantifiers, and specially the “unadjusted”
-variants CC and PCC, are strongly biased towards the
-prevalence seen during training.</p>
-</section>
-<section id="quantification-bias">
-<h2>Quantification bias<a class="headerlink" href="#quantification-bias" title="Permalink to this heading">¶</a></h2>
-<p>This plot aims at evincing the bias that any quantifier
-displays with respect to the training prevalences by
-means of <a class="reference external" href="https://en.wikipedia.org/wiki/Box_plot">box plots</a>.
-This plot can be generated by:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">qp</span><span class="o">.</span><span class="n">plot</span><span class="o">.</span><span class="n">binary_bias_global</span><span class="p">(</span><span class="n">method_names</span><span class="p">,</span> <span class="n">true_prevs</span><span class="p">,</span> <span class="n">estim_prevs</span><span class="p">,</span> <span class="n">savepath</span><span class="o">=</span><span class="s1">&#39;./plots/bin_bias.png&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>and should look like:</p>
-<p><img alt="bias plot on Kindle" src="_images/bin_bias.png" /></p>
-<p>The box plots show some interesting facts:</p>
-<ul class="simple">
-<li><p>all methods are biased towards the training prevalence but specially
-so CC and PCC (an unbiased quantifier would have a box centered at 0)</p></li>
-<li><p>the bias is always positive, indicating that all methods tend to
-overestimate the positive class prevalence</p></li>
-<li><p>CC and PCC have high variability while ACC and specially PACC exhibit
-lower variability.</p></li>
-</ul>
-<p>Again, these plots could be generated for experiments ranging across
-different datasets, and the plot will merge all data accordingly.</p>
-<p>Another illustrative example can be shown that consists of
-training different CC quantifiers trained at different
-(artificially sampled) training prevalences.
-For this example, we generate training samples of 5000
-documents containing 10%, 20%, …, 90% of positives from the
-IMDb dataset, and generate the bias plot again.
-This example can be run by rewritting the <em>gen_data()</em> function
-like this:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">gen_data</span><span class="p">():</span>
-
-    <span class="n">train</span><span class="p">,</span> <span class="n">test</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">fetch_reviews</span><span class="p">(</span><span class="s1">&#39;imdb&#39;</span><span class="p">,</span> <span class="n">tfidf</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">min_df</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span><span class="o">.</span><span class="n">train_test</span>
-    <span class="n">model</span> <span class="o">=</span> <span class="n">CC</span><span class="p">(</span><span class="n">LinearSVC</span><span class="p">())</span>
-
-    <span class="n">method_data</span> <span class="o">=</span> <span class="p">[]</span>
-    <span class="k">for</span> <span class="n">training_prevalence</span> <span class="ow">in</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.9</span><span class="p">,</span> <span class="mi">9</span><span class="p">):</span>
-        <span class="n">training_size</span> <span class="o">=</span> <span class="mi">5000</span>
-        <span class="c1"># since the problem is binary, it suffices to specify the negative prevalence, since the positive is constrained</span>
-        <span class="n">train_sample</span> <span class="o">=</span> <span class="n">train</span><span class="o">.</span><span class="n">sampling</span><span class="p">(</span><span class="n">training_size</span><span class="p">,</span> <span class="mi">1</span><span class="o">-</span><span class="n">training_prevalence</span><span class="p">)</span>
-        <span class="n">model</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">train_sample</span><span class="p">)</span>
-        <span class="n">true_prev</span><span class="p">,</span> <span class="n">estim_prev</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">evaluation</span><span class="o">.</span><span class="n">prediction</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">APP</span><span class="p">(</span><span class="n">test</span><span class="p">,</span> <span class="n">repeats</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span> <span class="n">random_state</span><span class="o">=</span><span class="mi">0</span><span class="p">))</span>
-        <span class="n">method_name</span> <span class="o">=</span> <span class="s1">&#39;CC$_{&#39;</span><span class="o">+</span><span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="mi">100</span><span class="o">*</span><span class="n">training_prevalence</span><span class="p">)</span><span class="si">}</span><span class="s1">&#39;</span> <span class="o">+</span> <span class="s1">&#39;\%}$&#39;</span>
-        <span class="n">method_data</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">method_name</span><span class="p">,</span> <span class="n">true_prev</span><span class="p">,</span> <span class="n">estim_prev</span><span class="p">,</span> <span class="n">train_sample</span><span class="o">.</span><span class="n">prevalence</span><span class="p">()))</span>
-
-    <span class="k">return</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">method_data</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>and the plot should now look like:</p>
-<p><img alt="bias plot on IMDb" src="_images/bin_bias_cc.png" /></p>
-<p>which clearly shows a negative bias for CC variants trained on
-data containing more negatives (i.e., &lt; 50%) and positive biases
-in cases containing more positives (i.e., &gt;50%). The CC trained
-at 50% behaves as an unbiased estimator of the positive class
-prevalence.</p>
-<p>The function <em>qp.plot.binary_bias_bins</em> allows the user to
-generate box plots broken down by bins of true test prevalence.
-To this aim, an argument <em>nbins</em> is passed which indicates
-how many isometric subintervals to take. For example
-the following plot is produced for <em>nbins=3</em>:</p>
-<p><img alt="bias plot on IMDb" src="_images/bin_bias_bin_cc.png" /></p>
-<p>Interestingly enough, the seemingly unbiased estimator (CC at 50%) happens to display
-a positive bias (or a tendency to overestimate) in cases of low prevalence
-(i.e., when the true prevalence of the positive class is below 33%),
-and a negative bias (or a tendency to underestimate) in cases of high prevalence
-(i.e., when the true prevalence is beyond 67%).</p>
-<p>Out of curiosity, the diagonal plot for this experiment looks like:</p>
-<p><img alt="diag plot on IMDb" src="_images/bin_diag_cc.png" /></p>
-<p>showing pretty clearly the dependency of CC on the prior probabilities
-of the labeled set it was trained on.</p>
-</section>
-<section id="error-by-drift">
-<h2>Error by Drift<a class="headerlink" href="#error-by-drift" title="Permalink to this heading">¶</a></h2>
-<p>Above discussed plots are useful for analyzing and comparing
-the performance of different quantification methods, but are
-limited to the binary case. The “error by drift” is a plot
-that shows the error in predictions as a function of the
-(prior probability) drift between each test sample and the
-training set. Interestingly, the error and drift can both be measured
-in terms of any evaluation measure for quantification (like the
-ones available in <em>qp.error</em>) and can thus be computed
-irrespectively of the number of classes.</p>
-<p>The following shows how to generate the plot for the 4 CC variants,
-using 10 bins for the drift
-and <em>absolute error</em> as the measure of the error (the
-drift in the x-axis is always computed in terms of <em>absolute error</em> since
-other errors are harder to interpret):</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">qp</span><span class="o">.</span><span class="n">plot</span><span class="o">.</span><span class="n">error_by_drift</span><span class="p">(</span><span class="n">method_names</span><span class="p">,</span> <span class="n">true_prevs</span><span class="p">,</span> <span class="n">estim_prevs</span><span class="p">,</span> <span class="n">tr_prevs</span><span class="p">,</span> 
-    <span class="n">error_name</span><span class="o">=</span><span class="s1">&#39;ae&#39;</span><span class="p">,</span> <span class="n">n_bins</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">savepath</span><span class="o">=</span><span class="s1">&#39;./plots/err_drift.png&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p><img alt="diag plot on IMDb" src="_images/err_drift.png" /></p>
-<p>Note that all methods work reasonably well in cases of low prevalence
-drift (i.e., any CC-variant is a good quantifier whenever the IID
-assumption is approximately preserved). The higher the drift, the worse
-those quantifiers tend to perform, although it is clear that PACC
-yields the lowest error for the most difficult cases.</p>
-<p>Remember that any plot can be generated <em>across many datasets</em>, and
-that this would probably result in a more solid comparison.
-In those cases, however, it is likely that the variances of each
-method get higher, to the detriment of the visualization.
-We recommend to set <em>show_std=False</em> in those cases
-in order to hide the color bands.</p>
-</section>
-</section>
-
-
-            <div class="clearer"></div>
-          </div>
-        </div>
-      </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-  <div>
-    <h3><a href="index.html">Table of Contents</a></h3>
-    <ul>
-<li><a class="reference internal" href="#">Plotting</a><ul>
-<li><a class="reference internal" href="#diagonal-plot">Diagonal Plot</a></li>
-<li><a class="reference internal" href="#quantification-bias">Quantification bias</a></li>
-<li><a class="reference internal" href="#error-by-drift">Error by Drift</a></li>
-</ul>
-</li>
-</ul>
-
-  </div>
-  <div>
-    <h4>Previous topic</h4>
-    <p class="topless"><a href="Model-Selection.html"
-                          title="previous chapter">Model Selection</a></p>
-  </div>
-  <div>
-    <h4>Next topic</h4>
-    <p class="topless"><a href="modules.html"
-                          title="next chapter">quapy</a></p>
-  </div>
-  <div role="note" aria-label="source link">
-    <h3>This Page</h3>
-    <ul class="this-page-menu">
-      <li><a href="_sources/Plotting.md.txt"
-            rel="nofollow">Show Source</a></li>
-    </ul>
-   </div>
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Quick search</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
-      <input type="submit" value="Go" />
-    </form>
-    </div>
-</div>
-<script>document.getElementById('searchbox').style.display = "block"</script>
-        </div>
-      </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             >index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="right" >
-          <a href="modules.html" title="quapy"
-             >next</a> |</li>
-        <li class="right" >
-          <a href="Model-Selection.html" title="Model Selection"
-             >previous</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">Plotting</a></li> 
-      </ul>
-    </div>
-    <div class="footer" role="contentinfo">
-        &#169; Copyright 2021, Alejandro Moreo.
-      Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
-    </div>
-  </body>
-</html>
\ No newline at end of file
diff --git a/docs/build/html/_images/bin_bias.png b/docs/build/html/_images/bin_bias.png
deleted file mode 100644
index 572dae4..0000000
Binary files a/docs/build/html/_images/bin_bias.png and /dev/null differ
diff --git a/docs/build/html/_images/bin_bias_bin_cc.png b/docs/build/html/_images/bin_bias_bin_cc.png
deleted file mode 100644
index db34c76..0000000
Binary files a/docs/build/html/_images/bin_bias_bin_cc.png and /dev/null differ
diff --git a/docs/build/html/_images/bin_bias_cc.png b/docs/build/html/_images/bin_bias_cc.png
deleted file mode 100644
index db91dd4..0000000
Binary files a/docs/build/html/_images/bin_bias_cc.png and /dev/null differ
diff --git a/docs/build/html/_images/bin_diag.png b/docs/build/html/_images/bin_diag.png
deleted file mode 100644
index 7ded71a..0000000
Binary files a/docs/build/html/_images/bin_diag.png and /dev/null differ
diff --git a/docs/build/html/_images/bin_diag_cc.png b/docs/build/html/_images/bin_diag_cc.png
deleted file mode 100644
index 01bb43d..0000000
Binary files a/docs/build/html/_images/bin_diag_cc.png and /dev/null differ
diff --git a/docs/build/html/_images/err_drift.png b/docs/build/html/_images/err_drift.png
deleted file mode 100644
index 496b66c..0000000
Binary files a/docs/build/html/_images/err_drift.png and /dev/null differ
diff --git a/docs/build/html/_sources/Datasets.md.txt b/docs/build/html/_sources/Datasets.md.txt
deleted file mode 100644
index d5e7563..0000000
--- a/docs/build/html/_sources/Datasets.md.txt
+++ /dev/null
@@ -1,356 +0,0 @@
-# Datasets
-
-QuaPy makes available several datasets that have been used in
-quantification literature, as well as an interface to allow
-anyone import their custom datasets.
-
-A _Dataset_ object in QuaPy is roughly a pair of _LabelledCollection_ objects,
-one playing the role of the training set, another the test set. 
-_LabelledCollection_ is a data class consisting of the (iterable) 
-instances and labels. This class handles most of the sampling functionality in QuaPy.
-Take a look at the following code:
-
-```python
-import quapy as qp
-import quapy.functional as F
-
-instances = [
-    '1st positive document', '2nd positive document',
-    'the only negative document',
-    '1st neutral document', '2nd neutral document', '3rd neutral document'
-]
-labels = [2, 2, 0, 1, 1, 1]
-
-data = qp.data.LabelledCollection(instances, labels)
-print(F.strprev(data.prevalence(), prec=2))
-```
-
-Output the class prevalences (showing 2 digit precision):
-```
-[0.17, 0.50, 0.33]
-```
-
-One can easily produce new samples at desired class prevalence values:
-
-```python
-sample_size = 10
-prev = [0.4, 0.1, 0.5]
-sample = data.sampling(sample_size, *prev)
-
-print('instances:', sample.instances)
-print('labels:', sample.labels)
-print('prevalence:', F.strprev(sample.prevalence(), prec=2))
-```
-
-Which outputs: 
-```
-instances: ['the only negative document' '2nd positive document'
- '2nd positive document' '2nd neutral document' '1st positive document'
- 'the only negative document' 'the only negative document'
- 'the only negative document' '2nd positive document'
- '1st positive document']
-labels: [0 2 2 1 2 0 0 0 2 2]
-prevalence: [0.40, 0.10, 0.50]
-```
-
-Samples can be made consistent across different runs (e.g., to test
-different methods on the same exact samples) by sampling and retaining
-the indexes, that can then be used to generate the sample:
-
-```python
-index = data.sampling_index(sample_size, *prev)
-for method in methods:
-    sample = data.sampling_from_index(index)
-    ...
-```
-
-However, generating samples for evaluation purposes is tackled in QuaPy
-by means of the evaluation protocols (see the dedicated entries in the Wiki
-for [evaluation](https://github.com/HLT-ISTI/QuaPy/wiki/Evaluation) and 
-[protocols](https://github.com/HLT-ISTI/QuaPy/wiki/Protocols)).
-
-
-## Reviews Datasets
-
-Three datasets of reviews about Kindle devices, Harry Potter's series, and
-the well-known IMDb movie reviews can be fetched using a unified interface.
-For example:
-
-```python
-import quapy as qp
-data = qp.datasets.fetch_reviews('kindle')
-```
-
-These datasets have been used in:
-```
-Esuli, A., Moreo, A., & Sebastiani, F. (2018, October). 
-A recurrent neural network for sentiment quantification. 
-In Proceedings of the 27th ACM International Conference on 
-Information and Knowledge Management (pp. 1775-1778).
-```
-
-The list of reviews ids is available in:
-
-```python
-qp.datasets.REVIEWS_SENTIMENT_DATASETS
-```
-
-Some statistics of the fhe available datasets are summarized below:
-
-| Dataset | classes | train size | test size | train prev | test prev | type |
-|---|:---:|:---:|:---:|:---:|:---:|---| 
-| hp | 2 | 9533 | 18399 | [0.018, 0.982] | [0.065, 0.935] | text |
-| kindle | 2 | 3821 | 21591 | [0.081, 0.919] | [0.063, 0.937] | text |
-| imdb | 2 | 25000 | 25000 | [0.500, 0.500] | [0.500, 0.500] | text |
-
-
-## Twitter Sentiment Datasets
-
-11 Twitter datasets for sentiment analysis.
-Text is not accessible, and the documents were made available
-in tf-idf format. Each dataset presents two splits: a train/val
-split for model selection purposes, and a train+val/test split
-for model evaluation. The following code exemplifies how to load
-a twitter dataset for model selection. 
-
-```python
-import quapy as qp
-data = qp.datasets.fetch_twitter('gasp', for_model_selection=True)
-```
-
-The datasets were used in:
-
-```
-Gao, W., & Sebastiani, F. (2015, August). 
-Tweet sentiment: From classification to quantification. 
-In 2015 IEEE/ACM International Conference on Advances in 
-Social Networks Analysis and Mining (ASONAM) (pp. 97-104). IEEE.
-```
-
-Three of the datasets (semeval13, semeval14, and semeval15) share the
-same training set (semeval), meaning that the training split one would get
-when requesting any of them is the same. The dataset "semeval" can only
-be requested with "for_model_selection=True".
-The lists of the Twitter dataset's ids can be consulted in:
-
-```python
-# a list of 11 dataset ids that can be used for model selection or model evaluation
-qp.datasets.TWITTER_SENTIMENT_DATASETS_TEST
-
-# 9 dataset ids in which "semeval13", "semeval14", and "semeval15" are replaced with "semeval"
-qp.datasets.TWITTER_SENTIMENT_DATASETS_TRAIN  
-```
-
-Some details can be found below:
-
-| Dataset | classes | train size | test size | features | train prev | test prev | type |
-|---|:---:|:---:|:---:|:---:|:---:|:---:|---| 
-| gasp | 3 | 8788 | 3765 | 694582 | [0.421, 0.496, 0.082] | [0.407, 0.507, 0.086] | sparse |
-| hcr | 3 | 1594 | 798 | 222046 | [0.546, 0.211, 0.243] | [0.640, 0.167, 0.193] | sparse |
-| omd | 3 | 1839 | 787 | 199151 | [0.463, 0.271, 0.266] | [0.437, 0.283, 0.280] | sparse |
-| sanders | 3 | 2155 | 923 | 229399 | [0.161, 0.691, 0.148] | [0.164, 0.688, 0.148] | sparse |
-| semeval13 | 3 | 11338 | 3813 | 1215742 | [0.159, 0.470, 0.372] | [0.158, 0.430, 0.412] | sparse |
-| semeval14 | 3 | 11338 | 1853 | 1215742 | [0.159, 0.470, 0.372] | [0.109, 0.361, 0.530] | sparse |
-| semeval15 | 3 | 11338 | 2390 | 1215742 | [0.159, 0.470, 0.372] | [0.153, 0.413, 0.434] | sparse |
-| semeval16 | 3 | 8000 | 2000 | 889504 | [0.157, 0.351, 0.492] | [0.163, 0.341, 0.497] | sparse |
-| sst | 3 | 2971 | 1271 | 376132 | [0.261, 0.452, 0.288] | [0.207, 0.481, 0.312] | sparse |
-| wa | 3 | 2184 | 936 | 248563 | [0.305, 0.414, 0.281] | [0.282, 0.446, 0.272] | sparse |
-| wb | 3 | 4259 | 1823 | 404333 | [0.270, 0.392, 0.337] | [0.274, 0.392, 0.335] | sparse |
-
-
-## UCI Machine Learning
-
-A set of 32 datasets from the [UCI Machine Learning repository](https://archive.ics.uci.edu/ml/datasets.php) 
-used in:
-
-```
-Pérez-Gállego, P., Quevedo, J. R., & del Coz, J. J. (2017).
-Using ensembles for problems with characterizable changes 
-in data distribution: A case study on quantification.
-Information Fusion, 34, 87-100.
-```
-
-The list does not exactly coincide with that used in Pérez-Gállego et al. 2017
-since we were unable to find the datasets with ids "diabetes" and "phoneme".
-
-These dataset can be loaded by calling, e.g.:
-
-```python
-import quapy as qp
-data = qp.datasets.fetch_UCIDataset('yeast', verbose=True)
-```
-
-This call will return a _Dataset_ object in which the training and
-test splits are randomly drawn, in a stratified manner, from the whole
-collection at 70% and 30%, respectively. The _verbose=True_ option indicates
-that the dataset description should be printed in standard output.
-The original data is not split, 
-and some papers submit the entire collection to a kFCV validation. 
-In order to accommodate with these practices, one could first instantiate
-the entire collection, and then creating a generator that will return one
-training+test dataset at a time, following a kFCV protocol:
-
-```python
-import quapy as qp
-collection = qp.datasets.fetch_UCILabelledCollection("yeast")
-for data in qp.data.Dataset.kFCV(collection, nfolds=5, nrepeats=2):
-    ...
-```
-
-Above code will allow to conduct a 2x5FCV evaluation on the "yeast" dataset.
-
-All datasets come in numerical form (dense matrices); some statistics
-are summarized below.
-
-| Dataset | classes | instances | features | prev | type |
-|---|:---:|:---:|:---:|:---:|---| 
-| acute.a | 2 | 120 | 6 | [0.508, 0.492] | dense |
-| acute.b | 2 | 120 | 6 | [0.583, 0.417] | dense |
-| balance.1 | 2 | 625 | 4 | [0.539, 0.461] | dense |
-| balance.2 | 2 | 625 | 4 | [0.922, 0.078] | dense |
-| balance.3 | 2 | 625 | 4 | [0.539, 0.461] | dense |
-| breast-cancer | 2 | 683 | 9 | [0.350, 0.650] | dense |
-| cmc.1 | 2 | 1473 | 9 | [0.573, 0.427] | dense |
-| cmc.2 | 2 | 1473 | 9 | [0.774, 0.226] | dense |
-| cmc.3 | 2 | 1473 | 9 | [0.653, 0.347] | dense |
-| ctg.1 | 2 | 2126 | 22 | [0.222, 0.778] | dense |
-| ctg.2 | 2 | 2126 | 22 | [0.861, 0.139] | dense |
-| ctg.3 | 2 | 2126 | 22 | [0.917, 0.083] | dense |
-| german | 2 | 1000 | 24 | [0.300, 0.700] | dense |
-| haberman | 2 | 306 | 3 | [0.735, 0.265] | dense |
-| ionosphere | 2 | 351 | 34 | [0.641, 0.359] | dense |
-| iris.1 | 2 | 150 | 4 | [0.667, 0.333] | dense |
-| iris.2 | 2 | 150 | 4 | [0.667, 0.333] | dense |
-| iris.3 | 2 | 150 | 4 | [0.667, 0.333] | dense |
-| mammographic | 2 | 830 | 5 | [0.514, 0.486] | dense |
-| pageblocks.5 | 2 | 5473 | 10 | [0.979, 0.021] | dense |
-| semeion | 2 | 1593 | 256 | [0.901, 0.099] | dense |
-| sonar | 2 | 208 | 60 | [0.534, 0.466] | dense |
-| spambase | 2 | 4601 | 57 | [0.606, 0.394] | dense |
-| spectf | 2 | 267 | 44 | [0.794, 0.206] | dense |
-| tictactoe | 2 | 958 | 9 | [0.653, 0.347] | dense |
-| transfusion | 2 | 748 | 4 | [0.762, 0.238] | dense |
-| wdbc | 2 | 569 | 30 | [0.627, 0.373] | dense |
-| wine.1 | 2 | 178 | 13 | [0.669, 0.331] | dense |
-| wine.2 | 2 | 178 | 13 | [0.601, 0.399] | dense |
-| wine.3 | 2 | 178 | 13 | [0.730, 0.270] | dense |
-| wine-q-red | 2 | 1599 | 11 | [0.465, 0.535] | dense |
-| wine-q-white | 2 | 4898 | 11 | [0.335, 0.665] | dense |
-| yeast | 2 | 1484 | 8 | [0.711, 0.289] | dense |
-
-### Issues:
-All datasets will be downloaded automatically the first time they are requested, and
-stored in the _quapy_data_ folder for faster further reuse. 
-However, some datasets require special actions that at the moment are not fully
-automated.
-
-* Datasets with ids "ctg.1", "ctg.2", and "ctg.3" (_Cardiotocography Data Set_) load
-an Excel file, which requires the user to install the _xlrd_ Python module in order 
-to open it.
-* The dataset with id "pageblocks.5" (_Page Blocks Classification (5)_) needs to
-open a "unix compressed file" (extension .Z), which is not directly doable with
-standard Pythons packages like gzip or zip. This file would need to be uncompressed using
-OS-dependent software manually. Information on how to do it will be printed the first
-time the dataset is invoked. 
-
-## LeQua Datasets
-
-QuaPy also provides the datasets used for the LeQua competition.
-In brief, there are 4 tasks (T1A, T1B, T2A, T2B) having to do with text quantification
-problems. Tasks T1A and T1B provide documents in vector form, while T2A and T2B provide 
-raw documents instead.
-Tasks T1A and T2A are binary sentiment quantification problems, while T2A and T2B 
-are multiclass quantification problems consisting of estimating the class prevalence 
-values of 28 different merchandise products.
-
-Every task consists of a training set, a set of validation samples (for model selection)
-and a set of test samples (for evaluation). QuaPy returns this data as a LabelledCollection
-(training) and two generation protocols (for validation and test samples), as follows:
-
-```python
-training, val_generator, test_generator = fetch_lequa2022(task=task)
-```
-
-See the `lequa2022_experiments.py` in the examples folder for further details on how to
-carry out experiments using these datasets.  
-
-The datasets are downloaded only once, and stored for fast reuse.
-
-Some statistics are summarized below:
-
-| Dataset | classes | train size | validation samples | test samples |  docs by sample  |   type   |
-|---------|:-------:|:----------:|:------------------:|:------------:|:----------------:|:--------:| 
-| T1A     |   2     |    5000    |        1000        |     5000     |       250        |  vector  | 
-| T1B     |   28    |   20000    |        1000        |     5000     |       1000       |  vector  |
-| T2A     |    2    |    5000    |        1000        |     5000     |       250        |   text   |
-| T2B     |   28    |   20000    |        1000        |     5000     |       1000       |   text   |
-
-For further details on the datasets, we refer to the original 
-[paper](https://ceur-ws.org/Vol-3180/paper-146.pdf):
-
-```
-Esuli, A., Moreo, A., Sebastiani, F., & Sperduti, G. (2022).
-A Detailed Overview of LeQua@ CLEF 2022: Learning to Quantify.
-```
-
-## Adding Custom Datasets
-
-QuaPy provides data loaders for simple formats dealing with 
-text, following the format:
-
-```
-class-id \t first document's pre-processed text \n
-class-id \t second document's pre-processed text \n
-...
-```
-
-and sparse representations of the form:
-
-```
-{-1, 0, or +1} col(int):val(float) col(int):val(float) ... \n
-...
-```
-
-The code in charge in loading a LabelledCollection is:
-
-```python
-@classmethod
-def load(cls, path:str, loader_func:callable):
-    return LabelledCollection(*loader_func(path))
-```
-
-indicating that any _loader_func_ (e.g., a user-defined one) which 
-returns valid arguments for initializing a _LabelledCollection_ object will allow
-to load any collection. In particular, the _LabelledCollection_ receives as 
-arguments the instances (as an iterable) and the labels (as an iterable) and,
-additionally, the number of classes can be specified (it would otherwise be
-inferred from the labels, but that requires at least one positive example for
-all classes to be present in the collection).
-
-The same _loader_func_ can be passed to a Dataset, along with two 
-paths, in order to create a training and test pair of _LabelledCollection_,
-e.g.:
-
-```python
-import quapy as qp
-
-train_path = '../my_data/train.dat'
-test_path = '../my_data/test.dat'
-
-def my_custom_loader(path):
-    with open(path, 'rb') as fin:
-        ...
-    return instances, labels
-
-data = qp.data.Dataset.load(train_path, test_path, my_custom_loader)
-```
-
-### Data Processing
-
-QuaPy implements a number of preprocessing functions in the package _qp.data.preprocessing_, including:
-
-* _text2tfidf_: tfidf vectorization 
-* _reduce_columns_: reducing the number of columns based on term frequency
-* _standardize_: transforms the column values into z-scores (i.e., subtract the mean and normalizes by the standard deviation, so
-that the column values have zero mean and unit variance).
-* _index_: transforms textual tokens into lists of numeric ids) 
diff --git a/docs/build/html/_sources/Evaluation.md.txt b/docs/build/html/_sources/Evaluation.md.txt
deleted file mode 100644
index a0175d2..0000000
--- a/docs/build/html/_sources/Evaluation.md.txt
+++ /dev/null
@@ -1,169 +0,0 @@
-# Evaluation
-
-Quantification is an appealing tool in scenarios of dataset shift, 
-and particularly in scenarios of prior-probability shift. 
-That is, the interest in estimating the class prevalences arises
-under the belief that those class prevalences might have changed
-with respect to the ones observed during training. 
-In other words, one could simply return the training prevalence
-as a predictor of the test prevalence if this change is assumed
-to be unlikely (as is the case in general scenarios of 
-machine learning governed by the iid assumption).
-In brief, quantification requires dedicated evaluation protocols, 
-which are implemented in QuaPy and explained here.
-
-## Error Measures
-
-The module quapy.error implements the following error measures for quantification:
-* _mae_: mean absolute error
-* _mrae_: mean relative absolute error
-* _mse_: mean squared error
-* _mkld_: mean Kullback-Leibler Divergence
-* _mnkld_: mean normalized Kullback-Leibler Divergence
-
-Functions _ae_, _rae_, _se_, _kld_, and _nkld_ are also available,
-which return the individual errors (i.e., without averaging the whole).
-
-Some errors of classification are also available:
-* _acce_: accuracy error (1-accuracy)
-* _f1e_: F-1 score error (1-F1 score)
-
-The error functions implement the following interface, e.g.:
-
-```python
-mae(true_prevs, prevs_hat)
-```
-
-in which the first argument is a ndarray containing the true
-prevalences, and the second argument is another ndarray with
-the estimations produced by some method.
-
-Some error functions, e.g., _mrae_, _mkld_, and _mnkld_, are 
-smoothed for numerical stability. In those cases, there is a
-third argument, e.g.:
-
-```python
-def mrae(true_prevs, prevs_hat, eps=None): ...
-```
-
-indicating the value for the smoothing parameter epsilon.
-Traditionally, this value is set to 1/(2T) in past literature,
-with T the sampling size. One could either pass this value
-to the function each time, or to set a QuaPy's environment 
-variable _SAMPLE_SIZE_ once, and omit this argument 
-thereafter (recommended);
-e.g.:
-
-```python
-qp.environ['SAMPLE_SIZE'] = 100  # once for all
-true_prev = np.asarray([0.5, 0.3, 0.2])  # let's assume 3 classes
-estim_prev = np.asarray([0.1, 0.3, 0.6])
-error = qp.error.mrae(true_prev, estim_prev)
-print(f'mrae({true_prev}, {estim_prev}) = {error:.3f}')
-```
-
-will print:
-```
-mrae([0.500, 0.300, 0.200], [0.100, 0.300, 0.600]) = 0.914
-```
-
-Finally, it is possible to instantiate QuaPy's quantification
-error functions from strings using, e.g.:
-
-```python
-error_function = qp.error.from_name('mse')
-error = error_function(true_prev, estim_prev)
-```
-
-## Evaluation Protocols
-
-An _evaluation protocol_ is an evaluation procedure that uses
-one specific _sample generation procotol_ to genereate many
-samples, typically characterized by widely varying amounts of 
-_shift_ with respect to the original distribution, that are then
-used to evaluate the performance of a (trained) quantifier. 
-These protocols are explained in more detail in a dedicated [entry 
-in the wiki](Protocols.md). For the moment being, let us assume we already have
-chosen and instantiated one specific such protocol, that we here
-simply call _prot_. Let also assume our model is called
-_quantifier_ and that our evaluatio measure of choice is 
-_mae_. The evaluation comes down to:
-
-```python
-mae = qp.evaluation.evaluate(quantifier, protocol=prot, error_metric='mae')
-print(f'MAE = {mae:.4f}')
-```
-
-It is often desirable to evaluate our system using more than one
-single evaluatio measure. In this case, it is convenient to generate
-a _report_. A report in QuaPy is a dataframe accounting for all the
-true prevalence values with their corresponding prevalence values
-as estimated by the quantifier, along with the error each has given
-rise. 
-
-```python
-report = qp.evaluation.evaluation_report(quantifier, protocol=prot, error_metrics=['mae', 'mrae', 'mkld'])
-```
-
-From a pandas' dataframe, it is straightforward to visualize all the results, 
-and compute the averaged values, e.g.: 
-
-```python
-pd.set_option('display.expand_frame_repr', False)
-report['estim-prev'] = report['estim-prev'].map(F.strprev)
-print(report)
-
-print('Averaged values:')
-print(report.mean())
-```
-
-This will produce an output like:
-
-```
-           true-prev      estim-prev       mae      mrae      mkld
-0     [0.308, 0.692]  [0.314, 0.686]  0.005649  0.013182  0.000074
-1     [0.896, 0.104]  [0.909, 0.091]  0.013145  0.069323  0.000985
-2     [0.848, 0.152]  [0.809, 0.191]  0.039063  0.149806  0.005175
-3     [0.016, 0.984]  [0.033, 0.967]  0.017236  0.487529  0.005298
-4     [0.728, 0.272]  [0.751, 0.249]  0.022769  0.057146  0.001350
-...              ...             ...       ...       ...       ...
-4995    [0.72, 0.28]  [0.698, 0.302]  0.021752  0.053631  0.001133
-4996  [0.868, 0.132]  [0.888, 0.112]  0.020490  0.088230  0.001985
-4997  [0.292, 0.708]  [0.298, 0.702]  0.006149  0.014788  0.000090
-4998    [0.24, 0.76]  [0.220, 0.780]  0.019950  0.054309  0.001127
-4999  [0.948, 0.052]  [0.965, 0.035]  0.016941  0.165776  0.003538
-
-[5000 rows x 5 columns]
-Averaged values:
-mae     0.023588
-mrae    0.108779
-mkld    0.003631
-dtype: float64
-
-Process finished with exit code 0
-```
-
-Alternatively, we can simply generate all the predictions by:
-
-```python
-true_prevs, estim_prevs = qp.evaluation.prediction(quantifier, protocol=prot)
-```
-
-All the evaluation functions implement specific optimizations for speeding-up 
-the evaluation of aggregative quantifiers (i.e., of instances of _AggregativeQuantifier_).
-The optimization comes down to generating classification predictions (either crisp or soft) 
-only once for the entire test set, and then applying the sampling procedure to the
-predictions, instead of generating samples of instances and then computing the 
-classification predictions every time. This is only possible when the protocol
-is an instance of _OnLabelledCollectionProtocol_. The optimization is only 
-carried out when the number of classification predictions thus generated would be
-smaller than the number of predictions required for the entire protocol; e.g., 
-if the original dataset contains 1M instances, but the protocol is such that it would
-at most generate 20 samples of 100 instances, then it would be preferable to postpone the
-classification for each sample. This behaviour is indicated by setting 
-_aggr_speedup="auto"_. Conversely, when indicating _aggr_speedup="force"_ QuaPy will
-precompute all the predictions irrespectively of the number of instances and number of samples.
-Finally, this can be deactivated by setting _aggr_speedup=False_. Note that this optimization
-is not only applied for the final evaluation, but also for the internal evaluations carried
-out during _model selection_. Since these are typically many, the heuristic can help reduce the
-execution time a lot.
\ No newline at end of file
diff --git a/docs/build/html/_sources/Installation.rst.txt b/docs/build/html/_sources/Installation.rst.txt
deleted file mode 100644
index 0eaabd6..0000000
--- a/docs/build/html/_sources/Installation.rst.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-Installation
-------------
-
-QuaPy can be easily installed via `pip`
-
-::
-
-   pip install quapy
-
-See `pip page <https://pypi.org/project/QuaPy/>`_ for older versions.
-
-Requirements
-************
-
-* scikit-learn, numpy, scipy
-* pytorch (for QuaNet)
-* svmperf patched for quantification (see below)
-* joblib
-* tqdm
-* pandas, xlrd
-* matplotlib
-
-
-SVM-perf with quantification-oriented losses
-********************************************
-
-In order to run experiments involving SVM(Q), SVM(KLD), SVM(NKLD),
-SVM(AE), or SVM(RAE), you have to first download the
-`svmperf <http://www.cs.cornell.edu/people/tj/svm_light/svm_perf.html>`_
-package, apply the patch
-`svm-perf-quantification-ext.patch <https://github.com/HLT-ISTI/QuaPy/blob/master/svm-perf-quantification-ext.patch>`_,
-and compile the sources.
-The script
-`prepare_svmperf.sh <https://github.com/HLT-ISTI/QuaPy/blob/master/prepare_svmperf.sh>`_,
-does all the job. Simply run:
-
-::
-
-   ./prepare_svmperf.sh
-
-
-The resulting directory `./svm_perf_quantification` contains the
-patched version of `svmperf` with quantification-oriented losses.
-
-The
-`svm-perf-quantification-ext.patch <https://github.com/HLT-ISTI/QuaPy/blob/master/svm-perf-quantification-ext.patch>`_
-is an extension of the patch made available by
-`Esuli et al. 2015 <https://dl.acm.org/doi/abs/10.1145/2700406?casa_token=8D2fHsGCVn0AAAAA:ZfThYOvrzWxMGfZYlQW_y8Cagg-o_l6X_PcF09mdETQ4Tu7jK98mxFbGSXp9ZSO14JkUIYuDGFG0>`_
-that allows SVMperf to optimize for
-the `Q` measure as proposed by
-`Barranquero et al. 2015 <https://www.sciencedirect.com/science/article/abs/pii/S003132031400291X>`_
-and for the `KLD` and `NKLD` as proposed by
-`Esuli et al. 2015 <https://dl.acm.org/doi/abs/10.1145/2700406?casa_token=8D2fHsGCVn0AAAAA:ZfThYOvrzWxMGfZYlQW_y8Cagg-o_l6X_PcF09mdETQ4Tu7jK98mxFbGSXp9ZSO14JkUIYuDGFG0>`_
-for quantification.
-This patch extends the former by also allowing SVMperf to optimize for
-`AE` and `RAE`.
\ No newline at end of file
diff --git a/docs/build/html/_sources/Methods.md.txt b/docs/build/html/_sources/Methods.md.txt
deleted file mode 100644
index 7060a0a..0000000
--- a/docs/build/html/_sources/Methods.md.txt
+++ /dev/null
@@ -1,438 +0,0 @@
-# Quantification Methods
-
-Quantification methods can be categorized as belonging to
-_aggregative_ and _non-aggregative_ groups. 
-Most methods included in QuaPy at the moment are of type _aggregative_
-(though we plan to add many more methods in the near future), i.e.,
-are methods characterized by the fact that
-quantification is performed as an aggregation function of the individual
-products of classification.
-
-Any quantifier in QuaPy shoud extend the class _BaseQuantifier_,
-and implement some abstract methods:
-```python
-    @abstractmethod
-    def fit(self, data: LabelledCollection): ...
-
-    @abstractmethod
-    def quantify(self, instances): ...
-```
-The meaning of those functions should be familiar to those
-used to work with scikit-learn since the class structure of QuaPy
-is directly inspired by scikit-learn's _Estimators_. Functions
-_fit_ and _quantify_ are used to train the model and to provide
-class estimations (the reason why
-scikit-learn' structure has not been adopted _as is_ in QuaPy responds to 
-the fact that scikit-learn's _predict_ function is expected to return
-one output for each input element --e.g., a predicted label for each
-instance in a sample-- while in quantification the output for a sample
-is one single array of class prevalences).
-Quantifiers also extend from scikit-learn's `BaseEstimator`, in order
-to simplify the use of _set_params_ and _get_params_ used in 
-[model selector](https://github.com/HLT-ISTI/QuaPy/wiki/Model-Selection).
-
-## Aggregative Methods
-
-All quantification methods are implemented as part of the
-_qp.method_ package. In particular, _aggregative_ methods are defined in
-_qp.method.aggregative_, and extend _AggregativeQuantifier(BaseQuantifier)_.
-The methods that any _aggregative_ quantifier must implement are:
-
-```python
-    @abstractmethod
-    def fit(self, data: LabelledCollection, fit_learner=True): ...
-
-    @abstractmethod
-    def aggregate(self, classif_predictions:np.ndarray): ...
-```
-
-since, as mentioned before, aggregative methods base their prediction on the
-individual predictions of a classifier. Indeed, a default implementation
-of _BaseQuantifier.quantify_ is already provided, which looks like:
-
-```python
-    def quantify(self, instances):
-    classif_predictions = self.classify(instances)
-    return self.aggregate(classif_predictions)
-```
-Aggregative quantifiers are expected to maintain a classifier (which is
-accessed through the _@property_ _classifier_). This classifier is
-given as input to the quantifier, and can be already fit
-on external data (in which case, the _fit_learner_ argument should
-be set to False), or be fit by the quantifier's fit (default).
-
-Another class of _aggregative_ methods are the _probabilistic_ 
-aggregative methods, that should inherit from the abstract class
-_AggregativeProbabilisticQuantifier(AggregativeQuantifier)_.
-The particularity of _probabilistic_ aggregative methods (w.r.t. 
-non-probabilistic ones), is that the default quantifier is defined
-in terms of the posterior probabilities returned by a probabilistic
-classifier, and not by the crisp decisions of a hard classifier.
-In any case, the interface _classify(instances)_ remains unchanged. 
-
-One advantage of _aggregative_ methods (either probabilistic or not)
-is that the evaluation according to any sampling procedure (e.g., 
-the [artificial sampling protocol](https://github.com/HLT-ISTI/QuaPy/wiki/Evaluation))
-can be achieved very efficiently, since the entire set can be pre-classified
-once, and the quantification estimations for different samples can directly
-reuse these predictions, without requiring to classify each element every time.
-QuaPy leverages this property to speed-up any procedure having to do with
-quantification over samples, as is customarily done in model selection or 
-in evaluation.
-
-### The Classify & Count variants
-
-QuaPy implements the four CC variants, i.e.:
-
-* _CC_ (Classify & Count), the simplest aggregative quantifier; one that
- simply relies on the label predictions of a classifier to deliver class estimates.
-* _ACC_ (Adjusted Classify & Count), the adjusted variant of CC.
-* _PCC_ (Probabilistic Classify & Count), the probabilistic variant of CC that
-relies on the soft estimations (or posterior probabilities) returned by a (probabilistic) classifier.
-* _PACC_ (Probabilistic Adjusted Classify & Count), the adjusted variant of PCC.
-
-The following code serves as a complete example using CC equipped 
-with a SVM as the classifier:
-
-```python
-import quapy as qp
-import quapy.functional as F
-from sklearn.svm import LinearSVC
-
-training, test = qp.datasets.fetch_twitter('hcr', pickle=True).train_test
-
-# instantiate a classifier learner, in this case a SVM
-svm = LinearSVC()
-
-# instantiate a Classify & Count with the SVM
-# (an alias is available in qp.method.aggregative.ClassifyAndCount)
-model = qp.method.aggregative.CC(svm)
-model.fit(training)
-estim_prevalence = model.quantify(test.instances)
-```
-
-The same code could be used to instantiate an ACC, by simply replacing
-the instantiation of the model with:
-```python
-model = qp.method.aggregative.ACC(svm)
-```
-Note that the adjusted variants (ACC and PACC) need to estimate
-some parameters for performing the adjustment (e.g., the 
-_true positive rate_ and the _false positive rate_ in case of
-binary classification) that are estimated on a validation split
-of the labelled set. In this case, the __init__ method of
-ACC defines an additional parameter, _val_split_ which, by
-default, is set to 0.4 and so, the 40% of the labelled data
-will be used for estimating the parameters for adjusting the
-predictions. This parameters can also be set with an integer,
-indicating that the parameters should be estimated by means of
-_k_-fold cross-validation, for which the integer indicates the
-number _k_ of folds. Finally, _val_split_ can be set to a 
-specific held-out validation set (i.e., an instance of _LabelledCollection_).
-
-The specification of _val_split_ can be
-postponed to the invokation of the fit method (if _val_split_ was also
-set in the constructor, the one specified at fit time would prevail), 
-e.g.:
-
-```python
-model = qp.method.aggregative.ACC(svm)
-# perform 5-fold cross validation for estimating ACC's parameters
-# (overrides the default val_split=0.4 in the constructor)
-model.fit(training, val_split=5)
-```
-
-The following code illustrates the case in which PCC is used:
-
-```python
-model = qp.method.aggregative.PCC(svm)
-model.fit(training)
-estim_prevalence = model.quantify(test.instances)
-print('classifier:', model.classifier)
-```
-In this case, QuaPy will print:
-```
-The learner LinearSVC does not seem to be probabilistic. The learner will be calibrated.
-classifier: CalibratedClassifierCV(base_estimator=LinearSVC(), cv=5)
-```
-The first output indicates that the learner (_LinearSVC_ in this case)
-is not a probabilistic classifier (i.e., it does not implement the 
-_predict_proba_ method) and so, the classifier will be converted to
-a probabilistic one through [calibration](https://scikit-learn.org/stable/modules/calibration.html).
-As a result, the classifier that is printed in the second line points
-to a _CalibratedClassifier_ instance. Note that calibration can only
-be applied to hard classifiers when _fit_learner=True_; an exception 
-will be raised otherwise.
-
-Lastly, everything we said aboud ACC and PCC
-applies to PACC as well.
-
-
-### Expectation Maximization (EMQ)
-
-The Expectation Maximization Quantifier (EMQ), also known as
-the SLD, is available at _qp.method.aggregative.EMQ_ or via the 
-alias _qp.method.aggregative.ExpectationMaximizationQuantifier_. 
-The method is described in:
-
-_Saerens, M., Latinne, P., and Decaestecker, C. (2002). Adjusting the outputs of a classifier
-to new a priori probabilities: A simple procedure. Neural Computation, 14(1):21–41._
-
-EMQ works with a probabilistic classifier (if the classifier
-given as input is a hard one, a calibration will be attempted).
-Although this method was originally proposed for improving the
-posterior probabilities of a probabilistic classifier, and not
-for improving the estimation of prior probabilities, EMQ ranks 
-almost always among the most effective quantifiers in the
-experiments we have carried out.
-
-An example of use can be found below:
-
-```python
-import quapy as qp
-from sklearn.linear_model import LogisticRegression
-
-dataset = qp.datasets.fetch_twitter('hcr', pickle=True)
-
-model = qp.method.aggregative.EMQ(LogisticRegression())
-model.fit(dataset.training)
-estim_prevalence = model.quantify(dataset.test.instances)
-```
-
-_New in v0.1.7_: EMQ now accepts two new parameters in the construction method, namely
-_exact_train_prev_ which allows to use the true training prevalence as the departing
-prevalence estimation (default behaviour), or instead an approximation of it as 
-suggested by [Alexandari et al. (2020)](http://proceedings.mlr.press/v119/alexandari20a.html) 
-(by setting _exact_train_prev=False_).
-The other parameter is _recalib_ which allows to indicate a calibration method, among those
-proposed by [Alexandari et al. (2020)](http://proceedings.mlr.press/v119/alexandari20a.html),
-including the Bias-Corrected Temperature Scaling, Vector Scaling, etc.
-See the API documentation for further details. 
-
-
-### Hellinger Distance y (HDy)
-
-Implementation of the method based on the Hellinger Distance y (HDy) proposed by
-[González-Castro, V., Alaiz-Rodrı́guez, R., and Alegre, E. (2013). Class distribution
-estimation based on the Hellinger distance. Information Sciences, 218:146–164.](https://www.sciencedirect.com/science/article/pii/S0020025512004069)
-
-It is implemented in _qp.method.aggregative.HDy_ (also accessible
-through the allias _qp.method.aggregative.HellingerDistanceY_).
-This method works with a probabilistic classifier (hard classifiers
-can be used as well and will be calibrated) and requires a validation
-set to estimate parameter for the mixture model. Just like 
-ACC and PACC, this quantifier receives a _val_split_ argument
-in the constructor (or in the fit method, in which case the previous
-value is overridden) that can either be a float indicating the proportion
-of training data to be taken as the validation set (in a random
-stratified split), or a validation set (i.e., an instance of 
-_LabelledCollection_) itself. 
-
-HDy was proposed as a binary classifier and the implementation
-provided in QuaPy accepts only binary datasets. 
- 
-The following code shows an example of use:   
-```python
-import quapy as qp
-from sklearn.linear_model import LogisticRegression
-
-# load a binary dataset
-dataset = qp.datasets.fetch_reviews('hp', pickle=True)
-qp.data.preprocessing.text2tfidf(dataset, min_df=5, inplace=True)
-
-model = qp.method.aggregative.HDy(LogisticRegression())
-model.fit(dataset.training)
-estim_prevalence = model.quantify(dataset.test.instances)
-```
-
-_New in v0.1.7:_ QuaPy now provides an implementation of the generalized
-"Distribution Matching" approaches for multiclass, inspired by the framework
-of [Firat (2016)](https://arxiv.org/abs/1606.00868). One can instantiate
-a variant of HDy for multiclass quantification as follows:
-
-```python
-mutliclassHDy = qp.method.aggregative.DistributionMatching(classifier=LogisticRegression(), divergence='HD', cdf=False)
-``` 
-
-_New in v0.1.7:_ QuaPy now provides an implementation of the "DyS"
-framework proposed by [Maletzke et al (2020)](https://ojs.aaai.org/index.php/AAAI/article/view/4376)
-and the "SMM" method proposed by [Hassan et al (2019)](https://ieeexplore.ieee.org/document/9260028)
-(thanks to _Pablo González_ for the contributions!)
-
-### Threshold Optimization methods
-
-_New in v0.1.7:_ QuaPy now implements Forman's threshold optimization methods;
-see, e.g., [(Forman 2006)](https://dl.acm.org/doi/abs/10.1145/1150402.1150423) 
-and [(Forman 2008)](https://link.springer.com/article/10.1007/s10618-008-0097-y).
-These include: T50, MAX, X, Median Sweep (MS), and its variant MS2.
-
-### Explicit Loss Minimization
-
-The Explicit Loss Minimization (ELM) represent a family of methods
-based on structured output learning, i.e., quantifiers relying on 
-classifiers that have been optimized targeting a 
-quantification-oriented evaluation measure.
-The original methods are implemented in QuaPy as classify & count (CC) 
-quantifiers that use Joachim's [SVMperf](https://www.cs.cornell.edu/people/tj/svm_light/svm_perf.html) 
-as the underlying classifier, properly set to optimize for the desired loss.
- 
-In QuaPy, this can be more achieved by calling the functions:
-
-* _newSVMQ_: returns the quantification method called SVM(Q) that optimizes for the metric _Q_ defined 
-in [_Barranquero, J., Díez, J., and del Coz, J. J. (2015). Quantification-oriented learning based
-on reliable classifiers. Pattern Recognition, 48(2):591–604._](https://www.sciencedirect.com/science/article/pii/S003132031400291X) 
-* _newSVMKLD_ and _newSVMNKLD_: returns the quantification method called SVM(KLD) and SVM(nKLD), standing for 
-    Kullback-Leibler Divergence and Normalized Kullback-Leibler Divergence, as proposed in [_Esuli, A. and Sebastiani, F. (2015). 
-    Optimizing text quantifiers for multivariate loss functions. 
-    ACM Transactions on Knowledge Discovery and Data, 9(4):Article 27._](https://dl.acm.org/doi/abs/10.1145/2700406)
-* _newSVMAE_ and _newSVMRAE_: returns a quantification method called SVM(AE) and SVM(RAE) that optimizes for the (Mean) Absolute Error and for the
-  (Mean) Relative Absolute Error, as first used by 
-    [_Moreo, A. and Sebastiani, F. (2021). Tweet sentiment quantification: An experimental re-evaluation. PLOS ONE 17 (9), 1-23._](https://arxiv.org/abs/2011.02552)
-
-the last two methods (SVM(AE) and SVM(RAE)) have been implemented in 
-QuaPy in order to make available ELM variants for what nowadays
-are considered the most well-behaved evaluation metrics in quantification.
-
-In order to make these models work, you would need to run the script
-_prepare_svmperf.sh_ (distributed along with QuaPy) that
-downloads _SVMperf_' source code, applies a patch that 
-implements the quantification oriented losses, and compiles the
-sources.
-
-If you want to add any custom loss, you would need to modify
-the source code of _SVMperf_ in order to implement it, and
-assign a valid loss code to it. Then you must re-compile 
-the whole thing and instantiate the quantifier in QuaPy
-as follows:
-
-```python
-# you can either set the path to your custom svm_perf_quantification implementation
-# in the environment variable, or as an argument to the constructor of ELM
-qp.environ['SVMPERF_HOME'] = './path/to/svm_perf_quantification'
-
-# assign an alias to your custom loss and the id you have assigned to it
-svmperf = qp.classification.svmperf.SVMperf
-svmperf.valid_losses['mycustomloss'] = 28
-
-# instantiate the ELM method indicating the loss
-model = qp.method.aggregative.ELM(loss='mycustomloss')
-```
-
-All ELM are binary quantifiers since they rely on _SVMperf_, that
-currently supports only binary classification.
-ELM variants (any binary quantifier in general) can be extended
-to operate in single-label scenarios trivially by adopting a 
-"one-vs-all" strategy (as, e.g., in 
-[_Gao, W. and Sebastiani, F. (2016). From classification to quantification in tweet sentiment
-analysis. Social Network Analysis and Mining, 6(19):1–22_](https://link.springer.com/article/10.1007/s13278-016-0327-z)).
-In QuaPy this is possible by using the _OneVsAll_ class.
-
-There are two ways for instantiating this class, _OneVsAllGeneric_ that works for
-any quantifier, and _OneVsAllAggregative_ that is optimized for aggregative quantifiers.
-In general, you can simply use the _getOneVsAll_ function and QuaPy will choose
-the more convenient of the two.
-
-```python
-import quapy as qp
-from quapy.method.aggregative import SVMQ
-
-# load a single-label dataset (this one contains 3 classes)
-dataset = qp.datasets.fetch_twitter('hcr', pickle=True)
-
-# let qp know where svmperf is
-qp.environ['SVMPERF_HOME'] = '../svm_perf_quantification'
-
-model = getOneVsAll(SVMQ(), n_jobs=-1)  # run them on parallel
-model.fit(dataset.training)
-estim_prevalence = model.quantify(dataset.test.instances)
-```
-
-Check the examples _[explicit_loss_minimization.py](..%2Fexamples%2Fexplicit_loss_minimization.py)_
-and [one_vs_all.py](..%2Fexamples%2Fone_vs_all.py) for more details.
-
-## Meta Models
-
-By _meta_ models we mean quantification methods that are defined on top of other
-quantification methods, and that thus do not squarely belong to the aggregative nor
-the non-aggregative group (indeed, _meta_ models could use quantifiers from any of those
-groups).
-_Meta_ models are implemented in the _qp.method.meta_ module.
-
-### Ensembles
-
-QuaPy implements (some of) the variants proposed in:
-
-* [_Pérez-Gállego, P., Quevedo, J. R., & del Coz, J. J. (2017).
-Using ensembles for problems with characterizable changes in data distribution: A case study on quantification.
-Information Fusion, 34, 87-100._](https://www.sciencedirect.com/science/article/pii/S1566253516300628)
-* [_Pérez-Gállego, P., Castano, A., Quevedo, J. R., & del Coz, J. J. (2019). 
-    Dynamic ensemble selection for quantification tasks. 
-    Information Fusion, 45, 1-15._](https://www.sciencedirect.com/science/article/pii/S1566253517303652)
-
-The following code shows how to instantiate an Ensemble of 30 _Adjusted Classify & Count_ (ACC) 
-quantifiers operating with a _Logistic Regressor_ (LR) as the base classifier, and using the
-_average_ as the aggregation policy (see the original article for further details).
-The last parameter indicates to use all processors for parallelization.
-
-```python
-import quapy as qp
-from quapy.method.aggregative import ACC
-from quapy.method.meta import Ensemble
-from sklearn.linear_model import LogisticRegression
-
-dataset = qp.datasets.fetch_UCIDataset('haberman')
-
-model = Ensemble(quantifier=ACC(LogisticRegression()), size=30, policy='ave', n_jobs=-1)
-model.fit(dataset.training)
-estim_prevalence = model.quantify(dataset.test.instances)
-```
-
-Other aggregation policies implemented in QuaPy include:
-* 'ptr' for applying a dynamic selection based on the training prevalence of the ensemble's members
-* 'ds' for applying a dynamic selection based on the Hellinger Distance
-* _any valid quantification measure_ (e.g., 'mse') for performing a static selection based on
-the performance estimated for each member of the ensemble in terms of that evaluation metric.
-  
-When using any of the above options, it is important to set the _red_size_ parameter, which 
-informs of the number of members to retain.
-
-Please, check the [model selection](https://github.com/HLT-ISTI/QuaPy/wiki/Model-Selection)
-wiki if you want to optimize the hyperparameters of ensemble for classification or quantification.
-
-### The QuaNet neural network
-
-QuaPy offers an implementation of QuaNet, a deep learning model presented in:
-
-[_Esuli, A., Moreo, A., & Sebastiani, F. (2018, October). 
-A recurrent neural network for sentiment quantification. 
-In Proceedings of the 27th ACM International Conference on 
-Information and Knowledge Management (pp. 1775-1778)._](https://dl.acm.org/doi/abs/10.1145/3269206.3269287)
-
-This model requires _torch_ to be installed. 
-QuaNet also requires a classifier that can provide embedded representations
-of the inputs. 
-In the original paper, QuaNet was tested using an LSTM as the base classifier.
-In the following example, we show an instantiation of QuaNet that instead uses CNN as a probabilistic classifier, taking its last layer representation as the document embedding:
-
-```python
-import quapy as qp
-from quapy.method.meta import QuaNet
-from quapy.classification.neural import NeuralClassifierTrainer, CNNnet
-
-# use samples of 100 elements
-qp.environ['SAMPLE_SIZE'] = 100
-
-# load the kindle dataset as text, and convert words to numerical indexes
-dataset = qp.datasets.fetch_reviews('kindle', pickle=True)
-qp.data.preprocessing.index(dataset, min_df=5, inplace=True)
-
-# the text classifier is a CNN trained by NeuralClassifierTrainer
-cnn = CNNnet(dataset.vocabulary_size, dataset.n_classes)
-learner = NeuralClassifierTrainer(cnn, device='cuda')
-
-# train QuaNet
-model = QuaNet(learner, device='cuda')
-model.fit(dataset.training)
-estim_prevalence = model.quantify(dataset.test.instances)
-```
-
diff --git a/docs/build/html/_sources/Model-Selection.md.txt b/docs/build/html/_sources/Model-Selection.md.txt
deleted file mode 100644
index 1df9107..0000000
--- a/docs/build/html/_sources/Model-Selection.md.txt
+++ /dev/null
@@ -1,150 +0,0 @@
-# Model Selection
-
-As a supervised machine learning task, quantification methods
-can strongly depend on a good choice of model hyper-parameters.
-The process whereby those hyper-parameters are chosen is
-typically known as _Model Selection_, and typically consists of
-testing different settings and picking the one that performed
-best in a held-out validation set in terms of any given
-evaluation measure.
-
-## Targeting a Quantification-oriented loss
-
-The task being optimized determines the evaluation protocol,
-i.e., the criteria according to which the performance of 
-any given method for solving is to be assessed.
-As a task on its own right, quantification should impose
-its own model selection strategies, i.e., strategies 
-aimed at finding appropriate configurations 
-specifically designed for the task of quantification. 
-
-Quantification has long been regarded as an add-on of
-classification, and thus the model selection strategies
-customarily adopted in classification have simply been
-applied to quantification (see the next section).
-It has been argued in [Moreo, Alejandro, and Fabrizio Sebastiani. 
-Re-Assessing the "Classify and Count" Quantification Method. 
-ECIR 2021: Advances in Information Retrieval pp 75–91.](https://link.springer.com/chapter/10.1007/978-3-030-72240-1_6)
-that specific model selection strategies should
-be adopted for quantification. That is, model selection
-strategies for quantification should target 
-quantification-oriented losses and be tested in a variety
-of scenarios exhibiting different degrees of prior 
-probability shift.
-
-The class _qp.model_selection.GridSearchQ_ implements a grid-search exploration over the space of 
-hyper-parameter combinations that [evaluates](https://github.com/HLT-ISTI/QuaPy/wiki/Evaluation) 
-each combination of hyper-parameters by means of a given quantification-oriented
-error metric (e.g., any of the error functions implemented
-in _qp.error_) and according to a 
-[sampling generation protocol](https://github.com/HLT-ISTI/QuaPy/wiki/Protocols).
-
-The following is an example (also included in the examples folder) of model selection for quantification:
-
-```python
-import quapy as qp
-from quapy.protocol import APP
-from quapy.method.aggregative import DistributionMatching
-from sklearn.linear_model import LogisticRegression
-import numpy as np
-
-"""
-In this example, we show how to perform model selection on a DistributionMatching quantifier.
-"""
-
-model = DistributionMatching(LogisticRegression())
-
-qp.environ['SAMPLE_SIZE'] = 100
-qp.environ['N_JOBS'] = -1  # explore hyper-parameters in parallel
-
-training, test = qp.datasets.fetch_reviews('imdb', tfidf=True, min_df=5).train_test
-
-# The model will be returned by the fit method of GridSearchQ.
-# Every combination of hyper-parameters will be evaluated by confronting the
-# quantifier thus configured against a series of samples generated by means
-# of a sample generation protocol. For this example, we will use the
-# artificial-prevalence protocol (APP), that generates samples with prevalence
-# values in the entire range of values from a grid (e.g., [0, 0.1, 0.2, ..., 1]).
-# We devote 30% of the dataset for this exploration.
-training, validation = training.split_stratified(train_prop=0.7)
-protocol = APP(validation)
-
-# We will explore a classification-dependent hyper-parameter (e.g., the 'C'
-# hyper-parameter of LogisticRegression) and a quantification-dependent hyper-parameter
-# (e.g., the number of bins in a DistributionMatching quantifier.
-# Classifier-dependent hyper-parameters have to be marked with a prefix "classifier__"
-# in order to let the quantifier know this hyper-parameter belongs to its underlying
-# classifier.
-param_grid = {
-    'classifier__C': np.logspace(-3,3,7),
-    'nbins': [8, 16, 32, 64],
-}
-
-model = qp.model_selection.GridSearchQ(
-    model=model,
-    param_grid=param_grid,
-    protocol=protocol,
-    error='mae',  # the error to optimize is the MAE (a quantification-oriented loss)
-    refit=True,   # retrain on the whole labelled set once done
-    verbose=True  # show information as the process goes on
-).fit(training)
-
-print(f'model selection ended: best hyper-parameters={model.best_params_}')
-model = model.best_model_
-
-# evaluation in terms of MAE
-# we use the same evaluation protocol (APP) on the test set
-mae_score = qp.evaluation.evaluate(model, protocol=APP(test), error_metric='mae')
-
-print(f'MAE={mae_score:.5f}')
-```
-
-In this example, the system outputs:
-```
-[GridSearchQ]: starting model selection with self.n_jobs =-1
-[GridSearchQ]: hyperparams={'classifier__C': 0.01, 'nbins': 64}	 got mae score 0.04021 [took 1.1356s]
-[GridSearchQ]: hyperparams={'classifier__C': 0.01, 'nbins': 32}	 got mae score 0.04286 [took 1.2139s]
-[GridSearchQ]: hyperparams={'classifier__C': 0.01, 'nbins': 16}	 got mae score 0.04888 [took 1.2491s]
-[GridSearchQ]: hyperparams={'classifier__C': 0.001, 'nbins': 8}	 got mae score 0.05163 [took 1.5372s]
-[...]
-[GridSearchQ]: hyperparams={'classifier__C': 1000.0, 'nbins': 32}	 got mae score 0.02445 [took 2.9056s]
-[GridSearchQ]: optimization finished: best params {'classifier__C': 100.0, 'nbins': 32} (score=0.02234) [took 7.3114s]
-[GridSearchQ]: refitting on the whole development set
-model selection ended: best hyper-parameters={'classifier__C': 100.0, 'nbins': 32}
-MAE=0.03102
-```
-
-The parameter _val_split_ can alternatively be used to indicate
-a validation set (i.e., an instance of _LabelledCollection_) instead
-of a proportion. This could be useful if one wants to have control
-on the specific data split to be used across different model selection
-experiments.
-
-## Targeting a Classification-oriented loss
-
-Optimizing a model for quantification could rather be 
-computationally costly.
-In aggregative methods, one could alternatively try to optimize 
-the classifier's hyper-parameters for classification.
-Although this is theoretically suboptimal, many articles in 
-quantification literature have opted for this strategy.
-
-In QuaPy, this is achieved by simply instantiating the 
-classifier learner as a GridSearchCV from scikit-learn. 
-The following code illustrates how to do that:
-
-```python
-learner = GridSearchCV(
-    LogisticRegression(),
-    param_grid={'C': np.logspace(-4, 5, 10), 'class_weight': ['balanced', None]},
-    cv=5)
-model = DistributionMatching(learner).fit(dataset.training)
-```
-
-However, this is conceptually flawed, since the model should be
-optimized for the task at hand (quantification), and not for a surrogate task (classification),
-i.e., the model should be requested to deliver low quantification errors, rather
-than low classification errors.
-
-
-
diff --git a/docs/build/html/_sources/Plotting.md.txt b/docs/build/html/_sources/Plotting.md.txt
deleted file mode 100644
index 99f3f7e..0000000
--- a/docs/build/html/_sources/Plotting.md.txt
+++ /dev/null
@@ -1,250 +0,0 @@
-# Plotting
-
-The module _qp.plot_ implements some basic plotting functions
-that can help analyse the performance of a quantification method.
-
-All plotting functions receive as inputs the outcomes of 
-some experiments and include, for each experiment, 
-the following three main arguments:
-
-* _method_names_ a list containing the names of the quantification methods
-* _true_prevs_ a list containing matrices of true prevalences
-* _estim_prevs_ a list containing matrices of estimated prevalences 
-(should be of the same shape as the corresponding matrix in _true_prevs_)
-
-Note that a method (as indicated by a name in _method_names_) can
-appear more than once. This could occur when various datasets are
-involved in the experiments. In this case, all experiments for the
-method will be merged and the plot will represent the method's
-performance across various datasets.
-
-This is a very simple example of a valid input for the plotting functions:
-```python
-method_names = ['classify & count', 'EMQ', 'classify & count']
-true_prevs = [
-    np.array([[0.5, 0.5], [0.25, 0.75]]),
-    np.array([[0.0, 1.0], [0.25, 0.75], [0.0, 0.1]]),
-    np.array([[0.0, 1.0], [0.25, 0.75], [0.0, 0.1]]),
-]
-estim_prevs = [
-    np.array([[0.45, 0.55], [0.6, 0.4]]),
-    np.array([[0.0, 1.0], [0.5, 0.5], [0.2, 0.8]]),
-    np.array([[0.1, 0.9], [0.3, 0.7], [0.0, 0.1]]),
-]
-```
-in which the _classify & count_ has been tested in two datasets and
-the _EMQ_ method has been tested only in one dataset. For the first
-experiment, only two (binary) quantifications have been tested, 
-while for the second and third experiments three instances have
-been tested.
-
-In general, we would like to test the performance of the
-quantification methods across different scenarios showcasing
-the accuracy of the quantifier in predicting class prevalences
-for a wide range of prior distributions. This can easily be
-achieved by means of the 
-[artificial sampling protocol](https://github.com/HLT-ISTI/QuaPy/wiki/Protocols)
-that is implemented in QuaPy.
-
-The following code shows how to perform one simple experiment
-in which the 4 _CC-variants_, all equipped with a linear SVM, are 
-applied to one binary dataset of reviews about _Kindle_ devices and
-tested across the entire spectrum of class priors (taking 21 splits 
-of the interval [0,1], i.e., using prevalence steps of 0.05, and
-generating 100 random samples at each prevalence).
-
-```python
-import quapy as qp
-from protocol import APP
-from quapy.method.aggregative import CC, ACC, PCC, PACC
-from sklearn.svm import LinearSVC
-
-qp.environ['SAMPLE_SIZE'] = 500
-
-def gen_data():
-
-    def base_classifier():
-        return LinearSVC(class_weight='balanced')
-
-    def models():
-        yield 'CC', CC(base_classifier())
-        yield 'ACC', ACC(base_classifier())
-        yield 'PCC', PCC(base_classifier())
-        yield 'PACC', PACC(base_classifier())
-
-    train, test = qp.datasets.fetch_reviews('kindle', tfidf=True, min_df=5).train_test
-
-    method_names, true_prevs, estim_prevs, tr_prevs = [], [], [], []
-
-    for method_name, model in models():
-        model.fit(train)
-        true_prev, estim_prev = qp.evaluation.prediction(model, APP(test, repeats=100, random_state=0))
-
-        method_names.append(method_name)
-        true_prevs.append(true_prev)
-        estim_prevs.append(estim_prev)
-        tr_prevs.append(train.prevalence())
-
-    return method_names, true_prevs, estim_prevs, tr_prevs
-
-method_names, true_prevs, estim_prevs, tr_prevs = gen_data()
-````
-the plots that can be generated are explained below.
-
-## Diagonal Plot
-
-The _diagonal_ plot shows a very insightful view of the 
-quantifier's performance. It plots the predicted class
-prevalence (in the y-axis) against the true class prevalence
-(in the x-axis). Unfortunately, it is limited to binary quantification,
-although one can simply generate as many _diagonal_ plots as 
-classes there are by indicating which class should be considered
-the target of the plot. 
-
-The following call will produce the plot:
-
-```python
-qp.plot.binary_diagonal(method_names, true_prevs, estim_prevs, train_prev=tr_prevs[0], savepath='./plots/bin_diag.png')
-```
-
-the last argument is optional, and indicates the path where to save
-the plot (the file extension will determine the format -- typical extensions
-are '.png' or '.pdf'). If this path is not provided, then the plot
-will be shown but not saved. 
-The resulting plot should look like:
-
-![diagonal plot on Kindle](./wiki_examples/selected_plots/bin_diag.png)
-
-Note that in this case, we are also indicating the training 
-prevalence, which is plotted in the diagonal a as cyan dot.
-The color bands indicate the standard deviations of the predictions,
-and can be hidden by setting the argument _show_std=False_ (see
-the complete list of arguments in the documentation).
-
-Finally, note how most quantifiers, and specially the "unadjusted" 
-variants CC and PCC, are strongly biased towards the 
-prevalence seen during training. 
-
-## Quantification bias
-
-This plot aims at evincing the bias that any quantifier
-displays with respect to the training prevalences by
-means of [box plots](https://en.wikipedia.org/wiki/Box_plot).
-This plot can be generated by:
-
-```python
-qp.plot.binary_bias_global(method_names, true_prevs, estim_prevs, savepath='./plots/bin_bias.png')
-```
-
-and should look like:
-
-![bias plot on Kindle](./wiki_examples/selected_plots/bin_bias.png)
-
-The box plots show some interesting facts:
-* all methods are biased towards the training prevalence but specially
-so CC and PCC (an unbiased quantifier would have a box centered at 0)
-* the bias is always positive, indicating that all methods tend to
-overestimate the positive class prevalence
-* CC and PCC have high variability while ACC and specially PACC exhibit
-lower variability.
- 
-Again, these plots could be generated for experiments ranging across
-different datasets, and the plot will merge all data accordingly.
-
-Another illustrative example can be shown that consists of
-training different CC quantifiers trained at different 
-(artificially sampled) training prevalences. 
-For this example, we generate training samples of 5000
-documents containing 10%, 20%, ..., 90% of positives from the
-IMDb dataset, and generate the bias plot again.
-This example can be run by rewritting the _gen_data()_ function
-like this:
-
-```python
-def gen_data():
-
-    train, test = qp.datasets.fetch_reviews('imdb', tfidf=True, min_df=5).train_test
-    model = CC(LinearSVC())
-
-    method_data = []
-    for training_prevalence in np.linspace(0.1, 0.9, 9):
-        training_size = 5000
-        # since the problem is binary, it suffices to specify the negative prevalence, since the positive is constrained
-        train_sample = train.sampling(training_size, 1-training_prevalence)
-        model.fit(train_sample)
-        true_prev, estim_prev = qp.evaluation.prediction(model, APP(test, repeats=100, random_state=0))
-        method_name = 'CC$_{'+f'{int(100*training_prevalence)}' + '\%}$'
-        method_data.append((method_name, true_prev, estim_prev, train_sample.prevalence()))
-
-    return zip(*method_data)
-```
-
-and the plot should now look like:
-
-![bias plot on IMDb](./wiki_examples/selected_plots/bin_bias_cc.png)
-
-which clearly shows a negative bias for CC variants trained on
-data containing more negatives (i.e., < 50%) and positive biases
-in cases containing more positives (i.e., >50%). The CC trained 
-at 50% behaves as an unbiased estimator of the positive class
-prevalence.
-
-The function _qp.plot.binary_bias_bins_ allows the user to 
-generate box plots broken down by bins of true test prevalence. 
-To this aim, an argument _nbins_ is passed which indicates
-how many isometric subintervals to take. For example 
-the following plot is produced for _nbins=3_:
-
-![bias plot on IMDb](./wiki_examples/selected_plots/bin_bias_bin_cc.png)
-
-Interestingly enough, the seemingly unbiased estimator (CC at 50%) happens to display
-a positive bias (or a tendency to overestimate) in cases of low prevalence 
-(i.e., when the true prevalence of the positive class is below 33%), 
-and a negative bias (or a tendency to underestimate) in cases of high prevalence 
-(i.e., when the true prevalence is beyond 67%).
-
-Out of curiosity, the diagonal plot for this experiment looks like:
-
-![diag plot on IMDb](./wiki_examples/selected_plots/bin_diag_cc.png)
-
-showing pretty clearly the dependency of CC on the prior probabilities
-of the labeled set it was trained on.
-
-
-## Error by Drift
-
-Above discussed plots are useful for analyzing and comparing
-the performance of different quantification methods, but are 
-limited to the binary case. The "error by drift" is a plot
-that shows the error in predictions as a function of the 
-(prior probability) drift between each test sample and the 
-training set. Interestingly, the error and drift can both be measured
-in terms of any evaluation measure for quantification (like the
-ones available in _qp.error_) and can thus be computed 
-irrespectively of the number of classes.
-
-The following shows how to generate the plot for the 4 CC variants, 
-using 10 bins for the drift
-and _absolute error_ as the measure of the error (the
-drift in the x-axis is always computed in terms of _absolute error_ since
-other errors are harder to interpret):
-
-```python
-qp.plot.error_by_drift(method_names, true_prevs, estim_prevs, tr_prevs, 
-    error_name='ae', n_bins=10, savepath='./plots/err_drift.png')
-```
-
-![diag plot on IMDb](./wiki_examples/selected_plots/err_drift.png)
-
-Note that all methods work reasonably well in cases of low prevalence
-drift (i.e., any CC-variant is a good quantifier whenever the IID
-assumption is approximately preserved). The higher the drift, the worse
-those quantifiers tend to perform, although it is clear that PACC
-yields the lowest error for the most difficult cases.
-
-Remember that any plot can be generated _across many datasets_, and 
-that this would probably result in a more solid comparison. 
-In those cases, however, it is likely that the variances of each 
-method get higher, to the detriment of the visualization. 
-We recommend to set _show_std=False_ in those cases 
-in order to hide the color bands.
diff --git a/docs/build/html/_sources/index.rst.txt b/docs/build/html/_sources/index.rst.txt
index bf17bc7..cc5b4dc 100644
--- a/docs/build/html/_sources/index.rst.txt
+++ b/docs/build/html/_sources/index.rst.txt
@@ -1,87 +1,36 @@
-.. QuaPy documentation master file, created by
-   sphinx-quickstart on Tue Nov  9 11:31:32 2021.
+.. QuaPy: A Python-based open-source framework for quantification documentation master file, created by
+   sphinx-quickstart on Wed Feb  7 16:26:46 2024.
    You can adapt this file completely to your liking, but it should at least
    contain the root `toctree` directive.
 
 Welcome to QuaPy's documentation!
-=================================
+==========================================================================================
 
-QuaPy is an open source framework for Quantification (a.k.a. Supervised Prevalence Estimation)
-written in Python.
+QuaPy is a Python-based open-source framework for quantification.
 
-Introduction
+This document contains the API of the modules included in QuaPy.
+
+Installation
 ------------
 
-QuaPy roots on the concept of data sample, and provides implementations of most important concepts
-in quantification literature, such as the most important quantification baselines, many advanced
-quantification methods, quantification-oriented model selection, many evaluation measures and protocols
-used for evaluating quantification methods.
-QuaPy also integrates commonly used datasets and offers visualization tools for facilitating the analysis and
-interpretation of results.
+`pip install quapy`
 
-A quick example:
-****************
+GitHub
+------------
 
-The following script fetchs a Twitter dataset, trains and evaluates an
-`Adjusted Classify & Count` model in terms of the `Mean Absolute Error` (MAE)
-between the class prevalences estimated for the test set and the true prevalences
-of the test set.
+QuaPy is hosted in GitHub at `https://github.com/HLT-ISTI/QuaPy <https://github.com/HLT-ISTI/QuaPy>`_
 
-::
-
-   import quapy as qp
-   from sklearn.linear_model import LogisticRegression
-
-   dataset = qp.datasets.fetch_twitter('semeval16')
-
-   # create an "Adjusted Classify & Count" quantifier
-   model = qp.method.aggregative.ACC(LogisticRegression())
-   model.fit(dataset.training)
-
-   estim_prevalences = model.quantify(dataset.test.instances)
-   true_prevalences  = dataset.test.prevalence()
-
-   error = qp.error.mae(true_prevalences, estim_prevalences)
-
-   print(f'Mean Absolute Error (MAE)={error:.3f}')
-
-
-Quantification is useful in scenarios of prior probability shift. In other
-words, we would not be interested in estimating the class prevalences of the test set if
-we could assume the IID assumption to hold, as this prevalence would simply coincide with the
-class prevalence of the training set. For this reason, any Quantification model
-should be tested across samples characterized by different class prevalences.
-QuaPy implements sampling procedures and evaluation protocols that automates this endeavour.
-See the :doc:`Evaluation` for detailed examples.
-
-Features
-********
-
-* Implementation of most popular quantification methods (Classify-&-Count variants, Expectation-Maximization, SVM-based variants for quantification, HDy, QuaNet, and Ensembles).
-* Versatile functionality for performing evaluation based on artificial sampling protocols.
-* Implementation of most commonly used evaluation metrics (e.g., MAE, MRAE, MSE, NKLD, etc.).
-* Popular datasets for Quantification (textual and numeric) available, including:
-    * 32 UCI Machine Learning datasets.
-    * 11 Twitter Sentiment datasets.
-    * 3 Reviews Sentiment datasets.
-    * 4 tasks from LeQua competition (_new in v0.1.7!_)
-* Native supports for binary and single-label scenarios of quantification.
-* Model selection functionality targeting quantification-oriented losses.
-* Visualization tools for analysing results.
 
 .. toctree::
    :maxdepth: 2
    :caption: Contents:
 
-   Installation
-   Datasets
-   Evaluation
-   Protocols
-   Methods
-   Model-Selection
-   Plotting
-   API Developers documentation<modules>
+Contents
+--------
 
+.. toctree::
+
+   modules
 
 
 Indices and tables
diff --git a/docs/build/html/_sources/quapy.classification.rst.txt b/docs/build/html/_sources/quapy.classification.rst.txt
index 3d14431..cfc7d9b 100644
--- a/docs/build/html/_sources/quapy.classification.rst.txt
+++ b/docs/build/html/_sources/quapy.classification.rst.txt
@@ -1,38 +1,35 @@
-:tocdepth: 2
-
 quapy.classification package
 ============================
 
 Submodules
 ----------
 
-quapy.classification.calibration
---------------------------------
+quapy.classification.calibration module
+---------------------------------------
 
-.. versionadded:: 0.1.7
 .. automodule:: quapy.classification.calibration
    :members:
    :undoc-members:
    :show-inheritance:
 
-quapy.classification.methods
-----------------------------
+quapy.classification.methods module
+-----------------------------------
 
 .. automodule:: quapy.classification.methods
    :members:
    :undoc-members:
    :show-inheritance:
 
-quapy.classification.neural
----------------------------
+quapy.classification.neural module
+----------------------------------
 
 .. automodule:: quapy.classification.neural
    :members:
    :undoc-members:
    :show-inheritance:
 
-quapy.classification.svmperf
-----------------------------
+quapy.classification.svmperf module
+-----------------------------------
 
 .. automodule:: quapy.classification.svmperf
    :members:
diff --git a/docs/build/html/_sources/quapy.data.rst.txt b/docs/build/html/_sources/quapy.data.rst.txt
index fda5ff0..cadace6 100644
--- a/docs/build/html/_sources/quapy.data.rst.txt
+++ b/docs/build/html/_sources/quapy.data.rst.txt
@@ -1,37 +1,36 @@
-:tocdepth: 2
-
 quapy.data package
 ==================
 
 Submodules
 ----------
 
-quapy.data.base
----------------
+quapy.data.base module
+----------------------
 
 .. automodule:: quapy.data.base
    :members:
    :undoc-members:
    :show-inheritance:
 
-quapy.data.datasets
--------------------
+quapy.data.datasets module
+--------------------------
 
 .. automodule:: quapy.data.datasets
    :members:
    :undoc-members:
    :show-inheritance:
 
-quapy.data.preprocessing
-------------------------
+
+quapy.data.preprocessing module
+-------------------------------
 
 .. automodule:: quapy.data.preprocessing
    :members:
    :undoc-members:
    :show-inheritance:
 
-quapy.data.reader
------------------
+quapy.data.reader module
+------------------------
 
 .. automodule:: quapy.data.reader
    :members:
diff --git a/docs/build/html/_sources/quapy.method.rst.txt b/docs/build/html/_sources/quapy.method.rst.txt
index cfda57f..8026e0a 100644
--- a/docs/build/html/_sources/quapy.method.rst.txt
+++ b/docs/build/html/_sources/quapy.method.rst.txt
@@ -1,45 +1,51 @@
-:tocdepth: 2
-
 quapy.method package
 ====================
 
 Submodules
 ----------
 
-quapy.method.aggregative
-------------------------
+quapy.method.aggregative module
+-------------------------------
 
 .. automodule:: quapy.method.aggregative
    :members:
    :undoc-members:
    :show-inheritance:
 
-quapy.method.base
------------------
+.. automodule:: quapy.method._kdey
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+.. automodule:: quapy.method._neural
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+.. automodule:: quapy.method._threshold_optim
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+
+quapy.method.base module
+------------------------
 
 .. automodule:: quapy.method.base
    :members:
    :undoc-members:
    :show-inheritance:
 
-quapy.method.meta
------------------
+quapy.method.meta module
+------------------------
 
 .. automodule:: quapy.method.meta
    :members:
    :undoc-members:
    :show-inheritance:
 
-quapy.method.neural
--------------------
-
-.. automodule:: quapy.method.neural
-   :members:
-   :undoc-members:
-   :show-inheritance:
-
-quapy.method.non\_aggregative
------------------------------
+quapy.method.non\_aggregative module
+------------------------------------
 
 .. automodule:: quapy.method.non_aggregative
    :members:
diff --git a/docs/build/html/_sources/quapy.rst.txt b/docs/build/html/_sources/quapy.rst.txt
index e3e1697..af2708b 100644
--- a/docs/build/html/_sources/quapy.rst.txt
+++ b/docs/build/html/_sources/quapy.rst.txt
@@ -1,79 +1,76 @@
-:tocdepth: 2
-
 quapy package
 =============
 
+Subpackages
+-----------
+
+.. toctree::
+   :maxdepth: 4
+
+   quapy.classification
+   quapy.data
+   quapy.method
+
+
 Submodules
 ----------
 
-quapy.error
------------
+quapy.error module
+------------------
 
 .. automodule:: quapy.error
    :members:
    :undoc-members:
    :show-inheritance:
 
-quapy.evaluation
-----------------
+quapy.evaluation module
+-----------------------
 
 .. automodule:: quapy.evaluation
    :members:
    :undoc-members:
    :show-inheritance:
 
-quapy.protocol
---------------
-
-.. versionadded:: 0.1.7
-.. automodule:: quapy.protocol
-   :members:
-   :undoc-members:
-   :show-inheritance:
-
-quapy.functional
-----------------
+quapy.functional module
+-----------------------
 
 .. automodule:: quapy.functional
    :members:
    :undoc-members:
    :show-inheritance:
 
-quapy.model\_selection
-----------------------
+quapy.model\_selection module
+-----------------------------
 
 .. automodule:: quapy.model_selection
    :members:
    :undoc-members:
    :show-inheritance:
 
-quapy.plot
-----------
+quapy.plot module
+-----------------
 
 .. automodule:: quapy.plot
    :members:
    :undoc-members:
    :show-inheritance:
 
-quapy.util
-----------
+quapy.protocol module
+---------------------
+
+.. automodule:: quapy.protocol
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+quapy.util module
+-----------------
 
 .. automodule:: quapy.util
    :members:
    :undoc-members:
    :show-inheritance:
 
-Subpackages
------------
-
-.. toctree::
-   :maxdepth: 3
-
-   quapy.classification
-   quapy.data
-   quapy.method
-
-
 Module contents
 ---------------
 
@@ -81,4 +78,3 @@ Module contents
    :members:
    :undoc-members:
    :show-inheritance:
-
diff --git a/docs/build/html/_static/background_b01.png b/docs/build/html/_static/background_b01.png
deleted file mode 100644
index 353f26d..0000000
Binary files a/docs/build/html/_static/background_b01.png and /dev/null differ
diff --git a/docs/build/html/_static/basic.css b/docs/build/html/_static/basic.css
index 096e3f6..f316efc 100644
--- a/docs/build/html/_static/basic.css
+++ b/docs/build/html/_static/basic.css
@@ -4,7 +4,7 @@
  *
  * Sphinx stylesheet -- basic theme.
  *
- * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
@@ -55,7 +55,7 @@ div.sphinxsidebarwrapper {
 
 div.sphinxsidebar {
     float: left;
-    width: 210px;
+    width: 230px;
     margin-left: -100%;
     font-size: 90%;
     word-wrap: break-word;
@@ -237,6 +237,10 @@ a.headerlink {
     visibility: hidden;
 }
 
+a:visited {
+    color: #551A8B;
+}
+
 h1:hover > a.headerlink,
 h2:hover > a.headerlink,
 h3:hover > a.headerlink,
@@ -324,6 +328,7 @@ aside.sidebar {
 p.sidebar-title {
     font-weight: bold;
 }
+
 nav.contents,
 aside.topic,
 div.admonition, div.topic, blockquote {
@@ -331,6 +336,7 @@ div.admonition, div.topic, blockquote {
 }
 
 /* -- topics ---------------------------------------------------------------- */
+
 nav.contents,
 aside.topic,
 div.topic {
@@ -606,6 +612,7 @@ ol.simple p,
 ul.simple p {
     margin-bottom: 0;
 }
+
 aside.footnote > span,
 div.citation > span {
     float: left;
@@ -667,6 +674,16 @@ dd {
     margin-left: 30px;
 }
 
+.sig dd {
+    margin-top: 0px;
+    margin-bottom: 0px;
+}
+
+.sig dl {
+    margin-top: 0px;
+    margin-bottom: 0px;
+}
+
 dl > dd:last-child,
 dl > dd:last-child > :last-child {
     margin-bottom: 0;
@@ -735,6 +752,14 @@ abbr, acronym {
     cursor: help;
 }
 
+.translated {
+    background-color: rgba(207, 255, 207, 0.2)
+}
+
+.untranslated {
+    background-color: rgba(255, 207, 207, 0.2)
+}
+
 /* -- code displays --------------------------------------------------------- */
 
 pre {
diff --git a/docs/build/html/_static/bizstyle.css b/docs/build/html/_static/bizstyle.css
deleted file mode 100644
index ec32aa0..0000000
--- a/docs/build/html/_static/bizstyle.css
+++ /dev/null
@@ -1,508 +0,0 @@
-/*
- * bizstyle.css_t
- * ~~~~~~~~~~~~~~
- *
- * Sphinx stylesheet -- business style theme.
- *
- * :copyright: Copyright 2011-2014 by Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-@import url("basic.css");
-
-/* -- page layout ----------------------------------------------------------- */
-
-body {
-    font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva',
-                 'Verdana', sans-serif;
-    font-size: 14px;
-    letter-spacing: -0.01em;
-    line-height: 150%;
-    text-align: center;
-    background-color: white;
-    background-image: url(background_b01.png);
-    color: black;
-    padding: 0;
-    border-right: 1px solid #336699;
-    border-left: 1px solid #336699;
-
-    margin: 0px 40px 0px 40px;
-}
-
-div.document {
-    background-color: white;
-    text-align: left;
-    background-repeat: repeat-x;
-
-    -moz-box-shadow: 2px 2px 5px #000;
-    -webkit-box-shadow: 2px 2px 5px #000;
-}
-
-div.documentwrapper {
-    float: left;
-    width: 100%;
-}
-
-div.bodywrapper {
-    margin: 0 0 0 240px;
-    border-left: 1px solid #ccc;
-}
-
-div.body {
-    margin: 0;
-    padding: 0.5em 20px 20px 20px;
-}
-div.bodywrapper {
-    margin: 0 0 0 calc(210px + 30px);
-}
-
-div.related {
-    font-size: 1em;
-
-    -moz-box-shadow: 2px 2px 5px #000;
-    -webkit-box-shadow: 2px 2px 5px #000;
-}
-
-div.related ul {
-    background-color: #336699;
-    height: 100%;
-    overflow: hidden;
-    border-top: 1px solid #ddd;
-    border-bottom: 1px solid #ddd;
-}
-
-div.related ul li {
-    color: white;
-    margin: 0;
-    padding: 0;
-    height: 2em;
-    float: left;
-}
-
-div.related ul li.right {
-    float: right;
-    margin-right: 5px;
-}
-
-div.related ul li a {
-    margin: 0;
-    padding: 0 5px 0 5px;
-    line-height: 1.75em;
-    color: #fff;
-}
-
-div.related ul li a:hover {
-    color: #fff;
-    text-decoration: underline;
-}
-
-div.sphinxsidebarwrapper {
-    padding: 0;
-}
-
-div.sphinxsidebar {
-    padding: 0.5em 12px 12px 12px;
-    width: 210px;
-    font-size: 1em;
-    text-align: left;
-}
-
-div.sphinxsidebar h3, div.sphinxsidebar h4 {
-    margin: 1em 0 0.5em 0;
-    font-size: 1em;
-    padding: 0.1em 0 0.1em 0.5em;
-    color: white;
-    border: 1px solid #336699;
-    background-color: #336699;
-}
-
-div.sphinxsidebar h3 a {
-    color: white;
-}
-
-div.sphinxsidebar ul {
-    padding-left: 1.5em;
-    margin-top: 7px;
-    padding: 0;
-    line-height: 130%;
-}
-
-div.sphinxsidebar ul ul {
-    margin-left: 20px;
-}
-
-div.sphinxsidebar input {
-    border: 1px solid #336699;
-}
-
-div.footer {
-    background-color: white;
-    color: #336699;
-    padding: 3px 8px 3px 0;
-    clear: both;
-    font-size: 0.8em;
-    text-align: right;
-    border-bottom: 1px solid #336699;
-
-    -moz-box-shadow: 2px 2px 5px #000;
-    -webkit-box-shadow: 2px 2px 5px #000;
-}
-
-div.footer a {
-    color: #336699;
-    text-decoration: underline;
-}
-
-/* -- body styles ----------------------------------------------------------- */
-
-p {
-    margin: 0.8em 0 0.5em 0;
-}
-
-a {
-    color: #336699;
-    text-decoration: none;
-}
-
-a:hover {
-    color: #336699;
-    text-decoration: underline;
-}
-
-div.body a {
-    text-decoration: underline;
-}
-
-h1, h2, h3 {
-    color: #336699;
-}
-
-h1 {
-    margin: 0;
-    padding: 0.7em 0 0.3em 0;
-    font-size: 1.5em;
-}
-
-h2 {
-    margin: 1.3em 0 0.2em 0;
-    font-size: 1.35em;
-    padding-bottom: .5em;
-    border-bottom: 1px solid #336699;
-}
-
-h3 {
-    margin: 1em 0 -0.3em 0;
-    font-size: 1.2em;
-    padding-bottom: .3em;
-    border-bottom: 1px solid #CCCCCC;
-}
-
-div.body h1 a, div.body h2 a, div.body h3 a,
-div.body h4 a, div.body h5 a, div.body h6 a {
-    color: black!important;
-}
-
-h1 a.anchor, h2 a.anchor, h3 a.anchor,
-h4 a.anchor, h5 a.anchor, h6 a.anchor {
-    display: none;
-    margin: 0 0 0 0.3em;
-    padding: 0 0.2em 0 0.2em;
-    color: #aaa!important;
-}
-
-h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor,
-h5:hover a.anchor, h6:hover a.anchor {
-    display: inline;
-}
-
-h1 a.anchor:hover, h2 a.anchor:hover, h3 a.anchor:hover, h4 a.anchor:hover,
-h5 a.anchor:hover, h6 a.anchor:hover {
-    color: #777;
-    background-color: #eee;
-}
-
-a.headerlink {
-    color: #c60f0f!important;
-    font-size: 1em;
-    margin-left: 6px;
-    padding: 0 4px 0 4px;
-    text-decoration: none!important;
-}
-
-a.headerlink:hover {
-    background-color: #ccc;
-    color: white!important;
-}
-
-cite, code, tt {
-    font-family: 'Consolas', 'Deja Vu Sans Mono',
-                 'Bitstream Vera Sans Mono', monospace;
-    font-size: 0.95em;
-    letter-spacing: 0.01em;
-}
-
-code {
-    background-color: #F2F2F2;
-    border-bottom: 1px solid #ddd;
-    color: #333;
-}
-
-code.descname, code.descclassname, code.xref {
-    border: 0;
-}
-
-hr {
-    border: 1px solid #abc;
-    margin: 2em;
-}
-
-a code {
-    border: 0;
-    color: #CA7900;
-}
-
-a code:hover {
-    color: #2491CF;
-}
-
-pre {
-    background-color: transparent !important;
-    font-family: 'Consolas', 'Deja Vu Sans Mono',
-                 'Bitstream Vera Sans Mono', monospace;
-    font-size: 0.95em;
-    letter-spacing: 0.015em;
-    line-height: 120%;
-    padding: 0.5em;
-    border-right: 5px solid #ccc;
-    border-left: 5px solid #ccc;
-}
-
-pre a {
-    color: inherit;
-    text-decoration: underline;
-}
-
-td.linenos pre {
-    padding: 0.5em 0;
-}
-
-div.quotebar {
-    background-color: #f8f8f8;
-    max-width: 250px;
-    float: right;
-    padding: 2px 7px;
-    border: 1px solid #ccc;
-}
-nav.contents,
-aside.topic,
-
-div.topic {
-    background-color: #f8f8f8;
-}
-
-table {
-    border-collapse: collapse;
-    margin: 0 -0.5em 0 -0.5em;
-}
-
-table td, table th {
-    padding: 0.2em 0.5em 0.2em 0.5em;
-}
-
-div.admonition {
-    font-size: 0.9em;
-    margin: 1em 0 1em 0;
-    border: 3px solid #cccccc;
-    background-color: #f7f7f7;
-    padding: 0;
-}
-
-div.admonition p {
-    margin: 0.5em 1em 0.5em 1em;
-    padding: 0;
-}
-
-div.admonition li p {
-    margin-left: 0;
-}
-
-div.admonition pre, div.warning pre {
-    margin: 0;
-}
-
-div.highlight {
-    margin: 0.4em 1em;
-}
-
-div.admonition p.admonition-title {
-    margin: 0;
-    padding: 0.1em 0 0.1em 0.5em;
-    color: white;
-    border-bottom: 3px solid #cccccc;
-    font-weight: bold;
-    background-color: #165e83;
-}
-
-div.danger    { border: 3px solid #f0908d; background-color: #f0cfa0; }
-div.error     { border: 3px solid #f0908d; background-color: #ede4cd; }
-div.warning   { border: 3px solid #f8b862; background-color: #f0cfa0; }
-div.caution   { border: 3px solid #f8b862; background-color: #ede4cd; }
-div.attention { border: 3px solid #f8b862; background-color: #f3f3f3; }
-div.important { border: 3px solid #f0cfa0; background-color: #ede4cd; }
-div.note      { border: 3px solid #f0cfa0; background-color: #f3f3f3; }
-div.hint      { border: 3px solid #bed2c3; background-color: #f3f3f3; }
-div.tip       { border: 3px solid #bed2c3; background-color: #f3f3f3; }
-
-div.danger p.admonition-title, div.error p.admonition-title {
-    background-color: #b7282e;
-    border-bottom: 3px solid #f0908d;
-}
-
-div.caution p.admonition-title,
-div.warning p.admonition-title,
-div.attention p.admonition-title {
-    background-color: #f19072;
-    border-bottom: 3px solid #f8b862;
-}
-
-div.note p.admonition-title, div.important p.admonition-title {
-    background-color: #f8b862;
-    border-bottom: 3px solid #f0cfa0;
-}
-
-div.hint p.admonition-title, div.tip p.admonition-title {
-    background-color: #7ebea5;
-    border-bottom: 3px solid #bed2c3;
-}
-
-div.admonition ul, div.admonition ol,
-div.warning ul, div.warning ol {
-    margin: 0.1em 0.5em 0.5em 3em;
-    padding: 0;
-}
-
-div.versioninfo {
-    margin: 1em 0 0 0;
-    border: 1px solid #ccc;
-    background-color: #DDEAF0;
-    padding: 8px;
-    line-height: 1.3em;
-    font-size: 0.9em;
-}
-
-.viewcode-back {
-    font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva',
-                 'Verdana', sans-serif;
-}
-
-div.viewcode-block:target {
-    background-color: #f4debf;
-    border-top: 1px solid #ac9;
-    border-bottom: 1px solid #ac9;
-}
-
-p.versionchanged span.versionmodified {
-    font-size: 0.9em;
-    margin-right: 0.2em;
-    padding: 0.1em;
-    background-color: #DCE6A0;
-}
-
-dl.field-list > dt {
-    color: white;
-    background-color: #82A0BE;
-}
-
-dl.field-list > dd {
-    background-color: #f7f7f7;
-}
-
-/* -- table styles ---------------------------------------------------------- */
-
-table.docutils {
-    margin: 1em 0;
-    padding: 0;
-    border: 1px solid white;
-    background-color: #f7f7f7;
-}
-
-table.docutils td, table.docutils th {
-    padding: 1px 8px 1px 5px;
-    border-top: 0;
-    border-left: 0;
-    border-right: 1px solid white;
-    border-bottom: 1px solid white;
-}
-
-table.docutils td p {
-    margin-top: 0;
-    margin-bottom: 0.3em;
-}
-
-table.field-list td, table.field-list th {
-    border: 0 !important;
-    word-break: break-word;
-}
-
-table.footnote td, table.footnote th {
-    border: 0 !important;
-}
-
-th {
-    color: white;
-    text-align: left;
-    padding-right: 5px;
-    background-color: #82A0BE;
-}
-
-div.literal-block-wrapper div.code-block-caption {
-    background-color: #EEE;
-    border-style: solid;
-    border-color: #CCC;
-    border-width: 1px 5px;
-}
-
-/* WIDE DESKTOP STYLE */
-@media only screen and (min-width: 1176px) {
-body {
-    margin: 0 40px 0 40px;
-}
-}
-
-/* TABLET STYLE */
-@media only screen and (min-width: 768px) and (max-width: 991px) {
-body {
-    margin: 0 40px 0 40px;
-}
-}
-
-/* MOBILE LAYOUT (PORTRAIT/320px) */
-@media only screen and (max-width: 767px) {
-body {
-    margin: 0;
-}
-div.bodywrapper {
-    margin: 0;
-    width: 100%;
-    border: none;
-}
-div.sphinxsidebar {
-    display: none;
-}
-}
-
-/* MOBILE LAYOUT (LANDSCAPE/480px) */
-@media only screen and (min-width: 480px) and (max-width: 767px) {
-body {
-    margin: 0 20px 0 20px;
-}
-}
-
-/* RETINA OVERRIDES */
-@media
-only screen and (-webkit-min-device-pixel-ratio: 2),
-only screen and (min-device-pixel-ratio: 2) {
-}
-
-/* -- end ------------------------------------------------------------------- */
\ No newline at end of file
diff --git a/docs/build/html/_static/bizstyle.js b/docs/build/html/_static/bizstyle.js
deleted file mode 100644
index 4d5d01d..0000000
--- a/docs/build/html/_static/bizstyle.js
+++ /dev/null
@@ -1,30 +0,0 @@
-//
-// bizstyle.js
-// ~~~~~~~~~~~
-//
-// Sphinx javascript -- for bizstyle theme.
-//
-// This theme was created by referring to 'sphinxdoc'
-//
-// :copyright: Copyright 2012-2014 by Sphinx team, see AUTHORS.
-// :license: BSD, see LICENSE for details.
-//
-const initialiseBizStyle = () => {
-    if (navigator.userAgent.indexOf("iPhone") > 0 || navigator.userAgent.indexOf("Android") > 0) {
-        document.querySelector("li.nav-item-0 a").innerText = "Top"
-    }
-    const truncator = item => {if (item.textContent.length > 20) {
-        item.title = item.innerText
-        item.innerText = item.innerText.substr(0, 17) + "..."
-      }
-    }
-    document.querySelectorAll("div.related:first ul li:not(.right) a").slice(1).forEach(truncator);
-    document.querySelectorAll("div.related:last ul li:not(.right) a").slice(1).forEach(truncator);
-}
-
-window.addEventListener("resize",
-  () => (document.querySelector("li.nav-item-0 a").innerText = (window.innerWidth <= 776) ? "Top" : "QuaPy 0.1.7 documentation")
-)
-
-if (document.readyState !== "loading") initialiseBizStyle()
-else document.addEventListener("DOMContentLoaded", initialiseBizStyle)
\ No newline at end of file
diff --git a/docs/build/html/_static/css3-mediaqueries.js b/docs/build/html/_static/css3-mediaqueries.js
deleted file mode 100644
index 59735f5..0000000
--- a/docs/build/html/_static/css3-mediaqueries.js
+++ /dev/null
@@ -1 +0,0 @@
-if(typeof Object.create!=="function"){Object.create=function(e){function t(){}t.prototype=e;return new t}}var ua={toString:function(){return navigator.userAgent},test:function(e){return this.toString().toLowerCase().indexOf(e.toLowerCase())>-1}};ua.version=(ua.toString().toLowerCase().match(/[\s\S]+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1];ua.webkit=ua.test("webkit");ua.gecko=ua.test("gecko")&&!ua.webkit;ua.opera=ua.test("opera");ua.ie=ua.test("msie")&&!ua.opera;ua.ie6=ua.ie&&document.compatMode&&typeof document.documentElement.style.maxHeight==="undefined";ua.ie7=ua.ie&&document.documentElement&&typeof document.documentElement.style.maxHeight!=="undefined"&&typeof XDomainRequest==="undefined";ua.ie8=ua.ie&&typeof XDomainRequest!=="undefined";var domReady=function(){var e=[];var t=function(){if(!arguments.callee.done){arguments.callee.done=true;for(var t=0;t<e.length;t++){e[t]()}}};if(document.addEventListener){document.addEventListener("DOMContentLoaded",t,false)}if(ua.ie){(function(){try{document.documentElement.doScroll("left")}catch(e){setTimeout(arguments.callee,50);return}t()})();document.onreadystatechange=function(){if(document.readyState==="complete"){document.onreadystatechange=null;t()}}}if(ua.webkit&&document.readyState){(function(){if(document.readyState!=="loading"){t()}else{setTimeout(arguments.callee,10)}})()}window.onload=t;return function(t){if(typeof t==="function"){e[e.length]=t}return t}}();var cssHelper=function(){var e={BLOCKS:/[^\s{;][^{;]*\{(?:[^{}]*\{[^{}]*\}[^{}]*|[^{}]*)*\}/g,BLOCKS_INSIDE:/[^\s{][^{]*\{[^{}]*\}/g,DECLARATIONS:/[a-zA-Z\-]+[^;]*:[^;]+;/g,RELATIVE_URLS:/url\(['"]?([^\/\)'"][^:\)'"]+)['"]?\)/g,REDUNDANT_COMPONENTS:/(?:\/\*([^*\\\\]|\*(?!\/))+\*\/|@import[^;]+;)/g,REDUNDANT_WHITESPACE:/\s*(,|:|;|\{|\})\s*/g,WHITESPACE_IN_PARENTHESES:/\(\s*(\S*)\s*\)/g,MORE_WHITESPACE:/\s{2,}/g,FINAL_SEMICOLONS:/;\}/g,NOT_WHITESPACE:/\S+/g};var t,n=false;var r=[];var s=function(e){if(typeof e==="function"){r[r.length]=e}};var o=function(){for(var e=0;e<r.length;e++){r[e](t)}};var u={};var a=function(e,t){if(u[e]){var n=u[e].listeners;if(n){for(var r=0;r<n.length;r++){n[r](t)}}}};var f=function(e,t,n){if(ua.ie&&!window.XMLHttpRequest){window.XMLHttpRequest=function(){return new ActiveXObject("Microsoft.XMLHTTP")}}if(!XMLHttpRequest){return""}var r=new XMLHttpRequest;try{r.open("get",e,true);r.setRequestHeader("X_REQUESTED_WITH","XMLHttpRequest")}catch(i){n();return}var s=false;setTimeout(function(){s=true},5e3);document.documentElement.style.cursor="progress";r.onreadystatechange=function(){if(r.readyState===4&&!s){if(!r.status&&location.protocol==="file:"||r.status>=200&&r.status<300||r.status===304||navigator.userAgent.indexOf("Safari")>-1&&typeof r.status==="undefined"){t(r.responseText)}else{n()}document.documentElement.style.cursor="";r=null}};r.send("")};var l=function(t){t=t.replace(e.REDUNDANT_COMPONENTS,"");t=t.replace(e.REDUNDANT_WHITESPACE,"$1");t=t.replace(e.WHITESPACE_IN_PARENTHESES,"($1)");t=t.replace(e.MORE_WHITESPACE," ");t=t.replace(e.FINAL_SEMICOLONS,"}");return t};var c={stylesheet:function(t){var n={};var r=[],i=[],s=[],o=[];var u=t.cssHelperText;var a=t.getAttribute("media");if(a){var f=a.toLowerCase().split(",")}else{var f=["all"]}for(var l=0;l<f.length;l++){r[r.length]=c.mediaQuery(f[l],n)}var h=u.match(e.BLOCKS);if(h!==null){for(var l=0;l<h.length;l++){if(h[l].substring(0,7)==="@media "){var p=c.mediaQueryList(h[l],n);s=s.concat(p.getRules());i[i.length]=p}else{s[s.length]=o[o.length]=c.rule(h[l],n,null)}}}n.element=t;n.getCssText=function(){return u};n.getAttrMediaQueries=function(){return r};n.getMediaQueryLists=function(){return i};n.getRules=function(){return s};n.getRulesWithoutMQ=function(){return o};return n},mediaQueryList:function(t,n){var r={};var i=t.indexOf("{");var s=t.substring(0,i);t=t.substring(i+1,t.length-1);var o=[],u=[];var a=s.toLowerCase().substring(7).split(",");for(var f=0;f<a.length;f++){o[o.length]=c.mediaQuery(a[f],r)}var l=t.match(e.BLOCKS_INSIDE);if(l!==null){for(f=0;f<l.length;f++){u[u.length]=c.rule(l[f],n,r)}}r.type="mediaQueryList";r.getMediaQueries=function(){return o};r.getRules=function(){return u};r.getListText=function(){return s};r.getCssText=function(){return t};return r},mediaQuery:function(t,n){t=t||"";var r,i;if(n.type==="mediaQueryList"){r=n}else{i=n}var s=false,o;var u=[];var a=true;var f=t.match(e.NOT_WHITESPACE);for(var l=0;l<f.length;l++){var c=f[l];if(!o&&(c==="not"||c==="only")){if(c==="not"){s=true}}else if(!o){o=c}else if(c.charAt(0)==="("){var h=c.substring(1,c.length-1).split(":");u[u.length]={mediaFeature:h[0],value:h[1]||null}}}return{getQueryText:function(){return t},getAttrStyleSheet:function(){return i||null},getList:function(){return r||null},getValid:function(){return a},getNot:function(){return s},getMediaType:function(){return o},getExpressions:function(){return u}}},rule:function(e,t,n){var r={};var i=e.indexOf("{");var s=e.substring(0,i);var o=s.split(",");var u=[];var a=e.substring(i+1,e.length-1).split(";");for(var f=0;f<a.length;f++){u[u.length]=c.declaration(a[f],r)}r.getStylesheet=function(){return t||null};r.getMediaQueryList=function(){return n||null};r.getSelectors=function(){return o};r.getSelectorText=function(){return s};r.getDeclarations=function(){return u};r.getPropertyValue=function(e){for(var t=0;t<u.length;t++){if(u[t].getProperty()===e){return u[t].getValue()}}return null};return r},declaration:function(e,t){var n=e.indexOf(":");var r=e.substring(0,n);var i=e.substring(n+1);return{getRule:function(){return t||null},getProperty:function(){return r},getValue:function(){return i}}}};var h=function(e){if(typeof e.cssHelperText!=="string"){return}var n={stylesheet:null,mediaQueryLists:[],rules:[],selectors:{},declarations:[],properties:{}};var r=n.stylesheet=c.stylesheet(e);var s=n.mediaQueryLists=r.getMediaQueryLists();var o=n.rules=r.getRules();var u=n.selectors;var a=function(e){var t=e.getSelectors();for(var n=0;n<t.length;n++){var r=t[n];if(!u[r]){u[r]=[]}u[r][u[r].length]=e}};for(i=0;i<o.length;i++){a(o[i])}var f=n.declarations;for(i=0;i<o.length;i++){f=n.declarations=f.concat(o[i].getDeclarations())}var l=n.properties;for(i=0;i<f.length;i++){var h=f[i].getProperty();if(!l[h]){l[h]=[]}l[h][l[h].length]=f[i]}e.cssHelperParsed=n;t[t.length]=e;return n};var p=function(e,t){return;e.cssHelperText=l(t||e.innerHTML);return h(e)};var d=function(){n=true;t=[];var r=[];var i=function(){for(var e=0;e<r.length;e++){h(r[e])}var t=document.getElementsByTagName("style");for(e=0;e<t.length;e++){p(t[e])}n=false;o()};var s=document.getElementsByTagName("link");for(var u=0;u<s.length;u++){var a=s[u];if(a.getAttribute("rel").indexOf("style")>-1&&a.href&&a.href.length!==0&&!a.disabled){r[r.length]=a}}if(r.length>0){var c=0;var d=function(){c++;if(c===r.length){i()}};var v=function(t){var n=t.href;f(n,function(r){r=l(r).replace(e.RELATIVE_URLS,"url("+n.substring(0,n.lastIndexOf("/"))+"/$1)");t.cssHelperText=r;d()},d)};for(u=0;u<r.length;u++){v(r[u])}}else{i()}};var v={stylesheets:"array",mediaQueryLists:"array",rules:"array",selectors:"object",declarations:"array",properties:"object"};var m={stylesheets:null,mediaQueryLists:null,rules:null,selectors:null,declarations:null,properties:null};var g=function(e,t){if(m[e]!==null){if(v[e]==="array"){return m[e]=m[e].concat(t)}else{var n=m[e];for(var r in t){if(t.hasOwnProperty(r)){if(!n[r]){n[r]=t[r]}else{n[r]=n[r].concat(t[r])}}}return n}}};var y=function(e){m[e]=v[e]==="array"?[]:{};for(var n=0;n<t.length;n++){var r=e==="stylesheets"?"stylesheet":e;g(e,t[n].cssHelperParsed[r])}return m[e]};var b=function(e){if(typeof window.innerWidth!="undefined"){return window["inner"+e]}else if(typeof document.documentElement!=="undefined"&&typeof document.documentElement.clientWidth!=="undefined"&&document.documentElement.clientWidth!=0){return document.documentElement["client"+e]}};return{addStyle:function(e,t,n){var r=document.createElement("style");r.setAttribute("type","text/css");if(t&&t.length>0){r.setAttribute("media",t.join(","))}document.getElementsByTagName("head")[0].appendChild(r);if(r.styleSheet){r.styleSheet.cssText=e}else{r.appendChild(document.createTextNode(e))}r.addedWithCssHelper=true;if(typeof n==="undefined"||n===true){cssHelper.parsed(function(t){var n=p(r,e);for(var i in n){if(n.hasOwnProperty(i)){g(i,n[i])}}a("newStyleParsed",r)})}else{r.parsingDisallowed=true}return r},removeStyle:function(e){return e.parentNode.removeChild(e)},parsed:function(e){if(n){s(e)}else{if(typeof t!=="undefined"){if(typeof e==="function"){e(t)}}else{s(e);d()}}},stylesheets:function(e){cssHelper.parsed(function(t){e(m.stylesheets||y("stylesheets"))})},mediaQueryLists:function(e){cssHelper.parsed(function(t){e(m.mediaQueryLists||y("mediaQueryLists"))})},rules:function(e){cssHelper.parsed(function(t){e(m.rules||y("rules"))})},selectors:function(e){cssHelper.parsed(function(t){e(m.selectors||y("selectors"))})},declarations:function(e){cssHelper.parsed(function(t){e(m.declarations||y("declarations"))})},properties:function(e){cssHelper.parsed(function(t){e(m.properties||y("properties"))})},broadcast:a,addListener:function(e,t){if(typeof t==="function"){if(!u[e]){u[e]={listeners:[]}}u[e].listeners[u[e].listeners.length]=t}},removeListener:function(e,t){if(typeof t==="function"&&u[e]){var n=u[e].listeners;for(var r=0;r<n.length;r++){if(n[r]===t){n.splice(r,1);r-=1}}}},getViewportWidth:function(){return b("Width")},getViewportHeight:function(){return b("Height")}}}();domReady(function(){var t;var n={LENGTH_UNIT:/[0-9]+(em|ex|px|in|cm|mm|pt|pc)$/,RESOLUTION_UNIT:/[0-9]+(dpi|dpcm)$/,ASPECT_RATIO:/^[0-9]+\/[0-9]+$/,ABSOLUTE_VALUE:/^[0-9]*(\.[0-9]+)*$/};var r=[];var i=function(){var e="css3-mediaqueries-test";var t=document.createElement("div");t.id=e;var n=cssHelper.addStyle("@media all and (width) { #"+e+" { width: 1px !important; } }",[],false);document.body.appendChild(t);var r=t.offsetWidth===1;n.parentNode.removeChild(n);t.parentNode.removeChild(t);i=function(){return r};return r};var s=function(){t=document.createElement("div");t.style.cssText="position:absolute;top:-9999em;left:-9999em;"+"margin:0;border:none;padding:0;width:1em;font-size:1em;";document.body.appendChild(t);if(t.offsetWidth!==16){t.style.fontSize=16/t.offsetWidth+"em"}t.style.width=""};var o=function(e){t.style.width=e;var n=t.offsetWidth;t.style.width="";return n};var u=function(e,t){var r=e.length;var i=e.substring(0,4)==="min-";var s=!i&&e.substring(0,4)==="max-";if(t!==null){var u;var a;if(n.LENGTH_UNIT.exec(t)){u="length";a=o(t)}else if(n.RESOLUTION_UNIT.exec(t)){u="resolution";a=parseInt(t,10);var f=t.substring((a+"").length)}else if(n.ASPECT_RATIO.exec(t)){u="aspect-ratio";a=t.split("/")}else if(n.ABSOLUTE_VALUE){u="absolute";a=t}else{u="unknown"}}var l,c;if("device-width"===e.substring(r-12,r)){l=screen.width;if(t!==null){if(u==="length"){return i&&l>=a||s&&l<a||!i&&!s&&l===a}else{return false}}else{return l>0}}else if("device-height"===e.substring(r-13,r)){c=screen.height;if(t!==null){if(u==="length"){return i&&c>=a||s&&c<a||!i&&!s&&c===a}else{return false}}else{return c>0}}else if("width"===e.substring(r-5,r)){l=document.documentElement.clientWidth||document.body.clientWidth;if(t!==null){if(u==="length"){return i&&l>=a||s&&l<a||!i&&!s&&l===a}else{return false}}else{return l>0}}else if("height"===e.substring(r-6,r)){c=document.documentElement.clientHeight||document.body.clientHeight;if(t!==null){if(u==="length"){return i&&c>=a||s&&c<a||!i&&!s&&c===a}else{return false}}else{return c>0}}else if("device-aspect-ratio"===e.substring(r-19,r)){return u==="aspect-ratio"&&screen.width*a[1]===screen.height*a[0]}else if("color-index"===e.substring(r-11,r)){var h=Math.pow(2,screen.colorDepth);if(t!==null){if(u==="absolute"){return i&&h>=a||s&&h<a||!i&&!s&&h===a}else{return false}}else{return h>0}}else if("color"===e.substring(r-5,r)){var p=screen.colorDepth;if(t!==null){if(u==="absolute"){return i&&p>=a||s&&p<a||!i&&!s&&p===a}else{return false}}else{return p>0}}else if("resolution"===e.substring(r-10,r)){var d;if(f==="dpcm"){d=o("1cm")}else{d=o("1in")}if(t!==null){if(u==="resolution"){return i&&d>=a||s&&d<a||!i&&!s&&d===a}else{return false}}else{return d>0}}else{return false}};var a=function(e){var t=e.getValid();var n=e.getExpressions();var r=n.length;if(r>0){for(var i=0;i<r&&t;i++){t=u(n[i].mediaFeature,n[i].value)}var s=e.getNot();return t&&!s||s&&!t}return t};var f=function(e,t){var n=e.getMediaQueries();var i={};for(var s=0;s<n.length;s++){var o=n[s].getMediaType();if(n[s].getExpressions().length===0){continue}var u=true;if(o!=="all"&&t&&t.length>0){u=false;for(var f=0;f<t.length;f++){if(t[f]===o){u=true}}}if(u&&a(n[s])){i[o]=true}}var l=[],c=0;for(var h in i){if(i.hasOwnProperty(h)){if(c>0){l[c++]=","}l[c++]=h}}if(l.length>0){r[r.length]=cssHelper.addStyle("@media "+l.join("")+"{"+e.getCssText()+"}",t,false)}};var l=function(e,t){for(var n=0;n<e.length;n++){f(e[n],t)}};var c=function(e){var t=e.getAttrMediaQueries();var n=false;var i={};for(var s=0;s<t.length;s++){if(a(t[s])){i[t[s].getMediaType()]=t[s].getExpressions().length>0}}var o=[],u=[];for(var f in i){if(i.hasOwnProperty(f)){o[o.length]=f;if(i[f]){u[u.length]=f}if(f==="all"){n=true}}}if(u.length>0){r[r.length]=cssHelper.addStyle(e.getCssText(),u,false)}var c=e.getMediaQueryLists();if(n){l(c)}else{l(c,o)}};var h=function(e){for(var t=0;t<e.length;t++){c(e[t])}if(ua.ie){document.documentElement.style.display="block";setTimeout(function(){document.documentElement.style.display=""},0);setTimeout(function(){cssHelper.broadcast("cssMediaQueriesTested")},100)}else{cssHelper.broadcast("cssMediaQueriesTested")}};var p=function(){for(var e=0;e<r.length;e++){cssHelper.removeStyle(r[e])}r=[];cssHelper.stylesheets(h)};var d=0;var v=function(){var e=cssHelper.getViewportWidth();var t=cssHelper.getViewportHeight();if(ua.ie){var n=document.createElement("div");n.style.position="absolute";n.style.top="-9999em";n.style.overflow="scroll";document.body.appendChild(n);d=n.offsetWidth-n.clientWidth;document.body.removeChild(n)}var r;var s=function(){var n=cssHelper.getViewportWidth();var s=cssHelper.getViewportHeight();if(Math.abs(n-e)>d||Math.abs(s-t)>d){e=n;t=s;clearTimeout(r);r=setTimeout(function(){if(!i()){p()}else{cssHelper.broadcast("cssMediaQueriesTested")}},500)}};window.onresize=function(){var e=window.onresize||function(){};return function(){e();s()}}()};var m=document.documentElement;m.style.marginLeft="-32767px";setTimeout(function(){m.style.marginLeft=""},5e3);return function(){if(!i()){cssHelper.addListener("newStyleParsed",function(e){c(e.cssHelperParsed.stylesheet)});cssHelper.addListener("cssMediaQueriesTested",function(){if(ua.ie){m.style.width="1px"}setTimeout(function(){m.style.width="";m.style.marginLeft=""},0);cssHelper.removeListener("cssMediaQueriesTested",arguments.callee)});s();p()}else{m.style.marginLeft=""}v()}}());try{document.execCommand("BackgroundImageCache",false,true)}catch(e){}
diff --git a/docs/build/html/_static/css3-mediaqueries_src.js b/docs/build/html/_static/css3-mediaqueries_src.js
deleted file mode 100644
index 7878620..0000000
--- a/docs/build/html/_static/css3-mediaqueries_src.js
+++ /dev/null
@@ -1,1104 +0,0 @@
-/*
-css3-mediaqueries.js - CSS Helper and CSS3 Media Queries Enabler
-
-author: Wouter van der Graaf <wouter at dynora nl>
-version: 1.0 (20110330)
-license: MIT
-website: http://code.google.com/p/css3-mediaqueries-js/
-
-W3C spec: http://www.w3.org/TR/css3-mediaqueries/
-
-Note: use of embedded <style> is not recommended when using media queries, because IE  has no way of returning the raw literal css text from a <style> element.
-*/
-
-
-// true prototypal inheritance (http://javascript.crockford.com/prototypal.html)
-if (typeof Object.create !== 'function') {
-	Object.create = function (o) {
-		function F() {}
-		F.prototype = o;
-		return new F();
-	};
-}
-
-
-// user agent sniffing shortcuts
-var ua = {
-	toString: function () {
-		return navigator.userAgent;
-	},
-	test: function (s) {
-		return this.toString().toLowerCase().indexOf(s.toLowerCase()) > -1;
-	}
-};
-ua.version = (ua.toString().toLowerCase().match(/[\s\S]+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1];
-ua.webkit = ua.test('webkit');
-ua.gecko = ua.test('gecko') && !ua.webkit;
-ua.opera = ua.test('opera');
-ua.ie = ua.test('msie') && !ua.opera;
-ua.ie6 = ua.ie && document.compatMode && typeof document.documentElement.style.maxHeight === 'undefined';
-ua.ie7 = ua.ie && document.documentElement && typeof document.documentElement.style.maxHeight !== 'undefined' && typeof XDomainRequest === 'undefined';
-ua.ie8 = ua.ie && typeof XDomainRequest !== 'undefined';
-
-
-
-// initialize when DOM content is loaded
-var domReady = function () {
-	var fns = [];
-	var init = function () {
-		if (!arguments.callee.done) { // run init functions once
-			arguments.callee.done = true;
-			for (var i = 0; i < fns.length; i++) {
-				fns[i]();
-			}
-		}
-	};
-
-	// listeners for different browsers
-	if (document.addEventListener) {
-		document.addEventListener('DOMContentLoaded', init, false);
-	}
-	if (ua.ie) {
-		(function () {
-			try {
-				// throws errors until after ondocumentready
-				document.documentElement.doScroll('left');
-			}
-			catch (e) {
-				setTimeout(arguments.callee, 50);
-				return;
-			}
-			// no errors, fire
-			init();
-		})();
-		// trying to always fire before onload
-		document.onreadystatechange = function () {
-			if (document.readyState === 'complete') {
-				document.onreadystatechange = null;
-				init();
-			}
-		};
-	}
-	if (ua.webkit && document.readyState) {
-		(function () {
-			if (document.readyState !== 'loading') {
-				init();
-			}
-			else {
-				setTimeout(arguments.callee, 10);
-			}
-		})();
-	}
-	window.onload = init; // fallback
-
-	return function (fn) { // add fn to init functions
-		if (typeof fn === 'function') {
-			fns[fns.length] = fn;
-		}
-		return fn;
-	};
-}();
-
-
-
-// helper library for parsing css to objects
-var cssHelper = function () {
-
-	var regExp = {
-		BLOCKS: /[^\s{;][^{;]*\{(?:[^{}]*\{[^{}]*\}[^{}]*|[^{}]*)*\}/g,
-		BLOCKS_INSIDE: /[^\s{][^{]*\{[^{}]*\}/g,
-		DECLARATIONS: /[a-zA-Z\-]+[^;]*:[^;]+;/g,
-		RELATIVE_URLS: /url\(['"]?([^\/\)'"][^:\)'"]+)['"]?\)/g,
-		// strip whitespace and comments, @import is evil
-		REDUNDANT_COMPONENTS: /(?:\/\*([^*\\\\]|\*(?!\/))+\*\/|@import[^;]+;)/g,
-		REDUNDANT_WHITESPACE: /\s*(,|:|;|\{|\})\s*/g,
-        WHITESPACE_IN_PARENTHESES: /\(\s*(\S*)\s*\)/g,
-		MORE_WHITESPACE: /\s{2,}/g,
-		FINAL_SEMICOLONS: /;\}/g,
-		NOT_WHITESPACE: /\S+/g
-	};
-
-	var parsed, parsing = false;
-
-	var waiting = [];
-	var wait = function (fn) {
-		if (typeof fn === 'function') {
-			waiting[waiting.length] = fn;
-		}
-	};
-	var ready = function () {
-		for (var i = 0; i < waiting.length; i++) {
-			waiting[i](parsed);
-		}
-	};
-	var events = {};
-	var broadcast = function (n, v) {
-		if (events[n]) {
-			var listeners = events[n].listeners;
-			if (listeners) {
-				for (var i = 0; i < listeners.length; i++) {
-					listeners[i](v);
-				}
-			}
-		}
-	};
-
-	var requestText = function (url, fnSuccess, fnFailure) {
-		if (ua.ie && !window.XMLHttpRequest) {
-			window.XMLHttpRequest = function () {
-				return new ActiveXObject('Microsoft.XMLHTTP');
-			};
-		}
-		if (!XMLHttpRequest) {
-			return '';
-		}
-		var r = new XMLHttpRequest();
-		try {
-			r.open('get', url, true);
-			r.setRequestHeader('X_REQUESTED_WITH', 'XMLHttpRequest');
-		}
-		catch (e) {
-			fnFailure();
-			return;
-		}
-		var done = false;
-		setTimeout(function () {
-			done = true;
-		}, 5000);
-		document.documentElement.style.cursor = 'progress';
-		r.onreadystatechange = function () {
-			if (r.readyState === 4 && !done) {
-				if (!r.status && location.protocol === 'file:' ||
-						(r.status >= 200 && r.status < 300) ||
-						r.status === 304 ||
-						navigator.userAgent.indexOf('Safari') > -1 && typeof r.status === 'undefined') {
-					fnSuccess(r.responseText);
-				}
-				else {
-					fnFailure();
-				}
-				document.documentElement.style.cursor = '';
-				r = null; // avoid memory leaks
-			}
-		};
-		r.send('');
-	};
-
-	var sanitize = function (text) {
-		text = text.replace(regExp.REDUNDANT_COMPONENTS, '');
-		text = text.replace(regExp.REDUNDANT_WHITESPACE, '$1');
-        text = text.replace(regExp.WHITESPACE_IN_PARENTHESES, '($1)');
-		text = text.replace(regExp.MORE_WHITESPACE, ' ');
-		text = text.replace(regExp.FINAL_SEMICOLONS, '}'); // optional final semicolons
-		return text;
-	};
-
-	var objects = {
-	    stylesheet: function (el) {
-	        var o = {};
-	        var amqs = [], mqls = [], rs = [], rsw = [];
-	        var s = el.cssHelperText;
-
-	        // add attribute media queries
-	        var attr = el.getAttribute('media');
-	        if (attr) {
-	            var qts = attr.toLowerCase().split(',')
-	        }
-	        else {
-	            var qts = ['all'] // imply 'all'
-            }
-	        for (var i = 0; i < qts.length; i++) {
-	            amqs[amqs.length] = objects.mediaQuery(qts[i], o);
-	        }
-
-	        // add media query lists and rules (top down order)
-		    var blocks = s.match(regExp.BLOCKS); // @charset is not a block
-		    if (blocks !== null) {
-			    for (var i = 0; i < blocks.length; i++) {
-				    if (blocks[i].substring(0, 7) === '@media ') { // media query (list)
-					    var mql = objects.mediaQueryList(blocks[i], o);
-					    rs = rs.concat(mql.getRules());
-					    mqls[mqls.length] = mql;
-				    }
-				    else { // regular rule set, page context (@page) or font description (@font-face)
-					    rs[rs.length] = rsw[rsw.length] = objects.rule(blocks[i], o, null);
-				    }
-			    }
-		    }
-
-	        o.element = el;
-	        o.getCssText = function () {
-	            return s;
-	        };
-	        o.getAttrMediaQueries = function () {
-	            return amqs;
-	        };
-	        o.getMediaQueryLists = function () {
-	            return mqls;
-	        };
-	        o.getRules = function () {
-	            return rs;
-	        };
-	        o.getRulesWithoutMQ = function () {
-	            return rsw;
-	        };
-	        return o;
-	    },
-
-		mediaQueryList: function (s, stsh) {
-			var o = {};
-			var idx = s.indexOf('{');
-			var lt = s.substring(0, idx);
-			s = s.substring(idx + 1, s.length - 1);
-			var mqs = [], rs = [];
-
-			// add media queries
-			var qts = lt.toLowerCase().substring(7).split(',');
-			for (var i = 0; i < qts.length; i++) { // parse each media query
-				mqs[mqs.length] = objects.mediaQuery(qts[i], o);
-			}
-
-			// add rule sets
-			var rts = s.match(regExp.BLOCKS_INSIDE);
-			if (rts !== null) {
-				for (i = 0; i < rts.length; i++) {
-					rs[rs.length] = objects.rule(rts[i], stsh, o);
-				}
-			}
-
-			o.type = 'mediaQueryList';
-			o.getMediaQueries = function () {
-				return mqs;
-			};
-			o.getRules = function () {
-				return rs;
-			};
-			o.getListText = function () {
-				return lt;
-			};
-			o.getCssText = function () {
-				return s;
-			};
-			return o;
-		},
-
-		mediaQuery: function (s, listOrSheet) {
-			s = s || '';
-			var mql, stsh;
-			if (listOrSheet.type === 'mediaQueryList') {
-			    mql = listOrSheet;
-		    }
-		    else {
-		        stsh = listOrSheet;
-		    }
-			var not = false, type;
-			var expr = [];
-			var valid = true;
-			var tokens = s.match(regExp.NOT_WHITESPACE);
-
-
-
-			for (var i = 0; i < tokens.length; i++) {
-				var token = tokens[i];
-				if (!type && (token === 'not' || token === 'only')) { // 'not' and 'only' keywords
-					// keyword 'only' does nothing, as if it was not present
-					if (token === 'not') {
-						not = true;
-					}
-				}
-				else if (!type) { // media type
-					type = token;
-				}
-				else if (token.charAt(0) === '(') { // media feature expression
-					var pair = token.substring(1, token.length - 1).split(':');
-					expr[expr.length] = {
-						mediaFeature: pair[0],
-						value: pair[1] || null
-					};
-				}
-			}
-
-			return {
-			    getQueryText: function () {
-			        return s;
-			    },
-			    getAttrStyleSheet: function () {
-			        return stsh || null;
-			    },
-				getList: function () {
-					return mql || null;
-				},
-				getValid: function () {
-					return valid;
-				},
-				getNot: function () {
-					return not;
-				},
-				getMediaType: function () {
-					return type;
-				},
-				getExpressions: function () {
-					return expr;
-				}
-			};
-		},
-
-		rule: function (s, stsh, mql) {
-			var o = {};
-			var idx = s.indexOf('{');
-			var st = s.substring(0, idx);
-			var ss = st.split(',');
-			var ds = [];
-			var dts = s.substring(idx + 1, s.length - 1).split(';');
-			for (var i = 0; i < dts.length; i++) {
-				ds[ds.length] = objects.declaration(dts[i], o);
-			}
-
-			o.getStylesheet = function () {
-			    return stsh || null;
-			};
-			o.getMediaQueryList = function () {
-				return mql || null;
-			};
-			o.getSelectors = function () {
-				return ss;
-			};
-			o.getSelectorText = function () {
-				return st;
-			};
-			o.getDeclarations = function () {
-				return ds;
-			};
-			o.getPropertyValue = function (n) {
-				for (var i = 0; i < ds.length; i++) {
-					if (ds[i].getProperty() === n) {
-						return ds[i].getValue();
-					}
-				}
-				return null;
-			};
-			return o;
-		},
-
-		declaration: function (s, r) {
-			var idx = s.indexOf(':');
-			var p = s.substring(0, idx);
-			var v = s.substring(idx + 1);
-			return {
-				getRule: function () {
-					return r || null;
-				},
-				getProperty: function () {
-					return p;
-				},
-				getValue: function () {
-					return v;
-				}
-			};
-		}
-	};
-
-	var parseText = function (el) {
-		if (typeof el.cssHelperText !== 'string') {
-			return;
-		}
-		var o = {
-		    stylesheet: null,
-			mediaQueryLists: [],
-			rules: [],
-			selectors: {},
-			declarations: [],
-			properties: {}
-		};
-
-		// build stylesheet object
-		var stsh = o.stylesheet = objects.stylesheet(el);
-
-		// collect media query lists
-		var mqls = o.mediaQueryLists = stsh.getMediaQueryLists();
-
-		// collect all rules
-		var ors = o.rules = stsh.getRules();
-
-		// collect all selectors
-		var oss = o.selectors;
-		var collectSelectors = function (r) {
-			var ss = r.getSelectors();
-			for (var i = 0; i < ss.length; i++) {
-				var n = ss[i];
-				if (!oss[n]) {
-					oss[n] = [];
-				}
-				oss[n][oss[n].length] = r;
-			}
-		};
-		for (var i = 0; i < ors.length; i++) {
-			collectSelectors(ors[i]);
-		}
-
-		// collect all declarations
-		var ods = o.declarations;
-		for (i = 0; i < ors.length; i++) {
-			ods = o.declarations = ods.concat(ors[i].getDeclarations());
-		}
-
-		// collect all properties
-		var ops = o.properties;
-		for (i = 0; i < ods.length; i++) {
-			var n = ods[i].getProperty();
-			if (!ops[n]) {
-				ops[n] = [];
-			}
-			ops[n][ops[n].length] = ods[i];
-		}
-
-		el.cssHelperParsed = o;
-		parsed[parsed.length] = el;
-		return o;
-	};
-
-	var parseEmbedded = function (el, s) {
-	    return;
-	    // This function doesn't work because of a bug in IE, where innerHTML gives us parsed css instead of raw literal.
-		el.cssHelperText = sanitize(s || el.innerHTML);
-		return parseText(el);
-	};
-
-	var parse = function () {
-		parsing = true;
-		parsed = [];
-		var linked = [];
-		var finish = function () {
-			for (var i = 0; i < linked.length; i++) {
-				parseText(linked[i]);
-			}
-			var styles = document.getElementsByTagName('style');
-			for (i = 0; i < styles.length; i++) {
-				parseEmbedded(styles[i]);
-			}
-			parsing = false;
-			ready();
-		};
-		var links = document.getElementsByTagName('link');
-		for (var i = 0; i < links.length; i++) {
-			var link = links[i];
-			if (link.getAttribute('rel').indexOf('style') > -1 && link.href && link.href.length !== 0 && !link.disabled) {
-				linked[linked.length] = link;
-			}
-		}
-		if (linked.length > 0) {
-			var c = 0;
-			var checkForFinish = function () {
-				c++;
-				if (c === linked.length) { // parse in right order, so after last link is read
-					finish();
-				}
-			};
-			var processLink = function (link) {
-				var href = link.href;
-				requestText(href, function (text) {
-					// fix url's
-					text = sanitize(text).replace(regExp.RELATIVE_URLS, 'url(' + href.substring(0, href.lastIndexOf('/')) + '/$1)');
-					link.cssHelperText = text;
-					checkForFinish();
-				}, checkForFinish);
-			};
-			for (i = 0; i < linked.length; i++) {
-				processLink(linked[i]);
-			}
-		}
-		else {
-			finish();
-		}
-	};
-
-	var types = {
-	    stylesheets: 'array',
-		mediaQueryLists: 'array',
-		rules: 'array',
-		selectors: 'object',
-		declarations: 'array',
-		properties: 'object'
-	};
-
-	var collections = {
-	    stylesheets: null,
-		mediaQueryLists: null,
-		rules: null,
-		selectors: null,
-		declarations: null,
-		properties: null
-	};
-
-	var addToCollection = function (name, v) {
-		if (collections[name] !== null) {
-			if (types[name] === 'array') {
-				return (collections[name] = collections[name].concat(v));
-			}
-			else {
-				var c = collections[name];
-				for (var n in v) {
-					if (v.hasOwnProperty(n)) {
-						if (!c[n]) {
-							c[n] = v[n];
-						}
-						else {
-							c[n] = c[n].concat(v[n]);
-						}
-					}
-				}
-				return c;
-			}
-		}
-	};
-
-	var collect = function (name) {
-		collections[name] = (types[name] === 'array') ? [] : {};
-		for (var i = 0; i < parsed.length; i++) {
-		    var pname = name === 'stylesheets' ? 'stylesheet' : name; // the exception
-			addToCollection(name, parsed[i].cssHelperParsed[pname]);
-		}
-		return collections[name];
-	};
-
-	// viewport size
-	var getViewportSize = function (d) {
-		if (typeof window.innerWidth != 'undefined') {
-			return window['inner' + d];
-		}
-		else if (typeof document.documentElement !== 'undefined'
-				&& typeof document.documentElement.clientWidth !== 'undefined'
-				&& document.documentElement.clientWidth != 0) {
-			return document.documentElement['client' + d];
-		}
-	};
-
-	// public static functions
-	return {
-		addStyle: function (s, mediaTypes, process) {
-			var el = document.createElement('style');
-			el.setAttribute('type', 'text/css');
-			if (mediaTypes && mediaTypes.length > 0) {
-			    el.setAttribute('media', mediaTypes.join(','));
-			}
-			document.getElementsByTagName('head')[0].appendChild(el);
-			if (el.styleSheet) { // IE
-				el.styleSheet.cssText = s;
-			}
-			else {
-				el.appendChild(document.createTextNode(s));
-			}
-			el.addedWithCssHelper = true;
-			if (typeof process === 'undefined' || process === true) {
-				cssHelper.parsed(function (parsed) {
-					var o = parseEmbedded(el, s);
-					for (var n in o) {
-						if (o.hasOwnProperty(n)) {
-							addToCollection(n, o[n]);
-						}
-					}
-					broadcast('newStyleParsed', el);
-				});
-			}
-			else {
-				el.parsingDisallowed = true;
-			}
-			return el;
-		},
-
-		removeStyle: function (el) {
-			return el.parentNode.removeChild(el);
-		},
-
-		parsed: function (fn) {
-			if (parsing) {
-				wait(fn);
-			}
-			else {
-				if (typeof parsed !== 'undefined') {
-					if (typeof fn === 'function') {
-						fn(parsed);
-					}
-				}
-				else {
-					wait(fn);
-					parse();
-				}
-			}
-		},
-
-		stylesheets: function (fn) {
-		    cssHelper.parsed(function (parsed) {
-		        fn(collections.stylesheets || collect('stylesheets'));
-		    });
-		},
-
-		mediaQueryLists: function (fn) {
-			cssHelper.parsed(function (parsed) {
-				fn(collections.mediaQueryLists || collect('mediaQueryLists'));
-			});
-		},
-
-		rules: function (fn) {
-			cssHelper.parsed(function (parsed) {
-				fn(collections.rules || collect('rules'));
-			});
-		},
-
-		selectors: function (fn) {
-			cssHelper.parsed(function (parsed) {
-				fn(collections.selectors || collect('selectors'));
-			});
-		},
-
-		declarations: function (fn) {
-			cssHelper.parsed(function (parsed) {
-				fn(collections.declarations || collect('declarations'));
-			});
-		},
-
-		properties: function (fn) {
-			cssHelper.parsed(function (parsed) {
-				fn(collections.properties || collect('properties'));
-			});
-		},
-
-		broadcast: broadcast,
-
-		addListener: function (n, fn) { // in case n is 'styleadd': added function is called everytime style is added and parsed
-			if (typeof fn === 'function') {
-				if (!events[n]) {
-					events[n] = {
-						listeners: []
-					};
-				}
-				events[n].listeners[events[n].listeners.length] = fn;
-			}
-		},
-
-		removeListener: function (n, fn) {
-			if (typeof fn === 'function' && events[n]) {
-				var ls = events[n].listeners;
-				for (var i = 0; i < ls.length; i++) {
-					if (ls[i] === fn) {
-						ls.splice(i, 1);
-						i -= 1;
-					}
-				}
-			}
-		},
-
-		getViewportWidth: function () {
-			return getViewportSize('Width');
-		},
-
-		getViewportHeight: function () {
-			return getViewportSize('Height');
-		}
-	};
-}();
-
-
-
-// function to test and apply parsed media queries against browser capabilities
-domReady(function enableCssMediaQueries() {
-	var meter;
-
-	var regExp = {
-		LENGTH_UNIT: /[0-9]+(em|ex|px|in|cm|mm|pt|pc)$/,
-		RESOLUTION_UNIT: /[0-9]+(dpi|dpcm)$/,
-		ASPECT_RATIO: /^[0-9]+\/[0-9]+$/,
-		ABSOLUTE_VALUE: /^[0-9]*(\.[0-9]+)*$/
-	};
-
-	var styles = [];
-
-	var nativeSupport = function () {
-		// check support for media queries
-		var id = 'css3-mediaqueries-test';
-		var el = document.createElement('div');
-		el.id = id;
-		var style = cssHelper.addStyle('@media all and (width) { #' + id +
-			' { width: 1px !important; } }', [], false); // false means don't parse this temp style
-		document.body.appendChild(el);
-		var ret = el.offsetWidth === 1;
-		style.parentNode.removeChild(style);
-		el.parentNode.removeChild(el);
-		nativeSupport = function () {
-			return ret;
-		};
-		return ret;
-	};
-
-	var createMeter = function () { // create measuring element
-		meter = document.createElement('div');
-		meter.style.cssText = 'position:absolute;top:-9999em;left:-9999em;' +
-			'margin:0;border:none;padding:0;width:1em;font-size:1em;'; // cssText is needed for IE, works for the others
-		document.body.appendChild(meter);
-		// meter must have browser default font size of 16px
-		if (meter.offsetWidth !== 16) {
-			meter.style.fontSize = 16 / meter.offsetWidth + 'em';
-		}
-		meter.style.width = '';
-	};
-
-	var measure = function (value) {
-		meter.style.width = value;
-		var amount = meter.offsetWidth;
-		meter.style.width = '';
-		return amount;
-	};
-
-	var testMediaFeature = function (feature, value) {
-		// non-testable features: monochrome|min-monochrome|max-monochrome|scan|grid
-		var l = feature.length;
-		var min = (feature.substring(0, 4) === 'min-');
-		var max = (!min && feature.substring(0, 4) === 'max-');
-
-		if (value !== null) { // determine value type and parse to usable amount
-			var valueType;
-			var amount;
-			if (regExp.LENGTH_UNIT.exec(value)) {
-				valueType = 'length';
-				amount = measure(value);
-			}
-			else if (regExp.RESOLUTION_UNIT.exec(value)) {
-				valueType = 'resolution';
-				amount = parseInt(value, 10);
-				var unit = value.substring((amount + '').length);
-			}
-			else if (regExp.ASPECT_RATIO.exec(value)) {
-				valueType = 'aspect-ratio';
-				amount = value.split('/');
-			}
-			else if (regExp.ABSOLUTE_VALUE) {
-				valueType = 'absolute';
-				amount = value;
-			}
-			else {
-				valueType = 'unknown';
-			}
-		}
-
-		var width, height;
-		if ('device-width' === feature.substring(l - 12, l)) { // screen width
-			width = screen.width;
-			if (value !== null) {
-				if (valueType === 'length') {
-					return ((min && width >= amount) || (max && width < amount) || (!min && !max && width === amount));
-				}
-				else {
-					return false;
-				}
-			}
-			else { // test width without value
-				return width > 0;
-			}
-		}
-		else if ('device-height' === feature.substring(l - 13, l)) { // screen height
-			height = screen.height;
-			if (value !== null) {
-				if (valueType === 'length') {
-					return ((min && height >= amount) || (max && height < amount) || (!min && !max && height === amount));
-				}
-				else {
-					return false;
-				}
-			}
-			else { // test height without value
-				return height > 0;
-			}
-		}
-		else if ('width' === feature.substring(l - 5, l)) { // viewport width
-			width = document.documentElement.clientWidth || document.body.clientWidth; // the latter for IE quirks mode
-			if (value !== null) {
-				if (valueType === 'length') {
-					return ((min && width >= amount) || (max && width < amount) || (!min && !max && width === amount));
-				}
-				else {
-					return false;
-				}
-			}
-			else { // test width without value
-				return width > 0;
-			}
-		}
-		else if ('height' === feature.substring(l - 6, l)) { // viewport height
-			height = document.documentElement.clientHeight || document.body.clientHeight; // the latter for IE quirks mode
-			if (value !== null) {
-				if (valueType === 'length') {
-					return ((min && height >= amount) || (max && height < amount) || (!min && !max && height === amount));
-				}
-				else {
-					return false;
-				}
-			}
-			else { // test height without value
-				return height > 0;
-			}
-		}
-		else if ('device-aspect-ratio' === feature.substring(l - 19, l)) { // screen aspect ratio
-			return valueType === 'aspect-ratio' && screen.width * amount[1] === screen.height * amount[0];
-		}
-		else if ('color-index' === feature.substring(l - 11, l)) { // number of colors
-			var colors = Math.pow(2, screen.colorDepth);
-			if (value !== null) {
-				if (valueType === 'absolute') {
-					return ((min && colors >= amount) || (max && colors < amount) || (!min && !max && colors === amount));
-				}
-				else {
-					return false;
-				}
-			}
-			else { // test height without value
-				return colors > 0;
-			}
-		}
-		else if ('color' === feature.substring(l - 5, l)) { // bits per color component
-			var color = screen.colorDepth;
-			if (value !== null) {
-				if (valueType === 'absolute') {
-					return ((min && color >= amount) || (max && color < amount) || (!min && !max && color === amount));
-				}
-				else {
-					return false;
-				}
-			}
-			else { // test height without value
-				return color > 0;
-			}
-		}
-		else if ('resolution' === feature.substring(l - 10, l)) {
-			var res;
-			if (unit === 'dpcm') {
-				res = measure('1cm');
-			}
-			else {
-				res = measure('1in');
-			}
-			if (value !== null) {
-				if (valueType === 'resolution') {
-					return ((min && res >= amount) || (max && res < amount) || (!min && !max && res === amount));
-				}
-				else {
-					return false;
-				}
-			}
-			else { // test height without value
-				return res > 0;
-			}
-		}
-		else {
-			return false;
-		}
-	};
-
-	var testMediaQuery = function (mq) {
-		var test = mq.getValid();
-		var expressions = mq.getExpressions();
-		var l = expressions.length;
-		if (l > 0) {
-			for (var i = 0; i < l && test; i++) {
-				test = testMediaFeature(expressions[i].mediaFeature, expressions[i].value);
-			}
-			var not = mq.getNot();
-			return (test && !not || not && !test);
-		}
-		return test;
-	};
-
-	var testMediaQueryList = function (mql, ts) {
-	    // ts is null or an array with any media type but 'all'.
-		var mqs = mql.getMediaQueries();
-		var t = {};
-		for (var i = 0; i < mqs.length; i++) {
-		    var type = mqs[i].getMediaType();
-		    if (mqs[i].getExpressions().length === 0) {
-		        continue;
-		        // TODO: Browser check! Assuming old browsers do apply the bare media types, even in a list with media queries.
-		    }
-		    var typeAllowed = true;
-		    if (type !== 'all' && ts && ts.length > 0) {
-		        typeAllowed = false;
-		        for (var j = 0; j < ts.length; j++) {
-		            if (ts[j] === type) {
-		                typeAllowed = true;
-                    }
-		        }
-		    }
-			if (typeAllowed && testMediaQuery(mqs[i])) {
-				t[type] = true;
-			}
-		}
-		var s = [], c = 0;
-		for (var n in t) {
-			if (t.hasOwnProperty(n)) {
-				if (c > 0) {
-					s[c++] = ',';
-				}
-				s[c++] = n;
-			}
-		}
-		if (s.length > 0) {
-			styles[styles.length] = cssHelper.addStyle('@media ' + s.join('') + '{' + mql.getCssText() + '}', ts, false);
-		}
-	};
-
-	var testMediaQueryLists = function (mqls, ts) {
-		for (var i = 0; i < mqls.length; i++) {
-			testMediaQueryList(mqls[i], ts);
-		}
-	};
-
-	var testStylesheet = function (stsh) {
-	    var amqs = stsh.getAttrMediaQueries();
-	    var allPassed = false;
-	    var t = {};
-		for (var i = 0; i < amqs.length; i++) {
-			if (testMediaQuery(amqs[i])) {
-				t[amqs[i].getMediaType()] = amqs[i].getExpressions().length > 0;
-			}
-		}
-		var ts = [], tswe = [];
-		for (var n in t) {
-			if (t.hasOwnProperty(n)) {
-				ts[ts.length] = n;
-				if (t[n]) {
-				    tswe[tswe.length] = n
-				}
-			    if (n === 'all') {
-			        allPassed = true;
-                }
-			}
-		}
-		if (tswe.length > 0) { // types with query expressions that passed the test
-		    styles[styles.length] = cssHelper.addStyle(stsh.getCssText(), tswe, false);
-		}
-		var mqls = stsh.getMediaQueryLists();
-		if (allPassed) {
-		    // If 'all' in media attribute passed the test, then test all @media types in linked CSS and create style with those types.
-		    testMediaQueryLists(mqls);
-		}
-		else {
-		    // Or else, test only media attribute types that passed the test and also 'all'.
-		    // For positive '@media all', create style with attribute types that passed their test.
-		    testMediaQueryLists(mqls, ts);
-	    }
-    };
-
-	var testStylesheets = function (stshs) {
-	    for (var i = 0; i < stshs.length; i++) {
-	        testStylesheet(stshs[i]);
-	    }
-	    if (ua.ie) {
-			// force repaint in IE
-			document.documentElement.style.display = 'block';
-			setTimeout(function () {
-				document.documentElement.style.display = '';
-			}, 0);
-			// delay broadcast somewhat for IE
-			setTimeout(function () {
-				cssHelper.broadcast('cssMediaQueriesTested');
-			}, 100);
-		}
-		else {
-			cssHelper.broadcast('cssMediaQueriesTested');
-		}
-	};
-
-	var test = function () {
-		for (var i = 0; i < styles.length; i++) {
-			cssHelper.removeStyle(styles[i]);
-		}
-		styles = [];
-		cssHelper.stylesheets(testStylesheets);
-	};
-
-	var scrollbarWidth = 0;
-	var checkForResize = function () {
-		var cvpw = cssHelper.getViewportWidth();
-		var cvph = cssHelper.getViewportHeight();
-
-		// determine scrollbar width in IE, see resizeHandler
-		if (ua.ie) {
-			var el = document.createElement('div');
-			el.style.position = 'absolute';
-			el.style.top = '-9999em';
-			el.style.overflow = 'scroll';
-			document.body.appendChild(el);
-			scrollbarWidth = el.offsetWidth - el.clientWidth;
-			document.body.removeChild(el);
-		}
-
-		var timer;
-		var resizeHandler = function () {
-			var vpw = cssHelper.getViewportWidth();
-			var vph = cssHelper.getViewportHeight();
-			// check whether vp size has really changed, because IE also triggers resize event when body size changes
-			// 20px allowance to accommodate short appearance of scrollbars in IE in some cases
-			if (Math.abs(vpw - cvpw) > scrollbarWidth || Math.abs(vph - cvph) > scrollbarWidth) {
-				cvpw = vpw;
-				cvph = vph;
-				clearTimeout(timer);
-				timer = setTimeout(function () {
-					if (!nativeSupport()) {
-						test();
-					}
-					else {
-						cssHelper.broadcast('cssMediaQueriesTested');
-					}
-				}, 500);
-			}
-		};
-
-		window.onresize = function () {
-			var x = window.onresize || function () {}; // save original
-			return function () {
-				x();
-				resizeHandler();
-			};
-		}();
-	};
-
-	// prevent jumping of layout by hiding everything before painting <body>
-    var docEl = document.documentElement;
-	docEl.style.marginLeft = '-32767px';
-
-	// make sure it comes back after a while
-	setTimeout(function () {
-		docEl.style.marginLeft = '';
-	}, 5000);
-
-	return function () {
-		if (!nativeSupport()) { // if browser doesn't support media queries
-			cssHelper.addListener('newStyleParsed', function (el) {
-				testStylesheet(el.cssHelperParsed.stylesheet);
-			});
-			// return visibility after media queries are tested
-			cssHelper.addListener('cssMediaQueriesTested', function () {
-				// force repaint in IE by changing width
-				if (ua.ie) {
-					docEl.style.width = '1px';
-				}
-				setTimeout(function () {
-					docEl.style.width = ''; // undo width
-					docEl.style.marginLeft = ''; // undo hide
-				}, 0);
-				// remove this listener to prevent following execution
-				cssHelper.removeListener('cssMediaQueriesTested', arguments.callee);
-			});
-			createMeter();
-			test();
-		}
-		else {
-			docEl.style.marginLeft = ''; // undo visibility hidden
-		}
-		checkForResize();
-	};
-}());
-
-
-// bonus: hotfix for IE6 SP1 (bug KB823727)
-try {
-	document.execCommand('BackgroundImageCache', false, true);
-} catch (e) {}
diff --git a/docs/build/html/_static/doctools.js b/docs/build/html/_static/doctools.js
index 527b876..4d67807 100644
--- a/docs/build/html/_static/doctools.js
+++ b/docs/build/html/_static/doctools.js
@@ -4,7 +4,7 @@
  *
  * Base JavaScript utilities for all Sphinx HTML documentation.
  *
- * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
diff --git a/docs/build/html/_static/documentation_options.js b/docs/build/html/_static/documentation_options.js
index ef70505..4099efb 100644
--- a/docs/build/html/_static/documentation_options.js
+++ b/docs/build/html/_static/documentation_options.js
@@ -1,6 +1,5 @@
-var DOCUMENTATION_OPTIONS = {
-    URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
-    VERSION: '0.1.7',
+const DOCUMENTATION_OPTIONS = {
+    VERSION: '0.1.8',
     LANGUAGE: 'en',
     COLLAPSE_INDEX: false,
     BUILDER: 'html',
diff --git a/docs/build/html/_static/language_data.js b/docs/build/html/_static/language_data.js
index 2e22b06..017600c 100644
--- a/docs/build/html/_static/language_data.js
+++ b/docs/build/html/_static/language_data.js
@@ -5,7 +5,7 @@
  * This script contains the language-specific data used by searchtools.js,
  * namely the list of stopwords, stemmer, scorer and splitter.
  *
- * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
diff --git a/docs/build/html/_static/pygments.css b/docs/build/html/_static/pygments.css
index 7a18115..08bec68 100644
--- a/docs/build/html/_static/pygments.css
+++ b/docs/build/html/_static/pygments.css
@@ -1,74 +1,74 @@
 pre { line-height: 125%; }
-td.linenos .normal { color: #666666; background-color: transparent; padding-left: 5px; padding-right: 5px; }
-span.linenos { color: #666666; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
 td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
 span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
 .highlight .hll { background-color: #ffffcc }
-.highlight { background: #f0f0f0; }
-.highlight .c { color: #60a0b0; font-style: italic } /* Comment */
+.highlight { background: #f8f8f8; }
+.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */
 .highlight .err { border: 1px solid #FF0000 } /* Error */
-.highlight .k { color: #007020; font-weight: bold } /* Keyword */
+.highlight .k { color: #008000; font-weight: bold } /* Keyword */
 .highlight .o { color: #666666 } /* Operator */
-.highlight .ch { color: #60a0b0; font-style: italic } /* Comment.Hashbang */
-.highlight .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */
-.highlight .cp { color: #007020 } /* Comment.Preproc */
-.highlight .cpf { color: #60a0b0; font-style: italic } /* Comment.PreprocFile */
-.highlight .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */
-.highlight .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */
+.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */
+.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #9C6500 } /* Comment.Preproc */
+.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */
+.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */
 .highlight .gd { color: #A00000 } /* Generic.Deleted */
 .highlight .ge { font-style: italic } /* Generic.Emph */
-.highlight .gr { color: #FF0000 } /* Generic.Error */
+.highlight .gr { color: #E40000 } /* Generic.Error */
 .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
-.highlight .gi { color: #00A000 } /* Generic.Inserted */
-.highlight .go { color: #888888 } /* Generic.Output */
-.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
+.highlight .gi { color: #008400 } /* Generic.Inserted */
+.highlight .go { color: #717171 } /* Generic.Output */
+.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
 .highlight .gs { font-weight: bold } /* Generic.Strong */
 .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
 .highlight .gt { color: #0044DD } /* Generic.Traceback */
-.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
-.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
-.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
-.highlight .kp { color: #007020 } /* Keyword.Pseudo */
-.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
-.highlight .kt { color: #902000 } /* Keyword.Type */
-.highlight .m { color: #40a070 } /* Literal.Number */
-.highlight .s { color: #4070a0 } /* Literal.String */
-.highlight .na { color: #4070a0 } /* Name.Attribute */
-.highlight .nb { color: #007020 } /* Name.Builtin */
-.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
-.highlight .no { color: #60add5 } /* Name.Constant */
-.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */
-.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */
-.highlight .ne { color: #007020 } /* Name.Exception */
-.highlight .nf { color: #06287e } /* Name.Function */
-.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */
-.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
-.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */
-.highlight .nv { color: #bb60d5 } /* Name.Variable */
-.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
+.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
+.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { color: #008000 } /* Keyword.Pseudo */
+.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #B00040 } /* Keyword.Type */
+.highlight .m { color: #666666 } /* Literal.Number */
+.highlight .s { color: #BA2121 } /* Literal.String */
+.highlight .na { color: #687822 } /* Name.Attribute */
+.highlight .nb { color: #008000 } /* Name.Builtin */
+.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
+.highlight .no { color: #880000 } /* Name.Constant */
+.highlight .nd { color: #AA22FF } /* Name.Decorator */
+.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */
+.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #0000FF } /* Name.Function */
+.highlight .nl { color: #767600 } /* Name.Label */
+.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
+.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
+.highlight .nv { color: #19177C } /* Name.Variable */
+.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
 .highlight .w { color: #bbbbbb } /* Text.Whitespace */
-.highlight .mb { color: #40a070 } /* Literal.Number.Bin */
-.highlight .mf { color: #40a070 } /* Literal.Number.Float */
-.highlight .mh { color: #40a070 } /* Literal.Number.Hex */
-.highlight .mi { color: #40a070 } /* Literal.Number.Integer */
-.highlight .mo { color: #40a070 } /* Literal.Number.Oct */
-.highlight .sa { color: #4070a0 } /* Literal.String.Affix */
-.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */
-.highlight .sc { color: #4070a0 } /* Literal.String.Char */
-.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */
-.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
-.highlight .s2 { color: #4070a0 } /* Literal.String.Double */
-.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
-.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */
-.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
-.highlight .sx { color: #c65d09 } /* Literal.String.Other */
-.highlight .sr { color: #235388 } /* Literal.String.Regex */
-.highlight .s1 { color: #4070a0 } /* Literal.String.Single */
-.highlight .ss { color: #517918 } /* Literal.String.Symbol */
-.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
-.highlight .fm { color: #06287e } /* Name.Function.Magic */
-.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */
-.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */
-.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */
-.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */
-.highlight .il { color: #40a070 } /* Literal.Number.Integer.Long */
\ No newline at end of file
+.highlight .mb { color: #666666 } /* Literal.Number.Bin */
+.highlight .mf { color: #666666 } /* Literal.Number.Float */
+.highlight .mh { color: #666666 } /* Literal.Number.Hex */
+.highlight .mi { color: #666666 } /* Literal.Number.Integer */
+.highlight .mo { color: #666666 } /* Literal.Number.Oct */
+.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
+.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
+.highlight .sc { color: #BA2121 } /* Literal.String.Char */
+.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
+.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
+.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
+.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */
+.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
+.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */
+.highlight .sx { color: #008000 } /* Literal.String.Other */
+.highlight .sr { color: #A45A77 } /* Literal.String.Regex */
+.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
+.highlight .ss { color: #19177C } /* Literal.String.Symbol */
+.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
+.highlight .fm { color: #0000FF } /* Name.Function.Magic */
+.highlight .vc { color: #19177C } /* Name.Variable.Class */
+.highlight .vg { color: #19177C } /* Name.Variable.Global */
+.highlight .vi { color: #19177C } /* Name.Variable.Instance */
+.highlight .vm { color: #19177C } /* Name.Variable.Magic */
+.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/docs/build/html/_static/searchtools.js b/docs/build/html/_static/searchtools.js
index e89e34d..8bb1af5 100644
--- a/docs/build/html/_static/searchtools.js
+++ b/docs/build/html/_static/searchtools.js
@@ -4,7 +4,7 @@
  *
  * Sphinx JavaScript utilities for the full-text search.
  *
- * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
@@ -57,12 +57,12 @@ const _removeChildren = (element) => {
 const _escapeRegExp = (string) =>
   string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
 
-const _displayItem = (item, searchTerms) => {
+const _displayItem = (item, searchTerms, highlightTerms) => {
   const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
-  const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT;
   const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
   const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
   const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
+  const contentRoot = document.documentElement.dataset.content_root;
 
   const [docName, title, anchor, descr, score, _filename] = item;
 
@@ -75,20 +75,24 @@ const _displayItem = (item, searchTerms) => {
     if (dirname.match(/\/index\/$/))
       dirname = dirname.substring(0, dirname.length - 6);
     else if (dirname === "index/") dirname = "";
-    requestUrl = docUrlRoot + dirname;
+    requestUrl = contentRoot + dirname;
     linkUrl = requestUrl;
   } else {
     // normal html builders
-    requestUrl = docUrlRoot + docName + docFileSuffix;
+    requestUrl = contentRoot + docName + docFileSuffix;
     linkUrl = docName + docLinkSuffix;
   }
   let linkEl = listItem.appendChild(document.createElement("a"));
   linkEl.href = linkUrl + anchor;
   linkEl.dataset.score = score;
   linkEl.innerHTML = title;
-  if (descr)
+  if (descr) {
     listItem.appendChild(document.createElement("span")).innerHTML =
       " (" + descr + ")";
+    // highlight search terms in the description
+    if (SPHINX_HIGHLIGHT_ENABLED)  // set in sphinx_highlight.js
+      highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
+  }
   else if (showSearchSummary)
     fetch(requestUrl)
       .then((responseData) => responseData.text())
@@ -97,6 +101,9 @@ const _displayItem = (item, searchTerms) => {
           listItem.appendChild(
             Search.makeSearchSummary(data, searchTerms)
           );
+        // highlight search terms in the summary
+        if (SPHINX_HIGHLIGHT_ENABLED)  // set in sphinx_highlight.js
+          highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
       });
   Search.output.appendChild(listItem);
 };
@@ -115,14 +122,15 @@ const _finishSearch = (resultCount) => {
 const _displayNextItem = (
   results,
   resultCount,
-  searchTerms
+  searchTerms,
+  highlightTerms,
 ) => {
   // results left, load the summary and display it
   // this is intended to be dynamic (don't sub resultsCount)
   if (results.length) {
-    _displayItem(results.pop(), searchTerms);
+    _displayItem(results.pop(), searchTerms, highlightTerms);
     setTimeout(
-      () => _displayNextItem(results, resultCount, searchTerms),
+      () => _displayNextItem(results, resultCount, searchTerms, highlightTerms),
       5
     );
   }
@@ -156,7 +164,7 @@ const Search = {
     const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
     htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() });
     const docContent = htmlElement.querySelector('[role="main"]');
-    if (docContent !== undefined) return docContent.textContent;
+    if (docContent) return docContent.textContent;
     console.warn(
       "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template."
     );
@@ -280,9 +288,9 @@ const Search = {
     let results = [];
     _removeChildren(document.getElementById("search-progress"));
 
-    const queryLower = query.toLowerCase();
+    const queryLower = query.toLowerCase().trim();
     for (const [title, foundTitles] of Object.entries(allTitles)) {
-      if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) {
+      if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) {
         for (const [file, id] of foundTitles) {
           let score = Math.round(100 * queryLower.length / title.length)
           results.push([
@@ -360,7 +368,7 @@ const Search = {
     // console.info("search results:", Search.lastresults);
 
     // print the results
-    _displayNextItem(results, results.length, searchTerms);
+    _displayNextItem(results, results.length, searchTerms, highlightTerms);
   },
 
   /**
diff --git a/docs/build/html/_static/underscore-1.13.1.js b/docs/build/html/_static/underscore-1.13.1.js
deleted file mode 100644
index ffd77af..0000000
--- a/docs/build/html/_static/underscore-1.13.1.js
+++ /dev/null
@@ -1,2042 +0,0 @@
-(function (global, factory) {
-  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
-  typeof define === 'function' && define.amd ? define('underscore', factory) :
-  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () {
-    var current = global._;
-    var exports = global._ = factory();
-    exports.noConflict = function () { global._ = current; return exports; };
-  }()));
-}(this, (function () {
-  //     Underscore.js 1.13.1
-  //     https://underscorejs.org
-  //     (c) 2009-2021 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors
-  //     Underscore may be freely distributed under the MIT license.
-
-  // Current version.
-  var VERSION = '1.13.1';
-
-  // Establish the root object, `window` (`self`) in the browser, `global`
-  // on the server, or `this` in some virtual machines. We use `self`
-  // instead of `window` for `WebWorker` support.
-  var root = typeof self == 'object' && self.self === self && self ||
-            typeof global == 'object' && global.global === global && global ||
-            Function('return this')() ||
-            {};
-
-  // Save bytes in the minified (but not gzipped) version:
-  var ArrayProto = Array.prototype, ObjProto = Object.prototype;
-  var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;
-
-  // Create quick reference variables for speed access to core prototypes.
-  var push = ArrayProto.push,
-      slice = ArrayProto.slice,
-      toString = ObjProto.toString,
-      hasOwnProperty = ObjProto.hasOwnProperty;
-
-  // Modern feature detection.
-  var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',
-      supportsDataView = typeof DataView !== 'undefined';
-
-  // All **ECMAScript 5+** native function implementations that we hope to use
-  // are declared here.
-  var nativeIsArray = Array.isArray,
-      nativeKeys = Object.keys,
-      nativeCreate = Object.create,
-      nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;
-
-  // Create references to these builtin functions because we override them.
-  var _isNaN = isNaN,
-      _isFinite = isFinite;
-
-  // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.
-  var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');
-  var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',
-    'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];
-
-  // The largest integer that can be represented exactly.
-  var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;
-
-  // Some functions take a variable number of arguments, or a few expected
-  // arguments at the beginning and then a variable number of values to operate
-  // on. This helper accumulates all remaining arguments past the function’s
-  // argument length (or an explicit `startIndex`), into an array that becomes
-  // the last argument. Similar to ES6’s "rest parameter".
-  function restArguments(func, startIndex) {
-    startIndex = startIndex == null ? func.length - 1 : +startIndex;
-    return function() {
-      var length = Math.max(arguments.length - startIndex, 0),
-          rest = Array(length),
-          index = 0;
-      for (; index < length; index++) {
-        rest[index] = arguments[index + startIndex];
-      }
-      switch (startIndex) {
-        case 0: return func.call(this, rest);
-        case 1: return func.call(this, arguments[0], rest);
-        case 2: return func.call(this, arguments[0], arguments[1], rest);
-      }
-      var args = Array(startIndex + 1);
-      for (index = 0; index < startIndex; index++) {
-        args[index] = arguments[index];
-      }
-      args[startIndex] = rest;
-      return func.apply(this, args);
-    };
-  }
-
-  // Is a given variable an object?
-  function isObject(obj) {
-    var type = typeof obj;
-    return type === 'function' || type === 'object' && !!obj;
-  }
-
-  // Is a given value equal to null?
-  function isNull(obj) {
-    return obj === null;
-  }
-
-  // Is a given variable undefined?
-  function isUndefined(obj) {
-    return obj === void 0;
-  }
-
-  // Is a given value a boolean?
-  function isBoolean(obj) {
-    return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
-  }
-
-  // Is a given value a DOM element?
-  function isElement(obj) {
-    return !!(obj && obj.nodeType === 1);
-  }
-
-  // Internal function for creating a `toString`-based type tester.
-  function tagTester(name) {
-    var tag = '[object ' + name + ']';
-    return function(obj) {
-      return toString.call(obj) === tag;
-    };
-  }
-
-  var isString = tagTester('String');
-
-  var isNumber = tagTester('Number');
-
-  var isDate = tagTester('Date');
-
-  var isRegExp = tagTester('RegExp');
-
-  var isError = tagTester('Error');
-
-  var isSymbol = tagTester('Symbol');
-
-  var isArrayBuffer = tagTester('ArrayBuffer');
-
-  var isFunction = tagTester('Function');
-
-  // Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old
-  // v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).
-  var nodelist = root.document && root.document.childNodes;
-  if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {
-    isFunction = function(obj) {
-      return typeof obj == 'function' || false;
-    };
-  }
-
-  var isFunction$1 = isFunction;
-
-  var hasObjectTag = tagTester('Object');
-
-  // In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.
-  // In IE 11, the most common among them, this problem also applies to
-  // `Map`, `WeakMap` and `Set`.
-  var hasStringTagBug = (
-        supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8)))
-      ),
-      isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));
-
-  var isDataView = tagTester('DataView');
-
-  // In IE 10 - Edge 13, we need a different heuristic
-  // to determine whether an object is a `DataView`.
-  function ie10IsDataView(obj) {
-    return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer);
-  }
-
-  var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView);
-
-  // Is a given value an array?
-  // Delegates to ECMA5's native `Array.isArray`.
-  var isArray = nativeIsArray || tagTester('Array');
-
-  // Internal function to check whether `key` is an own property name of `obj`.
-  function has$1(obj, key) {
-    return obj != null && hasOwnProperty.call(obj, key);
-  }
-
-  var isArguments = tagTester('Arguments');
-
-  // Define a fallback version of the method in browsers (ahem, IE < 9), where
-  // there isn't any inspectable "Arguments" type.
-  (function() {
-    if (!isArguments(arguments)) {
-      isArguments = function(obj) {
-        return has$1(obj, 'callee');
-      };
-    }
-  }());
-
-  var isArguments$1 = isArguments;
-
-  // Is a given object a finite number?
-  function isFinite$1(obj) {
-    return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));
-  }
-
-  // Is the given value `NaN`?
-  function isNaN$1(obj) {
-    return isNumber(obj) && _isNaN(obj);
-  }
-
-  // Predicate-generating function. Often useful outside of Underscore.
-  function constant(value) {
-    return function() {
-      return value;
-    };
-  }
-
-  // Common internal logic for `isArrayLike` and `isBufferLike`.
-  function createSizePropertyCheck(getSizeProperty) {
-    return function(collection) {
-      var sizeProperty = getSizeProperty(collection);
-      return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;
-    }
-  }
-
-  // Internal helper to generate a function to obtain property `key` from `obj`.
-  function shallowProperty(key) {
-    return function(obj) {
-      return obj == null ? void 0 : obj[key];
-    };
-  }
-
-  // Internal helper to obtain the `byteLength` property of an object.
-  var getByteLength = shallowProperty('byteLength');
-
-  // Internal helper to determine whether we should spend extensive checks against
-  // `ArrayBuffer` et al.
-  var isBufferLike = createSizePropertyCheck(getByteLength);
-
-  // Is a given value a typed array?
-  var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;
-  function isTypedArray(obj) {
-    // `ArrayBuffer.isView` is the most future-proof, so use it when available.
-    // Otherwise, fall back on the above regular expression.
-    return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) :
-                  isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));
-  }
-
-  var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false);
-
-  // Internal helper to obtain the `length` property of an object.
-  var getLength = shallowProperty('length');
-
-  // Internal helper to create a simple lookup structure.
-  // `collectNonEnumProps` used to depend on `_.contains`, but this led to
-  // circular imports. `emulatedSet` is a one-off solution that only works for
-  // arrays of strings.
-  function emulatedSet(keys) {
-    var hash = {};
-    for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;
-    return {
-      contains: function(key) { return hash[key]; },
-      push: function(key) {
-        hash[key] = true;
-        return keys.push(key);
-      }
-    };
-  }
-
-  // Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't
-  // be iterated by `for key in ...` and thus missed. Extends `keys` in place if
-  // needed.
-  function collectNonEnumProps(obj, keys) {
-    keys = emulatedSet(keys);
-    var nonEnumIdx = nonEnumerableProps.length;
-    var constructor = obj.constructor;
-    var proto = isFunction$1(constructor) && constructor.prototype || ObjProto;
-
-    // Constructor is a special case.
-    var prop = 'constructor';
-    if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop);
-
-    while (nonEnumIdx--) {
-      prop = nonEnumerableProps[nonEnumIdx];
-      if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {
-        keys.push(prop);
-      }
-    }
-  }
-
-  // Retrieve the names of an object's own properties.
-  // Delegates to **ECMAScript 5**'s native `Object.keys`.
-  function keys(obj) {
-    if (!isObject(obj)) return [];
-    if (nativeKeys) return nativeKeys(obj);
-    var keys = [];
-    for (var key in obj) if (has$1(obj, key)) keys.push(key);
-    // Ahem, IE < 9.
-    if (hasEnumBug) collectNonEnumProps(obj, keys);
-    return keys;
-  }
-
-  // Is a given array, string, or object empty?
-  // An "empty" object has no enumerable own-properties.
-  function isEmpty(obj) {
-    if (obj == null) return true;
-    // Skip the more expensive `toString`-based type checks if `obj` has no
-    // `.length`.
-    var length = getLength(obj);
-    if (typeof length == 'number' && (
-      isArray(obj) || isString(obj) || isArguments$1(obj)
-    )) return length === 0;
-    return getLength(keys(obj)) === 0;
-  }
-
-  // Returns whether an object has a given set of `key:value` pairs.
-  function isMatch(object, attrs) {
-    var _keys = keys(attrs), length = _keys.length;
-    if (object == null) return !length;
-    var obj = Object(object);
-    for (var i = 0; i < length; i++) {
-      var key = _keys[i];
-      if (attrs[key] !== obj[key] || !(key in obj)) return false;
-    }
-    return true;
-  }
-
-  // If Underscore is called as a function, it returns a wrapped object that can
-  // be used OO-style. This wrapper holds altered versions of all functions added
-  // through `_.mixin`. Wrapped objects may be chained.
-  function _$1(obj) {
-    if (obj instanceof _$1) return obj;
-    if (!(this instanceof _$1)) return new _$1(obj);
-    this._wrapped = obj;
-  }
-
-  _$1.VERSION = VERSION;
-
-  // Extracts the result from a wrapped and chained object.
-  _$1.prototype.value = function() {
-    return this._wrapped;
-  };
-
-  // Provide unwrapping proxies for some methods used in engine operations
-  // such as arithmetic and JSON stringification.
-  _$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value;
-
-  _$1.prototype.toString = function() {
-    return String(this._wrapped);
-  };
-
-  // Internal function to wrap or shallow-copy an ArrayBuffer,
-  // typed array or DataView to a new view, reusing the buffer.
-  function toBufferView(bufferSource) {
-    return new Uint8Array(
-      bufferSource.buffer || bufferSource,
-      bufferSource.byteOffset || 0,
-      getByteLength(bufferSource)
-    );
-  }
-
-  // We use this string twice, so give it a name for minification.
-  var tagDataView = '[object DataView]';
-
-  // Internal recursive comparison function for `_.isEqual`.
-  function eq(a, b, aStack, bStack) {
-    // Identical objects are equal. `0 === -0`, but they aren't identical.
-    // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).
-    if (a === b) return a !== 0 || 1 / a === 1 / b;
-    // `null` or `undefined` only equal to itself (strict comparison).
-    if (a == null || b == null) return false;
-    // `NaN`s are equivalent, but non-reflexive.
-    if (a !== a) return b !== b;
-    // Exhaust primitive checks
-    var type = typeof a;
-    if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;
-    return deepEq(a, b, aStack, bStack);
-  }
-
-  // Internal recursive comparison function for `_.isEqual`.
-  function deepEq(a, b, aStack, bStack) {
-    // Unwrap any wrapped objects.
-    if (a instanceof _$1) a = a._wrapped;
-    if (b instanceof _$1) b = b._wrapped;
-    // Compare `[[Class]]` names.
-    var className = toString.call(a);
-    if (className !== toString.call(b)) return false;
-    // Work around a bug in IE 10 - Edge 13.
-    if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) {
-      if (!isDataView$1(b)) return false;
-      className = tagDataView;
-    }
-    switch (className) {
-      // These types are compared by value.
-      case '[object RegExp]':
-        // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
-      case '[object String]':
-        // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
-        // equivalent to `new String("5")`.
-        return '' + a === '' + b;
-      case '[object Number]':
-        // `NaN`s are equivalent, but non-reflexive.
-        // Object(NaN) is equivalent to NaN.
-        if (+a !== +a) return +b !== +b;
-        // An `egal` comparison is performed for other numeric values.
-        return +a === 0 ? 1 / +a === 1 / b : +a === +b;
-      case '[object Date]':
-      case '[object Boolean]':
-        // Coerce dates and booleans to numeric primitive values. Dates are compared by their
-        // millisecond representations. Note that invalid dates with millisecond representations
-        // of `NaN` are not equivalent.
-        return +a === +b;
-      case '[object Symbol]':
-        return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);
-      case '[object ArrayBuffer]':
-      case tagDataView:
-        // Coerce to typed array so we can fall through.
-        return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);
-    }
-
-    var areArrays = className === '[object Array]';
-    if (!areArrays && isTypedArray$1(a)) {
-        var byteLength = getByteLength(a);
-        if (byteLength !== getByteLength(b)) return false;
-        if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;
-        areArrays = true;
-    }
-    if (!areArrays) {
-      if (typeof a != 'object' || typeof b != 'object') return false;
-
-      // Objects with different constructors are not equivalent, but `Object`s or `Array`s
-      // from different frames are.
-      var aCtor = a.constructor, bCtor = b.constructor;
-      if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor &&
-                               isFunction$1(bCtor) && bCtor instanceof bCtor)
-                          && ('constructor' in a && 'constructor' in b)) {
-        return false;
-      }
-    }
-    // Assume equality for cyclic structures. The algorithm for detecting cyclic
-    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
-
-    // Initializing stack of traversed objects.
-    // It's done here since we only need them for objects and arrays comparison.
-    aStack = aStack || [];
-    bStack = bStack || [];
-    var length = aStack.length;
-    while (length--) {
-      // Linear search. Performance is inversely proportional to the number of
-      // unique nested structures.
-      if (aStack[length] === a) return bStack[length] === b;
-    }
-
-    // Add the first object to the stack of traversed objects.
-    aStack.push(a);
-    bStack.push(b);
-
-    // Recursively compare objects and arrays.
-    if (areArrays) {
-      // Compare array lengths to determine if a deep comparison is necessary.
-      length = a.length;
-      if (length !== b.length) return false;
-      // Deep compare the contents, ignoring non-numeric properties.
-      while (length--) {
-        if (!eq(a[length], b[length], aStack, bStack)) return false;
-      }
-    } else {
-      // Deep compare objects.
-      var _keys = keys(a), key;
-      length = _keys.length;
-      // Ensure that both objects contain the same number of properties before comparing deep equality.
-      if (keys(b).length !== length) return false;
-      while (length--) {
-        // Deep compare each member
-        key = _keys[length];
-        if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false;
-      }
-    }
-    // Remove the first object from the stack of traversed objects.
-    aStack.pop();
-    bStack.pop();
-    return true;
-  }
-
-  // Perform a deep comparison to check if two objects are equal.
-  function isEqual(a, b) {
-    return eq(a, b);
-  }
-
-  // Retrieve all the enumerable property names of an object.
-  function allKeys(obj) {
-    if (!isObject(obj)) return [];
-    var keys = [];
-    for (var key in obj) keys.push(key);
-    // Ahem, IE < 9.
-    if (hasEnumBug) collectNonEnumProps(obj, keys);
-    return keys;
-  }
-
-  // Since the regular `Object.prototype.toString` type tests don't work for
-  // some types in IE 11, we use a fingerprinting heuristic instead, based
-  // on the methods. It's not great, but it's the best we got.
-  // The fingerprint method lists are defined below.
-  function ie11fingerprint(methods) {
-    var length = getLength(methods);
-    return function(obj) {
-      if (obj == null) return false;
-      // `Map`, `WeakMap` and `Set` have no enumerable keys.
-      var keys = allKeys(obj);
-      if (getLength(keys)) return false;
-      for (var i = 0; i < length; i++) {
-        if (!isFunction$1(obj[methods[i]])) return false;
-      }
-      // If we are testing against `WeakMap`, we need to ensure that
-      // `obj` doesn't have a `forEach` method in order to distinguish
-      // it from a regular `Map`.
-      return methods !== weakMapMethods || !isFunction$1(obj[forEachName]);
-    };
-  }
-
-  // In the interest of compact minification, we write
-  // each string in the fingerprints only once.
-  var forEachName = 'forEach',
-      hasName = 'has',
-      commonInit = ['clear', 'delete'],
-      mapTail = ['get', hasName, 'set'];
-
-  // `Map`, `WeakMap` and `Set` each have slightly different
-  // combinations of the above sublists.
-  var mapMethods = commonInit.concat(forEachName, mapTail),
-      weakMapMethods = commonInit.concat(mapTail),
-      setMethods = ['add'].concat(commonInit, forEachName, hasName);
-
-  var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');
-
-  var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');
-
-  var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');
-
-  var isWeakSet = tagTester('WeakSet');
-
-  // Retrieve the values of an object's properties.
-  function values(obj) {
-    var _keys = keys(obj);
-    var length = _keys.length;
-    var values = Array(length);
-    for (var i = 0; i < length; i++) {
-      values[i] = obj[_keys[i]];
-    }
-    return values;
-  }
-
-  // Convert an object into a list of `[key, value]` pairs.
-  // The opposite of `_.object` with one argument.
-  function pairs(obj) {
-    var _keys = keys(obj);
-    var length = _keys.length;
-    var pairs = Array(length);
-    for (var i = 0; i < length; i++) {
-      pairs[i] = [_keys[i], obj[_keys[i]]];
-    }
-    return pairs;
-  }
-
-  // Invert the keys and values of an object. The values must be serializable.
-  function invert(obj) {
-    var result = {};
-    var _keys = keys(obj);
-    for (var i = 0, length = _keys.length; i < length; i++) {
-      result[obj[_keys[i]]] = _keys[i];
-    }
-    return result;
-  }
-
-  // Return a sorted list of the function names available on the object.
-  function functions(obj) {
-    var names = [];
-    for (var key in obj) {
-      if (isFunction$1(obj[key])) names.push(key);
-    }
-    return names.sort();
-  }
-
-  // An internal function for creating assigner functions.
-  function createAssigner(keysFunc, defaults) {
-    return function(obj) {
-      var length = arguments.length;
-      if (defaults) obj = Object(obj);
-      if (length < 2 || obj == null) return obj;
-      for (var index = 1; index < length; index++) {
-        var source = arguments[index],
-            keys = keysFunc(source),
-            l = keys.length;
-        for (var i = 0; i < l; i++) {
-          var key = keys[i];
-          if (!defaults || obj[key] === void 0) obj[key] = source[key];
-        }
-      }
-      return obj;
-    };
-  }
-
-  // Extend a given object with all the properties in passed-in object(s).
-  var extend = createAssigner(allKeys);
-
-  // Assigns a given object with all the own properties in the passed-in
-  // object(s).
-  // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
-  var extendOwn = createAssigner(keys);
-
-  // Fill in a given object with default properties.
-  var defaults = createAssigner(allKeys, true);
-
-  // Create a naked function reference for surrogate-prototype-swapping.
-  function ctor() {
-    return function(){};
-  }
-
-  // An internal function for creating a new object that inherits from another.
-  function baseCreate(prototype) {
-    if (!isObject(prototype)) return {};
-    if (nativeCreate) return nativeCreate(prototype);
-    var Ctor = ctor();
-    Ctor.prototype = prototype;
-    var result = new Ctor;
-    Ctor.prototype = null;
-    return result;
-  }
-
-  // Creates an object that inherits from the given prototype object.
-  // If additional properties are provided then they will be added to the
-  // created object.
-  function create(prototype, props) {
-    var result = baseCreate(prototype);
-    if (props) extendOwn(result, props);
-    return result;
-  }
-
-  // Create a (shallow-cloned) duplicate of an object.
-  function clone(obj) {
-    if (!isObject(obj)) return obj;
-    return isArray(obj) ? obj.slice() : extend({}, obj);
-  }
-
-  // Invokes `interceptor` with the `obj` and then returns `obj`.
-  // The primary purpose of this method is to "tap into" a method chain, in
-  // order to perform operations on intermediate results within the chain.
-  function tap(obj, interceptor) {
-    interceptor(obj);
-    return obj;
-  }
-
-  // Normalize a (deep) property `path` to array.
-  // Like `_.iteratee`, this function can be customized.
-  function toPath$1(path) {
-    return isArray(path) ? path : [path];
-  }
-  _$1.toPath = toPath$1;
-
-  // Internal wrapper for `_.toPath` to enable minification.
-  // Similar to `cb` for `_.iteratee`.
-  function toPath(path) {
-    return _$1.toPath(path);
-  }
-
-  // Internal function to obtain a nested property in `obj` along `path`.
-  function deepGet(obj, path) {
-    var length = path.length;
-    for (var i = 0; i < length; i++) {
-      if (obj == null) return void 0;
-      obj = obj[path[i]];
-    }
-    return length ? obj : void 0;
-  }
-
-  // Get the value of the (deep) property on `path` from `object`.
-  // If any property in `path` does not exist or if the value is
-  // `undefined`, return `defaultValue` instead.
-  // The `path` is normalized through `_.toPath`.
-  function get(object, path, defaultValue) {
-    var value = deepGet(object, toPath(path));
-    return isUndefined(value) ? defaultValue : value;
-  }
-
-  // Shortcut function for checking if an object has a given property directly on
-  // itself (in other words, not on a prototype). Unlike the internal `has`
-  // function, this public version can also traverse nested properties.
-  function has(obj, path) {
-    path = toPath(path);
-    var length = path.length;
-    for (var i = 0; i < length; i++) {
-      var key = path[i];
-      if (!has$1(obj, key)) return false;
-      obj = obj[key];
-    }
-    return !!length;
-  }
-
-  // Keep the identity function around for default iteratees.
-  function identity(value) {
-    return value;
-  }
-
-  // Returns a predicate for checking whether an object has a given set of
-  // `key:value` pairs.
-  function matcher(attrs) {
-    attrs = extendOwn({}, attrs);
-    return function(obj) {
-      return isMatch(obj, attrs);
-    };
-  }
-
-  // Creates a function that, when passed an object, will traverse that object’s
-  // properties down the given `path`, specified as an array of keys or indices.
-  function property(path) {
-    path = toPath(path);
-    return function(obj) {
-      return deepGet(obj, path);
-    };
-  }
-
-  // Internal function that returns an efficient (for current engines) version
-  // of the passed-in callback, to be repeatedly applied in other Underscore
-  // functions.
-  function optimizeCb(func, context, argCount) {
-    if (context === void 0) return func;
-    switch (argCount == null ? 3 : argCount) {
-      case 1: return function(value) {
-        return func.call(context, value);
-      };
-      // The 2-argument case is omitted because we’re not using it.
-      case 3: return function(value, index, collection) {
-        return func.call(context, value, index, collection);
-      };
-      case 4: return function(accumulator, value, index, collection) {
-        return func.call(context, accumulator, value, index, collection);
-      };
-    }
-    return function() {
-      return func.apply(context, arguments);
-    };
-  }
-
-  // An internal function to generate callbacks that can be applied to each
-  // element in a collection, returning the desired result — either `_.identity`,
-  // an arbitrary callback, a property matcher, or a property accessor.
-  function baseIteratee(value, context, argCount) {
-    if (value == null) return identity;
-    if (isFunction$1(value)) return optimizeCb(value, context, argCount);
-    if (isObject(value) && !isArray(value)) return matcher(value);
-    return property(value);
-  }
-
-  // External wrapper for our callback generator. Users may customize
-  // `_.iteratee` if they want additional predicate/iteratee shorthand styles.
-  // This abstraction hides the internal-only `argCount` argument.
-  function iteratee(value, context) {
-    return baseIteratee(value, context, Infinity);
-  }
-  _$1.iteratee = iteratee;
-
-  // The function we call internally to generate a callback. It invokes
-  // `_.iteratee` if overridden, otherwise `baseIteratee`.
-  function cb(value, context, argCount) {
-    if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context);
-    return baseIteratee(value, context, argCount);
-  }
-
-  // Returns the results of applying the `iteratee` to each element of `obj`.
-  // In contrast to `_.map` it returns an object.
-  function mapObject(obj, iteratee, context) {
-    iteratee = cb(iteratee, context);
-    var _keys = keys(obj),
-        length = _keys.length,
-        results = {};
-    for (var index = 0; index < length; index++) {
-      var currentKey = _keys[index];
-      results[currentKey] = iteratee(obj[currentKey], currentKey, obj);
-    }
-    return results;
-  }
-
-  // Predicate-generating function. Often useful outside of Underscore.
-  function noop(){}
-
-  // Generates a function for a given object that returns a given property.
-  function propertyOf(obj) {
-    if (obj == null) return noop;
-    return function(path) {
-      return get(obj, path);
-    };
-  }
-
-  // Run a function **n** times.
-  function times(n, iteratee, context) {
-    var accum = Array(Math.max(0, n));
-    iteratee = optimizeCb(iteratee, context, 1);
-    for (var i = 0; i < n; i++) accum[i] = iteratee(i);
-    return accum;
-  }
-
-  // Return a random integer between `min` and `max` (inclusive).
-  function random(min, max) {
-    if (max == null) {
-      max = min;
-      min = 0;
-    }
-    return min + Math.floor(Math.random() * (max - min + 1));
-  }
-
-  // A (possibly faster) way to get the current timestamp as an integer.
-  var now = Date.now || function() {
-    return new Date().getTime();
-  };
-
-  // Internal helper to generate functions for escaping and unescaping strings
-  // to/from HTML interpolation.
-  function createEscaper(map) {
-    var escaper = function(match) {
-      return map[match];
-    };
-    // Regexes for identifying a key that needs to be escaped.
-    var source = '(?:' + keys(map).join('|') + ')';
-    var testRegexp = RegExp(source);
-    var replaceRegexp = RegExp(source, 'g');
-    return function(string) {
-      string = string == null ? '' : '' + string;
-      return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
-    };
-  }
-
-  // Internal list of HTML entities for escaping.
-  var escapeMap = {
-    '&': '&amp;',
-    '<': '&lt;',
-    '>': '&gt;',
-    '"': '&quot;',
-    "'": '&#x27;',
-    '`': '&#x60;'
-  };
-
-  // Function for escaping strings to HTML interpolation.
-  var _escape = createEscaper(escapeMap);
-
-  // Internal list of HTML entities for unescaping.
-  var unescapeMap = invert(escapeMap);
-
-  // Function for unescaping strings from HTML interpolation.
-  var _unescape = createEscaper(unescapeMap);
-
-  // By default, Underscore uses ERB-style template delimiters. Change the
-  // following template settings to use alternative delimiters.
-  var templateSettings = _$1.templateSettings = {
-    evaluate: /<%([\s\S]+?)%>/g,
-    interpolate: /<%=([\s\S]+?)%>/g,
-    escape: /<%-([\s\S]+?)%>/g
-  };
-
-  // When customizing `_.templateSettings`, if you don't want to define an
-  // interpolation, evaluation or escaping regex, we need one that is
-  // guaranteed not to match.
-  var noMatch = /(.)^/;
-
-  // Certain characters need to be escaped so that they can be put into a
-  // string literal.
-  var escapes = {
-    "'": "'",
-    '\\': '\\',
-    '\r': 'r',
-    '\n': 'n',
-    '\u2028': 'u2028',
-    '\u2029': 'u2029'
-  };
-
-  var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g;
-
-  function escapeChar(match) {
-    return '\\' + escapes[match];
-  }
-
-  // In order to prevent third-party code injection through
-  // `_.templateSettings.variable`, we test it against the following regular
-  // expression. It is intentionally a bit more liberal than just matching valid
-  // identifiers, but still prevents possible loopholes through defaults or
-  // destructuring assignment.
-  var bareIdentifier = /^\s*(\w|\$)+\s*$/;
-
-  // JavaScript micro-templating, similar to John Resig's implementation.
-  // Underscore templating handles arbitrary delimiters, preserves whitespace,
-  // and correctly escapes quotes within interpolated code.
-  // NB: `oldSettings` only exists for backwards compatibility.
-  function template(text, settings, oldSettings) {
-    if (!settings && oldSettings) settings = oldSettings;
-    settings = defaults({}, settings, _$1.templateSettings);
-
-    // Combine delimiters into one regular expression via alternation.
-    var matcher = RegExp([
-      (settings.escape || noMatch).source,
-      (settings.interpolate || noMatch).source,
-      (settings.evaluate || noMatch).source
-    ].join('|') + '|$', 'g');
-
-    // Compile the template source, escaping string literals appropriately.
-    var index = 0;
-    var source = "__p+='";
-    text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
-      source += text.slice(index, offset).replace(escapeRegExp, escapeChar);
-      index = offset + match.length;
-
-      if (escape) {
-        source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
-      } else if (interpolate) {
-        source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
-      } else if (evaluate) {
-        source += "';\n" + evaluate + "\n__p+='";
-      }
-
-      // Adobe VMs need the match returned to produce the correct offset.
-      return match;
-    });
-    source += "';\n";
-
-    var argument = settings.variable;
-    if (argument) {
-      // Insure against third-party code injection. (CVE-2021-23358)
-      if (!bareIdentifier.test(argument)) throw new Error(
-        'variable is not a bare identifier: ' + argument
-      );
-    } else {
-      // If a variable is not specified, place data values in local scope.
-      source = 'with(obj||{}){\n' + source + '}\n';
-      argument = 'obj';
-    }
-
-    source = "var __t,__p='',__j=Array.prototype.join," +
-      "print=function(){__p+=__j.call(arguments,'');};\n" +
-      source + 'return __p;\n';
-
-    var render;
-    try {
-      render = new Function(argument, '_', source);
-    } catch (e) {
-      e.source = source;
-      throw e;
-    }
-
-    var template = function(data) {
-      return render.call(this, data, _$1);
-    };
-
-    // Provide the compiled source as a convenience for precompilation.
-    template.source = 'function(' + argument + '){\n' + source + '}';
-
-    return template;
-  }
-
-  // Traverses the children of `obj` along `path`. If a child is a function, it
-  // is invoked with its parent as context. Returns the value of the final
-  // child, or `fallback` if any child is undefined.
-  function result(obj, path, fallback) {
-    path = toPath(path);
-    var length = path.length;
-    if (!length) {
-      return isFunction$1(fallback) ? fallback.call(obj) : fallback;
-    }
-    for (var i = 0; i < length; i++) {
-      var prop = obj == null ? void 0 : obj[path[i]];
-      if (prop === void 0) {
-        prop = fallback;
-        i = length; // Ensure we don't continue iterating.
-      }
-      obj = isFunction$1(prop) ? prop.call(obj) : prop;
-    }
-    return obj;
-  }
-
-  // Generate a unique integer id (unique within the entire client session).
-  // Useful for temporary DOM ids.
-  var idCounter = 0;
-  function uniqueId(prefix) {
-    var id = ++idCounter + '';
-    return prefix ? prefix + id : id;
-  }
-
-  // Start chaining a wrapped Underscore object.
-  function chain(obj) {
-    var instance = _$1(obj);
-    instance._chain = true;
-    return instance;
-  }
-
-  // Internal function to execute `sourceFunc` bound to `context` with optional
-  // `args`. Determines whether to execute a function as a constructor or as a
-  // normal function.
-  function executeBound(sourceFunc, boundFunc, context, callingContext, args) {
-    if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);
-    var self = baseCreate(sourceFunc.prototype);
-    var result = sourceFunc.apply(self, args);
-    if (isObject(result)) return result;
-    return self;
-  }
-
-  // Partially apply a function by creating a version that has had some of its
-  // arguments pre-filled, without changing its dynamic `this` context. `_` acts
-  // as a placeholder by default, allowing any combination of arguments to be
-  // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.
-  var partial = restArguments(function(func, boundArgs) {
-    var placeholder = partial.placeholder;
-    var bound = function() {
-      var position = 0, length = boundArgs.length;
-      var args = Array(length);
-      for (var i = 0; i < length; i++) {
-        args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];
-      }
-      while (position < arguments.length) args.push(arguments[position++]);
-      return executeBound(func, bound, this, this, args);
-    };
-    return bound;
-  });
-
-  partial.placeholder = _$1;
-
-  // Create a function bound to a given object (assigning `this`, and arguments,
-  // optionally).
-  var bind = restArguments(function(func, context, args) {
-    if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function');
-    var bound = restArguments(function(callArgs) {
-      return executeBound(func, bound, context, this, args.concat(callArgs));
-    });
-    return bound;
-  });
-
-  // Internal helper for collection methods to determine whether a collection
-  // should be iterated as an array or as an object.
-  // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
-  // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094
-  var isArrayLike = createSizePropertyCheck(getLength);
-
-  // Internal implementation of a recursive `flatten` function.
-  function flatten$1(input, depth, strict, output) {
-    output = output || [];
-    if (!depth && depth !== 0) {
-      depth = Infinity;
-    } else if (depth <= 0) {
-      return output.concat(input);
-    }
-    var idx = output.length;
-    for (var i = 0, length = getLength(input); i < length; i++) {
-      var value = input[i];
-      if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) {
-        // Flatten current level of array or arguments object.
-        if (depth > 1) {
-          flatten$1(value, depth - 1, strict, output);
-          idx = output.length;
-        } else {
-          var j = 0, len = value.length;
-          while (j < len) output[idx++] = value[j++];
-        }
-      } else if (!strict) {
-        output[idx++] = value;
-      }
-    }
-    return output;
-  }
-
-  // Bind a number of an object's methods to that object. Remaining arguments
-  // are the method names to be bound. Useful for ensuring that all callbacks
-  // defined on an object belong to it.
-  var bindAll = restArguments(function(obj, keys) {
-    keys = flatten$1(keys, false, false);
-    var index = keys.length;
-    if (index < 1) throw new Error('bindAll must be passed function names');
-    while (index--) {
-      var key = keys[index];
-      obj[key] = bind(obj[key], obj);
-    }
-    return obj;
-  });
-
-  // Memoize an expensive function by storing its results.
-  function memoize(func, hasher) {
-    var memoize = function(key) {
-      var cache = memoize.cache;
-      var address = '' + (hasher ? hasher.apply(this, arguments) : key);
-      if (!has$1(cache, address)) cache[address] = func.apply(this, arguments);
-      return cache[address];
-    };
-    memoize.cache = {};
-    return memoize;
-  }
-
-  // Delays a function for the given number of milliseconds, and then calls
-  // it with the arguments supplied.
-  var delay = restArguments(function(func, wait, args) {
-    return setTimeout(function() {
-      return func.apply(null, args);
-    }, wait);
-  });
-
-  // Defers a function, scheduling it to run after the current call stack has
-  // cleared.
-  var defer = partial(delay, _$1, 1);
-
-  // Returns a function, that, when invoked, will only be triggered at most once
-  // during a given window of time. Normally, the throttled function will run
-  // as much as it can, without ever going more than once per `wait` duration;
-  // but if you'd like to disable the execution on the leading edge, pass
-  // `{leading: false}`. To disable execution on the trailing edge, ditto.
-  function throttle(func, wait, options) {
-    var timeout, context, args, result;
-    var previous = 0;
-    if (!options) options = {};
-
-    var later = function() {
-      previous = options.leading === false ? 0 : now();
-      timeout = null;
-      result = func.apply(context, args);
-      if (!timeout) context = args = null;
-    };
-
-    var throttled = function() {
-      var _now = now();
-      if (!previous && options.leading === false) previous = _now;
-      var remaining = wait - (_now - previous);
-      context = this;
-      args = arguments;
-      if (remaining <= 0 || remaining > wait) {
-        if (timeout) {
-          clearTimeout(timeout);
-          timeout = null;
-        }
-        previous = _now;
-        result = func.apply(context, args);
-        if (!timeout) context = args = null;
-      } else if (!timeout && options.trailing !== false) {
-        timeout = setTimeout(later, remaining);
-      }
-      return result;
-    };
-
-    throttled.cancel = function() {
-      clearTimeout(timeout);
-      previous = 0;
-      timeout = context = args = null;
-    };
-
-    return throttled;
-  }
-
-  // When a sequence of calls of the returned function ends, the argument
-  // function is triggered. The end of a sequence is defined by the `wait`
-  // parameter. If `immediate` is passed, the argument function will be
-  // triggered at the beginning of the sequence instead of at the end.
-  function debounce(func, wait, immediate) {
-    var timeout, previous, args, result, context;
-
-    var later = function() {
-      var passed = now() - previous;
-      if (wait > passed) {
-        timeout = setTimeout(later, wait - passed);
-      } else {
-        timeout = null;
-        if (!immediate) result = func.apply(context, args);
-        // This check is needed because `func` can recursively invoke `debounced`.
-        if (!timeout) args = context = null;
-      }
-    };
-
-    var debounced = restArguments(function(_args) {
-      context = this;
-      args = _args;
-      previous = now();
-      if (!timeout) {
-        timeout = setTimeout(later, wait);
-        if (immediate) result = func.apply(context, args);
-      }
-      return result;
-    });
-
-    debounced.cancel = function() {
-      clearTimeout(timeout);
-      timeout = args = context = null;
-    };
-
-    return debounced;
-  }
-
-  // Returns the first function passed as an argument to the second,
-  // allowing you to adjust arguments, run code before and after, and
-  // conditionally execute the original function.
-  function wrap(func, wrapper) {
-    return partial(wrapper, func);
-  }
-
-  // Returns a negated version of the passed-in predicate.
-  function negate(predicate) {
-    return function() {
-      return !predicate.apply(this, arguments);
-    };
-  }
-
-  // Returns a function that is the composition of a list of functions, each
-  // consuming the return value of the function that follows.
-  function compose() {
-    var args = arguments;
-    var start = args.length - 1;
-    return function() {
-      var i = start;
-      var result = args[start].apply(this, arguments);
-      while (i--) result = args[i].call(this, result);
-      return result;
-    };
-  }
-
-  // Returns a function that will only be executed on and after the Nth call.
-  function after(times, func) {
-    return function() {
-      if (--times < 1) {
-        return func.apply(this, arguments);
-      }
-    };
-  }
-
-  // Returns a function that will only be executed up to (but not including) the
-  // Nth call.
-  function before(times, func) {
-    var memo;
-    return function() {
-      if (--times > 0) {
-        memo = func.apply(this, arguments);
-      }
-      if (times <= 1) func = null;
-      return memo;
-    };
-  }
-
-  // Returns a function that will be executed at most one time, no matter how
-  // often you call it. Useful for lazy initialization.
-  var once = partial(before, 2);
-
-  // Returns the first key on an object that passes a truth test.
-  function findKey(obj, predicate, context) {
-    predicate = cb(predicate, context);
-    var _keys = keys(obj), key;
-    for (var i = 0, length = _keys.length; i < length; i++) {
-      key = _keys[i];
-      if (predicate(obj[key], key, obj)) return key;
-    }
-  }
-
-  // Internal function to generate `_.findIndex` and `_.findLastIndex`.
-  function createPredicateIndexFinder(dir) {
-    return function(array, predicate, context) {
-      predicate = cb(predicate, context);
-      var length = getLength(array);
-      var index = dir > 0 ? 0 : length - 1;
-      for (; index >= 0 && index < length; index += dir) {
-        if (predicate(array[index], index, array)) return index;
-      }
-      return -1;
-    };
-  }
-
-  // Returns the first index on an array-like that passes a truth test.
-  var findIndex = createPredicateIndexFinder(1);
-
-  // Returns the last index on an array-like that passes a truth test.
-  var findLastIndex = createPredicateIndexFinder(-1);
-
-  // Use a comparator function to figure out the smallest index at which
-  // an object should be inserted so as to maintain order. Uses binary search.
-  function sortedIndex(array, obj, iteratee, context) {
-    iteratee = cb(iteratee, context, 1);
-    var value = iteratee(obj);
-    var low = 0, high = getLength(array);
-    while (low < high) {
-      var mid = Math.floor((low + high) / 2);
-      if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
-    }
-    return low;
-  }
-
-  // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.
-  function createIndexFinder(dir, predicateFind, sortedIndex) {
-    return function(array, item, idx) {
-      var i = 0, length = getLength(array);
-      if (typeof idx == 'number') {
-        if (dir > 0) {
-          i = idx >= 0 ? idx : Math.max(idx + length, i);
-        } else {
-          length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;
-        }
-      } else if (sortedIndex && idx && length) {
-        idx = sortedIndex(array, item);
-        return array[idx] === item ? idx : -1;
-      }
-      if (item !== item) {
-        idx = predicateFind(slice.call(array, i, length), isNaN$1);
-        return idx >= 0 ? idx + i : -1;
-      }
-      for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {
-        if (array[idx] === item) return idx;
-      }
-      return -1;
-    };
-  }
-
-  // Return the position of the first occurrence of an item in an array,
-  // or -1 if the item is not included in the array.
-  // If the array is large and already in sort order, pass `true`
-  // for **isSorted** to use binary search.
-  var indexOf = createIndexFinder(1, findIndex, sortedIndex);
-
-  // Return the position of the last occurrence of an item in an array,
-  // or -1 if the item is not included in the array.
-  var lastIndexOf = createIndexFinder(-1, findLastIndex);
-
-  // Return the first value which passes a truth test.
-  function find(obj, predicate, context) {
-    var keyFinder = isArrayLike(obj) ? findIndex : findKey;
-    var key = keyFinder(obj, predicate, context);
-    if (key !== void 0 && key !== -1) return obj[key];
-  }
-
-  // Convenience version of a common use case of `_.find`: getting the first
-  // object containing specific `key:value` pairs.
-  function findWhere(obj, attrs) {
-    return find(obj, matcher(attrs));
-  }
-
-  // The cornerstone for collection functions, an `each`
-  // implementation, aka `forEach`.
-  // Handles raw objects in addition to array-likes. Treats all
-  // sparse array-likes as if they were dense.
-  function each(obj, iteratee, context) {
-    iteratee = optimizeCb(iteratee, context);
-    var i, length;
-    if (isArrayLike(obj)) {
-      for (i = 0, length = obj.length; i < length; i++) {
-        iteratee(obj[i], i, obj);
-      }
-    } else {
-      var _keys = keys(obj);
-      for (i = 0, length = _keys.length; i < length; i++) {
-        iteratee(obj[_keys[i]], _keys[i], obj);
-      }
-    }
-    return obj;
-  }
-
-  // Return the results of applying the iteratee to each element.
-  function map(obj, iteratee, context) {
-    iteratee = cb(iteratee, context);
-    var _keys = !isArrayLike(obj) && keys(obj),
-        length = (_keys || obj).length,
-        results = Array(length);
-    for (var index = 0; index < length; index++) {
-      var currentKey = _keys ? _keys[index] : index;
-      results[index] = iteratee(obj[currentKey], currentKey, obj);
-    }
-    return results;
-  }
-
-  // Internal helper to create a reducing function, iterating left or right.
-  function createReduce(dir) {
-    // Wrap code that reassigns argument variables in a separate function than
-    // the one that accesses `arguments.length` to avoid a perf hit. (#1991)
-    var reducer = function(obj, iteratee, memo, initial) {
-      var _keys = !isArrayLike(obj) && keys(obj),
-          length = (_keys || obj).length,
-          index = dir > 0 ? 0 : length - 1;
-      if (!initial) {
-        memo = obj[_keys ? _keys[index] : index];
-        index += dir;
-      }
-      for (; index >= 0 && index < length; index += dir) {
-        var currentKey = _keys ? _keys[index] : index;
-        memo = iteratee(memo, obj[currentKey], currentKey, obj);
-      }
-      return memo;
-    };
-
-    return function(obj, iteratee, memo, context) {
-      var initial = arguments.length >= 3;
-      return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);
-    };
-  }
-
-  // **Reduce** builds up a single result from a list of values, aka `inject`,
-  // or `foldl`.
-  var reduce = createReduce(1);
-
-  // The right-associative version of reduce, also known as `foldr`.
-  var reduceRight = createReduce(-1);
-
-  // Return all the elements that pass a truth test.
-  function filter(obj, predicate, context) {
-    var results = [];
-    predicate = cb(predicate, context);
-    each(obj, function(value, index, list) {
-      if (predicate(value, index, list)) results.push(value);
-    });
-    return results;
-  }
-
-  // Return all the elements for which a truth test fails.
-  function reject(obj, predicate, context) {
-    return filter(obj, negate(cb(predicate)), context);
-  }
-
-  // Determine whether all of the elements pass a truth test.
-  function every(obj, predicate, context) {
-    predicate = cb(predicate, context);
-    var _keys = !isArrayLike(obj) && keys(obj),
-        length = (_keys || obj).length;
-    for (var index = 0; index < length; index++) {
-      var currentKey = _keys ? _keys[index] : index;
-      if (!predicate(obj[currentKey], currentKey, obj)) return false;
-    }
-    return true;
-  }
-
-  // Determine if at least one element in the object passes a truth test.
-  function some(obj, predicate, context) {
-    predicate = cb(predicate, context);
-    var _keys = !isArrayLike(obj) && keys(obj),
-        length = (_keys || obj).length;
-    for (var index = 0; index < length; index++) {
-      var currentKey = _keys ? _keys[index] : index;
-      if (predicate(obj[currentKey], currentKey, obj)) return true;
-    }
-    return false;
-  }
-
-  // Determine if the array or object contains a given item (using `===`).
-  function contains(obj, item, fromIndex, guard) {
-    if (!isArrayLike(obj)) obj = values(obj);
-    if (typeof fromIndex != 'number' || guard) fromIndex = 0;
-    return indexOf(obj, item, fromIndex) >= 0;
-  }
-
-  // Invoke a method (with arguments) on every item in a collection.
-  var invoke = restArguments(function(obj, path, args) {
-    var contextPath, func;
-    if (isFunction$1(path)) {
-      func = path;
-    } else {
-      path = toPath(path);
-      contextPath = path.slice(0, -1);
-      path = path[path.length - 1];
-    }
-    return map(obj, function(context) {
-      var method = func;
-      if (!method) {
-        if (contextPath && contextPath.length) {
-          context = deepGet(context, contextPath);
-        }
-        if (context == null) return void 0;
-        method = context[path];
-      }
-      return method == null ? method : method.apply(context, args);
-    });
-  });
-
-  // Convenience version of a common use case of `_.map`: fetching a property.
-  function pluck(obj, key) {
-    return map(obj, property(key));
-  }
-
-  // Convenience version of a common use case of `_.filter`: selecting only
-  // objects containing specific `key:value` pairs.
-  function where(obj, attrs) {
-    return filter(obj, matcher(attrs));
-  }
-
-  // Return the maximum element (or element-based computation).
-  function max(obj, iteratee, context) {
-    var result = -Infinity, lastComputed = -Infinity,
-        value, computed;
-    if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
-      obj = isArrayLike(obj) ? obj : values(obj);
-      for (var i = 0, length = obj.length; i < length; i++) {
-        value = obj[i];
-        if (value != null && value > result) {
-          result = value;
-        }
-      }
-    } else {
-      iteratee = cb(iteratee, context);
-      each(obj, function(v, index, list) {
-        computed = iteratee(v, index, list);
-        if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
-          result = v;
-          lastComputed = computed;
-        }
-      });
-    }
-    return result;
-  }
-
-  // Return the minimum element (or element-based computation).
-  function min(obj, iteratee, context) {
-    var result = Infinity, lastComputed = Infinity,
-        value, computed;
-    if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
-      obj = isArrayLike(obj) ? obj : values(obj);
-      for (var i = 0, length = obj.length; i < length; i++) {
-        value = obj[i];
-        if (value != null && value < result) {
-          result = value;
-        }
-      }
-    } else {
-      iteratee = cb(iteratee, context);
-      each(obj, function(v, index, list) {
-        computed = iteratee(v, index, list);
-        if (computed < lastComputed || computed === Infinity && result === Infinity) {
-          result = v;
-          lastComputed = computed;
-        }
-      });
-    }
-    return result;
-  }
-
-  // Sample **n** random values from a collection using the modern version of the
-  // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
-  // If **n** is not specified, returns a single random element.
-  // The internal `guard` argument allows it to work with `_.map`.
-  function sample(obj, n, guard) {
-    if (n == null || guard) {
-      if (!isArrayLike(obj)) obj = values(obj);
-      return obj[random(obj.length - 1)];
-    }
-    var sample = isArrayLike(obj) ? clone(obj) : values(obj);
-    var length = getLength(sample);
-    n = Math.max(Math.min(n, length), 0);
-    var last = length - 1;
-    for (var index = 0; index < n; index++) {
-      var rand = random(index, last);
-      var temp = sample[index];
-      sample[index] = sample[rand];
-      sample[rand] = temp;
-    }
-    return sample.slice(0, n);
-  }
-
-  // Shuffle a collection.
-  function shuffle(obj) {
-    return sample(obj, Infinity);
-  }
-
-  // Sort the object's values by a criterion produced by an iteratee.
-  function sortBy(obj, iteratee, context) {
-    var index = 0;
-    iteratee = cb(iteratee, context);
-    return pluck(map(obj, function(value, key, list) {
-      return {
-        value: value,
-        index: index++,
-        criteria: iteratee(value, key, list)
-      };
-    }).sort(function(left, right) {
-      var a = left.criteria;
-      var b = right.criteria;
-      if (a !== b) {
-        if (a > b || a === void 0) return 1;
-        if (a < b || b === void 0) return -1;
-      }
-      return left.index - right.index;
-    }), 'value');
-  }
-
-  // An internal function used for aggregate "group by" operations.
-  function group(behavior, partition) {
-    return function(obj, iteratee, context) {
-      var result = partition ? [[], []] : {};
-      iteratee = cb(iteratee, context);
-      each(obj, function(value, index) {
-        var key = iteratee(value, index, obj);
-        behavior(result, value, key);
-      });
-      return result;
-    };
-  }
-
-  // Groups the object's values by a criterion. Pass either a string attribute
-  // to group by, or a function that returns the criterion.
-  var groupBy = group(function(result, value, key) {
-    if (has$1(result, key)) result[key].push(value); else result[key] = [value];
-  });
-
-  // Indexes the object's values by a criterion, similar to `_.groupBy`, but for
-  // when you know that your index values will be unique.
-  var indexBy = group(function(result, value, key) {
-    result[key] = value;
-  });
-
-  // Counts instances of an object that group by a certain criterion. Pass
-  // either a string attribute to count by, or a function that returns the
-  // criterion.
-  var countBy = group(function(result, value, key) {
-    if (has$1(result, key)) result[key]++; else result[key] = 1;
-  });
-
-  // Split a collection into two arrays: one whose elements all pass the given
-  // truth test, and one whose elements all do not pass the truth test.
-  var partition = group(function(result, value, pass) {
-    result[pass ? 0 : 1].push(value);
-  }, true);
-
-  // Safely create a real, live array from anything iterable.
-  var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;
-  function toArray(obj) {
-    if (!obj) return [];
-    if (isArray(obj)) return slice.call(obj);
-    if (isString(obj)) {
-      // Keep surrogate pair characters together.
-      return obj.match(reStrSymbol);
-    }
-    if (isArrayLike(obj)) return map(obj, identity);
-    return values(obj);
-  }
-
-  // Return the number of elements in a collection.
-  function size(obj) {
-    if (obj == null) return 0;
-    return isArrayLike(obj) ? obj.length : keys(obj).length;
-  }
-
-  // Internal `_.pick` helper function to determine whether `key` is an enumerable
-  // property name of `obj`.
-  function keyInObj(value, key, obj) {
-    return key in obj;
-  }
-
-  // Return a copy of the object only containing the allowed properties.
-  var pick = restArguments(function(obj, keys) {
-    var result = {}, iteratee = keys[0];
-    if (obj == null) return result;
-    if (isFunction$1(iteratee)) {
-      if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);
-      keys = allKeys(obj);
-    } else {
-      iteratee = keyInObj;
-      keys = flatten$1(keys, false, false);
-      obj = Object(obj);
-    }
-    for (var i = 0, length = keys.length; i < length; i++) {
-      var key = keys[i];
-      var value = obj[key];
-      if (iteratee(value, key, obj)) result[key] = value;
-    }
-    return result;
-  });
-
-  // Return a copy of the object without the disallowed properties.
-  var omit = restArguments(function(obj, keys) {
-    var iteratee = keys[0], context;
-    if (isFunction$1(iteratee)) {
-      iteratee = negate(iteratee);
-      if (keys.length > 1) context = keys[1];
-    } else {
-      keys = map(flatten$1(keys, false, false), String);
-      iteratee = function(value, key) {
-        return !contains(keys, key);
-      };
-    }
-    return pick(obj, iteratee, context);
-  });
-
-  // Returns everything but the last entry of the array. Especially useful on
-  // the arguments object. Passing **n** will return all the values in
-  // the array, excluding the last N.
-  function initial(array, n, guard) {
-    return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
-  }
-
-  // Get the first element of an array. Passing **n** will return the first N
-  // values in the array. The **guard** check allows it to work with `_.map`.
-  function first(array, n, guard) {
-    if (array == null || array.length < 1) return n == null || guard ? void 0 : [];
-    if (n == null || guard) return array[0];
-    return initial(array, array.length - n);
-  }
-
-  // Returns everything but the first entry of the `array`. Especially useful on
-  // the `arguments` object. Passing an **n** will return the rest N values in the
-  // `array`.
-  function rest(array, n, guard) {
-    return slice.call(array, n == null || guard ? 1 : n);
-  }
-
-  // Get the last element of an array. Passing **n** will return the last N
-  // values in the array.
-  function last(array, n, guard) {
-    if (array == null || array.length < 1) return n == null || guard ? void 0 : [];
-    if (n == null || guard) return array[array.length - 1];
-    return rest(array, Math.max(0, array.length - n));
-  }
-
-  // Trim out all falsy values from an array.
-  function compact(array) {
-    return filter(array, Boolean);
-  }
-
-  // Flatten out an array, either recursively (by default), or up to `depth`.
-  // Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.
-  function flatten(array, depth) {
-    return flatten$1(array, depth, false);
-  }
-
-  // Take the difference between one array and a number of other arrays.
-  // Only the elements present in just the first array will remain.
-  var difference = restArguments(function(array, rest) {
-    rest = flatten$1(rest, true, true);
-    return filter(array, function(value){
-      return !contains(rest, value);
-    });
-  });
-
-  // Return a version of the array that does not contain the specified value(s).
-  var without = restArguments(function(array, otherArrays) {
-    return difference(array, otherArrays);
-  });
-
-  // Produce a duplicate-free version of the array. If the array has already
-  // been sorted, you have the option of using a faster algorithm.
-  // The faster algorithm will not work with an iteratee if the iteratee
-  // is not a one-to-one function, so providing an iteratee will disable
-  // the faster algorithm.
-  function uniq(array, isSorted, iteratee, context) {
-    if (!isBoolean(isSorted)) {
-      context = iteratee;
-      iteratee = isSorted;
-      isSorted = false;
-    }
-    if (iteratee != null) iteratee = cb(iteratee, context);
-    var result = [];
-    var seen = [];
-    for (var i = 0, length = getLength(array); i < length; i++) {
-      var value = array[i],
-          computed = iteratee ? iteratee(value, i, array) : value;
-      if (isSorted && !iteratee) {
-        if (!i || seen !== computed) result.push(value);
-        seen = computed;
-      } else if (iteratee) {
-        if (!contains(seen, computed)) {
-          seen.push(computed);
-          result.push(value);
-        }
-      } else if (!contains(result, value)) {
-        result.push(value);
-      }
-    }
-    return result;
-  }
-
-  // Produce an array that contains the union: each distinct element from all of
-  // the passed-in arrays.
-  var union = restArguments(function(arrays) {
-    return uniq(flatten$1(arrays, true, true));
-  });
-
-  // Produce an array that contains every item shared between all the
-  // passed-in arrays.
-  function intersection(array) {
-    var result = [];
-    var argsLength = arguments.length;
-    for (var i = 0, length = getLength(array); i < length; i++) {
-      var item = array[i];
-      if (contains(result, item)) continue;
-      var j;
-      for (j = 1; j < argsLength; j++) {
-        if (!contains(arguments[j], item)) break;
-      }
-      if (j === argsLength) result.push(item);
-    }
-    return result;
-  }
-
-  // Complement of zip. Unzip accepts an array of arrays and groups
-  // each array's elements on shared indices.
-  function unzip(array) {
-    var length = array && max(array, getLength).length || 0;
-    var result = Array(length);
-
-    for (var index = 0; index < length; index++) {
-      result[index] = pluck(array, index);
-    }
-    return result;
-  }
-
-  // Zip together multiple lists into a single array -- elements that share
-  // an index go together.
-  var zip = restArguments(unzip);
-
-  // Converts lists into objects. Pass either a single array of `[key, value]`
-  // pairs, or two parallel arrays of the same length -- one of keys, and one of
-  // the corresponding values. Passing by pairs is the reverse of `_.pairs`.
-  function object(list, values) {
-    var result = {};
-    for (var i = 0, length = getLength(list); i < length; i++) {
-      if (values) {
-        result[list[i]] = values[i];
-      } else {
-        result[list[i][0]] = list[i][1];
-      }
-    }
-    return result;
-  }
-
-  // Generate an integer Array containing an arithmetic progression. A port of
-  // the native Python `range()` function. See
-  // [the Python documentation](https://docs.python.org/library/functions.html#range).
-  function range(start, stop, step) {
-    if (stop == null) {
-      stop = start || 0;
-      start = 0;
-    }
-    if (!step) {
-      step = stop < start ? -1 : 1;
-    }
-
-    var length = Math.max(Math.ceil((stop - start) / step), 0);
-    var range = Array(length);
-
-    for (var idx = 0; idx < length; idx++, start += step) {
-      range[idx] = start;
-    }
-
-    return range;
-  }
-
-  // Chunk a single array into multiple arrays, each containing `count` or fewer
-  // items.
-  function chunk(array, count) {
-    if (count == null || count < 1) return [];
-    var result = [];
-    var i = 0, length = array.length;
-    while (i < length) {
-      result.push(slice.call(array, i, i += count));
-    }
-    return result;
-  }
-
-  // Helper function to continue chaining intermediate results.
-  function chainResult(instance, obj) {
-    return instance._chain ? _$1(obj).chain() : obj;
-  }
-
-  // Add your own custom functions to the Underscore object.
-  function mixin(obj) {
-    each(functions(obj), function(name) {
-      var func = _$1[name] = obj[name];
-      _$1.prototype[name] = function() {
-        var args = [this._wrapped];
-        push.apply(args, arguments);
-        return chainResult(this, func.apply(_$1, args));
-      };
-    });
-    return _$1;
-  }
-
-  // Add all mutator `Array` functions to the wrapper.
-  each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
-    var method = ArrayProto[name];
-    _$1.prototype[name] = function() {
-      var obj = this._wrapped;
-      if (obj != null) {
-        method.apply(obj, arguments);
-        if ((name === 'shift' || name === 'splice') && obj.length === 0) {
-          delete obj[0];
-        }
-      }
-      return chainResult(this, obj);
-    };
-  });
-
-  // Add all accessor `Array` functions to the wrapper.
-  each(['concat', 'join', 'slice'], function(name) {
-    var method = ArrayProto[name];
-    _$1.prototype[name] = function() {
-      var obj = this._wrapped;
-      if (obj != null) obj = method.apply(obj, arguments);
-      return chainResult(this, obj);
-    };
-  });
-
-  // Named Exports
-
-  var allExports = {
-    __proto__: null,
-    VERSION: VERSION,
-    restArguments: restArguments,
-    isObject: isObject,
-    isNull: isNull,
-    isUndefined: isUndefined,
-    isBoolean: isBoolean,
-    isElement: isElement,
-    isString: isString,
-    isNumber: isNumber,
-    isDate: isDate,
-    isRegExp: isRegExp,
-    isError: isError,
-    isSymbol: isSymbol,
-    isArrayBuffer: isArrayBuffer,
-    isDataView: isDataView$1,
-    isArray: isArray,
-    isFunction: isFunction$1,
-    isArguments: isArguments$1,
-    isFinite: isFinite$1,
-    isNaN: isNaN$1,
-    isTypedArray: isTypedArray$1,
-    isEmpty: isEmpty,
-    isMatch: isMatch,
-    isEqual: isEqual,
-    isMap: isMap,
-    isWeakMap: isWeakMap,
-    isSet: isSet,
-    isWeakSet: isWeakSet,
-    keys: keys,
-    allKeys: allKeys,
-    values: values,
-    pairs: pairs,
-    invert: invert,
-    functions: functions,
-    methods: functions,
-    extend: extend,
-    extendOwn: extendOwn,
-    assign: extendOwn,
-    defaults: defaults,
-    create: create,
-    clone: clone,
-    tap: tap,
-    get: get,
-    has: has,
-    mapObject: mapObject,
-    identity: identity,
-    constant: constant,
-    noop: noop,
-    toPath: toPath$1,
-    property: property,
-    propertyOf: propertyOf,
-    matcher: matcher,
-    matches: matcher,
-    times: times,
-    random: random,
-    now: now,
-    escape: _escape,
-    unescape: _unescape,
-    templateSettings: templateSettings,
-    template: template,
-    result: result,
-    uniqueId: uniqueId,
-    chain: chain,
-    iteratee: iteratee,
-    partial: partial,
-    bind: bind,
-    bindAll: bindAll,
-    memoize: memoize,
-    delay: delay,
-    defer: defer,
-    throttle: throttle,
-    debounce: debounce,
-    wrap: wrap,
-    negate: negate,
-    compose: compose,
-    after: after,
-    before: before,
-    once: once,
-    findKey: findKey,
-    findIndex: findIndex,
-    findLastIndex: findLastIndex,
-    sortedIndex: sortedIndex,
-    indexOf: indexOf,
-    lastIndexOf: lastIndexOf,
-    find: find,
-    detect: find,
-    findWhere: findWhere,
-    each: each,
-    forEach: each,
-    map: map,
-    collect: map,
-    reduce: reduce,
-    foldl: reduce,
-    inject: reduce,
-    reduceRight: reduceRight,
-    foldr: reduceRight,
-    filter: filter,
-    select: filter,
-    reject: reject,
-    every: every,
-    all: every,
-    some: some,
-    any: some,
-    contains: contains,
-    includes: contains,
-    include: contains,
-    invoke: invoke,
-    pluck: pluck,
-    where: where,
-    max: max,
-    min: min,
-    shuffle: shuffle,
-    sample: sample,
-    sortBy: sortBy,
-    groupBy: groupBy,
-    indexBy: indexBy,
-    countBy: countBy,
-    partition: partition,
-    toArray: toArray,
-    size: size,
-    pick: pick,
-    omit: omit,
-    first: first,
-    head: first,
-    take: first,
-    initial: initial,
-    last: last,
-    rest: rest,
-    tail: rest,
-    drop: rest,
-    compact: compact,
-    flatten: flatten,
-    without: without,
-    uniq: uniq,
-    unique: uniq,
-    union: union,
-    intersection: intersection,
-    difference: difference,
-    unzip: unzip,
-    transpose: unzip,
-    zip: zip,
-    object: object,
-    range: range,
-    chunk: chunk,
-    mixin: mixin,
-    'default': _$1
-  };
-
-  // Default Export
-
-  // Add all of the Underscore functions to the wrapper object.
-  var _ = mixin(allExports);
-  // Legacy Node.js API.
-  _._ = _;
-
-  return _;
-
-})));
-//# sourceMappingURL=underscore-umd.js.map
diff --git a/docs/build/html/_static/underscore.js b/docs/build/html/_static/underscore.js
deleted file mode 100644
index cf177d4..0000000
--- a/docs/build/html/_static/underscore.js
+++ /dev/null
@@ -1,6 +0,0 @@
-!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define("underscore",r):(n="undefined"!=typeof globalThis?globalThis:n||self,function(){var t=n._,e=n._=r();e.noConflict=function(){return n._=t,e}}())}(this,(function(){
-//     Underscore.js 1.13.1
-//     https://underscorejs.org
-//     (c) 2009-2021 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors
-//     Underscore may be freely distributed under the MIT license.
-var n="1.13.1",r="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||Function("return this")()||{},t=Array.prototype,e=Object.prototype,u="undefined"!=typeof Symbol?Symbol.prototype:null,o=t.push,i=t.slice,a=e.toString,f=e.hasOwnProperty,c="undefined"!=typeof ArrayBuffer,l="undefined"!=typeof DataView,s=Array.isArray,p=Object.keys,v=Object.create,h=c&&ArrayBuffer.isView,y=isNaN,d=isFinite,g=!{toString:null}.propertyIsEnumerable("toString"),b=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],m=Math.pow(2,53)-1;function j(n,r){return r=null==r?n.length-1:+r,function(){for(var t=Math.max(arguments.length-r,0),e=Array(t),u=0;u<t;u++)e[u]=arguments[u+r];switch(r){case 0:return n.call(this,e);case 1:return n.call(this,arguments[0],e);case 2:return n.call(this,arguments[0],arguments[1],e)}var o=Array(r+1);for(u=0;u<r;u++)o[u]=arguments[u];return o[r]=e,n.apply(this,o)}}function _(n){var r=typeof n;return"function"===r||"object"===r&&!!n}function w(n){return void 0===n}function A(n){return!0===n||!1===n||"[object Boolean]"===a.call(n)}function x(n){var r="[object "+n+"]";return function(n){return a.call(n)===r}}var S=x("String"),O=x("Number"),M=x("Date"),E=x("RegExp"),B=x("Error"),N=x("Symbol"),I=x("ArrayBuffer"),T=x("Function"),k=r.document&&r.document.childNodes;"function"!=typeof/./&&"object"!=typeof Int8Array&&"function"!=typeof k&&(T=function(n){return"function"==typeof n||!1});var D=T,R=x("Object"),F=l&&R(new DataView(new ArrayBuffer(8))),V="undefined"!=typeof Map&&R(new Map),P=x("DataView");var q=F?function(n){return null!=n&&D(n.getInt8)&&I(n.buffer)}:P,U=s||x("Array");function W(n,r){return null!=n&&f.call(n,r)}var z=x("Arguments");!function(){z(arguments)||(z=function(n){return W(n,"callee")})}();var L=z;function $(n){return O(n)&&y(n)}function C(n){return function(){return n}}function K(n){return function(r){var t=n(r);return"number"==typeof t&&t>=0&&t<=m}}function J(n){return function(r){return null==r?void 0:r[n]}}var G=J("byteLength"),H=K(G),Q=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;var X=c?function(n){return h?h(n)&&!q(n):H(n)&&Q.test(a.call(n))}:C(!1),Y=J("length");function Z(n,r){r=function(n){for(var r={},t=n.length,e=0;e<t;++e)r[n[e]]=!0;return{contains:function(n){return r[n]},push:function(t){return r[t]=!0,n.push(t)}}}(r);var t=b.length,u=n.constructor,o=D(u)&&u.prototype||e,i="constructor";for(W(n,i)&&!r.contains(i)&&r.push(i);t--;)(i=b[t])in n&&n[i]!==o[i]&&!r.contains(i)&&r.push(i)}function nn(n){if(!_(n))return[];if(p)return p(n);var r=[];for(var t in n)W(n,t)&&r.push(t);return g&&Z(n,r),r}function rn(n,r){var t=nn(r),e=t.length;if(null==n)return!e;for(var u=Object(n),o=0;o<e;o++){var i=t[o];if(r[i]!==u[i]||!(i in u))return!1}return!0}function tn(n){return n instanceof tn?n:this instanceof tn?void(this._wrapped=n):new tn(n)}function en(n){return new Uint8Array(n.buffer||n,n.byteOffset||0,G(n))}tn.VERSION=n,tn.prototype.value=function(){return this._wrapped},tn.prototype.valueOf=tn.prototype.toJSON=tn.prototype.value,tn.prototype.toString=function(){return String(this._wrapped)};var un="[object DataView]";function on(n,r,t,e){if(n===r)return 0!==n||1/n==1/r;if(null==n||null==r)return!1;if(n!=n)return r!=r;var o=typeof n;return("function"===o||"object"===o||"object"==typeof r)&&function n(r,t,e,o){r instanceof tn&&(r=r._wrapped);t instanceof tn&&(t=t._wrapped);var i=a.call(r);if(i!==a.call(t))return!1;if(F&&"[object Object]"==i&&q(r)){if(!q(t))return!1;i=un}switch(i){case"[object RegExp]":case"[object String]":return""+r==""+t;case"[object Number]":return+r!=+r?+t!=+t:0==+r?1/+r==1/t:+r==+t;case"[object Date]":case"[object Boolean]":return+r==+t;case"[object Symbol]":return u.valueOf.call(r)===u.valueOf.call(t);case"[object ArrayBuffer]":case un:return n(en(r),en(t),e,o)}var f="[object Array]"===i;if(!f&&X(r)){if(G(r)!==G(t))return!1;if(r.buffer===t.buffer&&r.byteOffset===t.byteOffset)return!0;f=!0}if(!f){if("object"!=typeof r||"object"!=typeof t)return!1;var c=r.constructor,l=t.constructor;if(c!==l&&!(D(c)&&c instanceof c&&D(l)&&l instanceof l)&&"constructor"in r&&"constructor"in t)return!1}o=o||[];var s=(e=e||[]).length;for(;s--;)if(e[s]===r)return o[s]===t;if(e.push(r),o.push(t),f){if((s=r.length)!==t.length)return!1;for(;s--;)if(!on(r[s],t[s],e,o))return!1}else{var p,v=nn(r);if(s=v.length,nn(t).length!==s)return!1;for(;s--;)if(p=v[s],!W(t,p)||!on(r[p],t[p],e,o))return!1}return e.pop(),o.pop(),!0}(n,r,t,e)}function an(n){if(!_(n))return[];var r=[];for(var t in n)r.push(t);return g&&Z(n,r),r}function fn(n){var r=Y(n);return function(t){if(null==t)return!1;var e=an(t);if(Y(e))return!1;for(var u=0;u<r;u++)if(!D(t[n[u]]))return!1;return n!==hn||!D(t[cn])}}var cn="forEach",ln="has",sn=["clear","delete"],pn=["get",ln,"set"],vn=sn.concat(cn,pn),hn=sn.concat(pn),yn=["add"].concat(sn,cn,ln),dn=V?fn(vn):x("Map"),gn=V?fn(hn):x("WeakMap"),bn=V?fn(yn):x("Set"),mn=x("WeakSet");function jn(n){for(var r=nn(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=n[r[u]];return e}function _n(n){for(var r={},t=nn(n),e=0,u=t.length;e<u;e++)r[n[t[e]]]=t[e];return r}function wn(n){var r=[];for(var t in n)D(n[t])&&r.push(t);return r.sort()}function An(n,r){return function(t){var e=arguments.length;if(r&&(t=Object(t)),e<2||null==t)return t;for(var u=1;u<e;u++)for(var o=arguments[u],i=n(o),a=i.length,f=0;f<a;f++){var c=i[f];r&&void 0!==t[c]||(t[c]=o[c])}return t}}var xn=An(an),Sn=An(nn),On=An(an,!0);function Mn(n){if(!_(n))return{};if(v)return v(n);var r=function(){};r.prototype=n;var t=new r;return r.prototype=null,t}function En(n){return _(n)?U(n)?n.slice():xn({},n):n}function Bn(n){return U(n)?n:[n]}function Nn(n){return tn.toPath(n)}function In(n,r){for(var t=r.length,e=0;e<t;e++){if(null==n)return;n=n[r[e]]}return t?n:void 0}function Tn(n,r,t){var e=In(n,Nn(r));return w(e)?t:e}function kn(n){return n}function Dn(n){return n=Sn({},n),function(r){return rn(r,n)}}function Rn(n){return n=Nn(n),function(r){return In(r,n)}}function Fn(n,r,t){if(void 0===r)return n;switch(null==t?3:t){case 1:return function(t){return n.call(r,t)};case 3:return function(t,e,u){return n.call(r,t,e,u)};case 4:return function(t,e,u,o){return n.call(r,t,e,u,o)}}return function(){return n.apply(r,arguments)}}function Vn(n,r,t){return null==n?kn:D(n)?Fn(n,r,t):_(n)&&!U(n)?Dn(n):Rn(n)}function Pn(n,r){return Vn(n,r,1/0)}function qn(n,r,t){return tn.iteratee!==Pn?tn.iteratee(n,r):Vn(n,r,t)}function Un(){}function Wn(n,r){return null==r&&(r=n,n=0),n+Math.floor(Math.random()*(r-n+1))}tn.toPath=Bn,tn.iteratee=Pn;var zn=Date.now||function(){return(new Date).getTime()};function Ln(n){var r=function(r){return n[r]},t="(?:"+nn(n).join("|")+")",e=RegExp(t),u=RegExp(t,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,r):n}}var $n={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},Cn=Ln($n),Kn=Ln(_n($n)),Jn=tn.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},Gn=/(.)^/,Hn={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},Qn=/\\|'|\r|\n|\u2028|\u2029/g;function Xn(n){return"\\"+Hn[n]}var Yn=/^\s*(\w|\$)+\s*$/;var Zn=0;function nr(n,r,t,e,u){if(!(e instanceof r))return n.apply(t,u);var o=Mn(n.prototype),i=n.apply(o,u);return _(i)?i:o}var rr=j((function(n,r){var t=rr.placeholder,e=function(){for(var u=0,o=r.length,i=Array(o),a=0;a<o;a++)i[a]=r[a]===t?arguments[u++]:r[a];for(;u<arguments.length;)i.push(arguments[u++]);return nr(n,e,this,this,i)};return e}));rr.placeholder=tn;var tr=j((function(n,r,t){if(!D(n))throw new TypeError("Bind must be called on a function");var e=j((function(u){return nr(n,e,r,this,t.concat(u))}));return e})),er=K(Y);function ur(n,r,t,e){if(e=e||[],r||0===r){if(r<=0)return e.concat(n)}else r=1/0;for(var u=e.length,o=0,i=Y(n);o<i;o++){var a=n[o];if(er(a)&&(U(a)||L(a)))if(r>1)ur(a,r-1,t,e),u=e.length;else for(var f=0,c=a.length;f<c;)e[u++]=a[f++];else t||(e[u++]=a)}return e}var or=j((function(n,r){var t=(r=ur(r,!1,!1)).length;if(t<1)throw new Error("bindAll must be passed function names");for(;t--;){var e=r[t];n[e]=tr(n[e],n)}return n}));var ir=j((function(n,r,t){return setTimeout((function(){return n.apply(null,t)}),r)})),ar=rr(ir,tn,1);function fr(n){return function(){return!n.apply(this,arguments)}}function cr(n,r){var t;return function(){return--n>0&&(t=r.apply(this,arguments)),n<=1&&(r=null),t}}var lr=rr(cr,2);function sr(n,r,t){r=qn(r,t);for(var e,u=nn(n),o=0,i=u.length;o<i;o++)if(r(n[e=u[o]],e,n))return e}function pr(n){return function(r,t,e){t=qn(t,e);for(var u=Y(r),o=n>0?0:u-1;o>=0&&o<u;o+=n)if(t(r[o],o,r))return o;return-1}}var vr=pr(1),hr=pr(-1);function yr(n,r,t,e){for(var u=(t=qn(t,e,1))(r),o=0,i=Y(n);o<i;){var a=Math.floor((o+i)/2);t(n[a])<u?o=a+1:i=a}return o}function dr(n,r,t){return function(e,u,o){var a=0,f=Y(e);if("number"==typeof o)n>0?a=o>=0?o:Math.max(o+f,a):f=o>=0?Math.min(o+1,f):o+f+1;else if(t&&o&&f)return e[o=t(e,u)]===u?o:-1;if(u!=u)return(o=r(i.call(e,a,f),$))>=0?o+a:-1;for(o=n>0?a:f-1;o>=0&&o<f;o+=n)if(e[o]===u)return o;return-1}}var gr=dr(1,vr,yr),br=dr(-1,hr);function mr(n,r,t){var e=(er(n)?vr:sr)(n,r,t);if(void 0!==e&&-1!==e)return n[e]}function jr(n,r,t){var e,u;if(r=Fn(r,t),er(n))for(e=0,u=n.length;e<u;e++)r(n[e],e,n);else{var o=nn(n);for(e=0,u=o.length;e<u;e++)r(n[o[e]],o[e],n)}return n}function _r(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=Array(u),i=0;i<u;i++){var a=e?e[i]:i;o[i]=r(n[a],a,n)}return o}function wr(n){var r=function(r,t,e,u){var o=!er(r)&&nn(r),i=(o||r).length,a=n>0?0:i-1;for(u||(e=r[o?o[a]:a],a+=n);a>=0&&a<i;a+=n){var f=o?o[a]:a;e=t(e,r[f],f,r)}return e};return function(n,t,e,u){var o=arguments.length>=3;return r(n,Fn(t,u,4),e,o)}}var Ar=wr(1),xr=wr(-1);function Sr(n,r,t){var e=[];return r=qn(r,t),jr(n,(function(n,t,u){r(n,t,u)&&e.push(n)})),e}function Or(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=0;o<u;o++){var i=e?e[o]:o;if(!r(n[i],i,n))return!1}return!0}function Mr(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=0;o<u;o++){var i=e?e[o]:o;if(r(n[i],i,n))return!0}return!1}function Er(n,r,t,e){return er(n)||(n=jn(n)),("number"!=typeof t||e)&&(t=0),gr(n,r,t)>=0}var Br=j((function(n,r,t){var e,u;return D(r)?u=r:(r=Nn(r),e=r.slice(0,-1),r=r[r.length-1]),_r(n,(function(n){var o=u;if(!o){if(e&&e.length&&(n=In(n,e)),null==n)return;o=n[r]}return null==o?o:o.apply(n,t)}))}));function Nr(n,r){return _r(n,Rn(r))}function Ir(n,r,t){var e,u,o=-1/0,i=-1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=er(n)?n:jn(n)).length;a<f;a++)null!=(e=n[a])&&e>o&&(o=e);else r=qn(r,t),jr(n,(function(n,t,e){((u=r(n,t,e))>i||u===-1/0&&o===-1/0)&&(o=n,i=u)}));return o}function Tr(n,r,t){if(null==r||t)return er(n)||(n=jn(n)),n[Wn(n.length-1)];var e=er(n)?En(n):jn(n),u=Y(e);r=Math.max(Math.min(r,u),0);for(var o=u-1,i=0;i<r;i++){var a=Wn(i,o),f=e[i];e[i]=e[a],e[a]=f}return e.slice(0,r)}function kr(n,r){return function(t,e,u){var o=r?[[],[]]:{};return e=qn(e,u),jr(t,(function(r,u){var i=e(r,u,t);n(o,r,i)})),o}}var Dr=kr((function(n,r,t){W(n,t)?n[t].push(r):n[t]=[r]})),Rr=kr((function(n,r,t){n[t]=r})),Fr=kr((function(n,r,t){W(n,t)?n[t]++:n[t]=1})),Vr=kr((function(n,r,t){n[t?0:1].push(r)}),!0),Pr=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;function qr(n,r,t){return r in t}var Ur=j((function(n,r){var t={},e=r[0];if(null==n)return t;D(e)?(r.length>1&&(e=Fn(e,r[1])),r=an(n)):(e=qr,r=ur(r,!1,!1),n=Object(n));for(var u=0,o=r.length;u<o;u++){var i=r[u],a=n[i];e(a,i,n)&&(t[i]=a)}return t})),Wr=j((function(n,r){var t,e=r[0];return D(e)?(e=fr(e),r.length>1&&(t=r[1])):(r=_r(ur(r,!1,!1),String),e=function(n,t){return!Er(r,t)}),Ur(n,e,t)}));function zr(n,r,t){return i.call(n,0,Math.max(0,n.length-(null==r||t?1:r)))}function Lr(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null==r||t?n[0]:zr(n,n.length-r)}function $r(n,r,t){return i.call(n,null==r||t?1:r)}var Cr=j((function(n,r){return r=ur(r,!0,!0),Sr(n,(function(n){return!Er(r,n)}))})),Kr=j((function(n,r){return Cr(n,r)}));function Jr(n,r,t,e){A(r)||(e=t,t=r,r=!1),null!=t&&(t=qn(t,e));for(var u=[],o=[],i=0,a=Y(n);i<a;i++){var f=n[i],c=t?t(f,i,n):f;r&&!t?(i&&o===c||u.push(f),o=c):t?Er(o,c)||(o.push(c),u.push(f)):Er(u,f)||u.push(f)}return u}var Gr=j((function(n){return Jr(ur(n,!0,!0))}));function Hr(n){for(var r=n&&Ir(n,Y).length||0,t=Array(r),e=0;e<r;e++)t[e]=Nr(n,e);return t}var Qr=j(Hr);function Xr(n,r){return n._chain?tn(r).chain():r}function Yr(n){return jr(wn(n),(function(r){var t=tn[r]=n[r];tn.prototype[r]=function(){var n=[this._wrapped];return o.apply(n,arguments),Xr(this,t.apply(tn,n))}})),tn}jr(["pop","push","reverse","shift","sort","splice","unshift"],(function(n){var r=t[n];tn.prototype[n]=function(){var t=this._wrapped;return null!=t&&(r.apply(t,arguments),"shift"!==n&&"splice"!==n||0!==t.length||delete t[0]),Xr(this,t)}})),jr(["concat","join","slice"],(function(n){var r=t[n];tn.prototype[n]=function(){var n=this._wrapped;return null!=n&&(n=r.apply(n,arguments)),Xr(this,n)}}));var Zr=Yr({__proto__:null,VERSION:n,restArguments:j,isObject:_,isNull:function(n){return null===n},isUndefined:w,isBoolean:A,isElement:function(n){return!(!n||1!==n.nodeType)},isString:S,isNumber:O,isDate:M,isRegExp:E,isError:B,isSymbol:N,isArrayBuffer:I,isDataView:q,isArray:U,isFunction:D,isArguments:L,isFinite:function(n){return!N(n)&&d(n)&&!isNaN(parseFloat(n))},isNaN:$,isTypedArray:X,isEmpty:function(n){if(null==n)return!0;var r=Y(n);return"number"==typeof r&&(U(n)||S(n)||L(n))?0===r:0===Y(nn(n))},isMatch:rn,isEqual:function(n,r){return on(n,r)},isMap:dn,isWeakMap:gn,isSet:bn,isWeakSet:mn,keys:nn,allKeys:an,values:jn,pairs:function(n){for(var r=nn(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=[r[u],n[r[u]]];return e},invert:_n,functions:wn,methods:wn,extend:xn,extendOwn:Sn,assign:Sn,defaults:On,create:function(n,r){var t=Mn(n);return r&&Sn(t,r),t},clone:En,tap:function(n,r){return r(n),n},get:Tn,has:function(n,r){for(var t=(r=Nn(r)).length,e=0;e<t;e++){var u=r[e];if(!W(n,u))return!1;n=n[u]}return!!t},mapObject:function(n,r,t){r=qn(r,t);for(var e=nn(n),u=e.length,o={},i=0;i<u;i++){var a=e[i];o[a]=r(n[a],a,n)}return o},identity:kn,constant:C,noop:Un,toPath:Bn,property:Rn,propertyOf:function(n){return null==n?Un:function(r){return Tn(n,r)}},matcher:Dn,matches:Dn,times:function(n,r,t){var e=Array(Math.max(0,n));r=Fn(r,t,1);for(var u=0;u<n;u++)e[u]=r(u);return e},random:Wn,now:zn,escape:Cn,unescape:Kn,templateSettings:Jn,template:function(n,r,t){!r&&t&&(r=t),r=On({},r,tn.templateSettings);var e=RegExp([(r.escape||Gn).source,(r.interpolate||Gn).source,(r.evaluate||Gn).source].join("|")+"|$","g"),u=0,o="__p+='";n.replace(e,(function(r,t,e,i,a){return o+=n.slice(u,a).replace(Qn,Xn),u=a+r.length,t?o+="'+\n((__t=("+t+"))==null?'':_.escape(__t))+\n'":e?o+="'+\n((__t=("+e+"))==null?'':__t)+\n'":i&&(o+="';\n"+i+"\n__p+='"),r})),o+="';\n";var i,a=r.variable;if(a){if(!Yn.test(a))throw new Error("variable is not a bare identifier: "+a)}else o="with(obj||{}){\n"+o+"}\n",a="obj";o="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";try{i=new Function(a,"_",o)}catch(n){throw n.source=o,n}var f=function(n){return i.call(this,n,tn)};return f.source="function("+a+"){\n"+o+"}",f},result:function(n,r,t){var e=(r=Nn(r)).length;if(!e)return D(t)?t.call(n):t;for(var u=0;u<e;u++){var o=null==n?void 0:n[r[u]];void 0===o&&(o=t,u=e),n=D(o)?o.call(n):o}return n},uniqueId:function(n){var r=++Zn+"";return n?n+r:r},chain:function(n){var r=tn(n);return r._chain=!0,r},iteratee:Pn,partial:rr,bind:tr,bindAll:or,memoize:function(n,r){var t=function(e){var u=t.cache,o=""+(r?r.apply(this,arguments):e);return W(u,o)||(u[o]=n.apply(this,arguments)),u[o]};return t.cache={},t},delay:ir,defer:ar,throttle:function(n,r,t){var e,u,o,i,a=0;t||(t={});var f=function(){a=!1===t.leading?0:zn(),e=null,i=n.apply(u,o),e||(u=o=null)},c=function(){var c=zn();a||!1!==t.leading||(a=c);var l=r-(c-a);return u=this,o=arguments,l<=0||l>r?(e&&(clearTimeout(e),e=null),a=c,i=n.apply(u,o),e||(u=o=null)):e||!1===t.trailing||(e=setTimeout(f,l)),i};return c.cancel=function(){clearTimeout(e),a=0,e=u=o=null},c},debounce:function(n,r,t){var e,u,o,i,a,f=function(){var c=zn()-u;r>c?e=setTimeout(f,r-c):(e=null,t||(i=n.apply(a,o)),e||(o=a=null))},c=j((function(c){return a=this,o=c,u=zn(),e||(e=setTimeout(f,r),t&&(i=n.apply(a,o))),i}));return c.cancel=function(){clearTimeout(e),e=o=a=null},c},wrap:function(n,r){return rr(r,n)},negate:fr,compose:function(){var n=arguments,r=n.length-1;return function(){for(var t=r,e=n[r].apply(this,arguments);t--;)e=n[t].call(this,e);return e}},after:function(n,r){return function(){if(--n<1)return r.apply(this,arguments)}},before:cr,once:lr,findKey:sr,findIndex:vr,findLastIndex:hr,sortedIndex:yr,indexOf:gr,lastIndexOf:br,find:mr,detect:mr,findWhere:function(n,r){return mr(n,Dn(r))},each:jr,forEach:jr,map:_r,collect:_r,reduce:Ar,foldl:Ar,inject:Ar,reduceRight:xr,foldr:xr,filter:Sr,select:Sr,reject:function(n,r,t){return Sr(n,fr(qn(r)),t)},every:Or,all:Or,some:Mr,any:Mr,contains:Er,includes:Er,include:Er,invoke:Br,pluck:Nr,where:function(n,r){return Sr(n,Dn(r))},max:Ir,min:function(n,r,t){var e,u,o=1/0,i=1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=er(n)?n:jn(n)).length;a<f;a++)null!=(e=n[a])&&e<o&&(o=e);else r=qn(r,t),jr(n,(function(n,t,e){((u=r(n,t,e))<i||u===1/0&&o===1/0)&&(o=n,i=u)}));return o},shuffle:function(n){return Tr(n,1/0)},sample:Tr,sortBy:function(n,r,t){var e=0;return r=qn(r,t),Nr(_r(n,(function(n,t,u){return{value:n,index:e++,criteria:r(n,t,u)}})).sort((function(n,r){var t=n.criteria,e=r.criteria;if(t!==e){if(t>e||void 0===t)return 1;if(t<e||void 0===e)return-1}return n.index-r.index})),"value")},groupBy:Dr,indexBy:Rr,countBy:Fr,partition:Vr,toArray:function(n){return n?U(n)?i.call(n):S(n)?n.match(Pr):er(n)?_r(n,kn):jn(n):[]},size:function(n){return null==n?0:er(n)?n.length:nn(n).length},pick:Ur,omit:Wr,first:Lr,head:Lr,take:Lr,initial:zr,last:function(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null==r||t?n[n.length-1]:$r(n,Math.max(0,n.length-r))},rest:$r,tail:$r,drop:$r,compact:function(n){return Sr(n,Boolean)},flatten:function(n,r){return ur(n,r,!1)},without:Kr,uniq:Jr,unique:Jr,union:Gr,intersection:function(n){for(var r=[],t=arguments.length,e=0,u=Y(n);e<u;e++){var o=n[e];if(!Er(r,o)){var i;for(i=1;i<t&&Er(arguments[i],o);i++);i===t&&r.push(o)}}return r},difference:Cr,unzip:Hr,transpose:Hr,zip:Qr,object:function(n,r){for(var t={},e=0,u=Y(n);e<u;e++)r?t[n[e]]=r[e]:t[n[e][0]]=n[e][1];return t},range:function(n,r,t){null==r&&(r=n||0,n=0),t||(t=r<n?-1:1);for(var e=Math.max(Math.ceil((r-n)/t),0),u=Array(e),o=0;o<e;o++,n+=t)u[o]=n;return u},chunk:function(n,r){if(null==r||r<1)return[];for(var t=[],e=0,u=n.length;e<u;)t.push(i.call(n,e,e+=r));return t},mixin:Yr,default:tn});return Zr._=Zr,Zr}));
\ No newline at end of file
diff --git a/docs/build/html/genindex.html b/docs/build/html/genindex.html
index 5c2055f..c2451c9 100644
--- a/docs/build/html/genindex.html
+++ b/docs/build/html/genindex.html
@@ -1,48 +1,73 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" data-content_root="./">
+<head>
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Index &mdash; QuaPy: A Python-based open-source framework for quantification 0.1.8 documentation</title>
+      <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=92fd9be5" />
+      <link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=19f00094" />
 
-
-<!doctype html>
-
-<html lang="en">
-  <head>
-    <meta charset="utf-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <title>Index &#8212; QuaPy 0.1.7 documentation</title>
-    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
-    <link rel="stylesheet" type="text/css" href="_static/bizstyle.css" />
-    
-    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
-    <script src="_static/jquery.js"></script>
-    <script src="_static/underscore.js"></script>
-    <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
-    <script src="_static/doctools.js"></script>
-    <script src="_static/sphinx_highlight.js"></script>
-    <script src="_static/bizstyle.js"></script>
+  
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script src="_static/jquery.js?v=5d32c60e"></script>
+        <script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
+        <script src="_static/documentation_options.js?v=22607128"></script>
+        <script src="_static/doctools.js?v=9a2dae69"></script>
+        <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="#" />
-    <link rel="search" title="Search" href="search.html" />
-    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
-    <!--[if lt IE 9]>
-    <script src="_static/css3-mediaqueries.js"></script>
-    <![endif]-->
-  </head><body>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="#" title="General Index"
-             accesskey="I">index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">Index</a></li> 
-      </ul>
-    </div>  
+    <link rel="search" title="Search" href="search.html" /> 
+</head>
 
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          <div class="body" role="main">
-            
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            QuaPy: A Python-based open-source framework for quantification
+          </a>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <ul>
+<li class="toctree-l1"><a class="reference internal" href="modules.html">quapy</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">QuaPy: A Python-based open-source framework for quantification</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+      <li class="breadcrumb-item active">Index</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
 
 <h1 id="index">Index</h1>
 
@@ -97,14 +122,24 @@
 </li>
       <li><a href="quapy.html#quapy.error.ae">ae() (in module quapy.error)</a>
 </li>
-      <li><a href="quapy.method.html#quapy.method.aggregative.ACC.aggregate">aggregate() (quapy.method.aggregative.ACC method)</a>
+      <li><a href="quapy.method.html#quapy.method._kdey.KDEyCS.aggregate">aggregate() (quapy.method._kdey.KDEyCS method)</a>
 
       <ul>
+        <li><a href="quapy.method.html#quapy.method._kdey.KDEyHD.aggregate">(quapy.method._kdey.KDEyHD method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method._kdey.KDEyML.aggregate">(quapy.method._kdey.KDEyML method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method._threshold_optim.MS.aggregate">(quapy.method._threshold_optim.MS method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method._threshold_optim.ThresholdOptimization.aggregate">(quapy.method._threshold_optim.ThresholdOptimization method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method.aggregative.ACC.aggregate">(quapy.method.aggregative.ACC method)</a>
+</li>
         <li><a href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.aggregate">(quapy.method.aggregative.AggregativeQuantifier method)</a>
 </li>
         <li><a href="quapy.method.html#quapy.method.aggregative.CC.aggregate">(quapy.method.aggregative.CC method)</a>
 </li>
-        <li><a href="quapy.method.html#quapy.method.aggregative.DistributionMatching.aggregate">(quapy.method.aggregative.DistributionMatching method)</a>
+        <li><a href="quapy.method.html#quapy.method.aggregative.DMy.aggregate">(quapy.method.aggregative.DMy method)</a>
 </li>
         <li><a href="quapy.method.html#quapy.method.aggregative.DyS.aggregate">(quapy.method.aggregative.DyS method)</a>
 </li>
@@ -119,21 +154,61 @@
         <li><a href="quapy.method.html#quapy.method.aggregative.PCC.aggregate">(quapy.method.aggregative.PCC method)</a>
 </li>
         <li><a href="quapy.method.html#quapy.method.aggregative.SMM.aggregate">(quapy.method.aggregative.SMM method)</a>
-</li>
-        <li><a href="quapy.method.html#quapy.method.aggregative.ThresholdOptimization.aggregate">(quapy.method.aggregative.ThresholdOptimization method)</a>
 </li>
       </ul></li>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="quapy.method.html#quapy.method._threshold_optim.ThresholdOptimization.aggregate_with_threshold">aggregate_with_threshold() (quapy.method._threshold_optim.ThresholdOptimization method)</a>
+</li>
+      <li><a href="quapy.method.html#quapy.method._kdey.KDEyCS.aggregation_fit">aggregation_fit() (quapy.method._kdey.KDEyCS method)</a>
+
+      <ul>
+        <li><a href="quapy.method.html#quapy.method._kdey.KDEyHD.aggregation_fit">(quapy.method._kdey.KDEyHD method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method._kdey.KDEyML.aggregation_fit">(quapy.method._kdey.KDEyML method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method._threshold_optim.MS.aggregation_fit">(quapy.method._threshold_optim.MS method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method._threshold_optim.ThresholdOptimization.aggregation_fit">(quapy.method._threshold_optim.ThresholdOptimization method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method.aggregative.ACC.aggregation_fit">(quapy.method.aggregative.ACC method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.aggregation_fit">(quapy.method.aggregative.AggregativeQuantifier method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method.aggregative.CC.aggregation_fit">(quapy.method.aggregative.CC method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method.aggregative.DMy.aggregation_fit">(quapy.method.aggregative.DMy method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method.aggregative.DyS.aggregation_fit">(quapy.method.aggregative.DyS method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method.aggregative.EMQ.aggregation_fit">(quapy.method.aggregative.EMQ method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method.aggregative.HDy.aggregation_fit">(quapy.method.aggregative.HDy method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method.aggregative.PACC.aggregation_fit">(quapy.method.aggregative.PACC method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method.aggregative.PCC.aggregation_fit">(quapy.method.aggregative.PCC method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method.aggregative.SMM.aggregation_fit">(quapy.method.aggregative.SMM method)</a>
+</li>
+      </ul></li>
       <li><a href="quapy.method.html#quapy.method.meta.Ensemble.aggregative">aggregative (quapy.method.meta.Ensemble property)</a>
 </li>
-      <li><a href="quapy.method.html#quapy.method.aggregative.AggregativeProbabilisticQuantifier">AggregativeProbabilisticQuantifier (class in quapy.method.aggregative)</a>
+      <li><a href="quapy.method.html#quapy.method.aggregative.AggregativeCrispQuantifier">AggregativeCrispQuantifier (class in quapy.method.aggregative)</a>
+</li>
+      <li><a href="quapy.method.html#quapy.method.aggregative.AggregativeMedianEstimator">AggregativeMedianEstimator (class in quapy.method.aggregative)</a>
 </li>
       <li><a href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier">AggregativeQuantifier (class in quapy.method.aggregative)</a>
+</li>
+      <li><a href="quapy.method.html#quapy.method.aggregative.AggregativeSoftQuantifier">AggregativeSoftQuantifier (class in quapy.method.aggregative)</a>
 </li>
       <li><a href="quapy.html#quapy.protocol.APP">APP (class in quapy.protocol)</a>
+</li>
+      <li><a href="quapy.html#quapy.functional.argmin_prevalence">argmin_prevalence() (in module quapy.functional)</a>
 </li>
       <li><a href="quapy.html#quapy.protocol.ArtificialPrevalenceProtocol">ArtificialPrevalenceProtocol (in module quapy.protocol)</a>
+</li>
+      <li><a href="quapy.html#quapy.functional.as_binary_prevalence">as_binary_prevalence() (in module quapy.functional)</a>
 </li>
       <li><a href="quapy.classification.html#quapy.classification.neural.TorchDataset.asDataloader">asDataloader() (quapy.classification.neural.TorchDataset method)</a>
 </li>
@@ -143,6 +218,8 @@
 <h2 id="B">B</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="quapy.method.html#quapy.method._kdey.KDEBase.BANDWIDTH_METHOD">BANDWIDTH_METHOD (quapy.method._kdey.KDEBase attribute)</a>
+</li>
       <li><a href="quapy.method.html#quapy.method.base.BaseQuantifier">BaseQuantifier (class in quapy.method.base)</a>
 </li>
       <li><a href="quapy.classification.html#quapy.classification.calibration.BCTSCalibration">BCTSCalibration (class in quapy.classification.calibration)</a>
@@ -164,6 +241,8 @@
       <li><a href="quapy.html#quapy.plot.binary_bias_global">binary_bias_global() (in module quapy.plot)</a>
 </li>
       <li><a href="quapy.html#quapy.plot.binary_diagonal">binary_diagonal() (in module quapy.plot)</a>
+</li>
+      <li><a href="quapy.method.html#quapy.method.aggregative.BinaryAggregativeQuantifier">BinaryAggregativeQuantifier (class in quapy.method.aggregative)</a>
 </li>
       <li><a href="quapy.method.html#quapy.method.base.BinaryQuantifier">BinaryQuantifier (class in quapy.method.base)</a>
 </li>
@@ -183,47 +262,57 @@
 
       <ul>
         <li><a href="quapy.data.html#quapy.data.base.Dataset.classes_">(quapy.data.base.Dataset property)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method._neural.QuaNetTrainer.classes_">(quapy.method._neural.QuaNetTrainer property)</a>
 </li>
         <li><a href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.classes_">(quapy.method.aggregative.AggregativeQuantifier property)</a>
 </li>
         <li><a href="quapy.method.html#quapy.method.base.OneVsAllGeneric.classes_">(quapy.method.base.OneVsAllGeneric property)</a>
-</li>
-        <li><a href="quapy.method.html#quapy.method.neural.QuaNetTrainer.classes_">(quapy.method.neural.QuaNetTrainer property)</a>
 </li>
       </ul></li>
       <li><a href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.classifier">classifier (quapy.method.aggregative.AggregativeQuantifier property)</a>
 </li>
-      <li><a href="quapy.method.html#quapy.method.aggregative.ACC.classify">classify() (quapy.method.aggregative.ACC method)</a>
+      <li><a href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.classifier_fit_predict">classifier_fit_predict() (quapy.method.aggregative.AggregativeQuantifier method)</a>
+</li>
+      <li><a href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.classify">classify() (quapy.method.aggregative.AggregativeQuantifier method)</a>
 
       <ul>
-        <li><a href="quapy.method.html#quapy.method.aggregative.AggregativeProbabilisticQuantifier.classify">(quapy.method.aggregative.AggregativeProbabilisticQuantifier method)</a>
-</li>
-        <li><a href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.classify">(quapy.method.aggregative.AggregativeQuantifier method)</a>
+        <li><a href="quapy.method.html#quapy.method.aggregative.EMQ.classify">(quapy.method.aggregative.EMQ method)</a>
 </li>
         <li><a href="quapy.method.html#quapy.method.aggregative.OneVsAllAggregative.classify">(quapy.method.aggregative.OneVsAllAggregative method)</a>
-</li>
-        <li><a href="quapy.method.html#quapy.method.aggregative.PACC.classify">(quapy.method.aggregative.PACC method)</a>
 </li>
       </ul></li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="quapy.method.html#quapy.method.aggregative.ClassifyAndCount">ClassifyAndCount (in module quapy.method.aggregative)</a>
 </li>
-      <li><a href="quapy.method.html#quapy.method.neural.QuaNetTrainer.clean_checkpoint">clean_checkpoint() (quapy.method.neural.QuaNetTrainer method)</a>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="quapy.method.html#quapy.method._neural.QuaNetTrainer.clean_checkpoint">clean_checkpoint() (quapy.method._neural.QuaNetTrainer method)</a>
 </li>
-      <li><a href="quapy.method.html#quapy.method.neural.QuaNetTrainer.clean_checkpoint_dir">clean_checkpoint_dir() (quapy.method.neural.QuaNetTrainer method)</a>
+      <li><a href="quapy.method.html#quapy.method._neural.QuaNetTrainer.clean_checkpoint_dir">clean_checkpoint_dir() (quapy.method._neural.QuaNetTrainer method)</a>
 </li>
       <li><a href="quapy.classification.html#quapy.classification.neural.CNNnet">CNNnet (class in quapy.classification.neural)</a>
 </li>
       <li><a href="quapy.html#quapy.protocol.AbstractStochasticSeededProtocol.collator">collator() (quapy.protocol.AbstractStochasticSeededProtocol method)</a>
+</li>
+      <li><a href="quapy.method.html#quapy.method._threshold_optim.MAX.condition">condition() (quapy.method._threshold_optim.MAX method)</a>
+
+      <ul>
+        <li><a href="quapy.method.html#quapy.method._threshold_optim.MS.condition">(quapy.method._threshold_optim.MS method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method._threshold_optim.T50.condition">(quapy.method._threshold_optim.T50 method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method._threshold_optim.ThresholdOptimization.condition">(quapy.method._threshold_optim.ThresholdOptimization method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method._threshold_optim.X.condition">(quapy.method._threshold_optim.X method)</a>
+</li>
+      </ul></li>
+      <li><a href="quapy.html#quapy.model_selection.ConfigStatus">ConfigStatus (class in quapy.model_selection)</a>
 </li>
       <li><a href="quapy.data.html#quapy.data.base.LabelledCollection.counts">counts() (quapy.data.base.LabelledCollection method)</a>
 </li>
       <li><a href="quapy.html#quapy.util.create_if_not_exist">create_if_not_exist() (in module quapy.util)</a>
 </li>
       <li><a href="quapy.html#quapy.util.create_parent_dir">create_parent_dir() (in module quapy.util)</a>
-</li>
-      <li><a href="quapy.method.html#quapy.method.aggregative.cross_generate_predictions">cross_generate_predictions() (in module quapy.method.aggregative)</a>
 </li>
       <li><a href="quapy.html#quapy.model_selection.cross_val_predict">cross_val_predict() (in module quapy.model_selection)</a>
 </li>
@@ -240,15 +329,27 @@
       <li><a href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.device">device (quapy.classification.neural.NeuralClassifierTrainer property)</a>
 
       <ul>
-        <li><a href="quapy.method.html#quapy.method.neural.QuaNetModule.device">(quapy.method.neural.QuaNetModule property)</a>
+        <li><a href="quapy.method.html#quapy.method._neural.QuaNetModule.device">(quapy.method._neural.QuaNetModule property)</a>
 </li>
       </ul></li>
       <li><a href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.dimensions">dimensions() (quapy.classification.neural.TextClassifierNet method)</a>
 </li>
-      <li><a href="quapy.method.html#quapy.method.aggregative.DistributionMatching">DistributionMatching (class in quapy.method.aggregative)</a>
+      <li><a href="quapy.method.html#quapy.method._threshold_optim.MS2.discard">discard() (quapy.method._threshold_optim.MS2 method)</a>
+
+      <ul>
+        <li><a href="quapy.method.html#quapy.method._threshold_optim.ThresholdOptimization.discard">(quapy.method._threshold_optim.ThresholdOptimization method)</a>
+</li>
+      </ul></li>
+      <li><a href="quapy.method.html#quapy.method.non_aggregative.DistributionMatchingX">DistributionMatchingX (in module quapy.method.non_aggregative)</a>
+</li>
+      <li><a href="quapy.method.html#quapy.method.aggregative.DistributionMatchingY">DistributionMatchingY (in module quapy.method.aggregative)</a>
 </li>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="quapy.method.html#quapy.method.non_aggregative.DMx">DMx (class in quapy.method.non_aggregative)</a>
+</li>
+      <li><a href="quapy.method.html#quapy.method.aggregative.DMy">DMy (class in quapy.method.aggregative)</a>
+</li>
       <li><a href="quapy.classification.html#quapy.classification.neural.CNNnet.document_embedding">document_embedding() (quapy.classification.neural.CNNnet method)</a>
 
       <ul>
@@ -284,6 +385,8 @@
       <li><a href="quapy.method.html#quapy.method.aggregative.EMQ.EM">EM() (quapy.method.aggregative.EMQ class method)</a>
 </li>
       <li><a href="quapy.method.html#quapy.method.aggregative.EMQ">EMQ (class in quapy.method.aggregative)</a>
+</li>
+      <li><a href="quapy.method.html#quapy.method.aggregative.EMQ.EMQ_BCTS">EMQ_BCTS() (quapy.method.aggregative.EMQ class method)</a>
 </li>
       <li><a href="quapy.method.html#quapy.method.meta.Ensemble">Ensemble (class in quapy.method.meta)</a>
 </li>
@@ -294,6 +397,8 @@
       <li><a href="quapy.method.html#quapy.method.meta.EPACC">EPACC() (in module quapy.method.meta)</a>
 </li>
       <li><a href="quapy.method.html#quapy.method.aggregative.EMQ.EPSILON">EPSILON (quapy.method.aggregative.EMQ attribute)</a>
+</li>
+      <li><a href="quapy.html#quapy.model_selection.Status.ERROR">ERROR (quapy.model_selection.Status attribute)</a>
 </li>
       <li><a href="quapy.html#quapy.plot.error_by_drift">error_by_drift() (in module quapy.plot)</a>
 </li>
@@ -302,6 +407,8 @@
       <li><a href="quapy.html#quapy.evaluation.evaluate_on_samples">evaluate_on_samples() (in module quapy.evaluation)</a>
 </li>
       <li><a href="quapy.html#quapy.evaluation.evaluation_report">evaluation_report() (in module quapy.evaluation)</a>
+</li>
+      <li><a href="quapy.html#quapy.model_selection.expand_grid">expand_grid() (in module quapy.model_selection)</a>
 </li>
       <li><a href="quapy.method.html#quapy.method.aggregative.ExpectationMaximizationQuantifier">ExpectationMaximizationQuantifier (in module quapy.method.aggregative)</a>
 </li>
@@ -314,6 +421,10 @@
       <li><a href="quapy.html#quapy.error.f1_error">f1_error() (in module quapy.error)</a>
 </li>
       <li><a href="quapy.html#quapy.error.f1e">f1e() (in module quapy.error)</a>
+</li>
+      <li><a href="quapy.html#quapy.model_selection.ConfigStatus.failed">failed() (quapy.model_selection.ConfigStatus method)</a>
+</li>
+      <li><a href="quapy.data.html#quapy.data.datasets.fetch_IFCB">fetch_IFCB() (in module quapy.data.datasets)</a>
 </li>
       <li><a href="quapy.data.html#quapy.data.datasets.fetch_lequa2022">fetch_lequa2022() (in module quapy.data.datasets)</a>
 </li>
@@ -321,9 +432,13 @@
 </li>
       <li><a href="quapy.data.html#quapy.data.datasets.fetch_twitter">fetch_twitter() (in module quapy.data.datasets)</a>
 </li>
-      <li><a href="quapy.data.html#quapy.data.datasets.fetch_UCIDataset">fetch_UCIDataset() (in module quapy.data.datasets)</a>
+      <li><a href="quapy.data.html#quapy.data.datasets.fetch_UCIBinaryDataset">fetch_UCIBinaryDataset() (in module quapy.data.datasets)</a>
 </li>
-      <li><a href="quapy.data.html#quapy.data.datasets.fetch_UCILabelledCollection">fetch_UCILabelledCollection() (in module quapy.data.datasets)</a>
+      <li><a href="quapy.data.html#quapy.data.datasets.fetch_UCIBinaryLabelledCollection">fetch_UCIBinaryLabelledCollection() (in module quapy.data.datasets)</a>
+</li>
+      <li><a href="quapy.data.html#quapy.data.datasets.fetch_UCIMulticlassDataset">fetch_UCIMulticlassDataset() (in module quapy.data.datasets)</a>
+</li>
+      <li><a href="quapy.data.html#quapy.data.datasets.fetch_UCIMulticlassLabelledCollection">fetch_UCIMulticlassLabelledCollection() (in module quapy.data.datasets)</a>
 </li>
       <li><a href="quapy.classification.html#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.fit">fit() (quapy.classification.calibration.RecalibratedProbabilisticClassifierBase method)</a>
 
@@ -336,27 +451,13 @@
 </li>
         <li><a href="quapy.data.html#quapy.data.preprocessing.IndexTransformer.fit">(quapy.data.preprocessing.IndexTransformer method)</a>
 </li>
-        <li><a href="quapy.method.html#quapy.method.aggregative.ACC.fit">(quapy.method.aggregative.ACC method)</a>
+        <li><a href="quapy.method.html#quapy.method._neural.QuaNetTrainer.fit">(quapy.method._neural.QuaNetTrainer method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method.aggregative.AggregativeMedianEstimator.fit">(quapy.method.aggregative.AggregativeMedianEstimator method)</a>
 </li>
         <li><a href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.fit">(quapy.method.aggregative.AggregativeQuantifier method)</a>
 </li>
-        <li><a href="quapy.method.html#quapy.method.aggregative.CC.fit">(quapy.method.aggregative.CC method)</a>
-</li>
-        <li><a href="quapy.method.html#quapy.method.aggregative.DistributionMatching.fit">(quapy.method.aggregative.DistributionMatching method)</a>
-</li>
-        <li><a href="quapy.method.html#quapy.method.aggregative.DyS.fit">(quapy.method.aggregative.DyS method)</a>
-</li>
-        <li><a href="quapy.method.html#quapy.method.aggregative.EMQ.fit">(quapy.method.aggregative.EMQ method)</a>
-</li>
-        <li><a href="quapy.method.html#quapy.method.aggregative.HDy.fit">(quapy.method.aggregative.HDy method)</a>
-</li>
-        <li><a href="quapy.method.html#quapy.method.aggregative.PACC.fit">(quapy.method.aggregative.PACC method)</a>
-</li>
-        <li><a href="quapy.method.html#quapy.method.aggregative.PCC.fit">(quapy.method.aggregative.PCC method)</a>
-</li>
-        <li><a href="quapy.method.html#quapy.method.aggregative.SMM.fit">(quapy.method.aggregative.SMM method)</a>
-</li>
-        <li><a href="quapy.method.html#quapy.method.aggregative.ThresholdOptimization.fit">(quapy.method.aggregative.ThresholdOptimization method)</a>
+        <li><a href="quapy.method.html#quapy.method.aggregative.BinaryAggregativeQuantifier.fit">(quapy.method.aggregative.BinaryAggregativeQuantifier method)</a>
 </li>
         <li><a href="quapy.method.html#quapy.method.base.BaseQuantifier.fit">(quapy.method.base.BaseQuantifier method)</a>
 </li>
@@ -364,7 +465,11 @@
 </li>
         <li><a href="quapy.method.html#quapy.method.meta.Ensemble.fit">(quapy.method.meta.Ensemble method)</a>
 </li>
-        <li><a href="quapy.method.html#quapy.method.neural.QuaNetTrainer.fit">(quapy.method.neural.QuaNetTrainer method)</a>
+        <li><a href="quapy.method.html#quapy.method.meta.MedianEstimator.fit">(quapy.method.meta.MedianEstimator method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method.meta.MedianEstimator2.fit">(quapy.method.meta.MedianEstimator2 method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method.non_aggregative.DMx.fit">(quapy.method.non_aggregative.DMx method)</a>
 </li>
         <li><a href="quapy.method.html#quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation.fit">(quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation method)</a>
 </li>
@@ -382,7 +487,7 @@
       <li><a href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.forward">forward() (quapy.classification.neural.TextClassifierNet method)</a>
 
       <ul>
-        <li><a href="quapy.method.html#quapy.method.neural.QuaNetModule.forward">(quapy.method.neural.QuaNetModule method)</a>
+        <li><a href="quapy.method.html#quapy.method._neural.QuaNetModule.forward">(quapy.method._neural.QuaNetModule method)</a>
 </li>
       </ul></li>
       <li><a href="quapy.data.html#quapy.data.reader.from_csv">from_csv() (in module quapy.data.reader)</a>
@@ -400,8 +505,14 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="quapy.html#quapy.protocol.OnLabelledCollectionProtocol.get_collator">get_collator() (quapy.protocol.OnLabelledCollectionProtocol class method)</a>
+</li>
+      <li><a href="quapy.html#quapy.functional.get_divergence">get_divergence() (in module quapy.functional)</a>
+</li>
+      <li><a href="quapy.method.html#quapy.method._kdey.KDEBase.get_kde_function">get_kde_function() (quapy.method._kdey.KDEBase method)</a>
 </li>
       <li><a href="quapy.html#quapy.protocol.OnLabelledCollectionProtocol.get_labelled_collection">get_labelled_collection() (quapy.protocol.OnLabelledCollectionProtocol method)</a>
+</li>
+      <li><a href="quapy.method.html#quapy.method._kdey.KDEBase.get_mixture_components">get_mixture_components() (quapy.method._kdey.KDEBase method)</a>
 </li>
       <li><a href="quapy.html#quapy.functional.get_nprevpoints_approximation">get_nprevpoints_approximation() (in module quapy.functional)</a>
 </li>
@@ -415,10 +526,16 @@
         <li><a href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.get_params">(quapy.classification.neural.NeuralClassifierTrainer method)</a>
 </li>
         <li><a href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.get_params">(quapy.classification.neural.TextClassifierNet method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method._neural.QuaNetTrainer.get_params">(quapy.method._neural.QuaNetTrainer method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method.aggregative.AggregativeMedianEstimator.get_params">(quapy.method.aggregative.AggregativeMedianEstimator method)</a>
 </li>
         <li><a href="quapy.method.html#quapy.method.meta.Ensemble.get_params">(quapy.method.meta.Ensemble method)</a>
 </li>
-        <li><a href="quapy.method.html#quapy.method.neural.QuaNetTrainer.get_params">(quapy.method.neural.QuaNetTrainer method)</a>
+        <li><a href="quapy.method.html#quapy.method.meta.MedianEstimator.get_params">(quapy.method.meta.MedianEstimator method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method.meta.MedianEstimator2.get_params">(quapy.method.meta.MedianEstimator2 method)</a>
 </li>
         <li><a href="quapy.html#quapy.model_selection.GridSearchQ.get_params">(quapy.model_selection.GridSearchQ method)</a>
 </li>
@@ -435,7 +552,11 @@
         <li><a href="quapy.method.html#quapy.method.aggregative.PACC.getPteCondEstim">(quapy.method.aggregative.PACC class method)</a>
 </li>
       </ul></li>
+      <li><a href="quapy.method.html#quapy.method._kdey.KDEyCS.gram_matrix_mix_sum">gram_matrix_mix_sum() (quapy.method._kdey.KDEyCS method)</a>
+</li>
       <li><a href="quapy.html#quapy.model_selection.GridSearchQ">GridSearchQ (class in quapy.model_selection)</a>
+</li>
+      <li><a href="quapy.html#quapy.model_selection.group_params">group_params() (in module quapy.model_selection)</a>
 </li>
   </ul></td>
 </tr></table>
@@ -443,6 +564,8 @@
 <h2 id="H">H</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="quapy.method.html#quapy.method.non_aggregative.DMx.HDx">HDx() (quapy.method.non_aggregative.DMx class method)</a>
+</li>
       <li><a href="quapy.method.html#quapy.method.aggregative.HDy">HDy (class in quapy.method.aggregative)</a>
 </li>
   </ul></td>
@@ -458,10 +581,12 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="quapy.data.html#quapy.data.preprocessing.index">index() (in module quapy.data.preprocessing)</a>
+</li>
+      <li><a href="quapy.data.html#quapy.data.preprocessing.IndexTransformer">IndexTransformer (class in quapy.data.preprocessing)</a>
 </li>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="quapy.data.html#quapy.data.preprocessing.IndexTransformer">IndexTransformer (class in quapy.data.preprocessing)</a>
+      <li><a href="quapy.html#quapy.model_selection.Status.INVALID">INVALID (quapy.model_selection.Status attribute)</a>
 </li>
       <li><a href="quapy.html#quapy.protocol.IterateProtocol">IterateProtocol (class in quapy.protocol)</a>
 </li>
@@ -479,14 +604,22 @@
 <h2 id="K">K</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="quapy.method.html#quapy.method._kdey.KDEBase">KDEBase (class in quapy.method._kdey)</a>
+</li>
+      <li><a href="quapy.method.html#quapy.method._kdey.KDEyCS">KDEyCS (class in quapy.method._kdey)</a>
+</li>
+      <li><a href="quapy.method.html#quapy.method._kdey.KDEyHD">KDEyHD (class in quapy.method._kdey)</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="quapy.method.html#quapy.method._kdey.KDEyML">KDEyML (class in quapy.method._kdey)</a>
+</li>
       <li><a href="quapy.data.html#quapy.data.base.Dataset.kFCV">kFCV() (quapy.data.base.Dataset class method)</a>
 
       <ul>
         <li><a href="quapy.data.html#quapy.data.base.LabelledCollection.kFCV">(quapy.data.base.LabelledCollection method)</a>
 </li>
       </ul></li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="quapy.html#quapy.error.kld">kld() (in module quapy.error)</a>
 </li>
   </ul></td>
@@ -496,6 +629,8 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="quapy.data.html#quapy.data.base.LabelledCollection">LabelledCollection (class in quapy.data.base)</a>
+</li>
+      <li><a href="quapy.html#quapy.functional.linear_search">linear_search() (in module quapy.functional)</a>
 </li>
       <li><a href="quapy.data.html#quapy.data.base.Dataset.load">load() (quapy.data.base.Dataset class method)</a>
 
@@ -517,33 +652,41 @@
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="quapy.html#quapy.error.mae">mae() (in module quapy.error)</a>
 </li>
-      <li><a href="quapy.method.html#quapy.method.neural.mae_loss">mae_loss() (in module quapy.method.neural)</a>
+      <li><a href="quapy.method.html#quapy.method._neural.mae_loss">mae_loss() (in module quapy.method._neural)</a>
 </li>
       <li><a href="quapy.html#quapy.util.map_parallel">map_parallel() (in module quapy.util)</a>
 </li>
-      <li><a href="quapy.method.html#quapy.method.aggregative.MAX">MAX (class in quapy.method.aggregative)</a>
+      <li><a href="quapy.method.html#quapy.method._threshold_optim.MAX">MAX (class in quapy.method._threshold_optim)</a>
 </li>
       <li><a href="quapy.method.html#quapy.method.aggregative.EMQ.MAX_ITER">MAX_ITER (quapy.method.aggregative.EMQ attribute)</a>
 </li>
       <li><a href="quapy.method.html#quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation">MaximumLikelihoodPrevalenceEstimation (class in quapy.method.non_aggregative)</a>
 </li>
       <li><a href="quapy.html#quapy.error.mean_absolute_error">mean_absolute_error() (in module quapy.error)</a>
+</li>
+      <li><a href="quapy.html#quapy.error.mean_normalized_absolute_error">mean_normalized_absolute_error() (in module quapy.error)</a>
+</li>
+      <li><a href="quapy.html#quapy.error.mean_normalized_relative_absolute_error">mean_normalized_relative_absolute_error() (in module quapy.error)</a>
 </li>
       <li><a href="quapy.html#quapy.error.mean_relative_absolute_error">mean_relative_absolute_error() (in module quapy.error)</a>
 </li>
-      <li><a href="quapy.method.html#quapy.method.aggregative.MedianSweep">MedianSweep (in module quapy.method.aggregative)</a>
+      <li><a href="quapy.method.html#quapy.method.meta.MedianEstimator">MedianEstimator (class in quapy.method.meta)</a>
 </li>
-      <li><a href="quapy.method.html#quapy.method.aggregative.MedianSweep2">MedianSweep2 (in module quapy.method.aggregative)</a>
+      <li><a href="quapy.method.html#quapy.method.meta.MedianEstimator2">MedianEstimator2 (class in quapy.method.meta)</a>
 </li>
       <li><a href="quapy.html#quapy.error.mkld">mkld() (in module quapy.error)</a>
+</li>
+      <li><a href="quapy.html#quapy.error.mnae">mnae() (in module quapy.error)</a>
 </li>
       <li><a href="quapy.html#quapy.error.mnkld">mnkld() (in module quapy.error)</a>
+</li>
+      <li><a href="quapy.html#quapy.error.mnrae">mnrae() (in module quapy.error)</a>
 </li>
       <li>
     module
 
       <ul>
-        <li><a href="quapy.html#module-quapy">quapy</a>
+        <li><a href="generated/quapy.html#module-quapy">quapy</a>, <a href="quapy.html#module-quapy">[1]</a>
 </li>
         <li><a href="quapy.classification.html#module-quapy.classification">quapy.classification</a>
 </li>
@@ -572,14 +715,18 @@
         <li><a href="quapy.html#module-quapy.functional">quapy.functional</a>
 </li>
         <li><a href="quapy.method.html#module-quapy.method">quapy.method</a>
+</li>
+        <li><a href="quapy.method.html#module-quapy.method._kdey">quapy.method._kdey</a>
+</li>
+        <li><a href="quapy.method.html#module-quapy.method._neural">quapy.method._neural</a>
+</li>
+        <li><a href="quapy.method.html#module-quapy.method._threshold_optim">quapy.method._threshold_optim</a>
 </li>
         <li><a href="quapy.method.html#module-quapy.method.aggregative">quapy.method.aggregative</a>
 </li>
         <li><a href="quapy.method.html#module-quapy.method.base">quapy.method.base</a>
 </li>
         <li><a href="quapy.method.html#module-quapy.method.meta">quapy.method.meta</a>
-</li>
-        <li><a href="quapy.method.html#module-quapy.method.neural">quapy.method.neural</a>
 </li>
         <li><a href="quapy.method.html#module-quapy.method.non_aggregative">quapy.method.non_aggregative</a>
 </li>
@@ -596,9 +743,9 @@
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="quapy.html#quapy.error.mrae">mrae() (in module quapy.error)</a>
 </li>
-      <li><a href="quapy.method.html#quapy.method.aggregative.MS">MS (class in quapy.method.aggregative)</a>
+      <li><a href="quapy.method.html#quapy.method._threshold_optim.MS">MS (class in quapy.method._threshold_optim)</a>
 </li>
-      <li><a href="quapy.method.html#quapy.method.aggregative.MS2">MS2 (class in quapy.method.aggregative)</a>
+      <li><a href="quapy.method.html#quapy.method._threshold_optim.MS2">MS2 (class in quapy.method._threshold_optim)</a>
 </li>
       <li><a href="quapy.html#quapy.error.mse">mse() (in module quapy.error)</a>
 </li>
@@ -614,9 +761,13 @@
         <li><a href="quapy.data.html#quapy.data.base.LabelledCollection.n_classes">(quapy.data.base.LabelledCollection property)</a>
 </li>
       </ul></li>
+      <li><a href="quapy.html#quapy.error.nae">nae() (in module quapy.error)</a>
+</li>
       <li><a href="quapy.html#quapy.protocol.NaturalPrevalenceProtocol">NaturalPrevalenceProtocol (in module quapy.protocol)</a>
 </li>
       <li><a href="quapy.classification.html#quapy.classification.calibration.NBVSCalibration">NBVSCalibration (class in quapy.classification.calibration)</a>
+</li>
+      <li><a href="quapy.method.html#quapy.method.aggregative.BinaryAggregativeQuantifier.neg_label">neg_label (quapy.method.aggregative.BinaryAggregativeQuantifier property)</a>
 </li>
       <li><a href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer">NeuralClassifierTrainer (class in quapy.classification.neural)</a>
 </li>
@@ -624,10 +775,10 @@
 </li>
       <li><a href="quapy.method.html#quapy.method.base.newOneVsAll">newOneVsAll() (in module quapy.method.base)</a>
 </li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="quapy.method.html#quapy.method.aggregative.newSVMAE">newSVMAE() (in module quapy.method.aggregative)</a>
 </li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="quapy.method.html#quapy.method.aggregative.newSVMKLD">newSVMKLD() (in module quapy.method.aggregative)</a>
 </li>
       <li><a href="quapy.method.html#quapy.method.aggregative.newSVMQ">newSVMQ() (in module quapy.method.aggregative)</a>
@@ -637,8 +788,14 @@
       <li><a href="quapy.html#quapy.error.nkld">nkld() (in module quapy.error)</a>
 </li>
       <li><a href="quapy.html#quapy.functional.normalize_prevalence">normalize_prevalence() (in module quapy.functional)</a>
+</li>
+      <li><a href="quapy.html#quapy.error.normalized_absolute_error">normalized_absolute_error() (in module quapy.error)</a>
+</li>
+      <li><a href="quapy.html#quapy.error.normalized_relative_absolute_error">normalized_relative_absolute_error() (in module quapy.error)</a>
 </li>
       <li><a href="quapy.html#quapy.protocol.NPP">NPP (class in quapy.protocol)</a>
+</li>
+      <li><a href="quapy.html#quapy.error.nrae">nrae() (in module quapy.error)</a>
 </li>
       <li><a href="quapy.html#quapy.functional.num_prevalence_combinations">num_prevalence_combinations() (in module quapy.functional)</a>
 </li>
@@ -652,13 +809,15 @@
 </li>
       <li><a href="quapy.method.html#quapy.method.base.OneVsAll">OneVsAll (class in quapy.method.base)</a>
 </li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="quapy.method.html#quapy.method.aggregative.OneVsAllAggregative">OneVsAllAggregative (class in quapy.method.aggregative)</a>
 </li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="quapy.method.html#quapy.method.base.OneVsAllGeneric">OneVsAllGeneric (class in quapy.method.base)</a>
 </li>
       <li><a href="quapy.html#quapy.protocol.OnLabelledCollectionProtocol">OnLabelledCollectionProtocol (class in quapy.protocol)</a>
+</li>
+      <li><a href="quapy.html#quapy.functional.optim_minimize">optim_minimize() (in module quapy.functional)</a>
 </li>
   </ul></td>
 </tr></table>
@@ -673,8 +832,12 @@
       <li><a href="quapy.html#quapy.util.parallel">parallel() (in module quapy.util)</a>
 </li>
       <li><a href="quapy.method.html#quapy.method.aggregative.PCC">PCC (class in quapy.method.aggregative)</a>
+</li>
+      <li><a href="quapy.method.html#quapy.method._kdey.KDEBase.pdf">pdf() (quapy.method._kdey.KDEBase method)</a>
 </li>
       <li><a href="quapy.html#quapy.util.pickled_resource">pickled_resource() (in module quapy.util)</a>
+</li>
+      <li><a href="quapy.method.html#quapy.method.aggregative.BinaryAggregativeQuantifier.pos_label">pos_label (quapy.method.aggregative.BinaryAggregativeQuantifier property)</a>
 </li>
       <li><a href="quapy.classification.html#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.predict">predict() (quapy.classification.calibration.RecalibratedProbabilisticClassifierBase method)</a>
 
@@ -724,20 +887,28 @@
 <h2 id="Q">Q</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="quapy.method.html#quapy.method.neural.QuaNetModule">QuaNetModule (class in quapy.method.neural)</a>
+      <li><a href="quapy.method.html#quapy.method._neural.QuaNetModule">QuaNetModule (class in quapy.method._neural)</a>
 </li>
-      <li><a href="quapy.method.html#quapy.method.neural.QuaNetTrainer">QuaNetTrainer (class in quapy.method.neural)</a>
+      <li><a href="quapy.method.html#quapy.method._neural.QuaNetTrainer">QuaNetTrainer (class in quapy.method._neural)</a>
 </li>
-      <li><a href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.quantify">quantify() (quapy.method.aggregative.AggregativeQuantifier method)</a>
+      <li><a href="quapy.method.html#quapy.method._neural.QuaNetTrainer.quantify">quantify() (quapy.method._neural.QuaNetTrainer method)</a>
 
       <ul>
+        <li><a href="quapy.method.html#quapy.method.aggregative.AggregativeMedianEstimator.quantify">(quapy.method.aggregative.AggregativeMedianEstimator method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.quantify">(quapy.method.aggregative.AggregativeQuantifier method)</a>
+</li>
         <li><a href="quapy.method.html#quapy.method.base.BaseQuantifier.quantify">(quapy.method.base.BaseQuantifier method)</a>
 </li>
         <li><a href="quapy.method.html#quapy.method.base.OneVsAllGeneric.quantify">(quapy.method.base.OneVsAllGeneric method)</a>
 </li>
         <li><a href="quapy.method.html#quapy.method.meta.Ensemble.quantify">(quapy.method.meta.Ensemble method)</a>
 </li>
-        <li><a href="quapy.method.html#quapy.method.neural.QuaNetTrainer.quantify">(quapy.method.neural.QuaNetTrainer method)</a>
+        <li><a href="quapy.method.html#quapy.method.meta.MedianEstimator.quantify">(quapy.method.meta.MedianEstimator method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method.meta.MedianEstimator2.quantify">(quapy.method.meta.MedianEstimator2 method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method.non_aggregative.DMx.quantify">(quapy.method.non_aggregative.DMx method)</a>
 </li>
         <li><a href="quapy.method.html#quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation.quantify">(quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation method)</a>
 </li>
@@ -748,7 +919,7 @@
     quapy
 
       <ul>
-        <li><a href="quapy.html#module-quapy">module</a>
+        <li><a href="generated/quapy.html#module-quapy">module</a>, <a href="quapy.html#module-quapy">[1]</a>
 </li>
       </ul></li>
       <li>
@@ -849,6 +1020,27 @@
 
       <ul>
         <li><a href="quapy.method.html#module-quapy.method">module</a>
+</li>
+      </ul></li>
+      <li>
+    quapy.method._kdey
+
+      <ul>
+        <li><a href="quapy.method.html#module-quapy.method._kdey">module</a>
+</li>
+      </ul></li>
+      <li>
+    quapy.method._neural
+
+      <ul>
+        <li><a href="quapy.method.html#module-quapy.method._neural">module</a>
+</li>
+      </ul></li>
+      <li>
+    quapy.method._threshold_optim
+
+      <ul>
+        <li><a href="quapy.method.html#module-quapy.method._threshold_optim">module</a>
 </li>
       </ul></li>
       <li>
@@ -870,13 +1062,6 @@
 
       <ul>
         <li><a href="quapy.method.html#module-quapy.method.meta">module</a>
-</li>
-      </ul></li>
-      <li>
-    quapy.method.neural
-
-      <ul>
-        <li><a href="quapy.method.html#module-quapy.method.neural">module</a>
 </li>
       </ul></li>
       <li>
@@ -986,10 +1171,16 @@
 
       <ul>
         <li><a href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.set_params">(quapy.classification.neural.NeuralClassifierTrainer method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method._neural.QuaNetTrainer.set_params">(quapy.method._neural.QuaNetTrainer method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method.aggregative.AggregativeMedianEstimator.set_params">(quapy.method.aggregative.AggregativeMedianEstimator method)</a>
 </li>
         <li><a href="quapy.method.html#quapy.method.meta.Ensemble.set_params">(quapy.method.meta.Ensemble method)</a>
 </li>
-        <li><a href="quapy.method.html#quapy.method.neural.QuaNetTrainer.set_params">(quapy.method.neural.QuaNetTrainer method)</a>
+        <li><a href="quapy.method.html#quapy.method.meta.MedianEstimator.set_params">(quapy.method.meta.MedianEstimator method)</a>
+</li>
+        <li><a href="quapy.method.html#quapy.method.meta.MedianEstimator2.set_params">(quapy.method.meta.MedianEstimator2 method)</a>
 </li>
         <li><a href="quapy.html#quapy.model_selection.GridSearchQ.set_params">(quapy.model_selection.GridSearchQ method)</a>
 </li>
@@ -1018,7 +1209,13 @@
         <li><a href="quapy.data.html#quapy.data.base.LabelledCollection.stats">(quapy.data.base.LabelledCollection method)</a>
 </li>
       </ul></li>
+      <li><a href="quapy.html#quapy.model_selection.Status">Status (class in quapy.model_selection)</a>
+</li>
       <li><a href="quapy.html#quapy.functional.strprev">strprev() (in module quapy.functional)</a>
+</li>
+      <li><a href="quapy.html#quapy.model_selection.Status.SUCCESS">SUCCESS (quapy.model_selection.Status attribute)</a>
+</li>
+      <li><a href="quapy.html#quapy.model_selection.ConfigStatus.success">success() (quapy.model_selection.ConfigStatus method)</a>
 </li>
       <li><a href="quapy.classification.html#quapy.classification.svmperf.SVMperf">SVMperf (class in quapy.classification.svmperf)</a>
 </li>
@@ -1028,7 +1225,7 @@
 <h2 id="T">T</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="quapy.method.html#quapy.method.aggregative.T50">T50 (class in quapy.method.aggregative)</a>
+      <li><a href="quapy.method.html#quapy.method._threshold_optim.T50">T50 (class in quapy.method._threshold_optim)</a>
 </li>
       <li><a href="quapy.html#quapy.util.temp_seed">temp_seed() (in module quapy.util)</a>
 </li>
@@ -1036,7 +1233,11 @@
 </li>
       <li><a href="quapy.classification.html#quapy.classification.neural.TextClassifierNet">TextClassifierNet (class in quapy.classification.neural)</a>
 </li>
-      <li><a href="quapy.method.html#quapy.method.aggregative.ThresholdOptimization">ThresholdOptimization (class in quapy.method.aggregative)</a>
+      <li><a href="quapy.method.html#quapy.method._threshold_optim.ThresholdOptimization">ThresholdOptimization (class in quapy.method._threshold_optim)</a>
+</li>
+      <li><a href="quapy.html#quapy.model_selection.Status.TIMEOUT">TIMEOUT (quapy.model_selection.Status attribute)</a>
+</li>
+      <li><a href="quapy.html#quapy.util.timeout">timeout() (in module quapy.util)</a>
 </li>
       <li><a href="quapy.html#quapy.functional.TopsoeDistance">TopsoeDistance() (in module quapy.functional)</a>
 </li>
@@ -1060,16 +1261,6 @@
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="quapy.data.html#quapy.data.base.Dataset.train_test">train_test (quapy.data.base.Dataset property)</a>
 </li>
-      <li><a href="quapy.classification.html#quapy.classification.neural.CNNnet.training">training (quapy.classification.neural.CNNnet attribute)</a>
-
-      <ul>
-        <li><a href="quapy.classification.html#quapy.classification.neural.LSTMnet.training">(quapy.classification.neural.LSTMnet attribute)</a>
-</li>
-        <li><a href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.training">(quapy.classification.neural.TextClassifierNet attribute)</a>
-</li>
-        <li><a href="quapy.method.html#quapy.method.neural.QuaNetModule.training">(quapy.method.neural.QuaNetModule attribute)</a>
-</li>
-      </ul></li>
       <li><a href="quapy.classification.html#quapy.classification.methods.LowRankLogisticRegression.transform">transform() (quapy.classification.methods.LowRankLogisticRegression method)</a>
 
       <ul>
@@ -1106,6 +1297,10 @@
 <h2 id="V">V</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.val_split">val_split (quapy.method.aggregative.AggregativeQuantifier property)</a>
+</li>
+      <li><a href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.val_split_">val_split_ (quapy.method.aggregative.AggregativeQuantifier attribute)</a>
+</li>
       <li><a href="quapy.classification.html#quapy.classification.svmperf.SVMperf.valid_losses">valid_losses (quapy.classification.svmperf.SVMperf attribute)</a>
 </li>
       <li><a href="quapy.method.html#quapy.method.meta.Ensemble.VALID_POLICIES">VALID_POLICIES (quapy.method.meta.Ensemble attribute)</a>
@@ -1140,7 +1335,7 @@
 <h2 id="X">X</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="quapy.method.html#quapy.method.aggregative.X">X (class in quapy.method.aggregative)</a>
+      <li><a href="quapy.method.html#quapy.method._threshold_optim.X">X (class in quapy.method._threshold_optim)</a>
 
       <ul>
         <li><a href="quapy.data.html#quapy.data.base.LabelledCollection.X">(quapy.data.base.LabelledCollection property)</a>
@@ -1167,42 +1362,31 @@
 
 
 
-            <div class="clearer"></div>
+           </div>
           </div>
+          <footer>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2024, Alejandro Moreo.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
         </div>
       </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Quick search</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
-      <input type="submit" value="Go" />
-    </form>
-    </div>
-</div>
-<script>document.getElementById('searchbox').style.display = "block"</script>
-        </div>
-      </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="#" title="General Index"
-             >index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">Index</a></li> 
-      </ul>
-    </div>
-    <div class="footer" role="contentinfo">
-        &#169; Copyright 2021, Alejandro Moreo.
-      Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
-    </div>
-  </body>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
 </html>
\ No newline at end of file
diff --git a/docs/build/html/index.html b/docs/build/html/index.html
index 14faf1f..89d92c8 100644
--- a/docs/build/html/index.html
+++ b/docs/build/html/index.html
@@ -1,171 +1,679 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" data-content_root="./">
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
 
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Welcome to QuaPy’s documentation! &mdash; QuaPy: A Python-based open-source framework for quantification 0.1.8 documentation</title>
+      <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=92fd9be5" />
+      <link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=19f00094" />
 
-<!doctype html>
-
-<html lang="en">
-  <head>
-    <meta charset="utf-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
-
-    <title>Welcome to QuaPy’s documentation! &#8212; QuaPy 0.1.7 documentation</title>
-    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
-    <link rel="stylesheet" type="text/css" href="_static/bizstyle.css" />
-    
-    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
-    <script src="_static/jquery.js"></script>
-    <script src="_static/underscore.js"></script>
-    <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
-    <script src="_static/doctools.js"></script>
-    <script src="_static/sphinx_highlight.js"></script>
-    <script src="_static/bizstyle.js"></script>
+  
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script src="_static/jquery.js?v=5d32c60e"></script>
+        <script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
+        <script src="_static/documentation_options.js?v=22607128"></script>
+        <script src="_static/doctools.js?v=9a2dae69"></script>
+        <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+        <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
-    <link rel="next" title="Installation" href="Installation.html" />
-    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
-    <!--[if lt IE 9]>
-    <script src="_static/css3-mediaqueries.js"></script>
-    <![endif]-->
-  </head><body>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             accesskey="I">index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="right" >
-          <a href="Installation.html" title="Installation"
-             accesskey="N">next</a> |</li>
-        <li class="nav-item nav-item-0"><a href="#">QuaPy 0.1.7 documentation</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">Welcome to QuaPy’s documentation!</a></li> 
-      </ul>
-    </div>  
+    <link rel="next" title="quapy" href="modules.html" /> 
+</head>
 
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          <div class="body" role="main">
-            
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+
+          
+          
+          <a href="#" class="icon icon-home">
+            QuaPy: A Python-based open-source framework for quantification
+          </a>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <ul>
+<li class="toctree-l1"><a class="reference internal" href="modules.html">quapy</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="#">QuaPy: A Python-based open-source framework for quantification</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="#" class="icon icon-home" aria-label="Home"></a></li>
+      <li class="breadcrumb-item active">Welcome to QuaPy’s documentation!</li>
+      <li class="wy-breadcrumbs-aside">
+            <a href="_sources/index.rst.txt" rel="nofollow"> View page source</a>
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
   <section id="welcome-to-quapy-s-documentation">
-<h1>Welcome to QuaPy’s documentation!<a class="headerlink" href="#welcome-to-quapy-s-documentation" title="Permalink to this heading">¶</a></h1>
-<p>QuaPy is an open source framework for Quantification (a.k.a. Supervised Prevalence Estimation)
-written in Python.</p>
-<section id="introduction">
-<h2>Introduction<a class="headerlink" href="#introduction" title="Permalink to this heading">¶</a></h2>
-<p>QuaPy roots on the concept of data sample, and provides implementations of most important concepts
-in quantification literature, such as the most important quantification baselines, many advanced
-quantification methods, quantification-oriented model selection, many evaluation measures and protocols
-used for evaluating quantification methods.
-QuaPy also integrates commonly used datasets and offers visualization tools for facilitating the analysis and
-interpretation of results.</p>
-<section id="a-quick-example">
-<h3>A quick example:<a class="headerlink" href="#a-quick-example" title="Permalink to this heading">¶</a></h3>
-<p>The following script fetchs a Twitter dataset, trains and evaluates an
-<cite>Adjusted Classify &amp; Count</cite> model in terms of the <cite>Mean Absolute Error</cite> (MAE)
-between the class prevalences estimated for the test set and the true prevalences
-of the test set.</p>
-<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">quapy</span> <span class="k">as</span> <span class="nn">qp</span>
-<span class="kn">from</span> <span class="nn">sklearn.linear_model</span> <span class="kn">import</span> <span class="n">LogisticRegression</span>
-
-<span class="n">dataset</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">fetch_twitter</span><span class="p">(</span><span class="s1">&#39;semeval16&#39;</span><span class="p">)</span>
-
-<span class="c1"># create an &quot;Adjusted Classify &amp; Count&quot; quantifier</span>
-<span class="n">model</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">method</span><span class="o">.</span><span class="n">aggregative</span><span class="o">.</span><span class="n">ACC</span><span class="p">(</span><span class="n">LogisticRegression</span><span class="p">())</span>
-<span class="n">model</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">dataset</span><span class="o">.</span><span class="n">training</span><span class="p">)</span>
-
-<span class="n">estim_prevalences</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">quantify</span><span class="p">(</span><span class="n">dataset</span><span class="o">.</span><span class="n">test</span><span class="o">.</span><span class="n">instances</span><span class="p">)</span>
-<span class="n">true_prevalences</span>  <span class="o">=</span> <span class="n">dataset</span><span class="o">.</span><span class="n">test</span><span class="o">.</span><span class="n">prevalence</span><span class="p">()</span>
-
-<span class="n">error</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">error</span><span class="o">.</span><span class="n">mae</span><span class="p">(</span><span class="n">true_prevalences</span><span class="p">,</span> <span class="n">estim_prevalences</span><span class="p">)</span>
-
-<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;Mean Absolute Error (MAE)=</span><span class="si">{</span><span class="n">error</span><span class="si">:</span><span class="s1">.3f</span><span class="si">}</span><span class="s1">&#39;</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>Quantification is useful in scenarios of prior probability shift. In other
-words, we would not be interested in estimating the class prevalences of the test set if
-we could assume the IID assumption to hold, as this prevalence would simply coincide with the
-class prevalence of the training set. For this reason, any Quantification model
-should be tested across samples characterized by different class prevalences.
-QuaPy implements sampling procedures and evaluation protocols that automates this endeavour.
-See the <a class="reference internal" href="Evaluation.html"><span class="doc">Evaluation</span></a> for detailed examples.</p>
+<h1>Welcome to QuaPy’s documentation!<a class="headerlink" href="#welcome-to-quapy-s-documentation" title="Link to this heading"></a></h1>
+<p>QuaPy is a Python-based open-source framework for quantification.</p>
+<p>This document contains the API of the modules included in QuaPy.</p>
+<section id="installation">
+<h2>Installation<a class="headerlink" href="#installation" title="Link to this heading"></a></h2>
+<p><cite>pip install quapy</cite></p>
 </section>
-<section id="features">
-<h3>Features<a class="headerlink" href="#features" title="Permalink to this heading">¶</a></h3>
-<ul class="simple">
-<li><p>Implementation of most popular quantification methods (Classify-&amp;-Count variants, Expectation-Maximization, SVM-based variants for quantification, HDy, QuaNet, and Ensembles).</p></li>
-<li><p>Versatile functionality for performing evaluation based on artificial sampling protocols.</p></li>
-<li><p>Implementation of most commonly used evaluation metrics (e.g., MAE, MRAE, MSE, NKLD, etc.).</p></li>
-<li><dl class="simple">
-<dt>Popular datasets for Quantification (textual and numeric) available, including:</dt><dd><ul>
-<li><p>32 UCI Machine Learning datasets.</p></li>
-<li><p>11 Twitter Sentiment datasets.</p></li>
-<li><p>3 Reviews Sentiment datasets.</p></li>
-<li><p>4 tasks from LeQua competition (_new in v0.1.7!_)</p></li>
-</ul>
-</dd>
-</dl>
-</li>
-<li><p>Native supports for binary and single-label scenarios of quantification.</p></li>
-<li><p>Model selection functionality targeting quantification-oriented losses.</p></li>
-<li><p>Visualization tools for analysing results.</p></li>
-</ul>
+<section id="github">
+<h2>GitHub<a class="headerlink" href="#github" title="Link to this heading"></a></h2>
+<p>QuaPy is hosted in GitHub at <a class="reference external" href="https://github.com/HLT-ISTI/QuaPy">https://github.com/HLT-ISTI/QuaPy</a></p>
+<div class="toctree-wrapper compound">
+</div>
+</section>
+<section id="contents">
+<h2>Contents<a class="headerlink" href="#contents" title="Link to this heading"></a></h2>
 <div class="toctree-wrapper compound">
-<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
 <ul>
-<li class="toctree-l1"><a class="reference internal" href="Installation.html">Installation</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="Installation.html#requirements">Requirements</a></li>
-<li class="toctree-l2"><a class="reference internal" href="Installation.html#svm-perf-with-quantification-oriented-losses">SVM-perf with quantification-oriented losses</a></li>
+<li class="toctree-l1"><a class="reference internal" href="modules.html">quapy</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="quapy.html">quapy package</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#subpackages">Subpackages</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html">quapy.classification package</a><ul>
+<li class="toctree-l5"><a class="reference internal" href="quapy.classification.html#submodules">Submodules</a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.classification.html#module-quapy.classification.calibration">quapy.classification.calibration module</a><ul>
+<li class="toctree-l6"><a class="reference internal" href="quapy.classification.html#quapy.classification.calibration.BCTSCalibration"><code class="docutils literal notranslate"><span class="pre">BCTSCalibration</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.classification.html#quapy.classification.calibration.NBVSCalibration"><code class="docutils literal notranslate"><span class="pre">NBVSCalibration</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.classification.html#quapy.classification.calibration.RecalibratedProbabilisticClassifier"><code class="docutils literal notranslate"><span class="pre">RecalibratedProbabilisticClassifier</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.classification.html#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase"><code class="docutils literal notranslate"><span class="pre">RecalibratedProbabilisticClassifierBase</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.classes_"><code class="docutils literal notranslate"><span class="pre">RecalibratedProbabilisticClassifierBase.classes_</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.fit"><code class="docutils literal notranslate"><span class="pre">RecalibratedProbabilisticClassifierBase.fit()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.fit_cv"><code class="docutils literal notranslate"><span class="pre">RecalibratedProbabilisticClassifierBase.fit_cv()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.fit_tr_val"><code class="docutils literal notranslate"><span class="pre">RecalibratedProbabilisticClassifierBase.fit_tr_val()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.predict"><code class="docutils literal notranslate"><span class="pre">RecalibratedProbabilisticClassifierBase.predict()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.predict_proba"><code class="docutils literal notranslate"><span class="pre">RecalibratedProbabilisticClassifierBase.predict_proba()</span></code></a></li>
 </ul>
 </li>
-<li class="toctree-l1"><a class="reference internal" href="Datasets.html">Datasets</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="Datasets.html#reviews-datasets">Reviews Datasets</a></li>
-<li class="toctree-l2"><a class="reference internal" href="Datasets.html#twitter-sentiment-datasets">Twitter Sentiment Datasets</a></li>
-<li class="toctree-l2"><a class="reference internal" href="Datasets.html#uci-machine-learning">UCI Machine Learning</a></li>
-<li class="toctree-l2"><a class="reference internal" href="Datasets.html#lequa-datasets">LeQua Datasets</a></li>
-<li class="toctree-l2"><a class="reference internal" href="Datasets.html#adding-custom-datasets">Adding Custom Datasets</a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.classification.html#quapy.classification.calibration.TSCalibration"><code class="docutils literal notranslate"><span class="pre">TSCalibration</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.classification.html#quapy.classification.calibration.VSCalibration"><code class="docutils literal notranslate"><span class="pre">VSCalibration</span></code></a></li>
 </ul>
 </li>
-<li class="toctree-l1"><a class="reference internal" href="Evaluation.html">Evaluation</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="Evaluation.html#error-measures">Error Measures</a></li>
-<li class="toctree-l2"><a class="reference internal" href="Evaluation.html#evaluation-protocols">Evaluation Protocols</a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.classification.html#module-quapy.classification.methods">quapy.classification.methods module</a><ul>
+<li class="toctree-l6"><a class="reference internal" href="quapy.classification.html#quapy.classification.methods.LowRankLogisticRegression"><code class="docutils literal notranslate"><span class="pre">LowRankLogisticRegression</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.methods.LowRankLogisticRegression.fit"><code class="docutils literal notranslate"><span class="pre">LowRankLogisticRegression.fit()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.methods.LowRankLogisticRegression.get_params"><code class="docutils literal notranslate"><span class="pre">LowRankLogisticRegression.get_params()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.methods.LowRankLogisticRegression.predict"><code class="docutils literal notranslate"><span class="pre">LowRankLogisticRegression.predict()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.methods.LowRankLogisticRegression.predict_proba"><code class="docutils literal notranslate"><span class="pre">LowRankLogisticRegression.predict_proba()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.methods.LowRankLogisticRegression.set_params"><code class="docutils literal notranslate"><span class="pre">LowRankLogisticRegression.set_params()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.methods.LowRankLogisticRegression.transform"><code class="docutils literal notranslate"><span class="pre">LowRankLogisticRegression.transform()</span></code></a></li>
 </ul>
 </li>
-<li class="toctree-l1"><a class="reference internal" href="Protocols.html">Protocols</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="Protocols.html#artificial-prevalence-protocol">Artificial-Prevalence Protocol</a></li>
-<li class="toctree-l2"><a class="reference internal" href="Protocols.html#sampling-from-the-unit-simplex-the-uniform-prevalence-protocol-upp">Sampling from the unit-simplex, the Uniform-Prevalence Protocol (UPP)</a></li>
-<li class="toctree-l2"><a class="reference internal" href="Protocols.html#natural-prevalence-protocol">Natural-Prevalence Protocol</a></li>
-<li class="toctree-l2"><a class="reference internal" href="Protocols.html#other-protocols">Other protocols</a></li>
 </ul>
 </li>
-<li class="toctree-l1"><a class="reference internal" href="Methods.html">Quantification Methods</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="Methods.html#aggregative-methods">Aggregative Methods</a></li>
-<li class="toctree-l2"><a class="reference internal" href="Methods.html#meta-models">Meta Models</a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.classification.html#module-quapy.classification.neural">quapy.classification.neural module</a><ul>
+<li class="toctree-l6"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.CNNnet"><code class="docutils literal notranslate"><span class="pre">CNNnet</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.CNNnet.document_embedding"><code class="docutils literal notranslate"><span class="pre">CNNnet.document_embedding()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.CNNnet.get_params"><code class="docutils literal notranslate"><span class="pre">CNNnet.get_params()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.CNNnet.vocabulary_size"><code class="docutils literal notranslate"><span class="pre">CNNnet.vocabulary_size</span></code></a></li>
 </ul>
 </li>
-<li class="toctree-l1"><a class="reference internal" href="Model-Selection.html">Model Selection</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="Model-Selection.html#targeting-a-quantification-oriented-loss">Targeting a Quantification-oriented loss</a></li>
-<li class="toctree-l2"><a class="reference internal" href="Model-Selection.html#targeting-a-classification-oriented-loss">Targeting a Classification-oriented loss</a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.LSTMnet"><code class="docutils literal notranslate"><span class="pre">LSTMnet</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.LSTMnet.document_embedding"><code class="docutils literal notranslate"><span class="pre">LSTMnet.document_embedding()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.LSTMnet.get_params"><code class="docutils literal notranslate"><span class="pre">LSTMnet.get_params()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.LSTMnet.vocabulary_size"><code class="docutils literal notranslate"><span class="pre">LSTMnet.vocabulary_size</span></code></a></li>
 </ul>
 </li>
-<li class="toctree-l1"><a class="reference internal" href="Plotting.html">Plotting</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="Plotting.html#diagonal-plot">Diagonal Plot</a></li>
-<li class="toctree-l2"><a class="reference internal" href="Plotting.html#quantification-bias">Quantification bias</a></li>
-<li class="toctree-l2"><a class="reference internal" href="Plotting.html#error-by-drift">Error by Drift</a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer"><code class="docutils literal notranslate"><span class="pre">NeuralClassifierTrainer</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.device"><code class="docutils literal notranslate"><span class="pre">NeuralClassifierTrainer.device</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.fit"><code class="docutils literal notranslate"><span class="pre">NeuralClassifierTrainer.fit()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.get_params"><code class="docutils literal notranslate"><span class="pre">NeuralClassifierTrainer.get_params()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.predict"><code class="docutils literal notranslate"><span class="pre">NeuralClassifierTrainer.predict()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.predict_proba"><code class="docutils literal notranslate"><span class="pre">NeuralClassifierTrainer.predict_proba()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.reset_net_params"><code class="docutils literal notranslate"><span class="pre">NeuralClassifierTrainer.reset_net_params()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.set_params"><code class="docutils literal notranslate"><span class="pre">NeuralClassifierTrainer.set_params()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.transform"><code class="docutils literal notranslate"><span class="pre">NeuralClassifierTrainer.transform()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.TextClassifierNet"><code class="docutils literal notranslate"><span class="pre">TextClassifierNet</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.dimensions"><code class="docutils literal notranslate"><span class="pre">TextClassifierNet.dimensions()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.document_embedding"><code class="docutils literal notranslate"><span class="pre">TextClassifierNet.document_embedding()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.forward"><code class="docutils literal notranslate"><span class="pre">TextClassifierNet.forward()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.get_params"><code class="docutils literal notranslate"><span class="pre">TextClassifierNet.get_params()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.predict_proba"><code class="docutils literal notranslate"><span class="pre">TextClassifierNet.predict_proba()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.vocabulary_size"><code class="docutils literal notranslate"><span class="pre">TextClassifierNet.vocabulary_size</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.xavier_uniform"><code class="docutils literal notranslate"><span class="pre">TextClassifierNet.xavier_uniform()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.TorchDataset"><code class="docutils literal notranslate"><span class="pre">TorchDataset</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.TorchDataset.asDataloader"><code class="docutils literal notranslate"><span class="pre">TorchDataset.asDataloader()</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.classification.html#module-quapy.classification.svmperf">quapy.classification.svmperf module</a><ul>
+<li class="toctree-l6"><a class="reference internal" href="quapy.classification.html#quapy.classification.svmperf.SVMperf"><code class="docutils literal notranslate"><span class="pre">SVMperf</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.svmperf.SVMperf.decision_function"><code class="docutils literal notranslate"><span class="pre">SVMperf.decision_function()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.svmperf.SVMperf.fit"><code class="docutils literal notranslate"><span class="pre">SVMperf.fit()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.svmperf.SVMperf.predict"><code class="docutils literal notranslate"><span class="pre">SVMperf.predict()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.classification.html#quapy.classification.svmperf.SVMperf.valid_losses"><code class="docutils literal notranslate"><span class="pre">SVMperf.valid_losses</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.classification.html#module-quapy.classification">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html">quapy.data package</a><ul>
+<li class="toctree-l5"><a class="reference internal" href="quapy.data.html#submodules">Submodules</a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.data.html#module-quapy.data.base">quapy.data.base module</a><ul>
+<li class="toctree-l6"><a class="reference internal" href="quapy.data.html#quapy.data.base.Dataset"><code class="docutils literal notranslate"><span class="pre">Dataset</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.Dataset.SplitStratified"><code class="docutils literal notranslate"><span class="pre">Dataset.SplitStratified()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.Dataset.binary"><code class="docutils literal notranslate"><span class="pre">Dataset.binary</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.Dataset.classes_"><code class="docutils literal notranslate"><span class="pre">Dataset.classes_</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.Dataset.kFCV"><code class="docutils literal notranslate"><span class="pre">Dataset.kFCV()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.Dataset.load"><code class="docutils literal notranslate"><span class="pre">Dataset.load()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.Dataset.n_classes"><code class="docutils literal notranslate"><span class="pre">Dataset.n_classes</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.Dataset.reduce"><code class="docutils literal notranslate"><span class="pre">Dataset.reduce()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.Dataset.stats"><code class="docutils literal notranslate"><span class="pre">Dataset.stats()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.Dataset.train_test"><code class="docutils literal notranslate"><span class="pre">Dataset.train_test</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.Dataset.vocabulary_size"><code class="docutils literal notranslate"><span class="pre">Dataset.vocabulary_size</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection"><code class="docutils literal notranslate"><span class="pre">LabelledCollection</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.X"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.X</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.Xp"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.Xp</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.Xy"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.Xy</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.binary"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.binary</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.counts"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.counts()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.join"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.join()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.kFCV"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.kFCV()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.load"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.load()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.n_classes"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.n_classes</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.p"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.p</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.prevalence"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.prevalence()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.sampling"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.sampling()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.sampling_from_index"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.sampling_from_index()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.sampling_index"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.sampling_index()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.split_random"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.split_random()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.split_stratified"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.split_stratified()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.stats"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.stats()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.uniform_sampling"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.uniform_sampling()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.uniform_sampling_index"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.uniform_sampling_index()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.y"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.y</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.data.html#module-quapy.data.datasets">quapy.data.datasets module</a><ul>
+<li class="toctree-l6"><a class="reference internal" href="quapy.data.html#quapy.data.datasets.fetch_IFCB"><code class="docutils literal notranslate"><span class="pre">fetch_IFCB()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.data.html#quapy.data.datasets.fetch_UCIBinaryDataset"><code class="docutils literal notranslate"><span class="pre">fetch_UCIBinaryDataset()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.data.html#quapy.data.datasets.fetch_UCIBinaryLabelledCollection"><code class="docutils literal notranslate"><span class="pre">fetch_UCIBinaryLabelledCollection()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.data.html#quapy.data.datasets.fetch_UCIMulticlassDataset"><code class="docutils literal notranslate"><span class="pre">fetch_UCIMulticlassDataset()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.data.html#quapy.data.datasets.fetch_UCIMulticlassLabelledCollection"><code class="docutils literal notranslate"><span class="pre">fetch_UCIMulticlassLabelledCollection()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.data.html#quapy.data.datasets.fetch_lequa2022"><code class="docutils literal notranslate"><span class="pre">fetch_lequa2022()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.data.html#quapy.data.datasets.fetch_reviews"><code class="docutils literal notranslate"><span class="pre">fetch_reviews()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.data.html#quapy.data.datasets.fetch_twitter"><code class="docutils literal notranslate"><span class="pre">fetch_twitter()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.data.html#quapy.data.datasets.warn"><code class="docutils literal notranslate"><span class="pre">warn()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.data.html#module-quapy.data.preprocessing">quapy.data.preprocessing module</a><ul>
+<li class="toctree-l6"><a class="reference internal" href="quapy.data.html#quapy.data.preprocessing.IndexTransformer"><code class="docutils literal notranslate"><span class="pre">IndexTransformer</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.preprocessing.IndexTransformer.add_word"><code class="docutils literal notranslate"><span class="pre">IndexTransformer.add_word()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.preprocessing.IndexTransformer.fit"><code class="docutils literal notranslate"><span class="pre">IndexTransformer.fit()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.preprocessing.IndexTransformer.fit_transform"><code class="docutils literal notranslate"><span class="pre">IndexTransformer.fit_transform()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.preprocessing.IndexTransformer.transform"><code class="docutils literal notranslate"><span class="pre">IndexTransformer.transform()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.data.html#quapy.data.preprocessing.IndexTransformer.vocabulary_size"><code class="docutils literal notranslate"><span class="pre">IndexTransformer.vocabulary_size()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.data.html#quapy.data.preprocessing.index"><code class="docutils literal notranslate"><span class="pre">index()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.data.html#quapy.data.preprocessing.reduce_columns"><code class="docutils literal notranslate"><span class="pre">reduce_columns()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.data.html#quapy.data.preprocessing.standardize"><code class="docutils literal notranslate"><span class="pre">standardize()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.data.html#quapy.data.preprocessing.text2tfidf"><code class="docutils literal notranslate"><span class="pre">text2tfidf()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.data.html#module-quapy.data.reader">quapy.data.reader module</a><ul>
+<li class="toctree-l6"><a class="reference internal" href="quapy.data.html#quapy.data.reader.binarize"><code class="docutils literal notranslate"><span class="pre">binarize()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.data.html#quapy.data.reader.from_csv"><code class="docutils literal notranslate"><span class="pre">from_csv()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.data.html#quapy.data.reader.from_sparse"><code class="docutils literal notranslate"><span class="pre">from_sparse()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.data.html#quapy.data.reader.from_text"><code class="docutils literal notranslate"><span class="pre">from_text()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.data.html#quapy.data.reader.reindex_labels"><code class="docutils literal notranslate"><span class="pre">reindex_labels()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.data.html#module-quapy.data">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html">quapy.method package</a><ul>
+<li class="toctree-l5"><a class="reference internal" href="quapy.method.html#submodules">Submodules</a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.method.html#module-quapy.method.aggregative">quapy.method.aggregative module</a><ul>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.ACC"><code class="docutils literal notranslate"><span class="pre">ACC</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.ACC.aggregate"><code class="docutils literal notranslate"><span class="pre">ACC.aggregate()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.ACC.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">ACC.aggregation_fit()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.ACC.getPteCondEstim"><code class="docutils literal notranslate"><span class="pre">ACC.getPteCondEstim()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.ACC.solve_adjustment"><code class="docutils literal notranslate"><span class="pre">ACC.solve_adjustment()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AdjustedClassifyAndCount"><code class="docutils literal notranslate"><span class="pre">AdjustedClassifyAndCount</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeCrispQuantifier"><code class="docutils literal notranslate"><span class="pre">AggregativeCrispQuantifier</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeMedianEstimator"><code class="docutils literal notranslate"><span class="pre">AggregativeMedianEstimator</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeMedianEstimator.fit"><code class="docutils literal notranslate"><span class="pre">AggregativeMedianEstimator.fit()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeMedianEstimator.get_params"><code class="docutils literal notranslate"><span class="pre">AggregativeMedianEstimator.get_params()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeMedianEstimator.quantify"><code class="docutils literal notranslate"><span class="pre">AggregativeMedianEstimator.quantify()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeMedianEstimator.set_params"><code class="docutils literal notranslate"><span class="pre">AggregativeMedianEstimator.set_params()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier"><code class="docutils literal notranslate"><span class="pre">AggregativeQuantifier</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.aggregate"><code class="docutils literal notranslate"><span class="pre">AggregativeQuantifier.aggregate()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">AggregativeQuantifier.aggregation_fit()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.classes_"><code class="docutils literal notranslate"><span class="pre">AggregativeQuantifier.classes_</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.classifier"><code class="docutils literal notranslate"><span class="pre">AggregativeQuantifier.classifier</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.classifier_fit_predict"><code class="docutils literal notranslate"><span class="pre">AggregativeQuantifier.classifier_fit_predict()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.classify"><code class="docutils literal notranslate"><span class="pre">AggregativeQuantifier.classify()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.fit"><code class="docutils literal notranslate"><span class="pre">AggregativeQuantifier.fit()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.quantify"><code class="docutils literal notranslate"><span class="pre">AggregativeQuantifier.quantify()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.val_split"><code class="docutils literal notranslate"><span class="pre">AggregativeQuantifier.val_split</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.val_split_"><code class="docutils literal notranslate"><span class="pre">AggregativeQuantifier.val_split_</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeSoftQuantifier"><code class="docutils literal notranslate"><span class="pre">AggregativeSoftQuantifier</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.BinaryAggregativeQuantifier"><code class="docutils literal notranslate"><span class="pre">BinaryAggregativeQuantifier</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.BinaryAggregativeQuantifier.fit"><code class="docutils literal notranslate"><span class="pre">BinaryAggregativeQuantifier.fit()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.BinaryAggregativeQuantifier.neg_label"><code class="docutils literal notranslate"><span class="pre">BinaryAggregativeQuantifier.neg_label</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.BinaryAggregativeQuantifier.pos_label"><code class="docutils literal notranslate"><span class="pre">BinaryAggregativeQuantifier.pos_label</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.CC"><code class="docutils literal notranslate"><span class="pre">CC</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.CC.aggregate"><code class="docutils literal notranslate"><span class="pre">CC.aggregate()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.CC.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">CC.aggregation_fit()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.ClassifyAndCount"><code class="docutils literal notranslate"><span class="pre">ClassifyAndCount</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.DMy"><code class="docutils literal notranslate"><span class="pre">DMy</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.DMy.aggregate"><code class="docutils literal notranslate"><span class="pre">DMy.aggregate()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.DMy.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">DMy.aggregation_fit()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.DistributionMatchingY"><code class="docutils literal notranslate"><span class="pre">DistributionMatchingY</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.DyS"><code class="docutils literal notranslate"><span class="pre">DyS</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.DyS.aggregate"><code class="docutils literal notranslate"><span class="pre">DyS.aggregate()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.DyS.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">DyS.aggregation_fit()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.EMQ"><code class="docutils literal notranslate"><span class="pre">EMQ</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.EMQ.EM"><code class="docutils literal notranslate"><span class="pre">EMQ.EM()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.EMQ.EMQ_BCTS"><code class="docutils literal notranslate"><span class="pre">EMQ.EMQ_BCTS()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.EMQ.EPSILON"><code class="docutils literal notranslate"><span class="pre">EMQ.EPSILON</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.EMQ.MAX_ITER"><code class="docutils literal notranslate"><span class="pre">EMQ.MAX_ITER</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.EMQ.aggregate"><code class="docutils literal notranslate"><span class="pre">EMQ.aggregate()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.EMQ.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">EMQ.aggregation_fit()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.EMQ.classify"><code class="docutils literal notranslate"><span class="pre">EMQ.classify()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.EMQ.predict_proba"><code class="docutils literal notranslate"><span class="pre">EMQ.predict_proba()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.ExpectationMaximizationQuantifier"><code class="docutils literal notranslate"><span class="pre">ExpectationMaximizationQuantifier</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.HDy"><code class="docutils literal notranslate"><span class="pre">HDy</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.HDy.aggregate"><code class="docutils literal notranslate"><span class="pre">HDy.aggregate()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.HDy.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">HDy.aggregation_fit()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.HellingerDistanceY"><code class="docutils literal notranslate"><span class="pre">HellingerDistanceY</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.OneVsAllAggregative"><code class="docutils literal notranslate"><span class="pre">OneVsAllAggregative</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.OneVsAllAggregative.aggregate"><code class="docutils literal notranslate"><span class="pre">OneVsAllAggregative.aggregate()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.OneVsAllAggregative.classify"><code class="docutils literal notranslate"><span class="pre">OneVsAllAggregative.classify()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.PACC"><code class="docutils literal notranslate"><span class="pre">PACC</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.PACC.aggregate"><code class="docutils literal notranslate"><span class="pre">PACC.aggregate()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.PACC.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">PACC.aggregation_fit()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.PACC.getPteCondEstim"><code class="docutils literal notranslate"><span class="pre">PACC.getPteCondEstim()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.PCC"><code class="docutils literal notranslate"><span class="pre">PCC</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.PCC.aggregate"><code class="docutils literal notranslate"><span class="pre">PCC.aggregate()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.PCC.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">PCC.aggregation_fit()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.ProbabilisticAdjustedClassifyAndCount"><code class="docutils literal notranslate"><span class="pre">ProbabilisticAdjustedClassifyAndCount</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.ProbabilisticClassifyAndCount"><code class="docutils literal notranslate"><span class="pre">ProbabilisticClassifyAndCount</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.SLD"><code class="docutils literal notranslate"><span class="pre">SLD</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.SMM"><code class="docutils literal notranslate"><span class="pre">SMM</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.SMM.aggregate"><code class="docutils literal notranslate"><span class="pre">SMM.aggregate()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.SMM.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">SMM.aggregation_fit()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.newELM"><code class="docutils literal notranslate"><span class="pre">newELM()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.newSVMAE"><code class="docutils literal notranslate"><span class="pre">newSVMAE()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.newSVMKLD"><code class="docutils literal notranslate"><span class="pre">newSVMKLD()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.newSVMQ"><code class="docutils literal notranslate"><span class="pre">newSVMQ()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.newSVMRAE"><code class="docutils literal notranslate"><span class="pre">newSVMRAE()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEBase"><code class="docutils literal notranslate"><span class="pre">KDEBase</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEBase.BANDWIDTH_METHOD"><code class="docutils literal notranslate"><span class="pre">KDEBase.BANDWIDTH_METHOD</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEBase.get_kde_function"><code class="docutils literal notranslate"><span class="pre">KDEBase.get_kde_function()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEBase.get_mixture_components"><code class="docutils literal notranslate"><span class="pre">KDEBase.get_mixture_components()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEBase.pdf"><code class="docutils literal notranslate"><span class="pre">KDEBase.pdf()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEyCS"><code class="docutils literal notranslate"><span class="pre">KDEyCS</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEyCS.aggregate"><code class="docutils literal notranslate"><span class="pre">KDEyCS.aggregate()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEyCS.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">KDEyCS.aggregation_fit()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEyCS.gram_matrix_mix_sum"><code class="docutils literal notranslate"><span class="pre">KDEyCS.gram_matrix_mix_sum()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEyHD"><code class="docutils literal notranslate"><span class="pre">KDEyHD</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEyHD.aggregate"><code class="docutils literal notranslate"><span class="pre">KDEyHD.aggregate()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEyHD.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">KDEyHD.aggregation_fit()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEyML"><code class="docutils literal notranslate"><span class="pre">KDEyML</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEyML.aggregate"><code class="docutils literal notranslate"><span class="pre">KDEyML.aggregate()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEyML.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">KDEyML.aggregation_fit()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method._neural.QuaNetModule"><code class="docutils literal notranslate"><span class="pre">QuaNetModule</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._neural.QuaNetModule.device"><code class="docutils literal notranslate"><span class="pre">QuaNetModule.device</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._neural.QuaNetModule.forward"><code class="docutils literal notranslate"><span class="pre">QuaNetModule.forward()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method._neural.QuaNetTrainer"><code class="docutils literal notranslate"><span class="pre">QuaNetTrainer</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._neural.QuaNetTrainer.classes_"><code class="docutils literal notranslate"><span class="pre">QuaNetTrainer.classes_</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._neural.QuaNetTrainer.clean_checkpoint"><code class="docutils literal notranslate"><span class="pre">QuaNetTrainer.clean_checkpoint()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._neural.QuaNetTrainer.clean_checkpoint_dir"><code class="docutils literal notranslate"><span class="pre">QuaNetTrainer.clean_checkpoint_dir()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._neural.QuaNetTrainer.fit"><code class="docutils literal notranslate"><span class="pre">QuaNetTrainer.fit()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._neural.QuaNetTrainer.get_params"><code class="docutils literal notranslate"><span class="pre">QuaNetTrainer.get_params()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._neural.QuaNetTrainer.quantify"><code class="docutils literal notranslate"><span class="pre">QuaNetTrainer.quantify()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._neural.QuaNetTrainer.set_params"><code class="docutils literal notranslate"><span class="pre">QuaNetTrainer.set_params()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method._neural.mae_loss"><code class="docutils literal notranslate"><span class="pre">mae_loss()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.MAX"><code class="docutils literal notranslate"><span class="pre">MAX</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.MAX.condition"><code class="docutils literal notranslate"><span class="pre">MAX.condition()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.MS"><code class="docutils literal notranslate"><span class="pre">MS</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.MS.aggregate"><code class="docutils literal notranslate"><span class="pre">MS.aggregate()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.MS.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">MS.aggregation_fit()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.MS.condition"><code class="docutils literal notranslate"><span class="pre">MS.condition()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.MS2"><code class="docutils literal notranslate"><span class="pre">MS2</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.MS2.discard"><code class="docutils literal notranslate"><span class="pre">MS2.discard()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.T50"><code class="docutils literal notranslate"><span class="pre">T50</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.T50.condition"><code class="docutils literal notranslate"><span class="pre">T50.condition()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.ThresholdOptimization"><code class="docutils literal notranslate"><span class="pre">ThresholdOptimization</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.ThresholdOptimization.aggregate"><code class="docutils literal notranslate"><span class="pre">ThresholdOptimization.aggregate()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.ThresholdOptimization.aggregate_with_threshold"><code class="docutils literal notranslate"><span class="pre">ThresholdOptimization.aggregate_with_threshold()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.ThresholdOptimization.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">ThresholdOptimization.aggregation_fit()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.ThresholdOptimization.condition"><code class="docutils literal notranslate"><span class="pre">ThresholdOptimization.condition()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.ThresholdOptimization.discard"><code class="docutils literal notranslate"><span class="pre">ThresholdOptimization.discard()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.X"><code class="docutils literal notranslate"><span class="pre">X</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.X.condition"><code class="docutils literal notranslate"><span class="pre">X.condition()</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.method.html#module-quapy.method.base">quapy.method.base module</a><ul>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.base.BaseQuantifier"><code class="docutils literal notranslate"><span class="pre">BaseQuantifier</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.base.BaseQuantifier.fit"><code class="docutils literal notranslate"><span class="pre">BaseQuantifier.fit()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.base.BaseQuantifier.quantify"><code class="docutils literal notranslate"><span class="pre">BaseQuantifier.quantify()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.base.BinaryQuantifier"><code class="docutils literal notranslate"><span class="pre">BinaryQuantifier</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.base.OneVsAll"><code class="docutils literal notranslate"><span class="pre">OneVsAll</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.base.OneVsAllGeneric"><code class="docutils literal notranslate"><span class="pre">OneVsAllGeneric</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.base.OneVsAllGeneric.classes_"><code class="docutils literal notranslate"><span class="pre">OneVsAllGeneric.classes_</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.base.OneVsAllGeneric.fit"><code class="docutils literal notranslate"><span class="pre">OneVsAllGeneric.fit()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.base.OneVsAllGeneric.quantify"><code class="docutils literal notranslate"><span class="pre">OneVsAllGeneric.quantify()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.base.newOneVsAll"><code class="docutils literal notranslate"><span class="pre">newOneVsAll()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.method.html#module-quapy.method.meta">quapy.method.meta module</a><ul>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.meta.EACC"><code class="docutils literal notranslate"><span class="pre">EACC()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.meta.ECC"><code class="docutils literal notranslate"><span class="pre">ECC()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.meta.EEMQ"><code class="docutils literal notranslate"><span class="pre">EEMQ()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.meta.EHDy"><code class="docutils literal notranslate"><span class="pre">EHDy()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.meta.EPACC"><code class="docutils literal notranslate"><span class="pre">EPACC()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.meta.Ensemble"><code class="docutils literal notranslate"><span class="pre">Ensemble</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.meta.Ensemble.VALID_POLICIES"><code class="docutils literal notranslate"><span class="pre">Ensemble.VALID_POLICIES</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.meta.Ensemble.aggregative"><code class="docutils literal notranslate"><span class="pre">Ensemble.aggregative</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.meta.Ensemble.fit"><code class="docutils literal notranslate"><span class="pre">Ensemble.fit()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.meta.Ensemble.get_params"><code class="docutils literal notranslate"><span class="pre">Ensemble.get_params()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.meta.Ensemble.probabilistic"><code class="docutils literal notranslate"><span class="pre">Ensemble.probabilistic</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.meta.Ensemble.quantify"><code class="docutils literal notranslate"><span class="pre">Ensemble.quantify()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.meta.Ensemble.set_params"><code class="docutils literal notranslate"><span class="pre">Ensemble.set_params()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.meta.MedianEstimator"><code class="docutils literal notranslate"><span class="pre">MedianEstimator</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.meta.MedianEstimator.fit"><code class="docutils literal notranslate"><span class="pre">MedianEstimator.fit()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.meta.MedianEstimator.get_params"><code class="docutils literal notranslate"><span class="pre">MedianEstimator.get_params()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.meta.MedianEstimator.quantify"><code class="docutils literal notranslate"><span class="pre">MedianEstimator.quantify()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.meta.MedianEstimator.set_params"><code class="docutils literal notranslate"><span class="pre">MedianEstimator.set_params()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.meta.MedianEstimator2"><code class="docutils literal notranslate"><span class="pre">MedianEstimator2</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.meta.MedianEstimator2.fit"><code class="docutils literal notranslate"><span class="pre">MedianEstimator2.fit()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.meta.MedianEstimator2.get_params"><code class="docutils literal notranslate"><span class="pre">MedianEstimator2.get_params()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.meta.MedianEstimator2.quantify"><code class="docutils literal notranslate"><span class="pre">MedianEstimator2.quantify()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.meta.MedianEstimator2.set_params"><code class="docutils literal notranslate"><span class="pre">MedianEstimator2.set_params()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.meta.ensembleFactory"><code class="docutils literal notranslate"><span class="pre">ensembleFactory()</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.meta.get_probability_distribution"><code class="docutils literal notranslate"><span class="pre">get_probability_distribution()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.method.html#module-quapy.method.non_aggregative">quapy.method.non_aggregative module</a><ul>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.non_aggregative.DMx"><code class="docutils literal notranslate"><span class="pre">DMx</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.non_aggregative.DMx.HDx"><code class="docutils literal notranslate"><span class="pre">DMx.HDx()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.non_aggregative.DMx.fit"><code class="docutils literal notranslate"><span class="pre">DMx.fit()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.non_aggregative.DMx.quantify"><code class="docutils literal notranslate"><span class="pre">DMx.quantify()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.non_aggregative.DistributionMatchingX"><code class="docutils literal notranslate"><span class="pre">DistributionMatchingX</span></code></a></li>
+<li class="toctree-l6"><a class="reference internal" href="quapy.method.html#quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation"><code class="docutils literal notranslate"><span class="pre">MaximumLikelihoodPrevalenceEstimation</span></code></a><ul>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation.fit"><code class="docutils literal notranslate"><span class="pre">MaximumLikelihoodPrevalenceEstimation.fit()</span></code></a></li>
+<li class="toctree-l7"><a class="reference internal" href="quapy.method.html#quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation.quantify"><code class="docutils literal notranslate"><span class="pre">MaximumLikelihoodPrevalenceEstimation.quantify()</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.method.html#module-quapy.method">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#submodules">Submodules</a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.error">quapy.error module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.absolute_error"><code class="docutils literal notranslate"><span class="pre">absolute_error()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.acc_error"><code class="docutils literal notranslate"><span class="pre">acc_error()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.acce"><code class="docutils literal notranslate"><span class="pre">acce()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.ae"><code class="docutils literal notranslate"><span class="pre">ae()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.f1_error"><code class="docutils literal notranslate"><span class="pre">f1_error()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.f1e"><code class="docutils literal notranslate"><span class="pre">f1e()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.from_name"><code class="docutils literal notranslate"><span class="pre">from_name()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.kld"><code class="docutils literal notranslate"><span class="pre">kld()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.mae"><code class="docutils literal notranslate"><span class="pre">mae()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.mean_absolute_error"><code class="docutils literal notranslate"><span class="pre">mean_absolute_error()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.mean_normalized_absolute_error"><code class="docutils literal notranslate"><span class="pre">mean_normalized_absolute_error()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.mean_normalized_relative_absolute_error"><code class="docutils literal notranslate"><span class="pre">mean_normalized_relative_absolute_error()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.mean_relative_absolute_error"><code class="docutils literal notranslate"><span class="pre">mean_relative_absolute_error()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.mkld"><code class="docutils literal notranslate"><span class="pre">mkld()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.mnae"><code class="docutils literal notranslate"><span class="pre">mnae()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.mnkld"><code class="docutils literal notranslate"><span class="pre">mnkld()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.mnrae"><code class="docutils literal notranslate"><span class="pre">mnrae()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.mrae"><code class="docutils literal notranslate"><span class="pre">mrae()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.mse"><code class="docutils literal notranslate"><span class="pre">mse()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.nae"><code class="docutils literal notranslate"><span class="pre">nae()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.nkld"><code class="docutils literal notranslate"><span class="pre">nkld()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.normalized_absolute_error"><code class="docutils literal notranslate"><span class="pre">normalized_absolute_error()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.normalized_relative_absolute_error"><code class="docutils literal notranslate"><span class="pre">normalized_relative_absolute_error()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.nrae"><code class="docutils literal notranslate"><span class="pre">nrae()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.rae"><code class="docutils literal notranslate"><span class="pre">rae()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.relative_absolute_error"><code class="docutils literal notranslate"><span class="pre">relative_absolute_error()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.se"><code class="docutils literal notranslate"><span class="pre">se()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.error.smooth"><code class="docutils literal notranslate"><span class="pre">smooth()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.evaluation">quapy.evaluation module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.evaluation.evaluate"><code class="docutils literal notranslate"><span class="pre">evaluate()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.evaluation.evaluate_on_samples"><code class="docutils literal notranslate"><span class="pre">evaluate_on_samples()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.evaluation.evaluation_report"><code class="docutils literal notranslate"><span class="pre">evaluation_report()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.evaluation.prediction"><code class="docutils literal notranslate"><span class="pre">prediction()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.functional">quapy.functional module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.functional.HellingerDistance"><code class="docutils literal notranslate"><span class="pre">HellingerDistance()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.functional.TopsoeDistance"><code class="docutils literal notranslate"><span class="pre">TopsoeDistance()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.functional.adjusted_quantification"><code class="docutils literal notranslate"><span class="pre">adjusted_quantification()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.functional.argmin_prevalence"><code class="docutils literal notranslate"><span class="pre">argmin_prevalence()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.functional.as_binary_prevalence"><code class="docutils literal notranslate"><span class="pre">as_binary_prevalence()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.functional.check_prevalence_vector"><code class="docutils literal notranslate"><span class="pre">check_prevalence_vector()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.functional.get_divergence"><code class="docutils literal notranslate"><span class="pre">get_divergence()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.functional.get_nprevpoints_approximation"><code class="docutils literal notranslate"><span class="pre">get_nprevpoints_approximation()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.functional.linear_search"><code class="docutils literal notranslate"><span class="pre">linear_search()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.functional.normalize_prevalence"><code class="docutils literal notranslate"><span class="pre">normalize_prevalence()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.functional.num_prevalence_combinations"><code class="docutils literal notranslate"><span class="pre">num_prevalence_combinations()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.functional.optim_minimize"><code class="docutils literal notranslate"><span class="pre">optim_minimize()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.functional.prevalence_from_labels"><code class="docutils literal notranslate"><span class="pre">prevalence_from_labels()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.functional.prevalence_from_probabilities"><code class="docutils literal notranslate"><span class="pre">prevalence_from_probabilities()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.functional.prevalence_linspace"><code class="docutils literal notranslate"><span class="pre">prevalence_linspace()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.functional.strprev"><code class="docutils literal notranslate"><span class="pre">strprev()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.functional.uniform_prevalence_sampling"><code class="docutils literal notranslate"><span class="pre">uniform_prevalence_sampling()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.functional.uniform_simplex_sampling"><code class="docutils literal notranslate"><span class="pre">uniform_simplex_sampling()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.model_selection">quapy.model_selection module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.model_selection.ConfigStatus"><code class="docutils literal notranslate"><span class="pre">ConfigStatus</span></code></a><ul>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.model_selection.ConfigStatus.failed"><code class="docutils literal notranslate"><span class="pre">ConfigStatus.failed()</span></code></a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.model_selection.ConfigStatus.success"><code class="docutils literal notranslate"><span class="pre">ConfigStatus.success()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.model_selection.GridSearchQ"><code class="docutils literal notranslate"><span class="pre">GridSearchQ</span></code></a><ul>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.model_selection.GridSearchQ.best_model"><code class="docutils literal notranslate"><span class="pre">GridSearchQ.best_model()</span></code></a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.model_selection.GridSearchQ.fit"><code class="docutils literal notranslate"><span class="pre">GridSearchQ.fit()</span></code></a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.model_selection.GridSearchQ.get_params"><code class="docutils literal notranslate"><span class="pre">GridSearchQ.get_params()</span></code></a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.model_selection.GridSearchQ.quantify"><code class="docutils literal notranslate"><span class="pre">GridSearchQ.quantify()</span></code></a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.model_selection.GridSearchQ.set_params"><code class="docutils literal notranslate"><span class="pre">GridSearchQ.set_params()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.model_selection.Status"><code class="docutils literal notranslate"><span class="pre">Status</span></code></a><ul>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.model_selection.Status.ERROR"><code class="docutils literal notranslate"><span class="pre">Status.ERROR</span></code></a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.model_selection.Status.INVALID"><code class="docutils literal notranslate"><span class="pre">Status.INVALID</span></code></a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.model_selection.Status.SUCCESS"><code class="docutils literal notranslate"><span class="pre">Status.SUCCESS</span></code></a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.model_selection.Status.TIMEOUT"><code class="docutils literal notranslate"><span class="pre">Status.TIMEOUT</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.model_selection.cross_val_predict"><code class="docutils literal notranslate"><span class="pre">cross_val_predict()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.model_selection.expand_grid"><code class="docutils literal notranslate"><span class="pre">expand_grid()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.model_selection.group_params"><code class="docutils literal notranslate"><span class="pre">group_params()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.plot">quapy.plot module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.plot.binary_bias_bins"><code class="docutils literal notranslate"><span class="pre">binary_bias_bins()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.plot.binary_bias_global"><code class="docutils literal notranslate"><span class="pre">binary_bias_global()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.plot.binary_diagonal"><code class="docutils literal notranslate"><span class="pre">binary_diagonal()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.plot.brokenbar_supremacy_by_drift"><code class="docutils literal notranslate"><span class="pre">brokenbar_supremacy_by_drift()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.plot.error_by_drift"><code class="docutils literal notranslate"><span class="pre">error_by_drift()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.protocol">quapy.protocol module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.APP"><code class="docutils literal notranslate"><span class="pre">APP</span></code></a><ul>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.protocol.APP.prevalence_grid"><code class="docutils literal notranslate"><span class="pre">APP.prevalence_grid()</span></code></a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.protocol.APP.sample"><code class="docutils literal notranslate"><span class="pre">APP.sample()</span></code></a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.protocol.APP.samples_parameters"><code class="docutils literal notranslate"><span class="pre">APP.samples_parameters()</span></code></a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.protocol.APP.total"><code class="docutils literal notranslate"><span class="pre">APP.total()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.AbstractProtocol"><code class="docutils literal notranslate"><span class="pre">AbstractProtocol</span></code></a><ul>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.protocol.AbstractProtocol.total"><code class="docutils literal notranslate"><span class="pre">AbstractProtocol.total()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.AbstractStochasticSeededProtocol"><code class="docutils literal notranslate"><span class="pre">AbstractStochasticSeededProtocol</span></code></a><ul>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.protocol.AbstractStochasticSeededProtocol.collator"><code class="docutils literal notranslate"><span class="pre">AbstractStochasticSeededProtocol.collator()</span></code></a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.protocol.AbstractStochasticSeededProtocol.random_state"><code class="docutils literal notranslate"><span class="pre">AbstractStochasticSeededProtocol.random_state</span></code></a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.protocol.AbstractStochasticSeededProtocol.sample"><code class="docutils literal notranslate"><span class="pre">AbstractStochasticSeededProtocol.sample()</span></code></a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.protocol.AbstractStochasticSeededProtocol.samples_parameters"><code class="docutils literal notranslate"><span class="pre">AbstractStochasticSeededProtocol.samples_parameters()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.ArtificialPrevalenceProtocol"><code class="docutils literal notranslate"><span class="pre">ArtificialPrevalenceProtocol</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.DomainMixer"><code class="docutils literal notranslate"><span class="pre">DomainMixer</span></code></a><ul>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.protocol.DomainMixer.sample"><code class="docutils literal notranslate"><span class="pre">DomainMixer.sample()</span></code></a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.protocol.DomainMixer.samples_parameters"><code class="docutils literal notranslate"><span class="pre">DomainMixer.samples_parameters()</span></code></a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.protocol.DomainMixer.total"><code class="docutils literal notranslate"><span class="pre">DomainMixer.total()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.IterateProtocol"><code class="docutils literal notranslate"><span class="pre">IterateProtocol</span></code></a><ul>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.protocol.IterateProtocol.total"><code class="docutils literal notranslate"><span class="pre">IterateProtocol.total()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.NPP"><code class="docutils literal notranslate"><span class="pre">NPP</span></code></a><ul>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.protocol.NPP.sample"><code class="docutils literal notranslate"><span class="pre">NPP.sample()</span></code></a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.protocol.NPP.samples_parameters"><code class="docutils literal notranslate"><span class="pre">NPP.samples_parameters()</span></code></a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.protocol.NPP.total"><code class="docutils literal notranslate"><span class="pre">NPP.total()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.NaturalPrevalenceProtocol"><code class="docutils literal notranslate"><span class="pre">NaturalPrevalenceProtocol</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.OnLabelledCollectionProtocol"><code class="docutils literal notranslate"><span class="pre">OnLabelledCollectionProtocol</span></code></a><ul>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.protocol.OnLabelledCollectionProtocol.RETURN_TYPES"><code class="docutils literal notranslate"><span class="pre">OnLabelledCollectionProtocol.RETURN_TYPES</span></code></a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.protocol.OnLabelledCollectionProtocol.get_collator"><code class="docutils literal notranslate"><span class="pre">OnLabelledCollectionProtocol.get_collator()</span></code></a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.protocol.OnLabelledCollectionProtocol.get_labelled_collection"><code class="docutils literal notranslate"><span class="pre">OnLabelledCollectionProtocol.get_labelled_collection()</span></code></a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.protocol.OnLabelledCollectionProtocol.on_preclassified_instances"><code class="docutils literal notranslate"><span class="pre">OnLabelledCollectionProtocol.on_preclassified_instances()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.UPP"><code class="docutils literal notranslate"><span class="pre">UPP</span></code></a><ul>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.protocol.UPP.sample"><code class="docutils literal notranslate"><span class="pre">UPP.sample()</span></code></a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.protocol.UPP.samples_parameters"><code class="docutils literal notranslate"><span class="pre">UPP.samples_parameters()</span></code></a></li>
+<li class="toctree-l5"><a class="reference internal" href="quapy.html#quapy.protocol.UPP.total"><code class="docutils literal notranslate"><span class="pre">UPP.total()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.UniformPrevalenceProtocol"><code class="docutils literal notranslate"><span class="pre">UniformPrevalenceProtocol</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.util">quapy.util module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.util.EarlyStop"><code class="docutils literal notranslate"><span class="pre">EarlyStop</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.util.create_if_not_exist"><code class="docutils literal notranslate"><span class="pre">create_if_not_exist()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.util.create_parent_dir"><code class="docutils literal notranslate"><span class="pre">create_parent_dir()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.util.download_file"><code class="docutils literal notranslate"><span class="pre">download_file()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.util.download_file_if_not_exists"><code class="docutils literal notranslate"><span class="pre">download_file_if_not_exists()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.util.get_quapy_home"><code class="docutils literal notranslate"><span class="pre">get_quapy_home()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.util.map_parallel"><code class="docutils literal notranslate"><span class="pre">map_parallel()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.util.parallel"><code class="docutils literal notranslate"><span class="pre">parallel()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.util.pickled_resource"><code class="docutils literal notranslate"><span class="pre">pickled_resource()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.util.save_text_file"><code class="docutils literal notranslate"><span class="pre">save_text_file()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.util.temp_seed"><code class="docutils literal notranslate"><span class="pre">temp_seed()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.util.timeout"><code class="docutils literal notranslate"><span class="pre">timeout()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy">Module contents</a></li>
 </ul>
 </li>
-<li class="toctree-l1"><a class="reference internal" href="modules.html">API Developers documentation</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="quapy.html">quapy package</a></li>
 </ul>
 </li>
 </ul>
 </div>
 </section>
 </section>
-</section>
 <section id="indices-and-tables">
-<h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this heading">¶</a></h1>
+<h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Link to this heading"></a></h1>
 <ul class="simple">
 <li><p><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></p></li>
 <li><p><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></p></li>
@@ -174,72 +682,33 @@ See the <a class="reference internal" href="Evaluation.html"><span class="doc">E
 </section>
 
 
-            <div class="clearer"></div>
+           </div>
           </div>
-        </div>
-      </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-  <div>
-    <h3><a href="#">Table of Contents</a></h3>
-    <ul>
-<li><a class="reference internal" href="#">Welcome to QuaPy’s documentation!</a><ul>
-<li><a class="reference internal" href="#introduction">Introduction</a><ul>
-<li><a class="reference internal" href="#a-quick-example">A quick example:</a></li>
-<li><a class="reference internal" href="#features">Features</a></li>
-</ul>
-</li>
-</ul>
-</li>
-<li><a class="reference internal" href="#indices-and-tables">Indices and tables</a></li>
-</ul>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="modules.html" class="btn btn-neutral float-right" title="quapy" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
 
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2024, Alejandro Moreo.</p>
   </div>
-  <div>
-    <h4>Next topic</h4>
-    <p class="topless"><a href="Installation.html"
-                          title="next chapter">Installation</a></p>
-  </div>
-  <div role="note" aria-label="source link">
-    <h3>This Page</h3>
-    <ul class="this-page-menu">
-      <li><a href="_sources/index.rst.txt"
-            rel="nofollow">Show Source</a></li>
-    </ul>
-   </div>
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Quick search</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
-      <input type="submit" value="Go" />
-    </form>
-    </div>
-</div>
-<script>document.getElementById('searchbox').style.display = "block"</script>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
         </div>
       </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             >index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="right" >
-          <a href="Installation.html" title="Installation"
-             >next</a> |</li>
-        <li class="nav-item nav-item-0"><a href="#">QuaPy 0.1.7 documentation</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">Welcome to QuaPy’s documentation!</a></li> 
-      </ul>
-    </div>
-    <div class="footer" role="contentinfo">
-        &#169; Copyright 2021, Alejandro Moreo.
-      Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
-    </div>
-  </body>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
 </html>
\ No newline at end of file
diff --git a/docs/build/html/modules.html b/docs/build/html/modules.html
index dcad8b8..4942493 100644
--- a/docs/build/html/modules.html
+++ b/docs/build/html/modules.html
@@ -1,71 +1,278 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" data-content_root="./">
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
 
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>quapy &mdash; QuaPy: A Python-based open-source framework for quantification 0.1.8 documentation</title>
+      <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=92fd9be5" />
+      <link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=19f00094" />
 
-<!doctype html>
-
-<html lang="en">
-  <head>
-    <meta charset="utf-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
-
-    <title>quapy &#8212; QuaPy 0.1.7 documentation</title>
-    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
-    <link rel="stylesheet" type="text/css" href="_static/bizstyle.css" />
-    
-    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
-    <script src="_static/jquery.js"></script>
-    <script src="_static/underscore.js"></script>
-    <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
-    <script src="_static/doctools.js"></script>
-    <script src="_static/sphinx_highlight.js"></script>
-    <script src="_static/bizstyle.js"></script>
+  
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script src="_static/jquery.js?v=5d32c60e"></script>
+        <script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
+        <script src="_static/documentation_options.js?v=22607128"></script>
+        <script src="_static/doctools.js?v=9a2dae69"></script>
+        <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+        <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="quapy package" href="quapy.html" />
-    <link rel="prev" title="Plotting" href="Plotting.html" />
-    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
-    <!--[if lt IE 9]>
-    <script src="_static/css3-mediaqueries.js"></script>
-    <![endif]-->
-  </head><body>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             accesskey="I">index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="right" >
-          <a href="quapy.html" title="quapy package"
-             accesskey="N">next</a> |</li>
-        <li class="right" >
-          <a href="Plotting.html" title="Plotting"
-             accesskey="P">previous</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">quapy</a></li> 
-      </ul>
-    </div>  
+    <link rel="prev" title="Welcome to QuaPy’s documentation!" href="index.html" /> 
+</head>
 
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          <div class="body" role="main">
-            
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            QuaPy: A Python-based open-source framework for quantification
+          </a>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <ul class="current">
+<li class="toctree-l1 current"><a class="current reference internal" href="#">quapy</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="quapy.html">quapy package</a></li>
+</ul>
+</li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">QuaPy: A Python-based open-source framework for quantification</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+      <li class="breadcrumb-item active">quapy</li>
+      <li class="wy-breadcrumbs-aside">
+            <a href="_sources/modules.rst.txt" rel="nofollow"> View page source</a>
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
   <section id="quapy">
-<h1>quapy<a class="headerlink" href="#quapy" title="Permalink to this heading">¶</a></h1>
+<h1>quapy<a class="headerlink" href="#quapy" title="Link to this heading"></a></h1>
 <div class="toctree-wrapper compound">
 <ul>
 <li class="toctree-l1"><a class="reference internal" href="quapy.html">quapy package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="quapy.html#subpackages">Subpackages</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="quapy.classification.html">quapy.classification package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#module-quapy.classification.calibration">quapy.classification.calibration module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#module-quapy.classification.methods">quapy.classification.methods module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#module-quapy.classification.neural">quapy.classification.neural module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#module-quapy.classification.svmperf">quapy.classification.svmperf module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#module-quapy.classification">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.data.html">quapy.data package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#module-quapy.data.base">quapy.data.base module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#module-quapy.data.datasets">quapy.data.datasets module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#module-quapy.data.preprocessing">quapy.data.preprocessing module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#module-quapy.data.reader">quapy.data.reader module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#module-quapy.data">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html">quapy.method package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#module-quapy.method.aggregative">quapy.method.aggregative module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#module-quapy.method.base">quapy.method.base module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#module-quapy.method.meta">quapy.method.meta module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#module-quapy.method.non_aggregative">quapy.method.non_aggregative module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#module-quapy.method">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</li>
 <li class="toctree-l2"><a class="reference internal" href="quapy.html#submodules">Submodules</a></li>
-<li class="toctree-l2"><a class="reference internal" href="quapy.html#module-quapy.error">quapy.error</a></li>
-<li class="toctree-l2"><a class="reference internal" href="quapy.html#module-quapy.evaluation">quapy.evaluation</a></li>
-<li class="toctree-l2"><a class="reference internal" href="quapy.html#quapy-protocol">quapy.protocol</a></li>
-<li class="toctree-l2"><a class="reference internal" href="quapy.html#module-quapy.functional">quapy.functional</a></li>
-<li class="toctree-l2"><a class="reference internal" href="quapy.html#module-quapy.model_selection">quapy.model_selection</a></li>
-<li class="toctree-l2"><a class="reference internal" href="quapy.html#module-quapy.plot">quapy.plot</a></li>
-<li class="toctree-l2"><a class="reference internal" href="quapy.html#module-quapy.util">quapy.util</a></li>
-<li class="toctree-l2"><a class="reference internal" href="quapy.html#subpackages">Subpackages</a></li>
+<li class="toctree-l2"><a class="reference internal" href="quapy.html#module-quapy.error">quapy.error module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.absolute_error"><code class="docutils literal notranslate"><span class="pre">absolute_error()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.acc_error"><code class="docutils literal notranslate"><span class="pre">acc_error()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.acce"><code class="docutils literal notranslate"><span class="pre">acce()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.ae"><code class="docutils literal notranslate"><span class="pre">ae()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.f1_error"><code class="docutils literal notranslate"><span class="pre">f1_error()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.f1e"><code class="docutils literal notranslate"><span class="pre">f1e()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.from_name"><code class="docutils literal notranslate"><span class="pre">from_name()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.kld"><code class="docutils literal notranslate"><span class="pre">kld()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.mae"><code class="docutils literal notranslate"><span class="pre">mae()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.mean_absolute_error"><code class="docutils literal notranslate"><span class="pre">mean_absolute_error()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.mean_normalized_absolute_error"><code class="docutils literal notranslate"><span class="pre">mean_normalized_absolute_error()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.mean_normalized_relative_absolute_error"><code class="docutils literal notranslate"><span class="pre">mean_normalized_relative_absolute_error()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.mean_relative_absolute_error"><code class="docutils literal notranslate"><span class="pre">mean_relative_absolute_error()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.mkld"><code class="docutils literal notranslate"><span class="pre">mkld()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.mnae"><code class="docutils literal notranslate"><span class="pre">mnae()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.mnkld"><code class="docutils literal notranslate"><span class="pre">mnkld()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.mnrae"><code class="docutils literal notranslate"><span class="pre">mnrae()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.mrae"><code class="docutils literal notranslate"><span class="pre">mrae()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.mse"><code class="docutils literal notranslate"><span class="pre">mse()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.nae"><code class="docutils literal notranslate"><span class="pre">nae()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.nkld"><code class="docutils literal notranslate"><span class="pre">nkld()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.normalized_absolute_error"><code class="docutils literal notranslate"><span class="pre">normalized_absolute_error()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.normalized_relative_absolute_error"><code class="docutils literal notranslate"><span class="pre">normalized_relative_absolute_error()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.nrae"><code class="docutils literal notranslate"><span class="pre">nrae()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.rae"><code class="docutils literal notranslate"><span class="pre">rae()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.relative_absolute_error"><code class="docutils literal notranslate"><span class="pre">relative_absolute_error()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.se"><code class="docutils literal notranslate"><span class="pre">se()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.error.smooth"><code class="docutils literal notranslate"><span class="pre">smooth()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="quapy.html#module-quapy.evaluation">quapy.evaluation module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.evaluation.evaluate"><code class="docutils literal notranslate"><span class="pre">evaluate()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.evaluation.evaluate_on_samples"><code class="docutils literal notranslate"><span class="pre">evaluate_on_samples()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.evaluation.evaluation_report"><code class="docutils literal notranslate"><span class="pre">evaluation_report()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.evaluation.prediction"><code class="docutils literal notranslate"><span class="pre">prediction()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="quapy.html#module-quapy.functional">quapy.functional module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.functional.HellingerDistance"><code class="docutils literal notranslate"><span class="pre">HellingerDistance()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.functional.TopsoeDistance"><code class="docutils literal notranslate"><span class="pre">TopsoeDistance()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.functional.adjusted_quantification"><code class="docutils literal notranslate"><span class="pre">adjusted_quantification()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.functional.argmin_prevalence"><code class="docutils literal notranslate"><span class="pre">argmin_prevalence()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.functional.as_binary_prevalence"><code class="docutils literal notranslate"><span class="pre">as_binary_prevalence()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.functional.check_prevalence_vector"><code class="docutils literal notranslate"><span class="pre">check_prevalence_vector()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.functional.get_divergence"><code class="docutils literal notranslate"><span class="pre">get_divergence()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.functional.get_nprevpoints_approximation"><code class="docutils literal notranslate"><span class="pre">get_nprevpoints_approximation()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.functional.linear_search"><code class="docutils literal notranslate"><span class="pre">linear_search()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.functional.normalize_prevalence"><code class="docutils literal notranslate"><span class="pre">normalize_prevalence()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.functional.num_prevalence_combinations"><code class="docutils literal notranslate"><span class="pre">num_prevalence_combinations()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.functional.optim_minimize"><code class="docutils literal notranslate"><span class="pre">optim_minimize()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.functional.prevalence_from_labels"><code class="docutils literal notranslate"><span class="pre">prevalence_from_labels()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.functional.prevalence_from_probabilities"><code class="docutils literal notranslate"><span class="pre">prevalence_from_probabilities()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.functional.prevalence_linspace"><code class="docutils literal notranslate"><span class="pre">prevalence_linspace()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.functional.strprev"><code class="docutils literal notranslate"><span class="pre">strprev()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.functional.uniform_prevalence_sampling"><code class="docutils literal notranslate"><span class="pre">uniform_prevalence_sampling()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.functional.uniform_simplex_sampling"><code class="docutils literal notranslate"><span class="pre">uniform_simplex_sampling()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="quapy.html#module-quapy.model_selection">quapy.model_selection module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.model_selection.ConfigStatus"><code class="docutils literal notranslate"><span class="pre">ConfigStatus</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.model_selection.ConfigStatus.failed"><code class="docutils literal notranslate"><span class="pre">ConfigStatus.failed()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.model_selection.ConfigStatus.success"><code class="docutils literal notranslate"><span class="pre">ConfigStatus.success()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.model_selection.GridSearchQ"><code class="docutils literal notranslate"><span class="pre">GridSearchQ</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.model_selection.GridSearchQ.best_model"><code class="docutils literal notranslate"><span class="pre">GridSearchQ.best_model()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.model_selection.GridSearchQ.fit"><code class="docutils literal notranslate"><span class="pre">GridSearchQ.fit()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.model_selection.GridSearchQ.get_params"><code class="docutils literal notranslate"><span class="pre">GridSearchQ.get_params()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.model_selection.GridSearchQ.quantify"><code class="docutils literal notranslate"><span class="pre">GridSearchQ.quantify()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.model_selection.GridSearchQ.set_params"><code class="docutils literal notranslate"><span class="pre">GridSearchQ.set_params()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.model_selection.Status"><code class="docutils literal notranslate"><span class="pre">Status</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.model_selection.Status.ERROR"><code class="docutils literal notranslate"><span class="pre">Status.ERROR</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.model_selection.Status.INVALID"><code class="docutils literal notranslate"><span class="pre">Status.INVALID</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.model_selection.Status.SUCCESS"><code class="docutils literal notranslate"><span class="pre">Status.SUCCESS</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.model_selection.Status.TIMEOUT"><code class="docutils literal notranslate"><span class="pre">Status.TIMEOUT</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.model_selection.cross_val_predict"><code class="docutils literal notranslate"><span class="pre">cross_val_predict()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.model_selection.expand_grid"><code class="docutils literal notranslate"><span class="pre">expand_grid()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.model_selection.group_params"><code class="docutils literal notranslate"><span class="pre">group_params()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="quapy.html#module-quapy.plot">quapy.plot module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.plot.binary_bias_bins"><code class="docutils literal notranslate"><span class="pre">binary_bias_bins()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.plot.binary_bias_global"><code class="docutils literal notranslate"><span class="pre">binary_bias_global()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.plot.binary_diagonal"><code class="docutils literal notranslate"><span class="pre">binary_diagonal()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.plot.brokenbar_supremacy_by_drift"><code class="docutils literal notranslate"><span class="pre">brokenbar_supremacy_by_drift()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.plot.error_by_drift"><code class="docutils literal notranslate"><span class="pre">error_by_drift()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="quapy.html#module-quapy.protocol">quapy.protocol module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.protocol.APP"><code class="docutils literal notranslate"><span class="pre">APP</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.APP.prevalence_grid"><code class="docutils literal notranslate"><span class="pre">APP.prevalence_grid()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.APP.sample"><code class="docutils literal notranslate"><span class="pre">APP.sample()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.APP.samples_parameters"><code class="docutils literal notranslate"><span class="pre">APP.samples_parameters()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.APP.total"><code class="docutils literal notranslate"><span class="pre">APP.total()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.protocol.AbstractProtocol"><code class="docutils literal notranslate"><span class="pre">AbstractProtocol</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.AbstractProtocol.total"><code class="docutils literal notranslate"><span class="pre">AbstractProtocol.total()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.protocol.AbstractStochasticSeededProtocol"><code class="docutils literal notranslate"><span class="pre">AbstractStochasticSeededProtocol</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.AbstractStochasticSeededProtocol.collator"><code class="docutils literal notranslate"><span class="pre">AbstractStochasticSeededProtocol.collator()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.AbstractStochasticSeededProtocol.random_state"><code class="docutils literal notranslate"><span class="pre">AbstractStochasticSeededProtocol.random_state</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.AbstractStochasticSeededProtocol.sample"><code class="docutils literal notranslate"><span class="pre">AbstractStochasticSeededProtocol.sample()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.AbstractStochasticSeededProtocol.samples_parameters"><code class="docutils literal notranslate"><span class="pre">AbstractStochasticSeededProtocol.samples_parameters()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.protocol.ArtificialPrevalenceProtocol"><code class="docutils literal notranslate"><span class="pre">ArtificialPrevalenceProtocol</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.protocol.DomainMixer"><code class="docutils literal notranslate"><span class="pre">DomainMixer</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.DomainMixer.sample"><code class="docutils literal notranslate"><span class="pre">DomainMixer.sample()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.DomainMixer.samples_parameters"><code class="docutils literal notranslate"><span class="pre">DomainMixer.samples_parameters()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.DomainMixer.total"><code class="docutils literal notranslate"><span class="pre">DomainMixer.total()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.protocol.IterateProtocol"><code class="docutils literal notranslate"><span class="pre">IterateProtocol</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.IterateProtocol.total"><code class="docutils literal notranslate"><span class="pre">IterateProtocol.total()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.protocol.NPP"><code class="docutils literal notranslate"><span class="pre">NPP</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.NPP.sample"><code class="docutils literal notranslate"><span class="pre">NPP.sample()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.NPP.samples_parameters"><code class="docutils literal notranslate"><span class="pre">NPP.samples_parameters()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.NPP.total"><code class="docutils literal notranslate"><span class="pre">NPP.total()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.protocol.NaturalPrevalenceProtocol"><code class="docutils literal notranslate"><span class="pre">NaturalPrevalenceProtocol</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.protocol.OnLabelledCollectionProtocol"><code class="docutils literal notranslate"><span class="pre">OnLabelledCollectionProtocol</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.OnLabelledCollectionProtocol.RETURN_TYPES"><code class="docutils literal notranslate"><span class="pre">OnLabelledCollectionProtocol.RETURN_TYPES</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.OnLabelledCollectionProtocol.get_collator"><code class="docutils literal notranslate"><span class="pre">OnLabelledCollectionProtocol.get_collator()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.OnLabelledCollectionProtocol.get_labelled_collection"><code class="docutils literal notranslate"><span class="pre">OnLabelledCollectionProtocol.get_labelled_collection()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.OnLabelledCollectionProtocol.on_preclassified_instances"><code class="docutils literal notranslate"><span class="pre">OnLabelledCollectionProtocol.on_preclassified_instances()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.protocol.UPP"><code class="docutils literal notranslate"><span class="pre">UPP</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.UPP.sample"><code class="docutils literal notranslate"><span class="pre">UPP.sample()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.UPP.samples_parameters"><code class="docutils literal notranslate"><span class="pre">UPP.samples_parameters()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.html#quapy.protocol.UPP.total"><code class="docutils literal notranslate"><span class="pre">UPP.total()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.protocol.UniformPrevalenceProtocol"><code class="docutils literal notranslate"><span class="pre">UniformPrevalenceProtocol</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="quapy.html#module-quapy.util">quapy.util module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.util.EarlyStop"><code class="docutils literal notranslate"><span class="pre">EarlyStop</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.util.create_if_not_exist"><code class="docutils literal notranslate"><span class="pre">create_if_not_exist()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.util.create_parent_dir"><code class="docutils literal notranslate"><span class="pre">create_parent_dir()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.util.download_file"><code class="docutils literal notranslate"><span class="pre">download_file()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.util.download_file_if_not_exists"><code class="docutils literal notranslate"><span class="pre">download_file_if_not_exists()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.util.get_quapy_home"><code class="docutils literal notranslate"><span class="pre">get_quapy_home()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.util.map_parallel"><code class="docutils literal notranslate"><span class="pre">map_parallel()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.util.parallel"><code class="docutils literal notranslate"><span class="pre">parallel()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.util.pickled_resource"><code class="docutils literal notranslate"><span class="pre">pickled_resource()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.util.save_text_file"><code class="docutils literal notranslate"><span class="pre">save_text_file()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.util.temp_seed"><code class="docutils literal notranslate"><span class="pre">temp_seed()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#quapy.util.timeout"><code class="docutils literal notranslate"><span class="pre">timeout()</span></code></a></li>
+</ul>
+</li>
 <li class="toctree-l2"><a class="reference internal" href="quapy.html#module-quapy">Module contents</a></li>
 </ul>
 </li>
@@ -74,65 +281,34 @@
 </section>
 
 
-            <div class="clearer"></div>
+           </div>
           </div>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="index.html" class="btn btn-neutral float-left" title="Welcome to QuaPy’s documentation!" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="quapy.html" class="btn btn-neutral float-right" title="quapy package" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2024, Alejandro Moreo.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
         </div>
       </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-  <div>
-    <h4>Previous topic</h4>
-    <p class="topless"><a href="Plotting.html"
-                          title="previous chapter">Plotting</a></p>
+    </section>
   </div>
-  <div>
-    <h4>Next topic</h4>
-    <p class="topless"><a href="quapy.html"
-                          title="next chapter">quapy package</a></p>
-  </div>
-  <div role="note" aria-label="source link">
-    <h3>This Page</h3>
-    <ul class="this-page-menu">
-      <li><a href="_sources/modules.rst.txt"
-            rel="nofollow">Show Source</a></li>
-    </ul>
-   </div>
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Quick search</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
-      <input type="submit" value="Go" />
-    </form>
-    </div>
-</div>
-<script>document.getElementById('searchbox').style.display = "block"</script>
-        </div>
-      </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             >index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="right" >
-          <a href="quapy.html" title="quapy package"
-             >next</a> |</li>
-        <li class="right" >
-          <a href="Plotting.html" title="Plotting"
-             >previous</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">quapy</a></li> 
-      </ul>
-    </div>
-    <div class="footer" role="contentinfo">
-        &#169; Copyright 2021, Alejandro Moreo.
-      Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
-    </div>
-  </body>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
 </html>
\ No newline at end of file
diff --git a/docs/build/html/objects.inv b/docs/build/html/objects.inv
index 438922f..35f1681 100644
Binary files a/docs/build/html/objects.inv and b/docs/build/html/objects.inv differ
diff --git a/docs/build/html/py-modindex.html b/docs/build/html/py-modindex.html
index f314385..20305fe 100644
--- a/docs/build/html/py-modindex.html
+++ b/docs/build/html/py-modindex.html
@@ -1,51 +1,76 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" data-content_root="./">
+<head>
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Python Module Index &mdash; QuaPy: A Python-based open-source framework for quantification 0.1.8 documentation</title>
+      <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=92fd9be5" />
+      <link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=19f00094" />
 
-
-<!doctype html>
-
-<html lang="en">
-  <head>
-    <meta charset="utf-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <title>Python Module Index &#8212; QuaPy 0.1.7 documentation</title>
-    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
-    <link rel="stylesheet" type="text/css" href="_static/bizstyle.css" />
-    
-    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
-    <script src="_static/jquery.js"></script>
-    <script src="_static/underscore.js"></script>
-    <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
-    <script src="_static/doctools.js"></script>
-    <script src="_static/sphinx_highlight.js"></script>
-    <script src="_static/bizstyle.js"></script>
+  
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script src="_static/jquery.js?v=5d32c60e"></script>
+        <script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
+        <script src="_static/documentation_options.js?v=22607128"></script>
+        <script src="_static/doctools.js?v=9a2dae69"></script>
+        <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
-
-    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
-    <!--[if lt IE 9]>
-    <script src="_static/css3-mediaqueries.js"></script>
-    <![endif]-->
+ 
 
 
-  </head><body>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             accesskey="I">index</a></li>
-        <li class="right" >
-          <a href="#" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">Python Module Index</a></li> 
-      </ul>
-    </div>  
+</head>
 
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          <div class="body" role="main">
-            
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            QuaPy: A Python-based open-source framework for quantification
+          </a>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <ul>
+<li class="toctree-l1"><a class="reference internal" href="modules.html">quapy</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">QuaPy: A Python-based open-source framework for quantification</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+      <li class="breadcrumb-item active">Python Module Index</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
 
    <h1>Python Module Index</h1>
 
@@ -133,6 +158,21 @@
        <td>&#160;&#160;&#160;
        <a href="quapy.method.html#module-quapy.method"><code class="xref">quapy.method</code></a></td><td>
        <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="quapy.method.html#module-quapy.method._kdey"><code class="xref">quapy.method._kdey</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="quapy.method.html#module-quapy.method._neural"><code class="xref">quapy.method._neural</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="quapy.method.html#module-quapy.method._threshold_optim"><code class="xref">quapy.method._threshold_optim</code></a></td><td>
+       <em></em></td></tr>
      <tr class="cg-1">
        <td></td>
        <td>&#160;&#160;&#160;
@@ -148,11 +188,6 @@
        <td>&#160;&#160;&#160;
        <a href="quapy.method.html#module-quapy.method.meta"><code class="xref">quapy.method.meta</code></a></td><td>
        <em></em></td></tr>
-     <tr class="cg-1">
-       <td></td>
-       <td>&#160;&#160;&#160;
-       <a href="quapy.method.html#module-quapy.method.neural"><code class="xref">quapy.method.neural</code></a></td><td>
-       <em></em></td></tr>
      <tr class="cg-1">
        <td></td>
        <td>&#160;&#160;&#160;
@@ -181,42 +216,31 @@
    </table>
 
 
-            <div class="clearer"></div>
+           </div>
           </div>
+          <footer>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2024, Alejandro Moreo.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
         </div>
       </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Quick search</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
-      <input type="submit" value="Go" />
-    </form>
-    </div>
-</div>
-<script>document.getElementById('searchbox').style.display = "block"</script>
-        </div>
-      </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             >index</a></li>
-        <li class="right" >
-          <a href="#" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">Python Module Index</a></li> 
-      </ul>
-    </div>
-    <div class="footer" role="contentinfo">
-        &#169; Copyright 2021, Alejandro Moreo.
-      Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
-    </div>
-  </body>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
 </html>
\ No newline at end of file
diff --git a/docs/build/html/quapy.classification.html b/docs/build/html/quapy.classification.html
index d382736..1dbf0d3 100644
--- a/docs/build/html/quapy.classification.html
+++ b/docs/build/html/quapy.classification.html
@@ -1,72 +1,110 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" data-content_root="./">
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
 
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>quapy.classification package &mdash; QuaPy: A Python-based open-source framework for quantification 0.1.8 documentation</title>
+      <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=92fd9be5" />
+      <link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=19f00094" />
 
-<!doctype html>
-
-<html lang="en">
-  <head>
-    <meta charset="utf-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
-
-    <title>quapy.classification package &#8212; QuaPy 0.1.7 documentation</title>
-    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
-    <link rel="stylesheet" type="text/css" href="_static/bizstyle.css" />
-    
-    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
-    <script src="_static/jquery.js"></script>
-    <script src="_static/underscore.js"></script>
-    <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
-    <script src="_static/doctools.js"></script>
-    <script src="_static/sphinx_highlight.js"></script>
-    <script src="_static/bizstyle.js"></script>
+  
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script src="_static/jquery.js?v=5d32c60e"></script>
+        <script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
+        <script src="_static/documentation_options.js?v=22607128"></script>
+        <script src="_static/doctools.js?v=9a2dae69"></script>
+        <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="quapy.data package" href="quapy.data.html" />
-    <link rel="prev" title="quapy package" href="quapy.html" />
-    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
-    <!--[if lt IE 9]>
-    <script src="_static/css3-mediaqueries.js"></script>
-    <![endif]-->
-  </head><body>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             accesskey="I">index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="right" >
-          <a href="quapy.data.html" title="quapy.data package"
-             accesskey="N">next</a> |</li>
-        <li class="right" >
-          <a href="quapy.html" title="quapy package"
-             accesskey="P">previous</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-          <li class="nav-item nav-item-1"><a href="modules.html" >quapy</a> &#187;</li>
-          <li class="nav-item nav-item-2"><a href="quapy.html" accesskey="U">quapy package</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">quapy.classification package</a></li> 
-      </ul>
-    </div>  
+    <link rel="prev" title="quapy package" href="quapy.html" /> 
+</head>
 
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          <div class="body" role="main">
-            
-  <section id="quapy-classification-package">
-<h1>quapy.classification package<a class="headerlink" href="#quapy-classification-package" title="Permalink to this heading">¶</a></h1>
-<section id="submodules">
-<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this heading">¶</a></h2>
-</section>
-<section id="quapy-classification-calibration">
-<h2>quapy.classification.calibration<a class="headerlink" href="#quapy-classification-calibration" title="Permalink to this heading">¶</a></h2>
-<div class="versionadded">
-<p><span class="versionmodified added">New in version 0.1.7.</span></p>
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            QuaPy: A Python-based open-source framework for quantification
+          </a>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
 </div>
-<span class="target" id="module-quapy.classification.calibration"></span><dl class="py class">
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <ul class="current">
+<li class="toctree-l1 current"><a class="reference internal" href="modules.html">quapy</a><ul class="current">
+<li class="toctree-l2 current"><a class="reference internal" href="quapy.html">quapy package</a><ul class="current">
+<li class="toctree-l3 current"><a class="reference internal" href="quapy.html#subpackages">Subpackages</a><ul class="current">
+<li class="toctree-l4 current"><a class="current reference internal" href="#">quapy.classification package</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html">quapy.data package</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html">quapy.method package</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.tests.html">quapy.tests package</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#submodules">Submodules</a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.error">quapy.error module</a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.evaluation">quapy.evaluation module</a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.functional">quapy.functional module</a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.model_selection">quapy.model_selection module</a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.plot">quapy.plot module</a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.protocol">quapy.protocol module</a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.util">quapy.util module</a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">QuaPy: A Python-based open-source framework for quantification</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="modules.html">quapy</a></li>
+          <li class="breadcrumb-item"><a href="quapy.html">quapy package</a></li>
+      <li class="breadcrumb-item active">quapy.classification package</li>
+      <li class="wy-breadcrumbs-aside">
+            <a href="_sources/quapy.classification.rst.txt" rel="nofollow"> View page source</a>
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
+  <section id="quapy-classification-package">
+<h1>quapy.classification package<a class="headerlink" href="#quapy-classification-package" title="Link to this heading"></a></h1>
+<section id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Link to this heading"></a></h2>
+</section>
+<section id="module-quapy.classification.calibration">
+<span id="quapy-classification-calibration-module"></span><h2>quapy.classification.calibration module<a class="headerlink" href="#module-quapy.classification.calibration" title="Link to this heading"></a></h2>
+<dl class="py class">
 <dt class="sig sig-object py" id="quapy.classification.calibration.BCTSCalibration">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.classification.calibration.</span></span><span class="sig-name descname"><span class="pre">BCTSCalibration</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.calibration.BCTSCalibration" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.classification.calibration.</span></span><span class="sig-name descname"><span class="pre">BCTSCalibration</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/calibration.html#BCTSCalibration"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.calibration.BCTSCalibration" title="Link to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase" title="quapy.classification.calibration.RecalibratedProbabilisticClassifierBase"><code class="xref py py-class docutils literal notranslate"><span class="pre">RecalibratedProbabilisticClassifierBase</span></code></a></p>
 <p>Applies the Bias-Corrected Temperature Scaling (BCTS) calibration method from <cite>abstention.calibration</cite>, as defined in
 <a class="reference external" href="http://proceedings.mlr.press/v119/alexandari20a.html">Alexandari et al. paper</a>:</p>
@@ -87,7 +125,7 @@ training set afterwards. Default value is 5.</p></li>
 
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.classification.calibration.NBVSCalibration">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.classification.calibration.</span></span><span class="sig-name descname"><span class="pre">NBVSCalibration</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.calibration.NBVSCalibration" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.classification.calibration.</span></span><span class="sig-name descname"><span class="pre">NBVSCalibration</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/calibration.html#NBVSCalibration"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.calibration.NBVSCalibration" title="Link to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase" title="quapy.classification.calibration.RecalibratedProbabilisticClassifierBase"><code class="xref py py-class docutils literal notranslate"><span class="pre">RecalibratedProbabilisticClassifierBase</span></code></a></p>
 <p>Applies the No-Bias Vector Scaling (NBVS) calibration method from <cite>abstention.calibration</cite>, as defined in
 <a class="reference external" href="http://proceedings.mlr.press/v119/alexandari20a.html">Alexandari et al. paper</a>:</p>
@@ -108,7 +146,7 @@ training set afterwards. Default value is 5.</p></li>
 
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.classification.calibration.RecalibratedProbabilisticClassifier">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.classification.calibration.</span></span><span class="sig-name descname"><span class="pre">RecalibratedProbabilisticClassifier</span></span><a class="headerlink" href="#quapy.classification.calibration.RecalibratedProbabilisticClassifier" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.classification.calibration.</span></span><span class="sig-name descname"><span class="pre">RecalibratedProbabilisticClassifier</span></span><a class="reference internal" href="_modules/quapy/classification/calibration.html#RecalibratedProbabilisticClassifier"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.calibration.RecalibratedProbabilisticClassifier" title="Link to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>Abstract class for (re)calibration method from <cite>abstention.calibration</cite>, as defined in
 <a class="reference external" href="http://proceedings.mlr.press/v119/alexandari20a.html">Alexandari, A., Kundaje, A., &amp; Shrikumar, A. (2020, November). Maximum likelihood with bias-corrected calibration
@@ -117,10 +155,10 @@ is hard-to-beat at label shift adaptation. In International Conference on Machin
 
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.classification.calibration.RecalibratedProbabilisticClassifierBase">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.classification.calibration.</span></span><span class="sig-name descname"><span class="pre">RecalibratedProbabilisticClassifierBase</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">calibrator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.classification.calibration.</span></span><span class="sig-name descname"><span class="pre">RecalibratedProbabilisticClassifierBase</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">calibrator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/calibration.html#RecalibratedProbabilisticClassifierBase"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase" title="Link to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">BaseEstimator</span></code>, <a class="reference internal" href="#quapy.classification.calibration.RecalibratedProbabilisticClassifier" title="quapy.classification.calibration.RecalibratedProbabilisticClassifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">RecalibratedProbabilisticClassifier</span></code></a></p>
 <p>Applies a (re)calibration method from <cite>abstention.calibration</cite>, as defined in
-<a class="reference external" href="http://proceedings.mlr.press/v119/alexandari20a.html">Alexandari et al. paper</a>:</p>
+<a class="reference external" href="http://proceedings.mlr.press/v119/alexandari20a.html">Alexandari et al. paper</a>.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
 <dd class="field-odd"><ul class="simple">
@@ -137,7 +175,7 @@ training set afterwards. Default value is 5.</p></li>
 </dl>
 <dl class="py property">
 <dt class="sig sig-object py" id="quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.classes_">
-<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">classes_</span></span><a class="headerlink" href="#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.classes_" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">classes_</span></span><a class="headerlink" href="#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.classes_" title="Link to this definition"></a></dt>
 <dd><p>Returns the classes on which the classifier has been trained on</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns<span class="colon">:</span></dt>
@@ -148,7 +186,7 @@ training set afterwards. Default value is 5.</p></li>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.fit">
-<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.fit" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/calibration.html#RecalibratedProbabilisticClassifierBase.fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.fit" title="Link to this definition"></a></dt>
 <dd><p>Fits the calibration for the probabilistic classifier.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -165,7 +203,7 @@ training set afterwards. Default value is 5.</p></li>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.fit_cv">
-<span class="sig-name descname"><span class="pre">fit_cv</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.fit_cv" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">fit_cv</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/calibration.html#RecalibratedProbabilisticClassifierBase.fit_cv"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.fit_cv" title="Link to this definition"></a></dt>
 <dd><p>Fits the calibration in a cross-validation manner, i.e., it generates posterior probabilities for all
 training instances via cross-validation, and then retrains the classifier on all training instances.
 The posterior probabilities thus generated are used for calibrating the outputs of the classifier.</p>
@@ -184,7 +222,7 @@ The posterior probabilities thus generated are used for calibrating the outputs
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.fit_tr_val">
-<span class="sig-name descname"><span class="pre">fit_tr_val</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.fit_tr_val" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">fit_tr_val</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/calibration.html#RecalibratedProbabilisticClassifierBase.fit_tr_val"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.fit_tr_val" title="Link to this definition"></a></dt>
 <dd><p>Fits the calibration in a train/val-split manner, i.e.t, it partitions the training instances into a
 training and a validation set, and then uses the training samples to learn classifier which is then used
 to generate posterior probabilities for the held-out validation data. These posteriors are used to calibrate
@@ -204,7 +242,7 @@ the classifier. The classifier is not retrained on the whole dataset.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.predict">
-<span class="sig-name descname"><span class="pre">predict</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.predict" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">predict</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/calibration.html#RecalibratedProbabilisticClassifierBase.predict"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.predict" title="Link to this definition"></a></dt>
 <dd><p>Predicts class labels for the data instances in <cite>X</cite></p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -218,7 +256,7 @@ the classifier. The classifier is not retrained on the whole dataset.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.predict_proba">
-<span class="sig-name descname"><span class="pre">predict_proba</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.predict_proba" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">predict_proba</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/calibration.html#RecalibratedProbabilisticClassifierBase.predict_proba"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.predict_proba" title="Link to this definition"></a></dt>
 <dd><p>Generates posterior probabilities for the data instances in <cite>X</cite></p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -234,7 +272,7 @@ the classifier. The classifier is not retrained on the whole dataset.</p>
 
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.classification.calibration.TSCalibration">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.classification.calibration.</span></span><span class="sig-name descname"><span class="pre">TSCalibration</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.calibration.TSCalibration" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.classification.calibration.</span></span><span class="sig-name descname"><span class="pre">TSCalibration</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/calibration.html#TSCalibration"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.calibration.TSCalibration" title="Link to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase" title="quapy.classification.calibration.RecalibratedProbabilisticClassifierBase"><code class="xref py py-class docutils literal notranslate"><span class="pre">RecalibratedProbabilisticClassifierBase</span></code></a></p>
 <p>Applies the Temperature Scaling (TS) calibration method from <cite>abstention.calibration</cite>, as defined in
 <a class="reference external" href="http://proceedings.mlr.press/v119/alexandari20a.html">Alexandari et al. paper</a>:</p>
@@ -255,7 +293,7 @@ training set afterwards. Default value is 5.</p></li>
 
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.classification.calibration.VSCalibration">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.classification.calibration.</span></span><span class="sig-name descname"><span class="pre">VSCalibration</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.calibration.VSCalibration" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.classification.calibration.</span></span><span class="sig-name descname"><span class="pre">VSCalibration</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/calibration.html#VSCalibration"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.calibration.VSCalibration" title="Link to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase" title="quapy.classification.calibration.RecalibratedProbabilisticClassifierBase"><code class="xref py py-class docutils literal notranslate"><span class="pre">RecalibratedProbabilisticClassifierBase</span></code></a></p>
 <p>Applies the Vector Scaling (VS) calibration method from <cite>abstention.calibration</cite>, as defined in
 <a class="reference external" href="http://proceedings.mlr.press/v119/alexandari20a.html">Alexandari et al. paper</a>:</p>
@@ -276,10 +314,10 @@ training set afterwards. Default value is 5.</p></li>
 
 </section>
 <section id="module-quapy.classification.methods">
-<span id="quapy-classification-methods"></span><h2>quapy.classification.methods<a class="headerlink" href="#module-quapy.classification.methods" title="Permalink to this heading">¶</a></h2>
+<span id="quapy-classification-methods-module"></span><h2>quapy.classification.methods module<a class="headerlink" href="#module-quapy.classification.methods" title="Link to this heading"></a></h2>
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.classification.methods.LowRankLogisticRegression">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.classification.methods.</span></span><span class="sig-name descname"><span class="pre">LowRankLogisticRegression</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">n_components</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.methods.LowRankLogisticRegression" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.classification.methods.</span></span><span class="sig-name descname"><span class="pre">LowRankLogisticRegression</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">n_components</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/methods.html#LowRankLogisticRegression"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.methods.LowRankLogisticRegression" title="Link to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">BaseEstimator</span></code></p>
 <p>An example of a classification method (i.e., an object that implements <cite>fit</cite>, <cite>predict</cite>, and <cite>predict_proba</cite>)
 that also generates embedded inputs (i.e., that implements <cite>transform</cite>), as those required for
@@ -298,7 +336,7 @@ while classification is performed using <code class="xref py py-class docutils l
 </dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.methods.LowRankLogisticRegression.fit">
-<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.methods.LowRankLogisticRegression.fit" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/methods.html#LowRankLogisticRegression.fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.methods.LowRankLogisticRegression.fit" title="Link to this definition"></a></dt>
 <dd><p>Fit the model according to the given training data. The fit consists of
 fitting <cite>TruncatedSVD</cite> and then <cite>LogisticRegression</cite> on the low-rank representation.</p>
 <dl class="field-list simple">
@@ -316,21 +354,18 @@ fitting <cite>TruncatedSVD</cite> and then <cite>LogisticRegression</cite> on th
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.methods.LowRankLogisticRegression.get_params">
-<span class="sig-name descname"><span class="pre">get_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">deep</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.methods.LowRankLogisticRegression.get_params" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">get_params</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/methods.html#LowRankLogisticRegression.get_params"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.methods.LowRankLogisticRegression.get_params" title="Link to this definition"></a></dt>
 <dd><p>Get hyper-parameters for this estimator.</p>
 <dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><p><strong>deep</strong> – compatibility with sklearn</p>
-</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p>a dictionary with parameter names mapped to their values</p>
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>a dictionary with parameter names mapped to their values</p>
 </dd>
 </dl>
 </dd></dl>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.methods.LowRankLogisticRegression.predict">
-<span class="sig-name descname"><span class="pre">predict</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.methods.LowRankLogisticRegression.predict" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">predict</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/methods.html#LowRankLogisticRegression.predict"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.methods.LowRankLogisticRegression.predict" title="Link to this definition"></a></dt>
 <dd><p>Predicts labels for the instances <cite>X</cite> embedded into the low-rank space.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -345,7 +380,7 @@ instances in <cite>X</cite></p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.methods.LowRankLogisticRegression.predict_proba">
-<span class="sig-name descname"><span class="pre">predict_proba</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.methods.LowRankLogisticRegression.predict_proba" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">predict_proba</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/methods.html#LowRankLogisticRegression.predict_proba"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.methods.LowRankLogisticRegression.predict_proba" title="Link to this definition"></a></dt>
 <dd><p>Predicts posterior probabilities for the instances <cite>X</cite> embedded into the low-rank space.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -359,7 +394,7 @@ instances in <cite>X</cite></p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.methods.LowRankLogisticRegression.set_params">
-<span class="sig-name descname"><span class="pre">set_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">params</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.methods.LowRankLogisticRegression.set_params" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">set_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">params</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/methods.html#LowRankLogisticRegression.set_params"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.methods.LowRankLogisticRegression.set_params" title="Link to this definition"></a></dt>
 <dd><p>Set the parameters of this estimator.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -372,7 +407,7 @@ and eventually also <cite>n_components</cite> for <cite>TruncatedSVD</cite></p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.methods.LowRankLogisticRegression.transform">
-<span class="sig-name descname"><span class="pre">transform</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.methods.LowRankLogisticRegression.transform" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">transform</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/methods.html#LowRankLogisticRegression.transform"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.methods.LowRankLogisticRegression.transform" title="Link to this definition"></a></dt>
 <dd><p>Returns the low-rank approximation of <cite>X</cite> with <cite>n_components</cite> dimensions, or <cite>X</cite> unaltered if
 <cite>n_components</cite> &gt;= <cite>X.shape[1]</cite>.</p>
 <dl class="field-list simple">
@@ -389,10 +424,10 @@ and eventually also <cite>n_components</cite> for <cite>TruncatedSVD</cite></p>
 
 </section>
 <section id="module-quapy.classification.neural">
-<span id="quapy-classification-neural"></span><h2>quapy.classification.neural<a class="headerlink" href="#module-quapy.classification.neural" title="Permalink to this heading">¶</a></h2>
+<span id="quapy-classification-neural-module"></span><h2>quapy.classification.neural module<a class="headerlink" href="#module-quapy.classification.neural" title="Link to this heading"></a></h2>
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.classification.neural.CNNnet">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.classification.neural.</span></span><span class="sig-name descname"><span class="pre">CNNnet</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">vocabulary_size</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_classes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">embedding_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">hidden_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">256</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">repr_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">kernel_heights</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[3,</span> <span class="pre">5,</span> <span class="pre">7]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">stride</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">padding</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">drop_p</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.5</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.neural.CNNnet" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.classification.neural.</span></span><span class="sig-name descname"><span class="pre">CNNnet</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">vocabulary_size</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_classes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">embedding_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">hidden_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">256</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">repr_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">kernel_heights</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[3,</span> <span class="pre">5,</span> <span class="pre">7]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">stride</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">padding</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">drop_p</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.5</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/neural.html#CNNnet"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.neural.CNNnet" title="Link to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#quapy.classification.neural.TextClassifierNet" title="quapy.classification.neural.TextClassifierNet"><code class="xref py py-class docutils literal notranslate"><span class="pre">TextClassifierNet</span></code></a></p>
 <p>An implementation of <a class="reference internal" href="#quapy.classification.neural.TextClassifierNet" title="quapy.classification.neural.TextClassifierNet"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.classification.neural.TextClassifierNet</span></code></a> based on
 Convolutional Neural Networks.</p>
@@ -414,7 +449,7 @@ consecutive tokens that each kernel covers</p></li>
 </dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.neural.CNNnet.document_embedding">
-<span class="sig-name descname"><span class="pre">document_embedding</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">input</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.neural.CNNnet.document_embedding" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">document_embedding</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">input</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/neural.html#CNNnet.document_embedding"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.neural.CNNnet.document_embedding" title="Link to this definition"></a></dt>
 <dd><p>Embeds documents (i.e., performs the forward pass up to the
 next-to-last layer).</p>
 <dl class="field-list simple">
@@ -432,7 +467,7 @@ dimensionality of the embedding</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.neural.CNNnet.get_params">
-<span class="sig-name descname"><span class="pre">get_params</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.neural.CNNnet.get_params" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">get_params</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/neural.html#CNNnet.get_params"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.neural.CNNnet.get_params" title="Link to this definition"></a></dt>
 <dd><p>Get hyper-parameters for this estimator</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns<span class="colon">:</span></dt>
@@ -441,14 +476,9 @@ dimensionality of the embedding</p>
 </dl>
 </dd></dl>
 
-<dl class="py attribute">
-<dt class="sig sig-object py" id="quapy.classification.neural.CNNnet.training">
-<span class="sig-name descname"><span class="pre">training</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">bool</span></em><a class="headerlink" href="#quapy.classification.neural.CNNnet.training" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
 <dl class="py property">
 <dt class="sig sig-object py" id="quapy.classification.neural.CNNnet.vocabulary_size">
-<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">vocabulary_size</span></span><a class="headerlink" href="#quapy.classification.neural.CNNnet.vocabulary_size" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">vocabulary_size</span></span><a class="headerlink" href="#quapy.classification.neural.CNNnet.vocabulary_size" title="Link to this definition"></a></dt>
 <dd><p>Return the size of the vocabulary</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns<span class="colon">:</span></dt>
@@ -461,7 +491,7 @@ dimensionality of the embedding</p>
 
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.classification.neural.LSTMnet">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.classification.neural.</span></span><span class="sig-name descname"><span class="pre">LSTMnet</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">vocabulary_size</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_classes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">embedding_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">hidden_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">256</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">repr_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lstm_class_nlayers</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">drop_p</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.5</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.neural.LSTMnet" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.classification.neural.</span></span><span class="sig-name descname"><span class="pre">LSTMnet</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">vocabulary_size</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_classes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">embedding_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">hidden_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">256</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">repr_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lstm_class_nlayers</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">drop_p</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.5</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/neural.html#LSTMnet"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.neural.LSTMnet" title="Link to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#quapy.classification.neural.TextClassifierNet" title="quapy.classification.neural.TextClassifierNet"><code class="xref py py-class docutils literal notranslate"><span class="pre">TextClassifierNet</span></code></a></p>
 <p>An implementation of <a class="reference internal" href="#quapy.classification.neural.TextClassifierNet" title="quapy.classification.neural.TextClassifierNet"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.classification.neural.TextClassifierNet</span></code></a> based on
 Long Short Term Memory networks.</p>
@@ -480,7 +510,7 @@ Long Short Term Memory networks.</p>
 </dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.neural.LSTMnet.document_embedding">
-<span class="sig-name descname"><span class="pre">document_embedding</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.neural.LSTMnet.document_embedding" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">document_embedding</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/neural.html#LSTMnet.document_embedding"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.neural.LSTMnet.document_embedding" title="Link to this definition"></a></dt>
 <dd><p>Embeds documents (i.e., performs the forward pass up to the
 next-to-last layer).</p>
 <dl class="field-list simple">
@@ -498,7 +528,7 @@ dimensionality of the embedding</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.neural.LSTMnet.get_params">
-<span class="sig-name descname"><span class="pre">get_params</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.neural.LSTMnet.get_params" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">get_params</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/neural.html#LSTMnet.get_params"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.neural.LSTMnet.get_params" title="Link to this definition"></a></dt>
 <dd><p>Get hyper-parameters for this estimator</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns<span class="colon">:</span></dt>
@@ -507,14 +537,9 @@ dimensionality of the embedding</p>
 </dl>
 </dd></dl>
 
-<dl class="py attribute">
-<dt class="sig sig-object py" id="quapy.classification.neural.LSTMnet.training">
-<span class="sig-name descname"><span class="pre">training</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">bool</span></em><a class="headerlink" href="#quapy.classification.neural.LSTMnet.training" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
 <dl class="py property">
 <dt class="sig sig-object py" id="quapy.classification.neural.LSTMnet.vocabulary_size">
-<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">vocabulary_size</span></span><a class="headerlink" href="#quapy.classification.neural.LSTMnet.vocabulary_size" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">vocabulary_size</span></span><a class="headerlink" href="#quapy.classification.neural.LSTMnet.vocabulary_size" title="Link to this definition"></a></dt>
 <dd><p>Return the size of the vocabulary</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns<span class="colon">:</span></dt>
@@ -527,7 +552,7 @@ dimensionality of the embedding</p>
 
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.classification.neural.NeuralClassifierTrainer">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.classification.neural.</span></span><span class="sig-name descname"><span class="pre">NeuralClassifierTrainer</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">net</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.classification.neural.TextClassifierNet" title="quapy.classification.neural.TextClassifierNet"><span class="pre">TextClassifierNet</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">lr</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.001</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">weight_decay</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">patience</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">10</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">epochs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">200</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">batch_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">64</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">batch_size_test</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">512</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">padding_length</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">300</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">device</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'cuda'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">checkpointpath</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'../checkpoint/classifier_net.dat'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.neural.NeuralClassifierTrainer" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.classification.neural.</span></span><span class="sig-name descname"><span class="pre">NeuralClassifierTrainer</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">net</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.classification.neural.TextClassifierNet" title="quapy.classification.neural.TextClassifierNet"><span class="pre">TextClassifierNet</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">lr</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.001</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">weight_decay</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">patience</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">10</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">epochs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">200</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">batch_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">64</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">batch_size_test</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">512</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">padding_length</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">300</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">device</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'cuda'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">checkpointpath</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'../checkpoint/classifier_net.dat'</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/neural.html#NeuralClassifierTrainer"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.neural.NeuralClassifierTrainer" title="Link to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>Trains a neural network for text classification.</p>
 <dl class="field-list simple">
@@ -550,7 +575,7 @@ according to the evaluation in the held-out validation split (default ‘../chec
 </dl>
 <dl class="py property">
 <dt class="sig sig-object py" id="quapy.classification.neural.NeuralClassifierTrainer.device">
-<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">device</span></span><a class="headerlink" href="#quapy.classification.neural.NeuralClassifierTrainer.device" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">device</span></span><a class="headerlink" href="#quapy.classification.neural.NeuralClassifierTrainer.device" title="Link to this definition"></a></dt>
 <dd><p>Gets the device in which the network is allocated</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns<span class="colon">:</span></dt>
@@ -561,7 +586,7 @@ according to the evaluation in the held-out validation split (default ‘../chec
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.neural.NeuralClassifierTrainer.fit">
-<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">labels</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.3</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.neural.NeuralClassifierTrainer.fit" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">labels</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.3</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/neural.html#NeuralClassifierTrainer.fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.neural.NeuralClassifierTrainer.fit" title="Link to this definition"></a></dt>
 <dd><p>Fits the model according to the given training data.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -579,7 +604,7 @@ according to the evaluation in the held-out validation split (default ‘../chec
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.neural.NeuralClassifierTrainer.get_params">
-<span class="sig-name descname"><span class="pre">get_params</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.neural.NeuralClassifierTrainer.get_params" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">get_params</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/neural.html#NeuralClassifierTrainer.get_params"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.neural.NeuralClassifierTrainer.get_params" title="Link to this definition"></a></dt>
 <dd><p>Get hyper-parameters for this estimator</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns<span class="colon">:</span></dt>
@@ -590,7 +615,7 @@ according to the evaluation in the held-out validation split (default ‘../chec
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.neural.NeuralClassifierTrainer.predict">
-<span class="sig-name descname"><span class="pre">predict</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.neural.NeuralClassifierTrainer.predict" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">predict</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/neural.html#NeuralClassifierTrainer.predict"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.neural.NeuralClassifierTrainer.predict" title="Link to this definition"></a></dt>
 <dd><p>Predicts labels for the instances</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -605,7 +630,7 @@ instances in <cite>X</cite></p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.neural.NeuralClassifierTrainer.predict_proba">
-<span class="sig-name descname"><span class="pre">predict_proba</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.neural.NeuralClassifierTrainer.predict_proba" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">predict_proba</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/neural.html#NeuralClassifierTrainer.predict_proba"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.neural.NeuralClassifierTrainer.predict_proba" title="Link to this definition"></a></dt>
 <dd><p>Predicts posterior probabilities for the instances</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -619,7 +644,7 @@ instances in <cite>X</cite></p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.neural.NeuralClassifierTrainer.reset_net_params">
-<span class="sig-name descname"><span class="pre">reset_net_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">vocab_size</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_classes</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.neural.NeuralClassifierTrainer.reset_net_params" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">reset_net_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">vocab_size</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_classes</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/neural.html#NeuralClassifierTrainer.reset_net_params"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.neural.NeuralClassifierTrainer.reset_net_params" title="Link to this definition"></a></dt>
 <dd><p>Reinitialize the network parameters</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -633,7 +658,7 @@ instances in <cite>X</cite></p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.neural.NeuralClassifierTrainer.set_params">
-<span class="sig-name descname"><span class="pre">set_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">params</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.neural.NeuralClassifierTrainer.set_params" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">set_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">params</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/neural.html#NeuralClassifierTrainer.set_params"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.neural.NeuralClassifierTrainer.set_params" title="Link to this definition"></a></dt>
 <dd><p>Set the parameters of this trainer and the learner it is training.
 In this current version, parameter names for the trainer and learner should
 be disjoint.</p>
@@ -646,7 +671,7 @@ be disjoint.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.neural.NeuralClassifierTrainer.transform">
-<span class="sig-name descname"><span class="pre">transform</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.neural.NeuralClassifierTrainer.transform" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">transform</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/neural.html#NeuralClassifierTrainer.transform"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.neural.NeuralClassifierTrainer.transform" title="Link to this definition"></a></dt>
 <dd><p>Returns the embeddings of the instances</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -663,12 +688,12 @@ where <cite>embed_size</cite> is defined by the classification network</p>
 
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.classification.neural.TextClassifierNet">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.classification.neural.</span></span><span class="sig-name descname"><span class="pre">TextClassifierNet</span></span><a class="headerlink" href="#quapy.classification.neural.TextClassifierNet" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.classification.neural.</span></span><span class="sig-name descname"><span class="pre">TextClassifierNet</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/neural.html#TextClassifierNet"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.neural.TextClassifierNet" title="Link to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Module</span></code></p>
 <p>Abstract Text classifier (<cite>torch.nn.Module</cite>)</p>
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.neural.TextClassifierNet.dimensions">
-<span class="sig-name descname"><span class="pre">dimensions</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.neural.TextClassifierNet.dimensions" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">dimensions</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/neural.html#TextClassifierNet.dimensions"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.neural.TextClassifierNet.dimensions" title="Link to this definition"></a></dt>
 <dd><p>Gets the number of dimensions of the embedding space</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns<span class="colon">:</span></dt>
@@ -679,7 +704,7 @@ where <cite>embed_size</cite> is defined by the classification network</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.neural.TextClassifierNet.document_embedding">
-<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">document_embedding</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.neural.TextClassifierNet.document_embedding" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">document_embedding</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/neural.html#TextClassifierNet.document_embedding"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.neural.TextClassifierNet.document_embedding" title="Link to this definition"></a></dt>
 <dd><p>Embeds documents (i.e., performs the forward pass up to the
 next-to-last layer).</p>
 <dl class="field-list simple">
@@ -697,7 +722,7 @@ dimensionality of the embedding</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.neural.TextClassifierNet.forward">
-<span class="sig-name descname"><span class="pre">forward</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.neural.TextClassifierNet.forward" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">forward</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/neural.html#TextClassifierNet.forward"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.neural.TextClassifierNet.forward" title="Link to this definition"></a></dt>
 <dd><p>Performs the forward pass.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -713,7 +738,7 @@ for each of the instances and classes</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.neural.TextClassifierNet.get_params">
-<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">get_params</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.neural.TextClassifierNet.get_params" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">get_params</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/neural.html#TextClassifierNet.get_params"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.neural.TextClassifierNet.get_params" title="Link to this definition"></a></dt>
 <dd><p>Get hyper-parameters for this estimator</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns<span class="colon">:</span></dt>
@@ -724,7 +749,7 @@ for each of the instances and classes</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.neural.TextClassifierNet.predict_proba">
-<span class="sig-name descname"><span class="pre">predict_proba</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.neural.TextClassifierNet.predict_proba" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">predict_proba</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/neural.html#TextClassifierNet.predict_proba"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.neural.TextClassifierNet.predict_proba" title="Link to this definition"></a></dt>
 <dd><p>Predicts posterior probabilities for the instances in <cite>x</cite></p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -738,14 +763,9 @@ is length of the pad in the batch</p>
 </dl>
 </dd></dl>
 
-<dl class="py attribute">
-<dt class="sig sig-object py" id="quapy.classification.neural.TextClassifierNet.training">
-<span class="sig-name descname"><span class="pre">training</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">bool</span></em><a class="headerlink" href="#quapy.classification.neural.TextClassifierNet.training" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
 <dl class="py property">
 <dt class="sig sig-object py" id="quapy.classification.neural.TextClassifierNet.vocabulary_size">
-<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">vocabulary_size</span></span><a class="headerlink" href="#quapy.classification.neural.TextClassifierNet.vocabulary_size" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">vocabulary_size</span></span><a class="headerlink" href="#quapy.classification.neural.TextClassifierNet.vocabulary_size" title="Link to this definition"></a></dt>
 <dd><p>Return the size of the vocabulary</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns<span class="colon">:</span></dt>
@@ -756,7 +776,7 @@ is length of the pad in the batch</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.neural.TextClassifierNet.xavier_uniform">
-<span class="sig-name descname"><span class="pre">xavier_uniform</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.neural.TextClassifierNet.xavier_uniform" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">xavier_uniform</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/neural.html#TextClassifierNet.xavier_uniform"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.neural.TextClassifierNet.xavier_uniform" title="Link to this definition"></a></dt>
 <dd><p>Performs Xavier initialization of the network parameters</p>
 </dd></dl>
 
@@ -764,7 +784,7 @@ is length of the pad in the batch</p>
 
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.classification.neural.TorchDataset">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.classification.neural.</span></span><span class="sig-name descname"><span class="pre">TorchDataset</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">labels</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.neural.TorchDataset" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.classification.neural.</span></span><span class="sig-name descname"><span class="pre">TorchDataset</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">labels</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/neural.html#TorchDataset"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.neural.TorchDataset" title="Link to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Dataset</span></code></p>
 <p>Transforms labelled instances into a Torch’s <code class="xref py py-class docutils literal notranslate"><span class="pre">torch.utils.data.DataLoader</span></code> object</p>
 <dl class="field-list simple">
@@ -777,7 +797,7 @@ is length of the pad in the batch</p>
 </dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.neural.TorchDataset.asDataloader">
-<span class="sig-name descname"><span class="pre">asDataloader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">batch_size</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">shuffle</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pad_length</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">device</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.neural.TorchDataset.asDataloader" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">asDataloader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">batch_size</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">shuffle</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pad_length</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">device</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/neural.html#TorchDataset.asDataloader"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.neural.TorchDataset.asDataloader" title="Link to this definition"></a></dt>
 <dd><p>Converts the labelled collection into a Torch DataLoader with dynamic padding for
 the batch</p>
 <dl class="field-list simple">
@@ -801,22 +821,20 @@ applied, meaning that if the longest document in the batch is shorter than
 
 </section>
 <section id="module-quapy.classification.svmperf">
-<span id="quapy-classification-svmperf"></span><h2>quapy.classification.svmperf<a class="headerlink" href="#module-quapy.classification.svmperf" title="Permalink to this heading">¶</a></h2>
+<span id="quapy-classification-svmperf-module"></span><h2>quapy.classification.svmperf module<a class="headerlink" href="#module-quapy.classification.svmperf" title="Link to this heading"></a></h2>
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.classification.svmperf.SVMperf">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.classification.svmperf.</span></span><span class="sig-name descname"><span class="pre">SVMperf</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">svmperf_base</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">C</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.01</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">loss</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'01'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">host_folder</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.svmperf.SVMperf" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.classification.svmperf.</span></span><span class="sig-name descname"><span class="pre">SVMperf</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">svmperf_base</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">C</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.01</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">loss</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'01'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">host_folder</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/svmperf.html#SVMperf"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.svmperf.SVMperf" title="Link to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">BaseEstimator</span></code>, <code class="xref py py-class docutils literal notranslate"><span class="pre">ClassifierMixin</span></code></p>
 <p>A wrapper for the <a class="reference external" href="https://www.cs.cornell.edu/people/tj/svm_light/svm_perf.html">SVM-perf package</a> by Thorsten Joachims.
 When using losses for quantification, the source code has to be patched. See
 the <a class="reference external" href="https://hlt-isti.github.io/QuaPy/build/html/Installation.html#svm-perf-with-quantification-oriented-losses">installation documentation</a>
 for further details.</p>
-<p>References:</p>
-<blockquote>
-<div><ul class="simple">
+<p class="rubric">References</p>
+<ul class="simple">
 <li><p><a class="reference external" href="https://dl.acm.org/doi/abs/10.1145/2700406?casa_token=8D2fHsGCVn0AAAAA:ZfThYOvrzWxMGfZYlQW_y8Cagg-o_l6X_PcF09mdETQ4Tu7jK98mxFbGSXp9ZSO14JkUIYuDGFG0">Esuli et al.2015</a></p></li>
 <li><p><a class="reference external" href="https://www.sciencedirect.com/science/article/abs/pii/S003132031400291X">Barranquero et al.2015</a></p></li>
 </ul>
-</div></blockquote>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
 <dd class="field-odd"><ul class="simple">
@@ -831,7 +849,7 @@ for further details.</p>
 </dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.svmperf.SVMperf.decision_function">
-<span class="sig-name descname"><span class="pre">decision_function</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.svmperf.SVMperf.decision_function" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">decision_function</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/svmperf.html#SVMperf.decision_function"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.svmperf.SVMperf.decision_function" title="Link to this definition"></a></dt>
 <dd><p>Evaluate the decision function for the samples in <cite>X</cite>.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -848,7 +866,7 @@ for further details.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.svmperf.SVMperf.fit">
-<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.svmperf.SVMperf.fit" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/svmperf.html#SVMperf.fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.svmperf.SVMperf.fit" title="Link to this definition"></a></dt>
 <dd><p>Trains the SVM for the multivariate performance loss</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -865,7 +883,7 @@ for further details.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.classification.svmperf.SVMperf.predict">
-<span class="sig-name descname"><span class="pre">predict</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.svmperf.SVMperf.predict" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">predict</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/classification/svmperf.html#SVMperf.predict"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.classification.svmperf.SVMperf.predict" title="Link to this definition"></a></dt>
 <dd><p>Predicts labels for the instances <cite>X</cite></p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -880,94 +898,46 @@ instances in <cite>X</cite></p>
 
 <dl class="py attribute">
 <dt class="sig sig-object py" id="quapy.classification.svmperf.SVMperf.valid_losses">
-<span class="sig-name descname"><span class="pre">valid_losses</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'01':</span> <span class="pre">0,</span> <span class="pre">'f1':</span> <span class="pre">1,</span> <span class="pre">'kld':</span> <span class="pre">12,</span> <span class="pre">'mae':</span> <span class="pre">26,</span> <span class="pre">'mrae':</span> <span class="pre">27,</span> <span class="pre">'nkld':</span> <span class="pre">13,</span> <span class="pre">'q':</span> <span class="pre">22,</span> <span class="pre">'qacc':</span> <span class="pre">23,</span> <span class="pre">'qf1':</span> <span class="pre">24,</span> <span class="pre">'qgm':</span> <span class="pre">25}</span></em><a class="headerlink" href="#quapy.classification.svmperf.SVMperf.valid_losses" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">valid_losses</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'01':</span> <span class="pre">0,</span> <span class="pre">'f1':</span> <span class="pre">1,</span> <span class="pre">'kld':</span> <span class="pre">12,</span> <span class="pre">'mae':</span> <span class="pre">26,</span> <span class="pre">'mrae':</span> <span class="pre">27,</span> <span class="pre">'nkld':</span> <span class="pre">13,</span> <span class="pre">'q':</span> <span class="pre">22,</span> <span class="pre">'qacc':</span> <span class="pre">23,</span> <span class="pre">'qf1':</span> <span class="pre">24,</span> <span class="pre">'qgm':</span> <span class="pre">25}</span></em><a class="headerlink" href="#quapy.classification.svmperf.SVMperf.valid_losses" title="Link to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 </section>
 <section id="module-quapy.classification">
-<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-quapy.classification" title="Permalink to this heading">¶</a></h2>
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-quapy.classification" title="Link to this heading"></a></h2>
 </section>
 </section>
 
 
-            <div class="clearer"></div>
+           </div>
           </div>
-        </div>
-      </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-  <div>
-    <h3><a href="index.html">Table of Contents</a></h3>
-    <ul>
-<li><a class="reference internal" href="#">quapy.classification package</a><ul>
-<li><a class="reference internal" href="#submodules">Submodules</a></li>
-<li><a class="reference internal" href="#quapy-classification-calibration">quapy.classification.calibration</a></li>
-<li><a class="reference internal" href="#module-quapy.classification.methods">quapy.classification.methods</a></li>
-<li><a class="reference internal" href="#module-quapy.classification.neural">quapy.classification.neural</a></li>
-<li><a class="reference internal" href="#module-quapy.classification.svmperf">quapy.classification.svmperf</a></li>
-<li><a class="reference internal" href="#module-quapy.classification">Module contents</a></li>
-</ul>
-</li>
-</ul>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="quapy.html" class="btn btn-neutral float-left" title="quapy package" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="quapy.data.html" class="btn btn-neutral float-right" title="quapy.data package" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
 
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2024, Alejandro Moreo.</p>
   </div>
-  <div>
-    <h4>Previous topic</h4>
-    <p class="topless"><a href="quapy.html"
-                          title="previous chapter">quapy package</a></p>
-  </div>
-  <div>
-    <h4>Next topic</h4>
-    <p class="topless"><a href="quapy.data.html"
-                          title="next chapter">quapy.data package</a></p>
-  </div>
-  <div role="note" aria-label="source link">
-    <h3>This Page</h3>
-    <ul class="this-page-menu">
-      <li><a href="_sources/quapy.classification.rst.txt"
-            rel="nofollow">Show Source</a></li>
-    </ul>
-   </div>
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Quick search</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
-      <input type="submit" value="Go" />
-    </form>
-    </div>
-</div>
-<script>document.getElementById('searchbox').style.display = "block"</script>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
         </div>
       </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             >index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="right" >
-          <a href="quapy.data.html" title="quapy.data package"
-             >next</a> |</li>
-        <li class="right" >
-          <a href="quapy.html" title="quapy package"
-             >previous</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-          <li class="nav-item nav-item-1"><a href="modules.html" >quapy</a> &#187;</li>
-          <li class="nav-item nav-item-2"><a href="quapy.html" >quapy package</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">quapy.classification package</a></li> 
-      </ul>
-    </div>
-    <div class="footer" role="contentinfo">
-        &#169; Copyright 2021, Alejandro Moreo.
-      Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
-    </div>
-  </body>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
 </html>
\ No newline at end of file
diff --git a/docs/build/html/quapy.data.html b/docs/build/html/quapy.data.html
index ef262fd..4ade0f9 100644
--- a/docs/build/html/quapy.data.html
+++ b/docs/build/html/quapy.data.html
@@ -1,69 +1,110 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" data-content_root="./">
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
 
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>quapy.data package &mdash; QuaPy: A Python-based open-source framework for quantification 0.1.8 documentation</title>
+      <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=92fd9be5" />
+      <link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=19f00094" />
 
-<!doctype html>
-
-<html lang="en">
-  <head>
-    <meta charset="utf-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
-
-    <title>quapy.data package &#8212; QuaPy 0.1.7 documentation</title>
-    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
-    <link rel="stylesheet" type="text/css" href="_static/bizstyle.css" />
-    
-    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
-    <script src="_static/jquery.js"></script>
-    <script src="_static/underscore.js"></script>
-    <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
-    <script src="_static/doctools.js"></script>
-    <script src="_static/sphinx_highlight.js"></script>
-    <script src="_static/bizstyle.js"></script>
+  
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script src="_static/jquery.js?v=5d32c60e"></script>
+        <script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
+        <script src="_static/documentation_options.js?v=22607128"></script>
+        <script src="_static/doctools.js?v=9a2dae69"></script>
+        <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="quapy.method package" href="quapy.method.html" />
-    <link rel="prev" title="quapy.classification package" href="quapy.classification.html" />
-    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
-    <!--[if lt IE 9]>
-    <script src="_static/css3-mediaqueries.js"></script>
-    <![endif]-->
-  </head><body>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             accesskey="I">index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="right" >
-          <a href="quapy.method.html" title="quapy.method package"
-             accesskey="N">next</a> |</li>
-        <li class="right" >
-          <a href="quapy.classification.html" title="quapy.classification package"
-             accesskey="P">previous</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-          <li class="nav-item nav-item-1"><a href="modules.html" >quapy</a> &#187;</li>
-          <li class="nav-item nav-item-2"><a href="quapy.html" accesskey="U">quapy package</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">quapy.data package</a></li> 
-      </ul>
-    </div>  
+    <link rel="prev" title="quapy.classification package" href="quapy.classification.html" /> 
+</head>
 
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          <div class="body" role="main">
-            
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            QuaPy: A Python-based open-source framework for quantification
+          </a>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <ul class="current">
+<li class="toctree-l1 current"><a class="reference internal" href="modules.html">quapy</a><ul class="current">
+<li class="toctree-l2 current"><a class="reference internal" href="quapy.html">quapy package</a><ul class="current">
+<li class="toctree-l3 current"><a class="reference internal" href="quapy.html#subpackages">Subpackages</a><ul class="current">
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html">quapy.classification package</a></li>
+<li class="toctree-l4 current"><a class="current reference internal" href="#">quapy.data package</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html">quapy.method package</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.tests.html">quapy.tests package</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#submodules">Submodules</a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.error">quapy.error module</a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.evaluation">quapy.evaluation module</a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.functional">quapy.functional module</a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.model_selection">quapy.model_selection module</a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.plot">quapy.plot module</a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.protocol">quapy.protocol module</a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.util">quapy.util module</a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">QuaPy: A Python-based open-source framework for quantification</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="modules.html">quapy</a></li>
+          <li class="breadcrumb-item"><a href="quapy.html">quapy package</a></li>
+      <li class="breadcrumb-item active">quapy.data package</li>
+      <li class="wy-breadcrumbs-aside">
+            <a href="_sources/quapy.data.rst.txt" rel="nofollow"> View page source</a>
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
   <section id="quapy-data-package">
-<h1>quapy.data package<a class="headerlink" href="#quapy-data-package" title="Permalink to this heading">¶</a></h1>
+<h1>quapy.data package<a class="headerlink" href="#quapy-data-package" title="Link to this heading"></a></h1>
 <section id="submodules">
-<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this heading">¶</a></h2>
+<h2>Submodules<a class="headerlink" href="#submodules" title="Link to this heading"></a></h2>
 </section>
 <section id="module-quapy.data.base">
-<span id="quapy-data-base"></span><h2>quapy.data.base<a class="headerlink" href="#module-quapy.data.base" title="Permalink to this heading">¶</a></h2>
+<span id="quapy-data-base-module"></span><h2>quapy.data.base module<a class="headerlink" href="#module-quapy.data.base" title="Link to this heading"></a></h2>
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.data.base.Dataset">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.data.base.</span></span><span class="sig-name descname"><span class="pre">Dataset</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">training</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">test</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">vocabulary</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">dict</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">''</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.base.Dataset" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.data.base.</span></span><span class="sig-name descname"><span class="pre">Dataset</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">training</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">test</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">vocabulary</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">''</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/base.html#Dataset"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.base.Dataset" title="Link to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>Abstraction of training and test <a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">LabelledCollection</span></code></a> objects.</p>
 <dl class="field-list simple">
@@ -78,7 +119,7 @@
 </dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.data.base.Dataset.SplitStratified">
-<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">SplitStratified</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">collection</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">train_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.6</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.base.Dataset.SplitStratified" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">SplitStratified</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">collection</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">train_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.6</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/base.html#Dataset.SplitStratified"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.base.Dataset.SplitStratified" title="Link to this definition"></a></dt>
 <dd><p>Generates a <a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><code class="xref py py-class docutils literal notranslate"><span class="pre">Dataset</span></code></a> from a stratified split of a <a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">LabelledCollection</span></code></a> instance.
 See <a class="reference internal" href="#quapy.data.base.LabelledCollection.split_stratified" title="quapy.data.base.LabelledCollection.split_stratified"><code class="xref py py-meth docutils literal notranslate"><span class="pre">LabelledCollection.split_stratified()</span></code></a></p>
 <dl class="field-list simple">
@@ -96,7 +137,7 @@ See <a class="reference internal" href="#quapy.data.base.LabelledCollection.spli
 
 <dl class="py property">
 <dt class="sig sig-object py" id="quapy.data.base.Dataset.binary">
-<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">binary</span></span><a class="headerlink" href="#quapy.data.base.Dataset.binary" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">binary</span></span><a class="headerlink" href="#quapy.data.base.Dataset.binary" title="Link to this definition"></a></dt>
 <dd><p>Returns True if the training collection is labelled according to two classes</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns<span class="colon">:</span></dt>
@@ -107,7 +148,7 @@ See <a class="reference internal" href="#quapy.data.base.LabelledCollection.spli
 
 <dl class="py property">
 <dt class="sig sig-object py" id="quapy.data.base.Dataset.classes_">
-<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">classes_</span></span><a class="headerlink" href="#quapy.data.base.Dataset.classes_" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">classes_</span></span><a class="headerlink" href="#quapy.data.base.Dataset.classes_" title="Link to this definition"></a></dt>
 <dd><p>The classes according to which the training collection is labelled</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns<span class="colon">:</span></dt>
@@ -118,7 +159,7 @@ See <a class="reference internal" href="#quapy.data.base.LabelledCollection.spli
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.data.base.Dataset.kFCV">
-<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">kFCV</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">nfolds</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nrepeats</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.base.Dataset.kFCV" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">kFCV</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">nfolds</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nrepeats</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/base.html#Dataset.kFCV"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.base.Dataset.kFCV" title="Link to this definition"></a></dt>
 <dd><p>Generator of stratified folds to be used in k-fold cross validation. This function is only a wrapper around
 <a class="reference internal" href="#quapy.data.base.LabelledCollection.kFCV" title="quapy.data.base.LabelledCollection.kFCV"><code class="xref py py-meth docutils literal notranslate"><span class="pre">LabelledCollection.kFCV()</span></code></a> that returns <a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><code class="xref py py-class docutils literal notranslate"><span class="pre">Dataset</span></code></a> instances made of training and test folds.</p>
 <dl class="field-list simple">
@@ -137,7 +178,7 @@ See <a class="reference internal" href="#quapy.data.base.LabelledCollection.spli
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.data.base.Dataset.load">
-<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">load</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">train_path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">test_path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">loader_func</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">callable</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">classes</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">loader_kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.base.Dataset.load" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">load</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">train_path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">test_path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">loader_func</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">callable</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">classes</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">loader_kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/base.html#Dataset.load"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.base.Dataset.load" title="Link to this definition"></a></dt>
 <dd><p>Loads a training and a test labelled set of data and convert it into a <a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><code class="xref py py-class docutils literal notranslate"><span class="pre">Dataset</span></code></a> instance.
 The function in charge of reading the instances must be specified. This function can be a custom one, or any of
 the reading functions defined in <a class="reference internal" href="#module-quapy.data.reader" title="quapy.data.reader"><code class="xref py py-mod docutils literal notranslate"><span class="pre">quapy.data.reader</span></code></a> module.</p>
@@ -161,7 +202,7 @@ See <a class="reference internal" href="#quapy.data.base.LabelledCollection.load
 
 <dl class="py property">
 <dt class="sig sig-object py" id="quapy.data.base.Dataset.n_classes">
-<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">n_classes</span></span><a class="headerlink" href="#quapy.data.base.Dataset.n_classes" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">n_classes</span></span><a class="headerlink" href="#quapy.data.base.Dataset.n_classes" title="Link to this definition"></a></dt>
 <dd><p>The number of classes according to which the training collection is labelled</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns<span class="colon">:</span></dt>
@@ -172,7 +213,7 @@ See <a class="reference internal" href="#quapy.data.base.LabelledCollection.load
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.data.base.Dataset.reduce">
-<span class="sig-name descname"><span class="pre">reduce</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">n_train</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_test</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.base.Dataset.reduce" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">reduce</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">n_train</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_test</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/base.html#Dataset.reduce"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.base.Dataset.reduce" title="Link to this definition"></a></dt>
 <dd><p>Reduce the number of instances in place for quick experiments. Preserves the prevalence of each set.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -189,7 +230,7 @@ See <a class="reference internal" href="#quapy.data.base.LabelledCollection.load
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.data.base.Dataset.stats">
-<span class="sig-name descname"><span class="pre">stats</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">show</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.base.Dataset.stats" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">stats</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">show</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/base.html#Dataset.stats"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.base.Dataset.stats" title="Link to this definition"></a></dt>
 <dd><p>Returns (and eventually prints) a dictionary with some stats of this dataset. E.g.,:</p>
 <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">data</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">fetch_reviews</span><span class="p">(</span><span class="s1">&#39;kindle&#39;</span><span class="p">,</span> <span class="n">tfidf</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">min_df</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">data</span><span class="o">.</span><span class="n">stats</span><span class="p">()</span>
@@ -212,7 +253,7 @@ the collection), <cite>prevs</cite> (the prevalence values for each class)</p>
 
 <dl class="py property">
 <dt class="sig sig-object py" id="quapy.data.base.Dataset.train_test">
-<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">train_test</span></span><a class="headerlink" href="#quapy.data.base.Dataset.train_test" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">train_test</span></span><a class="headerlink" href="#quapy.data.base.Dataset.train_test" title="Link to this definition"></a></dt>
 <dd><p>Alias to <cite>self.training</cite> and <cite>self.test</cite></p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns<span class="colon">:</span></dt>
@@ -226,7 +267,7 @@ the collection), <cite>prevs</cite> (the prevalence values for each class)</p>
 
 <dl class="py property">
 <dt class="sig sig-object py" id="quapy.data.base.Dataset.vocabulary_size">
-<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">vocabulary_size</span></span><a class="headerlink" href="#quapy.data.base.Dataset.vocabulary_size" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">vocabulary_size</span></span><a class="headerlink" href="#quapy.data.base.Dataset.vocabulary_size" title="Link to this definition"></a></dt>
 <dd><p>If the dataset is textual, and the vocabulary was indicated, returns the size of the vocabulary</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns<span class="colon">:</span></dt>
@@ -239,7 +280,7 @@ the collection), <cite>prevs</cite> (the prevalence values for each class)</p>
 
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.data.base.LabelledCollection">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.data.base.</span></span><span class="sig-name descname"><span class="pre">LabelledCollection</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">labels</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">classes</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.base.LabelledCollection" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.data.base.</span></span><span class="sig-name descname"><span class="pre">LabelledCollection</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">labels</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">classes</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/base.html#LabelledCollection"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.base.LabelledCollection" title="Link to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>A LabelledCollection is a set of objects each with a label attached to each of them.
 This class implements several sampling routines and other utilities.</p>
@@ -256,7 +297,7 @@ from the labels. The classes must be indicated in cases in which some of the lab
 </dl>
 <dl class="py property">
 <dt class="sig sig-object py" id="quapy.data.base.LabelledCollection.X">
-<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">X</span></span><a class="headerlink" href="#quapy.data.base.LabelledCollection.X" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">X</span></span><a class="headerlink" href="#quapy.data.base.LabelledCollection.X" title="Link to this definition"></a></dt>
 <dd><p>An alias to self.instances</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns<span class="colon">:</span></dt>
@@ -267,7 +308,7 @@ from the labels. The classes must be indicated in cases in which some of the lab
 
 <dl class="py property">
 <dt class="sig sig-object py" id="quapy.data.base.LabelledCollection.Xp">
-<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">Xp</span></span><a class="headerlink" href="#quapy.data.base.LabelledCollection.Xp" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">Xp</span></span><a class="headerlink" href="#quapy.data.base.LabelledCollection.Xp" title="Link to this definition"></a></dt>
 <dd><p>Gets the instances and the true prevalence. This is useful when implementing evaluation protocols from
 a <a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">LabelledCollection</span></code></a> object.</p>
 <dl class="field-list simple">
@@ -279,7 +320,7 @@ a <a class="reference internal" href="#quapy.data.base.LabelledCollection" title
 
 <dl class="py property">
 <dt class="sig sig-object py" id="quapy.data.base.LabelledCollection.Xy">
-<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">Xy</span></span><a class="headerlink" href="#quapy.data.base.LabelledCollection.Xy" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">Xy</span></span><a class="headerlink" href="#quapy.data.base.LabelledCollection.Xy" title="Link to this definition"></a></dt>
 <dd><p>Gets the instances and labels. This is useful when working with <cite>sklearn</cite> estimators, e.g.:</p>
 <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">svm</span> <span class="o">=</span> <span class="n">LinearSVC</span><span class="p">()</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="o">*</span><span class="n">my_collection</span><span class="o">.</span><span class="n">Xy</span><span class="p">)</span>
 </pre></div>
@@ -293,7 +334,7 @@ a <a class="reference internal" href="#quapy.data.base.LabelledCollection" title
 
 <dl class="py property">
 <dt class="sig sig-object py" id="quapy.data.base.LabelledCollection.binary">
-<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">binary</span></span><a class="headerlink" href="#quapy.data.base.LabelledCollection.binary" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">binary</span></span><a class="headerlink" href="#quapy.data.base.LabelledCollection.binary" title="Link to this definition"></a></dt>
 <dd><p>Returns True if the number of classes is 2</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns<span class="colon">:</span></dt>
@@ -304,7 +345,7 @@ a <a class="reference internal" href="#quapy.data.base.LabelledCollection" title
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.data.base.LabelledCollection.counts">
-<span class="sig-name descname"><span class="pre">counts</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.base.LabelledCollection.counts" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">counts</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/base.html#LabelledCollection.counts"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.base.LabelledCollection.counts" title="Link to this definition"></a></dt>
 <dd><p>Returns the number of instances for each of the classes in the codeframe.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns<span class="colon">:</span></dt>
@@ -316,7 +357,7 @@ as listed by <cite>self.classes_</cite></p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.data.base.LabelledCollection.join">
-<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">join</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Iterable</span><span class="p"><span class="pre">[</span></span><a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.base.LabelledCollection.join" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">join</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Iterable</span><span class="p"><span class="pre">[</span></span><a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/base.html#LabelledCollection.join"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.base.LabelledCollection.join" title="Link to this definition"></a></dt>
 <dd><p>Returns a new <a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">LabelledCollection</span></code></a> as the union of the collections given in input.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -330,7 +371,7 @@ as listed by <cite>self.classes_</cite></p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.data.base.LabelledCollection.kFCV">
-<span class="sig-name descname"><span class="pre">kFCV</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">nfolds</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nrepeats</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.base.LabelledCollection.kFCV" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">kFCV</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">nfolds</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nrepeats</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/base.html#LabelledCollection.kFCV"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.base.LabelledCollection.kFCV" title="Link to this definition"></a></dt>
 <dd><p>Generator of stratified folds to be used in k-fold cross validation.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -348,7 +389,7 @@ as listed by <cite>self.classes_</cite></p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.data.base.LabelledCollection.load">
-<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">load</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">loader_func</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">callable</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">classes</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">loader_kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.base.LabelledCollection.load" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">load</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">loader_func</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">callable</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">classes</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">loader_kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/base.html#LabelledCollection.load"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.base.LabelledCollection.load" title="Link to this definition"></a></dt>
 <dd><p>Loads a labelled set of data and convert it into a <a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">LabelledCollection</span></code></a> instance. The function in charge
 of reading the instances must be specified. This function can be a custom one, or any of the reading functions
 defined in <a class="reference internal" href="#module-quapy.data.reader" title="quapy.data.reader"><code class="xref py py-mod docutils literal notranslate"><span class="pre">quapy.data.reader</span></code></a> module.</p>
@@ -371,7 +412,7 @@ these arguments are used to call <cite>loader_func(path, **loader_kwargs)</cite>
 
 <dl class="py property">
 <dt class="sig sig-object py" id="quapy.data.base.LabelledCollection.n_classes">
-<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">n_classes</span></span><a class="headerlink" href="#quapy.data.base.LabelledCollection.n_classes" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">n_classes</span></span><a class="headerlink" href="#quapy.data.base.LabelledCollection.n_classes" title="Link to this definition"></a></dt>
 <dd><p>The number of classes</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns<span class="colon">:</span></dt>
@@ -382,7 +423,7 @@ these arguments are used to call <cite>loader_func(path, **loader_kwargs)</cite>
 
 <dl class="py property">
 <dt class="sig sig-object py" id="quapy.data.base.LabelledCollection.p">
-<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">p</span></span><a class="headerlink" href="#quapy.data.base.LabelledCollection.p" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">p</span></span><a class="headerlink" href="#quapy.data.base.LabelledCollection.p" title="Link to this definition"></a></dt>
 <dd><p>An alias to self.prevalence()</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns<span class="colon">:</span></dt>
@@ -393,7 +434,7 @@ these arguments are used to call <cite>loader_func(path, **loader_kwargs)</cite>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.data.base.LabelledCollection.prevalence">
-<span class="sig-name descname"><span class="pre">prevalence</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.base.LabelledCollection.prevalence" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">prevalence</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/base.html#LabelledCollection.prevalence"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.base.LabelledCollection.prevalence" title="Link to this definition"></a></dt>
 <dd><p>Returns the prevalence, or relative frequency, of the classes in the codeframe.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns<span class="colon">:</span></dt>
@@ -405,7 +446,7 @@ as listed by <cite>self.classes_</cite></p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.data.base.LabelledCollection.sampling">
-<span class="sig-name descname"><span class="pre">sampling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">size</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">shuffle</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.base.LabelledCollection.sampling" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">sampling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">size</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">shuffle</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/base.html#LabelledCollection.sampling"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.base.LabelledCollection.sampling" title="Link to this definition"></a></dt>
 <dd><p>Return a random sample (an instance of <a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">LabelledCollection</span></code></a>) of desired size and desired prevalence
 values. For each class, the sampling is drawn without replacement if the requested prevalence is larger than
 the actual prevalence of the class, or with replacement otherwise.</p>
@@ -429,7 +470,7 @@ prevalence == <cite>prevs</cite> if the exact prevalence values can be met as pr
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.data.base.LabelledCollection.sampling_from_index">
-<span class="sig-name descname"><span class="pre">sampling_from_index</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">index</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.base.LabelledCollection.sampling_from_index" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">sampling_from_index</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">index</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/base.html#LabelledCollection.sampling_from_index"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.base.LabelledCollection.sampling_from_index" title="Link to this definition"></a></dt>
 <dd><p>Returns an instance of <a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">LabelledCollection</span></code></a> whose elements are sampled from this collection using the
 index.</p>
 <dl class="field-list simple">
@@ -444,7 +485,7 @@ index.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.data.base.LabelledCollection.sampling_index">
-<span class="sig-name descname"><span class="pre">sampling_index</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">size</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">shuffle</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.base.LabelledCollection.sampling_index" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">sampling_index</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">size</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">shuffle</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/base.html#LabelledCollection.sampling_index"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.base.LabelledCollection.sampling_index" title="Link to this definition"></a></dt>
 <dd><p>Returns an index to be used to extract a random sample of desired size and desired prevalence values. If the
 prevalence values are not specified, then returns the index of a uniform sampling.
 For each class, the sampling is drawn with replacement if the requested prevalence is larger than
@@ -468,7 +509,7 @@ it is constrained. E.g., for binary collections, only the prevalence <cite>p</ci
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.data.base.LabelledCollection.split_random">
-<span class="sig-name descname"><span class="pre">split_random</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">train_prop</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.6</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.base.LabelledCollection.split_random" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">split_random</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">train_prop</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.6</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/base.html#LabelledCollection.split_random"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.base.LabelledCollection.split_random" title="Link to this definition"></a></dt>
 <dd><p>Returns two instances of <a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">LabelledCollection</span></code></a> split randomly from this collection, at desired
 proportion.</p>
 <dl class="field-list simple">
@@ -489,7 +530,7 @@ second one with <cite>1-train_prop</cite> elements</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.data.base.LabelledCollection.split_stratified">
-<span class="sig-name descname"><span class="pre">split_stratified</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">train_prop</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.6</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.base.LabelledCollection.split_stratified" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">split_stratified</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">train_prop</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.6</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/base.html#LabelledCollection.split_stratified"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.base.LabelledCollection.split_stratified" title="Link to this definition"></a></dt>
 <dd><p>Returns two instances of <a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">LabelledCollection</span></code></a> split with stratification from this collection, at desired
 proportion.</p>
 <dl class="field-list simple">
@@ -510,7 +551,7 @@ second one with <cite>1-train_prop</cite> elements</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.data.base.LabelledCollection.stats">
-<span class="sig-name descname"><span class="pre">stats</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">show</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.base.LabelledCollection.stats" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">stats</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">show</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/base.html#LabelledCollection.stats"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.base.LabelledCollection.stats" title="Link to this definition"></a></dt>
 <dd><p>Returns (and eventually prints) a dictionary with some stats of this collection. E.g.,:</p>
 <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">data</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">fetch_reviews</span><span class="p">(</span><span class="s1">&#39;kindle&#39;</span><span class="p">,</span> <span class="n">tfidf</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">min_df</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">data</span><span class="o">.</span><span class="n">training</span><span class="o">.</span><span class="n">stats</span><span class="p">()</span>
@@ -532,7 +573,7 @@ values for each class)</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.data.base.LabelledCollection.uniform_sampling">
-<span class="sig-name descname"><span class="pre">uniform_sampling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">size</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.base.LabelledCollection.uniform_sampling" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">uniform_sampling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">size</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/base.html#LabelledCollection.uniform_sampling"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.base.LabelledCollection.uniform_sampling" title="Link to this definition"></a></dt>
 <dd><p>Returns a uniform sample (an instance of <a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">LabelledCollection</span></code></a>) of desired size. The sampling is drawn
 with replacement if the requested size is greater than the number of instances, or without replacement
 otherwise.</p>
@@ -551,7 +592,7 @@ otherwise.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.data.base.LabelledCollection.uniform_sampling_index">
-<span class="sig-name descname"><span class="pre">uniform_sampling_index</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">size</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.base.LabelledCollection.uniform_sampling_index" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">uniform_sampling_index</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">size</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/base.html#LabelledCollection.uniform_sampling_index"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.base.LabelledCollection.uniform_sampling_index" title="Link to this definition"></a></dt>
 <dd><p>Returns an index to be used to extract a uniform sample of desired size. The sampling is drawn
 with replacement if the requested size is greater than the number of instances, or without replacement
 otherwise.</p>
@@ -570,7 +611,7 @@ otherwise.</p>
 
 <dl class="py property">
 <dt class="sig sig-object py" id="quapy.data.base.LabelledCollection.y">
-<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">y</span></span><a class="headerlink" href="#quapy.data.base.LabelledCollection.y" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">y</span></span><a class="headerlink" href="#quapy.data.base.LabelledCollection.y" title="Link to this definition"></a></dt>
 <dd><p>An alias to self.labels</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns<span class="colon">:</span></dt>
@@ -583,10 +624,41 @@ otherwise.</p>
 
 </section>
 <section id="module-quapy.data.datasets">
-<span id="quapy-data-datasets"></span><h2>quapy.data.datasets<a class="headerlink" href="#module-quapy.data.datasets" title="Permalink to this heading">¶</a></h2>
+<span id="quapy-data-datasets-module"></span><h2>quapy.data.datasets module<a class="headerlink" href="#module-quapy.data.datasets" title="Link to this heading"></a></h2>
 <dl class="py function">
-<dt class="sig sig-object py" id="quapy.data.datasets.fetch_UCIDataset">
-<span class="sig-prename descclassname"><span class="pre">quapy.data.datasets.</span></span><span class="sig-name descname"><span class="pre">fetch_UCIDataset</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataset_name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data_home</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">test_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><span class="pre">Dataset</span></a></span></span><a class="headerlink" href="#quapy.data.datasets.fetch_UCIDataset" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="quapy.data.datasets.fetch_IFCB">
+<span class="sig-prename descclassname"><span class="pre">quapy.data.datasets.</span></span><span class="sig-name descname"><span class="pre">fetch_IFCB</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">single_sample_train</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data_home</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/datasets.html#fetch_IFCB"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.datasets.fetch_IFCB" title="Link to this definition"></a></dt>
+<dd><p>Loads the IFCB dataset for quantification &lt;<a class="reference external" href="https://zenodo.org/records/10036244">https://zenodo.org/records/10036244</a>&gt;`. For more
+information on this dataset check the zenodo site.
+This dataset is based on the data available publicly at &lt;<a class="reference external" href="https://github.com/hsosik/WHOI-Plankton">https://github.com/hsosik/WHOI-Plankton</a>&gt;.
+The scripts for the processing are available at &lt;<a class="reference external" href="https://github.com/pglez82/IFCB_Zenodo">https://github.com/pglez82/IFCB_Zenodo</a>&gt;</p>
+<p>Basically, this is the IFCB dataset with precomputed features for testing quantification algorithms.</p>
+<p>The datasets are downloaded only once, and stored for fast reuse.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>single_sample_train</strong> – boolean. If True (default), it returns the train dataset as an instance of
+<a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> (all examples together).
+If False, a generator of training samples will be returned.
+Each example in the training set has an individual class label.</p></li>
+<li><p><strong>data_home</strong> – specify the quapy home directory where collections will be dumped (leave empty to use the default
+~/quay_data/ directory)</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>a tuple <cite>(train, test_gen)</cite> where <cite>train</cite> is an instance of
+<a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a>, if <cite>single_sample_train</cite> is True or
+<code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data._ifcb.IFCBTrainSamplesFromDir</span></code> otherwise, i.e. a sampling protocol that
+returns a series of samples labelled example by example.
+test_gen is an instance of  <code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data._ifcb.IFCBTestSamples</span></code>,
+i.e., a sampling protocol that returns a series of samples labelled by prevalence.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="quapy.data.datasets.fetch_UCIBinaryDataset">
+<span class="sig-prename descclassname"><span class="pre">quapy.data.datasets.</span></span><span class="sig-name descname"><span class="pre">fetch_UCIBinaryDataset</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataset_name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data_home</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">test_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><span class="pre">Dataset</span></a></span></span><a class="reference internal" href="_modules/quapy/data/datasets.html#fetch_UCIBinaryDataset"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.datasets.fetch_UCIBinaryDataset" title="Link to this definition"></a></dt>
 <dd><p>Loads a UCI dataset as an instance of <a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.Dataset</span></code></a>, as used in
 <a class="reference external" href="https://www.sciencedirect.com/science/article/pii/S1566253516300628">Pérez-Gállego, P., Quevedo, J. R., &amp; del Coz, J. J. (2017).
 Using ensembles for problems with characterizable changes in data distribution: A case study on quantification.
@@ -595,7 +667,7 @@ and
 <a class="reference external" href="https://www.sciencedirect.com/science/article/pii/S1566253517303652">Pérez-Gállego, P., Castano, A., Quevedo, J. R., &amp; del Coz, J. J. (2019).
 Dynamic ensemble selection for quantification tasks.
 Information Fusion, 45, 1-15.</a>.
-The datasets do not come with a predefined train-test split (see <a class="reference internal" href="#quapy.data.datasets.fetch_UCILabelledCollection" title="quapy.data.datasets.fetch_UCILabelledCollection"><code class="xref py py-meth docutils literal notranslate"><span class="pre">fetch_UCILabelledCollection()</span></code></a> for further
+The datasets do not come with a predefined train-test split (see <code class="xref py py-meth docutils literal notranslate"><span class="pre">fetch_UCILabelledCollection()</span></code> for further
 information on how to use these collections), and so a train-test split is generated at desired proportion.
 The list of valid dataset names can be accessed in <cite>quapy.data.datasets.UCI_DATASETS</cite></p>
 <dl class="field-list simple">
@@ -615,8 +687,8 @@ The list of valid dataset names can be accessed in <cite>quapy.data.datasets.UCI
 </dd></dl>
 
 <dl class="py function">
-<dt class="sig sig-object py" id="quapy.data.datasets.fetch_UCILabelledCollection">
-<span class="sig-prename descclassname"><span class="pre">quapy.data.datasets.</span></span><span class="sig-name descname"><span class="pre">fetch_UCILabelledCollection</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataset_name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data_home</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><span class="pre">Dataset</span></a></span></span><a class="headerlink" href="#quapy.data.datasets.fetch_UCILabelledCollection" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="quapy.data.datasets.fetch_UCIBinaryLabelledCollection">
+<span class="sig-prename descclassname"><span class="pre">quapy.data.datasets.</span></span><span class="sig-name descname"><span class="pre">fetch_UCIBinaryLabelledCollection</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataset_name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data_home</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></span><a class="reference internal" href="_modules/quapy/data/datasets.html#fetch_UCIBinaryLabelledCollection"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.datasets.fetch_UCIBinaryLabelledCollection" title="Link to this definition"></a></dt>
 <dd><p>Loads a UCI collection as an instance of <a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a>, as used in
 <a class="reference external" href="https://www.sciencedirect.com/science/article/pii/S1566253516300628">Pérez-Gállego, P., Quevedo, J. R., &amp; del Coz, J. J. (2017).
 Using ensembles for problems with characterizable changes in data distribution: A case study on quantification.
@@ -629,8 +701,8 @@ The datasets do not come with a predefined train-test split, and so Pérez-Gáll
 protocol, meaning that each collection was used to generate two rounds (hence the x2) of 5 fold cross validation.
 This can be reproduced by using <a class="reference internal" href="#quapy.data.base.Dataset.kFCV" title="quapy.data.base.Dataset.kFCV"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quapy.data.base.Dataset.kFCV()</span></code></a>, e.g.:</p>
 <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">quapy</span> <span class="k">as</span> <span class="nn">qp</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">collection</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">fetch_UCILabelledCollection</span><span class="p">(</span><span class="s2">&quot;yeast&quot;</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">data</span> <span class="ow">in</span> <span class="n">qp</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">Dataset</span><span class="o">.</span><span class="n">kFCV</span><span class="p">(</span><span class="n">collection</span><span class="p">,</span> <span class="n">nfolds</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">nrepeats</span><span class="o">=</span><span class="mi">2</span><span class="p">):</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">collection</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">fetch_UCIBinaryLabelledCollection</span><span class="p">(</span><span class="s2">&quot;yeast&quot;</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">data</span> <span class="ow">in</span> <span class="n">qp</span><span class="o">.</span><span class="n">train</span><span class="o">.</span><span class="n">Dataset</span><span class="o">.</span><span class="n">kFCV</span><span class="p">(</span><span class="n">collection</span><span class="p">,</span> <span class="n">nfolds</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">nrepeats</span><span class="o">=</span><span class="mi">2</span><span class="p">):</span>
 <span class="gp">&gt;&gt;&gt; </span>    <span class="o">...</span>
 </pre></div>
 </div>
@@ -646,14 +718,80 @@ This can be reproduced by using <a class="reference internal" href="#quapy.data.
 </ul>
 </dd>
 <dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>a <a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> instance</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="quapy.data.datasets.fetch_UCIMulticlassDataset">
+<span class="sig-prename descclassname"><span class="pre">quapy.data.datasets.</span></span><span class="sig-name descname"><span class="pre">fetch_UCIMulticlassDataset</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataset_name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data_home</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">test_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><span class="pre">Dataset</span></a></span></span><a class="reference internal" href="_modules/quapy/data/datasets.html#fetch_UCIMulticlassDataset"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.datasets.fetch_UCIMulticlassDataset" title="Link to this definition"></a></dt>
+<dd><p>Loads a UCI multiclass dataset as an instance of <a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.Dataset</span></code></a>.</p>
+<p>The list of available datasets is taken from <a class="reference external" href="https://archive.ics.uci.edu/">https://archive.ics.uci.edu/</a>, following these criteria:
+- It has more than 1000 instances
+- It is suited for classification
+- It has more than two classes
+- It is available for Python import (requires ucimlrepo package)</p>
+<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">quapy</span> <span class="k">as</span> <span class="nn">qp</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">dataset</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">fetch_UCIMulticlassDataset</span><span class="p">(</span><span class="s2">&quot;dry-bean&quot;</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">train</span><span class="p">,</span> <span class="n">test</span> <span class="o">=</span> <span class="n">dataset</span><span class="o">.</span><span class="n">train_test</span>
+<span class="gp">&gt;&gt;&gt; </span>    <span class="o">...</span>
+</pre></div>
+</div>
+<p>The list of valid dataset names can be accessed in <cite>quapy.data.datasets.UCI_MULTICLASS_DATASETS</cite></p>
+<p>The datasets are downloaded only once and pickled into disk, saving time for consecutive calls.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>dataset_name</strong> – a dataset name</p></li>
+<li><p><strong>data_home</strong> – specify the quapy home directory where collections will be dumped (leave empty to use the default
+~/quay_data/ directory)</p></li>
+<li><p><strong>test_split</strong> – proportion of documents to be included in the test set. The rest conforms the training set</p></li>
+<li><p><strong>verbose</strong> – set to True (default is False) to get information (stats) about the dataset</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
 <dd class="field-even"><p>a <a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.Dataset</span></code></a> instance</p>
 </dd>
 </dl>
 </dd></dl>
 
+<dl class="py function">
+<dt class="sig sig-object py" id="quapy.data.datasets.fetch_UCIMulticlassLabelledCollection">
+<span class="sig-prename descclassname"><span class="pre">quapy.data.datasets.</span></span><span class="sig-name descname"><span class="pre">fetch_UCIMulticlassLabelledCollection</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataset_name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data_home</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></span><a class="reference internal" href="_modules/quapy/data/datasets.html#fetch_UCIMulticlassLabelledCollection"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.datasets.fetch_UCIMulticlassLabelledCollection" title="Link to this definition"></a></dt>
+<dd><p>Loads a UCI multiclass collection as an instance of <a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a>.</p>
+<p>The list of available datasets is taken from <a class="reference external" href="https://archive.ics.uci.edu/">https://archive.ics.uci.edu/</a>, following these criteria:
+- It has more than 1000 instances
+- It is suited for classification
+- It has more than two classes
+- It is available for Python import (requires ucimlrepo package)</p>
+<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">quapy</span> <span class="k">as</span> <span class="nn">qp</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">collection</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">fetch_UCIMulticlassLabelledCollection</span><span class="p">(</span><span class="s2">&quot;dry-bean&quot;</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">X</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">collection</span><span class="o">.</span><span class="n">Xy</span>
+<span class="gp">&gt;&gt;&gt; </span>    <span class="o">...</span>
+</pre></div>
+</div>
+<p>The list of valid dataset names can be accessed in <cite>quapy.data.datasets.UCI_MULTICLASS_DATASETS</cite></p>
+<p>The datasets are downloaded only once and pickled into disk, saving time for consecutive calls.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>dataset_name</strong> – a dataset name</p></li>
+<li><p><strong>data_home</strong> – specify the quapy home directory where the dataset will be dumped (leave empty to use the default
+~/quay_data/ directory)</p></li>
+<li><p><strong>test_split</strong> – proportion of documents to be included in the test set. The rest conforms the training set</p></li>
+<li><p><strong>verbose</strong> – set to True (default is False) to get information (stats) about the dataset</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>a <a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> instance</p>
+</dd>
+</dl>
+</dd></dl>
+
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.data.datasets.fetch_lequa2022">
-<span class="sig-prename descclassname"><span class="pre">quapy.data.datasets.</span></span><span class="sig-name descname"><span class="pre">fetch_lequa2022</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">task</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data_home</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.datasets.fetch_lequa2022" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.data.datasets.</span></span><span class="sig-name descname"><span class="pre">fetch_lequa2022</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">task</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data_home</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/datasets.html#fetch_lequa2022"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.datasets.fetch_lequa2022" title="Link to this definition"></a></dt>
 <dd><p>Loads the official datasets provided for the <a class="reference external" href="https://lequa2022.github.io/index">LeQua</a> competition.
 In brief, there are 4 tasks (T1A, T1B, T2A, T2B) having to do with text quantification
 problems. Tasks T1A and T1B provide documents in vector form, while T2A and T2B provide raw documents instead.
@@ -676,15 +814,15 @@ datasets.</p>
 <dt class="field-even">Returns<span class="colon">:</span></dt>
 <dd class="field-even"><p>a tuple <cite>(train, val_gen, test_gen)</cite> where <cite>train</cite> is an instance of
 <a class="reference internal" href="#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a>, <cite>val_gen</cite> and <cite>test_gen</cite> are instances of
-<code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.protocol.SamplesFromDir</span></code>, i.e., are sampling protocols that return a series of samples
-labelled by prevalence.</p>
+<code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data._lequa2022.SamplesFromDir</span></code>, a subclass of <a class="reference internal" href="quapy.html#quapy.protocol.AbstractProtocol" title="quapy.protocol.AbstractProtocol"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.protocol.AbstractProtocol</span></code></a>,
+that return a series of samples stored in a directory which are labelled by prevalence.</p>
 </dd>
 </dl>
 </dd></dl>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.data.datasets.fetch_reviews">
-<span class="sig-prename descclassname"><span class="pre">quapy.data.datasets.</span></span><span class="sig-name descname"><span class="pre">fetch_reviews</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataset_name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tfidf</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">min_df</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data_home</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pickle</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><span class="pre">Dataset</span></a></span></span><a class="headerlink" href="#quapy.data.datasets.fetch_reviews" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.data.datasets.</span></span><span class="sig-name descname"><span class="pre">fetch_reviews</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataset_name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tfidf</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">min_df</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data_home</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pickle</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><span class="pre">Dataset</span></a></span></span><a class="reference internal" href="_modules/quapy/data/datasets.html#fetch_reviews"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.datasets.fetch_reviews" title="Link to this definition"></a></dt>
 <dd><p>Loads a Reviews dataset as a Dataset instance, as used in
 <a class="reference external" href="https://dl.acm.org/doi/abs/10.1145/3269206.3269287">Esuli, A., Moreo, A., and Sebastiani, F. “A recurrent neural network for sentiment quantification.”
 Proceedings of the 27th ACM International Conference on Information and Knowledge Management. 2018.</a>.
@@ -710,7 +848,7 @@ faster subsequent invokations</p></li>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.data.datasets.fetch_twitter">
-<span class="sig-prename descclassname"><span class="pre">quapy.data.datasets.</span></span><span class="sig-name descname"><span class="pre">fetch_twitter</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataset_name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">for_model_selection</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">min_df</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data_home</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pickle</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><span class="pre">Dataset</span></a></span></span><a class="headerlink" href="#quapy.data.datasets.fetch_twitter" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.data.datasets.</span></span><span class="sig-name descname"><span class="pre">fetch_twitter</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataset_name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">for_model_selection</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">min_df</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data_home</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pickle</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><span class="pre">Dataset</span></a></span></span><a class="reference internal" href="_modules/quapy/data/datasets.html#fetch_twitter"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.datasets.fetch_twitter" title="Link to this definition"></a></dt>
 <dd><p>Loads a Twitter dataset as a <a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.Dataset</span></code></a> instance, as used in:
 <a class="reference external" href="https://link.springer.com/content/pdf/10.1007/s13278-016-0327-z.pdf">Gao, W., Sebastiani, F.: From classification to quantification in tweet sentiment analysis.
 Social Network Analysis and Mining6(19), 1–22 (2016)</a>
@@ -741,15 +879,15 @@ faster subsequent invokations</p></li>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.data.datasets.warn">
-<span class="sig-prename descclassname"><span class="pre">quapy.data.datasets.</span></span><span class="sig-name descname"><span class="pre">warn</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.datasets.warn" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.data.datasets.</span></span><span class="sig-name descname"><span class="pre">warn</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/datasets.html#warn"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.datasets.warn" title="Link to this definition"></a></dt>
 <dd></dd></dl>
 
 </section>
 <section id="module-quapy.data.preprocessing">
-<span id="quapy-data-preprocessing"></span><h2>quapy.data.preprocessing<a class="headerlink" href="#module-quapy.data.preprocessing" title="Permalink to this heading">¶</a></h2>
+<span id="quapy-data-preprocessing-module"></span><h2>quapy.data.preprocessing module<a class="headerlink" href="#module-quapy.data.preprocessing" title="Link to this heading"></a></h2>
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.data.preprocessing.IndexTransformer">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.data.preprocessing.</span></span><span class="sig-name descname"><span class="pre">IndexTransformer</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.preprocessing.IndexTransformer" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.data.preprocessing.</span></span><span class="sig-name descname"><span class="pre">IndexTransformer</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/preprocessing.html#IndexTransformer"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.preprocessing.IndexTransformer" title="Link to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>This class implements a sklearn’s-style transformer that indexes text as numerical ids for the tokens it
 contains, and that would be generated by sklearn’s
@@ -763,7 +901,7 @@ contains, and that would be generated by sklearn’s
 </dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.data.preprocessing.IndexTransformer.add_word">
-<span class="sig-name descname"><span class="pre">add_word</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">word</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">id</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nogaps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.preprocessing.IndexTransformer.add_word" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">add_word</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">word</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">id</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nogaps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/preprocessing.html#IndexTransformer.add_word"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.preprocessing.IndexTransformer.add_word" title="Link to this definition"></a></dt>
 <dd><p>Adds a new token (regardless of whether it has been found in the text or not), with dedicated id.
 Useful to define special tokens for codifying unknown words, or padding tokens.</p>
 <dl class="field-list simple">
@@ -784,7 +922,7 @@ precedent ids stored so far</p></li>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.data.preprocessing.IndexTransformer.fit">
-<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.preprocessing.IndexTransformer.fit" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/preprocessing.html#IndexTransformer.fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.preprocessing.IndexTransformer.fit" title="Link to this definition"></a></dt>
 <dd><p>Fits the transformer, i.e., decides on the vocabulary, given a list of strings.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -798,7 +936,7 @@ precedent ids stored so far</p></li>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.data.preprocessing.IndexTransformer.fit_transform">
-<span class="sig-name descname"><span class="pre">fit_transform</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.preprocessing.IndexTransformer.fit_transform" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">fit_transform</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/preprocessing.html#IndexTransformer.fit_transform"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.preprocessing.IndexTransformer.fit_transform" title="Link to this definition"></a></dt>
 <dd><p>Fits the transform on <cite>X</cite> and transforms it.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -815,7 +953,7 @@ precedent ids stored so far</p></li>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.data.preprocessing.IndexTransformer.transform">
-<span class="sig-name descname"><span class="pre">transform</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.preprocessing.IndexTransformer.transform" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">transform</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/preprocessing.html#IndexTransformer.transform"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.preprocessing.IndexTransformer.transform" title="Link to this definition"></a></dt>
 <dd><p>Transforms the strings in <cite>X</cite> as lists of numerical ids</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -832,7 +970,7 @@ precedent ids stored so far</p></li>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.data.preprocessing.IndexTransformer.vocabulary_size">
-<span class="sig-name descname"><span class="pre">vocabulary_size</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.preprocessing.IndexTransformer.vocabulary_size" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">vocabulary_size</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/preprocessing.html#IndexTransformer.vocabulary_size"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.preprocessing.IndexTransformer.vocabulary_size" title="Link to this definition"></a></dt>
 <dd><p>Gets the length of the vocabulary according to which the document tokens have been indexed</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns<span class="colon">:</span></dt>
@@ -845,7 +983,7 @@ precedent ids stored so far</p></li>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.data.preprocessing.index">
-<span class="sig-prename descclassname"><span class="pre">quapy.data.preprocessing.</span></span><span class="sig-name descname"><span class="pre">index</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><span class="pre">Dataset</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">min_df</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">inplace</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.preprocessing.index" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.data.preprocessing.</span></span><span class="sig-name descname"><span class="pre">index</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><span class="pre">Dataset</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">min_df</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">inplace</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/preprocessing.html#index"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.preprocessing.index" title="Link to this definition"></a></dt>
 <dd><p>Indexes the tokens of a textual <a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.Dataset</span></code></a> of string documents.
 To index a document means to replace each different token by a unique numerical index.
 Rare words (i.e., words occurring less than <cite>min_df</cite> times) are replaced by a special token <cite>UNK</cite></p>
@@ -869,7 +1007,7 @@ are lists of str</p></li>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.data.preprocessing.reduce_columns">
-<span class="sig-prename descclassname"><span class="pre">quapy.data.preprocessing.</span></span><span class="sig-name descname"><span class="pre">reduce_columns</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><span class="pre">Dataset</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">min_df</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">inplace</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.preprocessing.reduce_columns" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.data.preprocessing.</span></span><span class="sig-name descname"><span class="pre">reduce_columns</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><span class="pre">Dataset</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">min_df</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">inplace</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/preprocessing.html#reduce_columns"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.preprocessing.reduce_columns" title="Link to this definition"></a></dt>
 <dd><p>Reduces the dimensionality of the instances, represented as a <cite>csr_matrix</cite> (or any subtype of
 <cite>scipy.sparse.spmatrix</cite>), of training and test documents by removing the columns of words which are not present
 in at least <cite>min_df</cite> instances in the training set</p>
@@ -892,7 +1030,7 @@ in the training set have been removed</p>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.data.preprocessing.standardize">
-<span class="sig-prename descclassname"><span class="pre">quapy.data.preprocessing.</span></span><span class="sig-name descname"><span class="pre">standardize</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><span class="pre">Dataset</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">inplace</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.preprocessing.standardize" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.data.preprocessing.</span></span><span class="sig-name descname"><span class="pre">standardize</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><span class="pre">Dataset</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">inplace</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/preprocessing.html#standardize"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.preprocessing.standardize" title="Link to this definition"></a></dt>
 <dd><p>Standardizes the real-valued columns of a <a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.Dataset</span></code></a>.
 Standardization, aka z-scoring, of a variable <cite>X</cite> comes down to subtracting the average and normalizing by the
 standard deviation.</p>
@@ -912,7 +1050,7 @@ standard deviation.</p>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.data.preprocessing.text2tfidf">
-<span class="sig-prename descclassname"><span class="pre">quapy.data.preprocessing.</span></span><span class="sig-name descname"><span class="pre">text2tfidf</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><span class="pre">Dataset</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">min_df</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sublinear_tf</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">inplace</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.preprocessing.text2tfidf" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.data.preprocessing.</span></span><span class="sig-name descname"><span class="pre">text2tfidf</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><span class="pre">Dataset</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">min_df</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sublinear_tf</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">inplace</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/preprocessing.html#text2tfidf"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.preprocessing.text2tfidf" title="Link to this definition"></a></dt>
 <dd><p>Transforms a <a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.Dataset</span></code></a> of textual instances into a <a class="reference internal" href="#quapy.data.base.Dataset" title="quapy.data.base.Dataset"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.Dataset</span></code></a> of
 tfidf weighted sparse vectors</p>
 <dl class="field-list simple">
@@ -936,10 +1074,10 @@ current Dataset (if inplace=True) where the instances are stored in a <cite>csr_
 
 </section>
 <section id="module-quapy.data.reader">
-<span id="quapy-data-reader"></span><h2>quapy.data.reader<a class="headerlink" href="#module-quapy.data.reader" title="Permalink to this heading">¶</a></h2>
+<span id="quapy-data-reader-module"></span><h2>quapy.data.reader module<a class="headerlink" href="#module-quapy.data.reader" title="Link to this heading"></a></h2>
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.data.reader.binarize">
-<span class="sig-prename descclassname"><span class="pre">quapy.data.reader.</span></span><span class="sig-name descname"><span class="pre">binarize</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">y</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pos_class</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.reader.binarize" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.data.reader.</span></span><span class="sig-name descname"><span class="pre">binarize</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">y</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pos_class</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/reader.html#binarize"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.reader.binarize" title="Link to this definition"></a></dt>
 <dd><p>Binarizes a categorical array-like collection of labels towards the positive class <cite>pos_class</cite>. E.g.,:</p>
 <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">binarize</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">pos_class</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">array</span><span class="p">([</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">])</span>
@@ -961,7 +1099,7 @@ current Dataset (if inplace=True) where the instances are stored in a <cite>csr_
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.data.reader.from_csv">
-<span class="sig-prename descclassname"><span class="pre">quapy.data.reader.</span></span><span class="sig-name descname"><span class="pre">from_csv</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">encoding</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'utf-8'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.reader.from_csv" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.data.reader.</span></span><span class="sig-name descname"><span class="pre">from_csv</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">encoding</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'utf-8'</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/reader.html#from_csv"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.reader.from_csv" title="Link to this definition"></a></dt>
 <dd><p>Reads a csv file in which columns are separated by ‘,’.
 File format &lt;label&gt;,&lt;feat1&gt;,&lt;feat2&gt;,…,&lt;featn&gt;</p>
 <dl class="field-list simple">
@@ -979,7 +1117,7 @@ File format &lt;label&gt;,&lt;feat1&gt;,&lt;feat2&gt;,…,&lt;featn&gt;</p>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.data.reader.from_sparse">
-<span class="sig-prename descclassname"><span class="pre">quapy.data.reader.</span></span><span class="sig-name descname"><span class="pre">from_sparse</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.reader.from_sparse" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.data.reader.</span></span><span class="sig-name descname"><span class="pre">from_sparse</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/reader.html#from_sparse"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.reader.from_sparse" title="Link to this definition"></a></dt>
 <dd><p>Reads a labelled collection of real-valued instances expressed in sparse format
 File format &lt;-1 or 0 or 1&gt;[s col(int):val(float)]</p>
 <dl class="field-list simple">
@@ -994,7 +1132,7 @@ File format &lt;-1 or 0 or 1&gt;[s col(int):val(float)]</p>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.data.reader.from_text">
-<span class="sig-prename descclassname"><span class="pre">quapy.data.reader.</span></span><span class="sig-name descname"><span class="pre">from_text</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">encoding</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'utf-8'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">class2int</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.reader.from_text" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.data.reader.</span></span><span class="sig-name descname"><span class="pre">from_text</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">encoding</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'utf-8'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">class2int</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/reader.html#from_text"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.reader.from_text" title="Link to this definition"></a></dt>
 <dd><p>Reads a labelled colletion of documents.
 File fomart &lt;0 or 1&gt;        &lt;document&gt;</p>
 <dl class="field-list simple">
@@ -1013,7 +1151,7 @@ File fomart &lt;0 or 1&gt;        &lt;document&gt;</p>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.data.reader.reindex_labels">
-<span class="sig-prename descclassname"><span class="pre">quapy.data.reader.</span></span><span class="sig-name descname"><span class="pre">reindex_labels</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.data.reader.reindex_labels" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.data.reader.</span></span><span class="sig-name descname"><span class="pre">reindex_labels</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/data/reader.html#reindex_labels"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.data.reader.reindex_labels" title="Link to this definition"></a></dt>
 <dd><p>Re-indexes a list of labels as a list of indexes, and returns the classnames corresponding to the indexes.
 E.g.:</p>
 <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">reindex_labels</span><span class="p">([</span><span class="s1">&#39;B&#39;</span><span class="p">,</span> <span class="s1">&#39;B&#39;</span><span class="p">,</span> <span class="s1">&#39;A&#39;</span><span class="p">,</span> <span class="s1">&#39;C&#39;</span><span class="p">])</span>
@@ -1032,87 +1170,39 @@ E.g.:</p>
 
 </section>
 <section id="module-quapy.data">
-<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-quapy.data" title="Permalink to this heading">¶</a></h2>
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-quapy.data" title="Link to this heading"></a></h2>
 </section>
 </section>
 
 
-            <div class="clearer"></div>
+           </div>
           </div>
-        </div>
-      </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-  <div>
-    <h3><a href="index.html">Table of Contents</a></h3>
-    <ul>
-<li><a class="reference internal" href="#">quapy.data package</a><ul>
-<li><a class="reference internal" href="#submodules">Submodules</a></li>
-<li><a class="reference internal" href="#module-quapy.data.base">quapy.data.base</a></li>
-<li><a class="reference internal" href="#module-quapy.data.datasets">quapy.data.datasets</a></li>
-<li><a class="reference internal" href="#module-quapy.data.preprocessing">quapy.data.preprocessing</a></li>
-<li><a class="reference internal" href="#module-quapy.data.reader">quapy.data.reader</a></li>
-<li><a class="reference internal" href="#module-quapy.data">Module contents</a></li>
-</ul>
-</li>
-</ul>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="quapy.classification.html" class="btn btn-neutral float-left" title="quapy.classification package" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="quapy.method.html" class="btn btn-neutral float-right" title="quapy.method package" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
 
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2024, Alejandro Moreo.</p>
   </div>
-  <div>
-    <h4>Previous topic</h4>
-    <p class="topless"><a href="quapy.classification.html"
-                          title="previous chapter">quapy.classification package</a></p>
-  </div>
-  <div>
-    <h4>Next topic</h4>
-    <p class="topless"><a href="quapy.method.html"
-                          title="next chapter">quapy.method package</a></p>
-  </div>
-  <div role="note" aria-label="source link">
-    <h3>This Page</h3>
-    <ul class="this-page-menu">
-      <li><a href="_sources/quapy.data.rst.txt"
-            rel="nofollow">Show Source</a></li>
-    </ul>
-   </div>
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Quick search</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
-      <input type="submit" value="Go" />
-    </form>
-    </div>
-</div>
-<script>document.getElementById('searchbox').style.display = "block"</script>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
         </div>
       </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             >index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="right" >
-          <a href="quapy.method.html" title="quapy.method package"
-             >next</a> |</li>
-        <li class="right" >
-          <a href="quapy.classification.html" title="quapy.classification package"
-             >previous</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-          <li class="nav-item nav-item-1"><a href="modules.html" >quapy</a> &#187;</li>
-          <li class="nav-item nav-item-2"><a href="quapy.html" >quapy package</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">quapy.data package</a></li> 
-      </ul>
-    </div>
-    <div class="footer" role="contentinfo">
-        &#169; Copyright 2021, Alejandro Moreo.
-      Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
-    </div>
-  </body>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
 </html>
\ No newline at end of file
diff --git a/docs/build/html/quapy.html b/docs/build/html/quapy.html
index a40c323..cfe4d60 100644
--- a/docs/build/html/quapy.html
+++ b/docs/build/html/quapy.html
@@ -1,70 +1,621 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" data-content_root="./">
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
 
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>quapy package &mdash; QuaPy: A Python-based open-source framework for quantification 0.1.8 documentation</title>
+      <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=92fd9be5" />
+      <link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=19f00094" />
 
-<!doctype html>
-
-<html lang="en">
-  <head>
-    <meta charset="utf-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
-
-    <title>quapy package &#8212; QuaPy 0.1.7 documentation</title>
-    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
-    <link rel="stylesheet" type="text/css" href="_static/bizstyle.css" />
-    
-    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
-    <script src="_static/jquery.js"></script>
-    <script src="_static/underscore.js"></script>
-    <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
-    <script src="_static/doctools.js"></script>
-    <script src="_static/sphinx_highlight.js"></script>
-    <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
-    <script src="_static/bizstyle.js"></script>
+  
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script src="_static/jquery.js?v=5d32c60e"></script>
+        <script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
+        <script src="_static/documentation_options.js?v=22607128"></script>
+        <script src="_static/doctools.js?v=9a2dae69"></script>
+        <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+        <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="quapy.classification package" href="quapy.classification.html" />
-    <link rel="prev" title="quapy" href="modules.html" />
-    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
-    <!--[if lt IE 9]>
-    <script src="_static/css3-mediaqueries.js"></script>
-    <![endif]-->
-  </head><body>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             accesskey="I">index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="right" >
-          <a href="quapy.classification.html" title="quapy.classification package"
-             accesskey="N">next</a> |</li>
-        <li class="right" >
-          <a href="modules.html" title="quapy"
-             accesskey="P">previous</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-          <li class="nav-item nav-item-1"><a href="modules.html" accesskey="U">quapy</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">quapy package</a></li> 
-      </ul>
-    </div>  
+    <link rel="prev" title="quapy" href="modules.html" /> 
+</head>
 
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          <div class="body" role="main">
-            
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            QuaPy: A Python-based open-source framework for quantification
+          </a>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <ul class="current">
+<li class="toctree-l1 current"><a class="reference internal" href="modules.html">quapy</a><ul class="current">
+<li class="toctree-l2 current"><a class="current reference internal" href="#">quapy package</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#subpackages">Subpackages</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html">quapy.classification package</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html">quapy.data package</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html">quapy.method package</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#submodules">Submodules</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#module-quapy.error">quapy.error module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.absolute_error"><code class="docutils literal notranslate"><span class="pre">absolute_error()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.acc_error"><code class="docutils literal notranslate"><span class="pre">acc_error()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.acce"><code class="docutils literal notranslate"><span class="pre">acce()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.ae"><code class="docutils literal notranslate"><span class="pre">ae()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.f1_error"><code class="docutils literal notranslate"><span class="pre">f1_error()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.f1e"><code class="docutils literal notranslate"><span class="pre">f1e()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.from_name"><code class="docutils literal notranslate"><span class="pre">from_name()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.kld"><code class="docutils literal notranslate"><span class="pre">kld()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.mae"><code class="docutils literal notranslate"><span class="pre">mae()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.mean_absolute_error"><code class="docutils literal notranslate"><span class="pre">mean_absolute_error()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.mean_normalized_absolute_error"><code class="docutils literal notranslate"><span class="pre">mean_normalized_absolute_error()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.mean_normalized_relative_absolute_error"><code class="docutils literal notranslate"><span class="pre">mean_normalized_relative_absolute_error()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.mean_relative_absolute_error"><code class="docutils literal notranslate"><span class="pre">mean_relative_absolute_error()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.mkld"><code class="docutils literal notranslate"><span class="pre">mkld()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.mnae"><code class="docutils literal notranslate"><span class="pre">mnae()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.mnkld"><code class="docutils literal notranslate"><span class="pre">mnkld()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.mnrae"><code class="docutils literal notranslate"><span class="pre">mnrae()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.mrae"><code class="docutils literal notranslate"><span class="pre">mrae()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.mse"><code class="docutils literal notranslate"><span class="pre">mse()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.nae"><code class="docutils literal notranslate"><span class="pre">nae()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.nkld"><code class="docutils literal notranslate"><span class="pre">nkld()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.normalized_absolute_error"><code class="docutils literal notranslate"><span class="pre">normalized_absolute_error()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.normalized_relative_absolute_error"><code class="docutils literal notranslate"><span class="pre">normalized_relative_absolute_error()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.nrae"><code class="docutils literal notranslate"><span class="pre">nrae()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.rae"><code class="docutils literal notranslate"><span class="pre">rae()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.relative_absolute_error"><code class="docutils literal notranslate"><span class="pre">relative_absolute_error()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.se"><code class="docutils literal notranslate"><span class="pre">se()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.error.smooth"><code class="docutils literal notranslate"><span class="pre">smooth()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#module-quapy.evaluation">quapy.evaluation module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.evaluation.evaluate"><code class="docutils literal notranslate"><span class="pre">evaluate()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.evaluation.evaluate_on_samples"><code class="docutils literal notranslate"><span class="pre">evaluate_on_samples()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.evaluation.evaluation_report"><code class="docutils literal notranslate"><span class="pre">evaluation_report()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.evaluation.prediction"><code class="docutils literal notranslate"><span class="pre">prediction()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#module-quapy.functional">quapy.functional module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.functional.HellingerDistance"><code class="docutils literal notranslate"><span class="pre">HellingerDistance()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.functional.TopsoeDistance"><code class="docutils literal notranslate"><span class="pre">TopsoeDistance()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.functional.adjusted_quantification"><code class="docutils literal notranslate"><span class="pre">adjusted_quantification()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.functional.argmin_prevalence"><code class="docutils literal notranslate"><span class="pre">argmin_prevalence()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.functional.as_binary_prevalence"><code class="docutils literal notranslate"><span class="pre">as_binary_prevalence()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.functional.check_prevalence_vector"><code class="docutils literal notranslate"><span class="pre">check_prevalence_vector()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.functional.get_divergence"><code class="docutils literal notranslate"><span class="pre">get_divergence()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.functional.get_nprevpoints_approximation"><code class="docutils literal notranslate"><span class="pre">get_nprevpoints_approximation()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.functional.linear_search"><code class="docutils literal notranslate"><span class="pre">linear_search()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.functional.normalize_prevalence"><code class="docutils literal notranslate"><span class="pre">normalize_prevalence()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.functional.num_prevalence_combinations"><code class="docutils literal notranslate"><span class="pre">num_prevalence_combinations()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.functional.optim_minimize"><code class="docutils literal notranslate"><span class="pre">optim_minimize()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.functional.prevalence_from_labels"><code class="docutils literal notranslate"><span class="pre">prevalence_from_labels()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.functional.prevalence_from_probabilities"><code class="docutils literal notranslate"><span class="pre">prevalence_from_probabilities()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.functional.prevalence_linspace"><code class="docutils literal notranslate"><span class="pre">prevalence_linspace()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.functional.strprev"><code class="docutils literal notranslate"><span class="pre">strprev()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.functional.uniform_prevalence_sampling"><code class="docutils literal notranslate"><span class="pre">uniform_prevalence_sampling()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.functional.uniform_simplex_sampling"><code class="docutils literal notranslate"><span class="pre">uniform_simplex_sampling()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#module-quapy.model_selection">quapy.model_selection module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.model_selection.ConfigStatus"><code class="docutils literal notranslate"><span class="pre">ConfigStatus</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.model_selection.GridSearchQ"><code class="docutils literal notranslate"><span class="pre">GridSearchQ</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.model_selection.Status"><code class="docutils literal notranslate"><span class="pre">Status</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.model_selection.cross_val_predict"><code class="docutils literal notranslate"><span class="pre">cross_val_predict()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.model_selection.expand_grid"><code class="docutils literal notranslate"><span class="pre">expand_grid()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.model_selection.group_params"><code class="docutils literal notranslate"><span class="pre">group_params()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#module-quapy.plot">quapy.plot module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.plot.binary_bias_bins"><code class="docutils literal notranslate"><span class="pre">binary_bias_bins()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.plot.binary_bias_global"><code class="docutils literal notranslate"><span class="pre">binary_bias_global()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.plot.binary_diagonal"><code class="docutils literal notranslate"><span class="pre">binary_diagonal()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.plot.brokenbar_supremacy_by_drift"><code class="docutils literal notranslate"><span class="pre">brokenbar_supremacy_by_drift()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.plot.error_by_drift"><code class="docutils literal notranslate"><span class="pre">error_by_drift()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#module-quapy.protocol">quapy.protocol module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.protocol.APP"><code class="docutils literal notranslate"><span class="pre">APP</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.protocol.AbstractProtocol"><code class="docutils literal notranslate"><span class="pre">AbstractProtocol</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.protocol.AbstractStochasticSeededProtocol"><code class="docutils literal notranslate"><span class="pre">AbstractStochasticSeededProtocol</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.protocol.ArtificialPrevalenceProtocol"><code class="docutils literal notranslate"><span class="pre">ArtificialPrevalenceProtocol</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.protocol.DomainMixer"><code class="docutils literal notranslate"><span class="pre">DomainMixer</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.protocol.IterateProtocol"><code class="docutils literal notranslate"><span class="pre">IterateProtocol</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.protocol.NPP"><code class="docutils literal notranslate"><span class="pre">NPP</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.protocol.NaturalPrevalenceProtocol"><code class="docutils literal notranslate"><span class="pre">NaturalPrevalenceProtocol</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.protocol.OnLabelledCollectionProtocol"><code class="docutils literal notranslate"><span class="pre">OnLabelledCollectionProtocol</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.protocol.UPP"><code class="docutils literal notranslate"><span class="pre">UPP</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.protocol.UniformPrevalenceProtocol"><code class="docutils literal notranslate"><span class="pre">UniformPrevalenceProtocol</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#module-quapy.util">quapy.util module</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.util.EarlyStop"><code class="docutils literal notranslate"><span class="pre">EarlyStop</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.util.create_if_not_exist"><code class="docutils literal notranslate"><span class="pre">create_if_not_exist()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.util.create_parent_dir"><code class="docutils literal notranslate"><span class="pre">create_parent_dir()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.util.download_file"><code class="docutils literal notranslate"><span class="pre">download_file()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.util.download_file_if_not_exists"><code class="docutils literal notranslate"><span class="pre">download_file_if_not_exists()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.util.get_quapy_home"><code class="docutils literal notranslate"><span class="pre">get_quapy_home()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.util.map_parallel"><code class="docutils literal notranslate"><span class="pre">map_parallel()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.util.parallel"><code class="docutils literal notranslate"><span class="pre">parallel()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.util.pickled_resource"><code class="docutils literal notranslate"><span class="pre">pickled_resource()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.util.save_text_file"><code class="docutils literal notranslate"><span class="pre">save_text_file()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.util.temp_seed"><code class="docutils literal notranslate"><span class="pre">temp_seed()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="#quapy.util.timeout"><code class="docutils literal notranslate"><span class="pre">timeout()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#module-quapy">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">QuaPy: A Python-based open-source framework for quantification</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="modules.html">quapy</a></li>
+      <li class="breadcrumb-item active">quapy package</li>
+      <li class="wy-breadcrumbs-aside">
+            <a href="_sources/quapy.rst.txt" rel="nofollow"> View page source</a>
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
   <section id="quapy-package">
-<h1>quapy package<a class="headerlink" href="#quapy-package" title="Permalink to this heading">¶</a></h1>
+<h1>quapy package<a class="headerlink" href="#quapy-package" title="Link to this heading"></a></h1>
+<section id="subpackages">
+<h2>Subpackages<a class="headerlink" href="#subpackages" title="Link to this heading"></a></h2>
+<div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="quapy.classification.html">quapy.classification package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="quapy.classification.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="quapy.classification.html#module-quapy.classification.calibration">quapy.classification.calibration module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="quapy.classification.html#quapy.classification.calibration.BCTSCalibration"><code class="docutils literal notranslate"><span class="pre">BCTSCalibration</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.classification.html#quapy.classification.calibration.NBVSCalibration"><code class="docutils literal notranslate"><span class="pre">NBVSCalibration</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.classification.html#quapy.classification.calibration.RecalibratedProbabilisticClassifier"><code class="docutils literal notranslate"><span class="pre">RecalibratedProbabilisticClassifier</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.classification.html#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase"><code class="docutils literal notranslate"><span class="pre">RecalibratedProbabilisticClassifierBase</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.classes_"><code class="docutils literal notranslate"><span class="pre">RecalibratedProbabilisticClassifierBase.classes_</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.fit"><code class="docutils literal notranslate"><span class="pre">RecalibratedProbabilisticClassifierBase.fit()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.fit_cv"><code class="docutils literal notranslate"><span class="pre">RecalibratedProbabilisticClassifierBase.fit_cv()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.fit_tr_val"><code class="docutils literal notranslate"><span class="pre">RecalibratedProbabilisticClassifierBase.fit_tr_val()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.predict"><code class="docutils literal notranslate"><span class="pre">RecalibratedProbabilisticClassifierBase.predict()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.predict_proba"><code class="docutils literal notranslate"><span class="pre">RecalibratedProbabilisticClassifierBase.predict_proba()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.classification.html#quapy.classification.calibration.TSCalibration"><code class="docutils literal notranslate"><span class="pre">TSCalibration</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.classification.html#quapy.classification.calibration.VSCalibration"><code class="docutils literal notranslate"><span class="pre">VSCalibration</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="quapy.classification.html#module-quapy.classification.methods">quapy.classification.methods module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="quapy.classification.html#quapy.classification.methods.LowRankLogisticRegression"><code class="docutils literal notranslate"><span class="pre">LowRankLogisticRegression</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.methods.LowRankLogisticRegression.fit"><code class="docutils literal notranslate"><span class="pre">LowRankLogisticRegression.fit()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.methods.LowRankLogisticRegression.get_params"><code class="docutils literal notranslate"><span class="pre">LowRankLogisticRegression.get_params()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.methods.LowRankLogisticRegression.predict"><code class="docutils literal notranslate"><span class="pre">LowRankLogisticRegression.predict()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.methods.LowRankLogisticRegression.predict_proba"><code class="docutils literal notranslate"><span class="pre">LowRankLogisticRegression.predict_proba()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.methods.LowRankLogisticRegression.set_params"><code class="docutils literal notranslate"><span class="pre">LowRankLogisticRegression.set_params()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.methods.LowRankLogisticRegression.transform"><code class="docutils literal notranslate"><span class="pre">LowRankLogisticRegression.transform()</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="quapy.classification.html#module-quapy.classification.neural">quapy.classification.neural module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.CNNnet"><code class="docutils literal notranslate"><span class="pre">CNNnet</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.CNNnet.document_embedding"><code class="docutils literal notranslate"><span class="pre">CNNnet.document_embedding()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.CNNnet.get_params"><code class="docutils literal notranslate"><span class="pre">CNNnet.get_params()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.CNNnet.vocabulary_size"><code class="docutils literal notranslate"><span class="pre">CNNnet.vocabulary_size</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.LSTMnet"><code class="docutils literal notranslate"><span class="pre">LSTMnet</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.LSTMnet.document_embedding"><code class="docutils literal notranslate"><span class="pre">LSTMnet.document_embedding()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.LSTMnet.get_params"><code class="docutils literal notranslate"><span class="pre">LSTMnet.get_params()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.LSTMnet.vocabulary_size"><code class="docutils literal notranslate"><span class="pre">LSTMnet.vocabulary_size</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer"><code class="docutils literal notranslate"><span class="pre">NeuralClassifierTrainer</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.device"><code class="docutils literal notranslate"><span class="pre">NeuralClassifierTrainer.device</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.fit"><code class="docutils literal notranslate"><span class="pre">NeuralClassifierTrainer.fit()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.get_params"><code class="docutils literal notranslate"><span class="pre">NeuralClassifierTrainer.get_params()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.predict"><code class="docutils literal notranslate"><span class="pre">NeuralClassifierTrainer.predict()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.predict_proba"><code class="docutils literal notranslate"><span class="pre">NeuralClassifierTrainer.predict_proba()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.reset_net_params"><code class="docutils literal notranslate"><span class="pre">NeuralClassifierTrainer.reset_net_params()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.set_params"><code class="docutils literal notranslate"><span class="pre">NeuralClassifierTrainer.set_params()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.transform"><code class="docutils literal notranslate"><span class="pre">NeuralClassifierTrainer.transform()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.TextClassifierNet"><code class="docutils literal notranslate"><span class="pre">TextClassifierNet</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.dimensions"><code class="docutils literal notranslate"><span class="pre">TextClassifierNet.dimensions()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.document_embedding"><code class="docutils literal notranslate"><span class="pre">TextClassifierNet.document_embedding()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.forward"><code class="docutils literal notranslate"><span class="pre">TextClassifierNet.forward()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.get_params"><code class="docutils literal notranslate"><span class="pre">TextClassifierNet.get_params()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.predict_proba"><code class="docutils literal notranslate"><span class="pre">TextClassifierNet.predict_proba()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.vocabulary_size"><code class="docutils literal notranslate"><span class="pre">TextClassifierNet.vocabulary_size</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.xavier_uniform"><code class="docutils literal notranslate"><span class="pre">TextClassifierNet.xavier_uniform()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.TorchDataset"><code class="docutils literal notranslate"><span class="pre">TorchDataset</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.neural.TorchDataset.asDataloader"><code class="docutils literal notranslate"><span class="pre">TorchDataset.asDataloader()</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="quapy.classification.html#module-quapy.classification.svmperf">quapy.classification.svmperf module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="quapy.classification.html#quapy.classification.svmperf.SVMperf"><code class="docutils literal notranslate"><span class="pre">SVMperf</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.svmperf.SVMperf.decision_function"><code class="docutils literal notranslate"><span class="pre">SVMperf.decision_function()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.svmperf.SVMperf.fit"><code class="docutils literal notranslate"><span class="pre">SVMperf.fit()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.svmperf.SVMperf.predict"><code class="docutils literal notranslate"><span class="pre">SVMperf.predict()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html#quapy.classification.svmperf.SVMperf.valid_losses"><code class="docutils literal notranslate"><span class="pre">SVMperf.valid_losses</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="quapy.classification.html#module-quapy.classification">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="quapy.data.html">quapy.data package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="quapy.data.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="quapy.data.html#module-quapy.data.base">quapy.data.base module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="quapy.data.html#quapy.data.base.Dataset"><code class="docutils literal notranslate"><span class="pre">Dataset</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.Dataset.SplitStratified"><code class="docutils literal notranslate"><span class="pre">Dataset.SplitStratified()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.Dataset.binary"><code class="docutils literal notranslate"><span class="pre">Dataset.binary</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.Dataset.classes_"><code class="docutils literal notranslate"><span class="pre">Dataset.classes_</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.Dataset.kFCV"><code class="docutils literal notranslate"><span class="pre">Dataset.kFCV()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.Dataset.load"><code class="docutils literal notranslate"><span class="pre">Dataset.load()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.Dataset.n_classes"><code class="docutils literal notranslate"><span class="pre">Dataset.n_classes</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.Dataset.reduce"><code class="docutils literal notranslate"><span class="pre">Dataset.reduce()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.Dataset.stats"><code class="docutils literal notranslate"><span class="pre">Dataset.stats()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.Dataset.train_test"><code class="docutils literal notranslate"><span class="pre">Dataset.train_test</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.Dataset.vocabulary_size"><code class="docutils literal notranslate"><span class="pre">Dataset.vocabulary_size</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection"><code class="docutils literal notranslate"><span class="pre">LabelledCollection</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.X"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.X</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.Xp"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.Xp</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.Xy"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.Xy</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.binary"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.binary</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.counts"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.counts()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.join"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.join()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.kFCV"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.kFCV()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.load"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.load()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.n_classes"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.n_classes</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.p"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.p</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.prevalence"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.prevalence()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.sampling"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.sampling()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.sampling_from_index"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.sampling_from_index()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.sampling_index"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.sampling_index()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.split_random"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.split_random()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.split_stratified"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.split_stratified()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.stats"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.stats()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.uniform_sampling"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.uniform_sampling()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.uniform_sampling_index"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.uniform_sampling_index()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection.y"><code class="docutils literal notranslate"><span class="pre">LabelledCollection.y</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="quapy.data.html#module-quapy.data.datasets">quapy.data.datasets module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="quapy.data.html#quapy.data.datasets.fetch_IFCB"><code class="docutils literal notranslate"><span class="pre">fetch_IFCB()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.data.html#quapy.data.datasets.fetch_UCIBinaryDataset"><code class="docutils literal notranslate"><span class="pre">fetch_UCIBinaryDataset()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.data.html#quapy.data.datasets.fetch_UCIBinaryLabelledCollection"><code class="docutils literal notranslate"><span class="pre">fetch_UCIBinaryLabelledCollection()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.data.html#quapy.data.datasets.fetch_UCIMulticlassDataset"><code class="docutils literal notranslate"><span class="pre">fetch_UCIMulticlassDataset()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.data.html#quapy.data.datasets.fetch_UCIMulticlassLabelledCollection"><code class="docutils literal notranslate"><span class="pre">fetch_UCIMulticlassLabelledCollection()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.data.html#quapy.data.datasets.fetch_lequa2022"><code class="docutils literal notranslate"><span class="pre">fetch_lequa2022()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.data.html#quapy.data.datasets.fetch_reviews"><code class="docutils literal notranslate"><span class="pre">fetch_reviews()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.data.html#quapy.data.datasets.fetch_twitter"><code class="docutils literal notranslate"><span class="pre">fetch_twitter()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.data.html#quapy.data.datasets.warn"><code class="docutils literal notranslate"><span class="pre">warn()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="quapy.data.html#module-quapy.data.preprocessing">quapy.data.preprocessing module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="quapy.data.html#quapy.data.preprocessing.IndexTransformer"><code class="docutils literal notranslate"><span class="pre">IndexTransformer</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.preprocessing.IndexTransformer.add_word"><code class="docutils literal notranslate"><span class="pre">IndexTransformer.add_word()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.preprocessing.IndexTransformer.fit"><code class="docutils literal notranslate"><span class="pre">IndexTransformer.fit()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.preprocessing.IndexTransformer.fit_transform"><code class="docutils literal notranslate"><span class="pre">IndexTransformer.fit_transform()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.preprocessing.IndexTransformer.transform"><code class="docutils literal notranslate"><span class="pre">IndexTransformer.transform()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html#quapy.data.preprocessing.IndexTransformer.vocabulary_size"><code class="docutils literal notranslate"><span class="pre">IndexTransformer.vocabulary_size()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.data.html#quapy.data.preprocessing.index"><code class="docutils literal notranslate"><span class="pre">index()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.data.html#quapy.data.preprocessing.reduce_columns"><code class="docutils literal notranslate"><span class="pre">reduce_columns()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.data.html#quapy.data.preprocessing.standardize"><code class="docutils literal notranslate"><span class="pre">standardize()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.data.html#quapy.data.preprocessing.text2tfidf"><code class="docutils literal notranslate"><span class="pre">text2tfidf()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="quapy.data.html#module-quapy.data.reader">quapy.data.reader module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="quapy.data.html#quapy.data.reader.binarize"><code class="docutils literal notranslate"><span class="pre">binarize()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.data.html#quapy.data.reader.from_csv"><code class="docutils literal notranslate"><span class="pre">from_csv()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.data.html#quapy.data.reader.from_sparse"><code class="docutils literal notranslate"><span class="pre">from_sparse()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.data.html#quapy.data.reader.from_text"><code class="docutils literal notranslate"><span class="pre">from_text()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.data.html#quapy.data.reader.reindex_labels"><code class="docutils literal notranslate"><span class="pre">reindex_labels()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="quapy.data.html#module-quapy.data">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="quapy.method.html">quapy.method package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="quapy.method.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="quapy.method.html#module-quapy.method.aggregative">quapy.method.aggregative module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.ACC"><code class="docutils literal notranslate"><span class="pre">ACC</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.ACC.aggregate"><code class="docutils literal notranslate"><span class="pre">ACC.aggregate()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.ACC.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">ACC.aggregation_fit()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.ACC.getPteCondEstim"><code class="docutils literal notranslate"><span class="pre">ACC.getPteCondEstim()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.ACC.solve_adjustment"><code class="docutils literal notranslate"><span class="pre">ACC.solve_adjustment()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AdjustedClassifyAndCount"><code class="docutils literal notranslate"><span class="pre">AdjustedClassifyAndCount</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeCrispQuantifier"><code class="docutils literal notranslate"><span class="pre">AggregativeCrispQuantifier</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeMedianEstimator"><code class="docutils literal notranslate"><span class="pre">AggregativeMedianEstimator</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeMedianEstimator.fit"><code class="docutils literal notranslate"><span class="pre">AggregativeMedianEstimator.fit()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeMedianEstimator.get_params"><code class="docutils literal notranslate"><span class="pre">AggregativeMedianEstimator.get_params()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeMedianEstimator.quantify"><code class="docutils literal notranslate"><span class="pre">AggregativeMedianEstimator.quantify()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeMedianEstimator.set_params"><code class="docutils literal notranslate"><span class="pre">AggregativeMedianEstimator.set_params()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier"><code class="docutils literal notranslate"><span class="pre">AggregativeQuantifier</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.aggregate"><code class="docutils literal notranslate"><span class="pre">AggregativeQuantifier.aggregate()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">AggregativeQuantifier.aggregation_fit()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.classes_"><code class="docutils literal notranslate"><span class="pre">AggregativeQuantifier.classes_</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.classifier"><code class="docutils literal notranslate"><span class="pre">AggregativeQuantifier.classifier</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.classifier_fit_predict"><code class="docutils literal notranslate"><span class="pre">AggregativeQuantifier.classifier_fit_predict()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.classify"><code class="docutils literal notranslate"><span class="pre">AggregativeQuantifier.classify()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.fit"><code class="docutils literal notranslate"><span class="pre">AggregativeQuantifier.fit()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.quantify"><code class="docutils literal notranslate"><span class="pre">AggregativeQuantifier.quantify()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.val_split"><code class="docutils literal notranslate"><span class="pre">AggregativeQuantifier.val_split</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.val_split_"><code class="docutils literal notranslate"><span class="pre">AggregativeQuantifier.val_split_</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.AggregativeSoftQuantifier"><code class="docutils literal notranslate"><span class="pre">AggregativeSoftQuantifier</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.BinaryAggregativeQuantifier"><code class="docutils literal notranslate"><span class="pre">BinaryAggregativeQuantifier</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.BinaryAggregativeQuantifier.fit"><code class="docutils literal notranslate"><span class="pre">BinaryAggregativeQuantifier.fit()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.BinaryAggregativeQuantifier.neg_label"><code class="docutils literal notranslate"><span class="pre">BinaryAggregativeQuantifier.neg_label</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.BinaryAggregativeQuantifier.pos_label"><code class="docutils literal notranslate"><span class="pre">BinaryAggregativeQuantifier.pos_label</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.CC"><code class="docutils literal notranslate"><span class="pre">CC</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.CC.aggregate"><code class="docutils literal notranslate"><span class="pre">CC.aggregate()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.CC.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">CC.aggregation_fit()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.ClassifyAndCount"><code class="docutils literal notranslate"><span class="pre">ClassifyAndCount</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.DMy"><code class="docutils literal notranslate"><span class="pre">DMy</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.DMy.aggregate"><code class="docutils literal notranslate"><span class="pre">DMy.aggregate()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.DMy.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">DMy.aggregation_fit()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.DistributionMatchingY"><code class="docutils literal notranslate"><span class="pre">DistributionMatchingY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.DyS"><code class="docutils literal notranslate"><span class="pre">DyS</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.DyS.aggregate"><code class="docutils literal notranslate"><span class="pre">DyS.aggregate()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.DyS.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">DyS.aggregation_fit()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.EMQ"><code class="docutils literal notranslate"><span class="pre">EMQ</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.EMQ.EM"><code class="docutils literal notranslate"><span class="pre">EMQ.EM()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.EMQ.EMQ_BCTS"><code class="docutils literal notranslate"><span class="pre">EMQ.EMQ_BCTS()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.EMQ.EPSILON"><code class="docutils literal notranslate"><span class="pre">EMQ.EPSILON</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.EMQ.MAX_ITER"><code class="docutils literal notranslate"><span class="pre">EMQ.MAX_ITER</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.EMQ.aggregate"><code class="docutils literal notranslate"><span class="pre">EMQ.aggregate()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.EMQ.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">EMQ.aggregation_fit()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.EMQ.classify"><code class="docutils literal notranslate"><span class="pre">EMQ.classify()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.EMQ.predict_proba"><code class="docutils literal notranslate"><span class="pre">EMQ.predict_proba()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.ExpectationMaximizationQuantifier"><code class="docutils literal notranslate"><span class="pre">ExpectationMaximizationQuantifier</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.HDy"><code class="docutils literal notranslate"><span class="pre">HDy</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.HDy.aggregate"><code class="docutils literal notranslate"><span class="pre">HDy.aggregate()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.HDy.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">HDy.aggregation_fit()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.HellingerDistanceY"><code class="docutils literal notranslate"><span class="pre">HellingerDistanceY</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.OneVsAllAggregative"><code class="docutils literal notranslate"><span class="pre">OneVsAllAggregative</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.OneVsAllAggregative.aggregate"><code class="docutils literal notranslate"><span class="pre">OneVsAllAggregative.aggregate()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.OneVsAllAggregative.classify"><code class="docutils literal notranslate"><span class="pre">OneVsAllAggregative.classify()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.PACC"><code class="docutils literal notranslate"><span class="pre">PACC</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.PACC.aggregate"><code class="docutils literal notranslate"><span class="pre">PACC.aggregate()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.PACC.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">PACC.aggregation_fit()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.PACC.getPteCondEstim"><code class="docutils literal notranslate"><span class="pre">PACC.getPteCondEstim()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.PCC"><code class="docutils literal notranslate"><span class="pre">PCC</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.PCC.aggregate"><code class="docutils literal notranslate"><span class="pre">PCC.aggregate()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.PCC.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">PCC.aggregation_fit()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.ProbabilisticAdjustedClassifyAndCount"><code class="docutils literal notranslate"><span class="pre">ProbabilisticAdjustedClassifyAndCount</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.ProbabilisticClassifyAndCount"><code class="docutils literal notranslate"><span class="pre">ProbabilisticClassifyAndCount</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.SLD"><code class="docutils literal notranslate"><span class="pre">SLD</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.SMM"><code class="docutils literal notranslate"><span class="pre">SMM</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.SMM.aggregate"><code class="docutils literal notranslate"><span class="pre">SMM.aggregate()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.SMM.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">SMM.aggregation_fit()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.newELM"><code class="docutils literal notranslate"><span class="pre">newELM()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.newSVMAE"><code class="docutils literal notranslate"><span class="pre">newSVMAE()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.newSVMKLD"><code class="docutils literal notranslate"><span class="pre">newSVMKLD()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.newSVMQ"><code class="docutils literal notranslate"><span class="pre">newSVMQ()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.aggregative.newSVMRAE"><code class="docutils literal notranslate"><span class="pre">newSVMRAE()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEBase"><code class="docutils literal notranslate"><span class="pre">KDEBase</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEBase.BANDWIDTH_METHOD"><code class="docutils literal notranslate"><span class="pre">KDEBase.BANDWIDTH_METHOD</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEBase.get_kde_function"><code class="docutils literal notranslate"><span class="pre">KDEBase.get_kde_function()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEBase.get_mixture_components"><code class="docutils literal notranslate"><span class="pre">KDEBase.get_mixture_components()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEBase.pdf"><code class="docutils literal notranslate"><span class="pre">KDEBase.pdf()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEyCS"><code class="docutils literal notranslate"><span class="pre">KDEyCS</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEyCS.aggregate"><code class="docutils literal notranslate"><span class="pre">KDEyCS.aggregate()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEyCS.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">KDEyCS.aggregation_fit()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEyCS.gram_matrix_mix_sum"><code class="docutils literal notranslate"><span class="pre">KDEyCS.gram_matrix_mix_sum()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEyHD"><code class="docutils literal notranslate"><span class="pre">KDEyHD</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEyHD.aggregate"><code class="docutils literal notranslate"><span class="pre">KDEyHD.aggregate()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEyHD.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">KDEyHD.aggregation_fit()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEyML"><code class="docutils literal notranslate"><span class="pre">KDEyML</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEyML.aggregate"><code class="docutils literal notranslate"><span class="pre">KDEyML.aggregate()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._kdey.KDEyML.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">KDEyML.aggregation_fit()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method._neural.QuaNetModule"><code class="docutils literal notranslate"><span class="pre">QuaNetModule</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._neural.QuaNetModule.device"><code class="docutils literal notranslate"><span class="pre">QuaNetModule.device</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._neural.QuaNetModule.forward"><code class="docutils literal notranslate"><span class="pre">QuaNetModule.forward()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method._neural.QuaNetTrainer"><code class="docutils literal notranslate"><span class="pre">QuaNetTrainer</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._neural.QuaNetTrainer.classes_"><code class="docutils literal notranslate"><span class="pre">QuaNetTrainer.classes_</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._neural.QuaNetTrainer.clean_checkpoint"><code class="docutils literal notranslate"><span class="pre">QuaNetTrainer.clean_checkpoint()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._neural.QuaNetTrainer.clean_checkpoint_dir"><code class="docutils literal notranslate"><span class="pre">QuaNetTrainer.clean_checkpoint_dir()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._neural.QuaNetTrainer.fit"><code class="docutils literal notranslate"><span class="pre">QuaNetTrainer.fit()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._neural.QuaNetTrainer.get_params"><code class="docutils literal notranslate"><span class="pre">QuaNetTrainer.get_params()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._neural.QuaNetTrainer.quantify"><code class="docutils literal notranslate"><span class="pre">QuaNetTrainer.quantify()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._neural.QuaNetTrainer.set_params"><code class="docutils literal notranslate"><span class="pre">QuaNetTrainer.set_params()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method._neural.mae_loss"><code class="docutils literal notranslate"><span class="pre">mae_loss()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.MAX"><code class="docutils literal notranslate"><span class="pre">MAX</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.MAX.condition"><code class="docutils literal notranslate"><span class="pre">MAX.condition()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.MS"><code class="docutils literal notranslate"><span class="pre">MS</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.MS.aggregate"><code class="docutils literal notranslate"><span class="pre">MS.aggregate()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.MS.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">MS.aggregation_fit()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.MS.condition"><code class="docutils literal notranslate"><span class="pre">MS.condition()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.MS2"><code class="docutils literal notranslate"><span class="pre">MS2</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.MS2.discard"><code class="docutils literal notranslate"><span class="pre">MS2.discard()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.T50"><code class="docutils literal notranslate"><span class="pre">T50</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.T50.condition"><code class="docutils literal notranslate"><span class="pre">T50.condition()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.ThresholdOptimization"><code class="docutils literal notranslate"><span class="pre">ThresholdOptimization</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.ThresholdOptimization.aggregate"><code class="docutils literal notranslate"><span class="pre">ThresholdOptimization.aggregate()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.ThresholdOptimization.aggregate_with_threshold"><code class="docutils literal notranslate"><span class="pre">ThresholdOptimization.aggregate_with_threshold()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.ThresholdOptimization.aggregation_fit"><code class="docutils literal notranslate"><span class="pre">ThresholdOptimization.aggregation_fit()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.ThresholdOptimization.condition"><code class="docutils literal notranslate"><span class="pre">ThresholdOptimization.condition()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.ThresholdOptimization.discard"><code class="docutils literal notranslate"><span class="pre">ThresholdOptimization.discard()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.X"><code class="docutils literal notranslate"><span class="pre">X</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method._threshold_optim.X.condition"><code class="docutils literal notranslate"><span class="pre">X.condition()</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="quapy.method.html#module-quapy.method.base">quapy.method.base module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.base.BaseQuantifier"><code class="docutils literal notranslate"><span class="pre">BaseQuantifier</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.base.BaseQuantifier.fit"><code class="docutils literal notranslate"><span class="pre">BaseQuantifier.fit()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.base.BaseQuantifier.quantify"><code class="docutils literal notranslate"><span class="pre">BaseQuantifier.quantify()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.base.BinaryQuantifier"><code class="docutils literal notranslate"><span class="pre">BinaryQuantifier</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.base.OneVsAll"><code class="docutils literal notranslate"><span class="pre">OneVsAll</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.base.OneVsAllGeneric"><code class="docutils literal notranslate"><span class="pre">OneVsAllGeneric</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.base.OneVsAllGeneric.classes_"><code class="docutils literal notranslate"><span class="pre">OneVsAllGeneric.classes_</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.base.OneVsAllGeneric.fit"><code class="docutils literal notranslate"><span class="pre">OneVsAllGeneric.fit()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.base.OneVsAllGeneric.quantify"><code class="docutils literal notranslate"><span class="pre">OneVsAllGeneric.quantify()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.base.newOneVsAll"><code class="docutils literal notranslate"><span class="pre">newOneVsAll()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="quapy.method.html#module-quapy.method.meta">quapy.method.meta module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.meta.EACC"><code class="docutils literal notranslate"><span class="pre">EACC()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.meta.ECC"><code class="docutils literal notranslate"><span class="pre">ECC()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.meta.EEMQ"><code class="docutils literal notranslate"><span class="pre">EEMQ()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.meta.EHDy"><code class="docutils literal notranslate"><span class="pre">EHDy()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.meta.EPACC"><code class="docutils literal notranslate"><span class="pre">EPACC()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.meta.Ensemble"><code class="docutils literal notranslate"><span class="pre">Ensemble</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.meta.Ensemble.VALID_POLICIES"><code class="docutils literal notranslate"><span class="pre">Ensemble.VALID_POLICIES</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.meta.Ensemble.aggregative"><code class="docutils literal notranslate"><span class="pre">Ensemble.aggregative</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.meta.Ensemble.fit"><code class="docutils literal notranslate"><span class="pre">Ensemble.fit()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.meta.Ensemble.get_params"><code class="docutils literal notranslate"><span class="pre">Ensemble.get_params()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.meta.Ensemble.probabilistic"><code class="docutils literal notranslate"><span class="pre">Ensemble.probabilistic</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.meta.Ensemble.quantify"><code class="docutils literal notranslate"><span class="pre">Ensemble.quantify()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.meta.Ensemble.set_params"><code class="docutils literal notranslate"><span class="pre">Ensemble.set_params()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.meta.MedianEstimator"><code class="docutils literal notranslate"><span class="pre">MedianEstimator</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.meta.MedianEstimator.fit"><code class="docutils literal notranslate"><span class="pre">MedianEstimator.fit()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.meta.MedianEstimator.get_params"><code class="docutils literal notranslate"><span class="pre">MedianEstimator.get_params()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.meta.MedianEstimator.quantify"><code class="docutils literal notranslate"><span class="pre">MedianEstimator.quantify()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.meta.MedianEstimator.set_params"><code class="docutils literal notranslate"><span class="pre">MedianEstimator.set_params()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.meta.MedianEstimator2"><code class="docutils literal notranslate"><span class="pre">MedianEstimator2</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.meta.MedianEstimator2.fit"><code class="docutils literal notranslate"><span class="pre">MedianEstimator2.fit()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.meta.MedianEstimator2.get_params"><code class="docutils literal notranslate"><span class="pre">MedianEstimator2.get_params()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.meta.MedianEstimator2.quantify"><code class="docutils literal notranslate"><span class="pre">MedianEstimator2.quantify()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.meta.MedianEstimator2.set_params"><code class="docutils literal notranslate"><span class="pre">MedianEstimator2.set_params()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.meta.ensembleFactory"><code class="docutils literal notranslate"><span class="pre">ensembleFactory()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.meta.get_probability_distribution"><code class="docutils literal notranslate"><span class="pre">get_probability_distribution()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="quapy.method.html#module-quapy.method.non_aggregative">quapy.method.non_aggregative module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.non_aggregative.DMx"><code class="docutils literal notranslate"><span class="pre">DMx</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.non_aggregative.DMx.HDx"><code class="docutils literal notranslate"><span class="pre">DMx.HDx()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.non_aggregative.DMx.fit"><code class="docutils literal notranslate"><span class="pre">DMx.fit()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.non_aggregative.DMx.quantify"><code class="docutils literal notranslate"><span class="pre">DMx.quantify()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.non_aggregative.DistributionMatchingX"><code class="docutils literal notranslate"><span class="pre">DistributionMatchingX</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.method.html#quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation"><code class="docutils literal notranslate"><span class="pre">MaximumLikelihoodPrevalenceEstimation</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation.fit"><code class="docutils literal notranslate"><span class="pre">MaximumLikelihoodPrevalenceEstimation.fit()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.method.html#quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation.quantify"><code class="docutils literal notranslate"><span class="pre">MaximumLikelihoodPrevalenceEstimation.quantify()</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="quapy.method.html#module-quapy.method">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</section>
 <section id="submodules">
-<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this heading">¶</a></h2>
+<h2>Submodules<a class="headerlink" href="#submodules" title="Link to this heading"></a></h2>
 </section>
 <section id="module-quapy.error">
-<span id="quapy-error"></span><h2>quapy.error<a class="headerlink" href="#module-quapy.error" title="Permalink to this heading">¶</a></h2>
+<span id="quapy-error-module"></span><h2>quapy.error module<a class="headerlink" href="#module-quapy.error" title="Link to this heading"></a></h2>
 <p>Implementation of error measures used for quantification</p>
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.error.absolute_error">
-<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">absolute_error</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.absolute_error" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">absolute_error</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.absolute_error" title="Link to this definition"></a></dt>
 <dd><dl class="simple">
 <dt>Computes the absolute error between the two prevalence vectors.</dt><dd><p>Absolute error between two prevalence vectors <span class="math notranslate nohighlight">\(p\)</span> and <span class="math notranslate nohighlight">\(\hat{p}\)</span>  is computed as
 <span class="math notranslate nohighlight">\(AE(p,\hat{p})=\frac{1}{|\mathcal{Y}|}\sum_{y\in \mathcal{Y}}|\hat{p}(y)-p(y)|\)</span>,
@@ -86,7 +637,7 @@ where <span class="math notranslate nohighlight">\(\mathcal{Y}\)</span> are the
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.error.acc_error">
-<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">acc_error</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">y_true</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y_pred</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.acc_error" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">acc_error</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">y_true</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y_pred</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.acc_error" title="Link to this definition"></a></dt>
 <dd><p>Computes the error in terms of 1-accuracy. The accuracy is computed as
 <span class="math notranslate nohighlight">\(\frac{tp+tn}{tp+fp+fn+tn}\)</span>, with <cite>tp</cite>, <cite>fp</cite>, <cite>fn</cite>, and <cite>tn</cite> standing
 for true positives, false positives, false negatives, and true negatives,
@@ -106,7 +657,7 @@ respectively</p>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.error.acce">
-<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">acce</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">y_true</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y_pred</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.acce" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">acce</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">y_true</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y_pred</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/error.html#acce"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.error.acce" title="Link to this definition"></a></dt>
 <dd><p>Computes the error in terms of 1-accuracy. The accuracy is computed as
 <span class="math notranslate nohighlight">\(\frac{tp+tn}{tp+fp+fn+tn}\)</span>, with <cite>tp</cite>, <cite>fp</cite>, <cite>fn</cite>, and <cite>tn</cite> standing
 for true positives, false positives, false negatives, and true negatives,
@@ -126,7 +677,7 @@ respectively</p>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.error.ae">
-<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">ae</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.ae" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">ae</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/error.html#ae"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.error.ae" title="Link to this definition"></a></dt>
 <dd><dl class="simple">
 <dt>Computes the absolute error between the two prevalence vectors.</dt><dd><p>Absolute error between two prevalence vectors <span class="math notranslate nohighlight">\(p\)</span> and <span class="math notranslate nohighlight">\(\hat{p}\)</span>  is computed as
 <span class="math notranslate nohighlight">\(AE(p,\hat{p})=\frac{1}{|\mathcal{Y}|}\sum_{y\in \mathcal{Y}}|\hat{p}(y)-p(y)|\)</span>,
@@ -148,7 +699,7 @@ where <span class="math notranslate nohighlight">\(\mathcal{Y}\)</span> are the
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.error.f1_error">
-<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">f1_error</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">y_true</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y_pred</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.f1_error" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">f1_error</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">y_true</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y_pred</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.f1_error" title="Link to this definition"></a></dt>
 <dd><p>F1 error: simply computes the error in terms of macro <span class="math notranslate nohighlight">\(F_1\)</span>, i.e.,
 <span class="math notranslate nohighlight">\(1-F_1^M\)</span>, where <span class="math notranslate nohighlight">\(F_1\)</span> is the harmonic mean of precision and recall,
 defined as <span class="math notranslate nohighlight">\(\frac{2tp}{2tp+fp+fn}\)</span>, with <cite>tp</cite>, <cite>fp</cite>, and <cite>fn</cite> standing
@@ -170,7 +721,7 @@ and then averaged.</p>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.error.f1e">
-<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">f1e</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">y_true</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y_pred</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.f1e" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">f1e</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">y_true</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y_pred</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/error.html#f1e"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.error.f1e" title="Link to this definition"></a></dt>
 <dd><p>F1 error: simply computes the error in terms of macro <span class="math notranslate nohighlight">\(F_1\)</span>, i.e.,
 <span class="math notranslate nohighlight">\(1-F_1^M\)</span>, where <span class="math notranslate nohighlight">\(F_1\)</span> is the harmonic mean of precision and recall,
 defined as <span class="math notranslate nohighlight">\(\frac{2tp}{2tp+fp+fn}\)</span>, with <cite>tp</cite>, <cite>fp</cite>, and <cite>fn</cite> standing
@@ -192,7 +743,7 @@ and then averaged.</p>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.error.from_name">
-<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">from_name</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">err_name</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.from_name" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">from_name</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">err_name</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/error.html#from_name"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.error.from_name" title="Link to this definition"></a></dt>
 <dd><p>Gets an error function from its name. E.g., <cite>from_name(“mae”)</cite>
 will return function <a class="reference internal" href="#quapy.error.mae" title="quapy.error.mae"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quapy.error.mae()</span></code></a></p>
 <dl class="field-list simple">
@@ -207,7 +758,7 @@ will return function <a class="reference internal" href="#quapy.error.mae" title
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.error.kld">
-<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">kld</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.kld" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">kld</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/error.html#kld"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.error.kld" title="Link to this definition"></a></dt>
 <dd><dl class="simple">
 <dt>Computes the Kullback-Leibler divergence between the two prevalence distributions.</dt><dd><p>Kullback-Leibler divergence between two prevalence distributions <span class="math notranslate nohighlight">\(p\)</span> and <span class="math notranslate nohighlight">\(\hat{p}\)</span>
 is computed as
@@ -236,7 +787,7 @@ If <cite>eps=None</cite>, the sample size will be taken from the environment var
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.error.mae">
-<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">mae</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.mae" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">mae</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/error.html#mae"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.error.mae" title="Link to this definition"></a></dt>
 <dd><p>Computes the mean absolute error (see <a class="reference internal" href="#quapy.error.ae" title="quapy.error.ae"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quapy.error.ae()</span></code></a>) across the sample pairs.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -254,7 +805,7 @@ prevalence values</p></li>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.error.mean_absolute_error">
-<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">mean_absolute_error</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.mean_absolute_error" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">mean_absolute_error</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.mean_absolute_error" title="Link to this definition"></a></dt>
 <dd><p>Computes the mean absolute error (see <a class="reference internal" href="#quapy.error.ae" title="quapy.error.ae"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quapy.error.ae()</span></code></a>) across the sample pairs.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -270,9 +821,52 @@ prevalence values</p></li>
 </dl>
 </dd></dl>
 
+<dl class="py function">
+<dt class="sig sig-object py" id="quapy.error.mean_normalized_absolute_error">
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">mean_normalized_absolute_error</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.mean_normalized_absolute_error" title="Link to this definition"></a></dt>
+<dd><p>Computes the mean normalized absolute error (see <a class="reference internal" href="#quapy.error.nae" title="quapy.error.nae"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quapy.error.nae()</span></code></a>) across the sample pairs.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>prevs</strong> – array-like of shape <cite>(n_samples, n_classes,)</cite> with the true prevalence values</p></li>
+<li><p><strong>prevs_hat</strong> – array-like of shape <cite>(n_samples, n_classes,)</cite> with the predicted
+prevalence values</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>mean normalized absolute error</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="quapy.error.mean_normalized_relative_absolute_error">
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">mean_normalized_relative_absolute_error</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.mean_normalized_relative_absolute_error" title="Link to this definition"></a></dt>
+<dd><p>Computes the mean normalized relative absolute error (see <a class="reference internal" href="#quapy.error.nrae" title="quapy.error.nrae"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quapy.error.nrae()</span></code></a>) across
+the sample pairs. The distributions are smoothed using the <cite>eps</cite> factor (see
+<a class="reference internal" href="#quapy.error.smooth" title="quapy.error.smooth"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quapy.error.smooth()</span></code></a>).</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>prevs</strong> – array-like of shape <cite>(n_samples, n_classes,)</cite> with the true
+prevalence values</p></li>
+<li><p><strong>prevs_hat</strong> – array-like of shape <cite>(n_samples, n_classes,)</cite> with the predicted
+prevalence values</p></li>
+<li><p><strong>eps</strong> – smoothing factor. <cite>mnrae</cite> is not defined in cases in which the true
+distribution contains zeros; <cite>eps</cite> is typically set to be <span class="math notranslate nohighlight">\(\frac{1}{2T}\)</span>,
+with <span class="math notranslate nohighlight">\(T\)</span> the sample size. If <cite>eps=None</cite>, the sample size will be taken from
+the environment variable <cite>SAMPLE_SIZE</cite> (which has thus to be set beforehand).</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>mean normalized relative absolute error</p>
+</dd>
+</dl>
+</dd></dl>
+
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.error.mean_relative_absolute_error">
-<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">mean_relative_absolute_error</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.mean_relative_absolute_error" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">mean_relative_absolute_error</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.mean_relative_absolute_error" title="Link to this definition"></a></dt>
 <dd><p>Computes the mean relative absolute error (see <a class="reference internal" href="#quapy.error.rae" title="quapy.error.rae"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quapy.error.rae()</span></code></a>) across
 the sample pairs. The distributions are smoothed using the <cite>eps</cite> factor (see
 <a class="reference internal" href="#quapy.error.smooth" title="quapy.error.smooth"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quapy.error.smooth()</span></code></a>).</p>
@@ -297,7 +891,7 @@ the environment variable <cite>SAMPLE_SIZE</cite> (which has thus to be set befo
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.error.mkld">
-<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">mkld</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.mkld" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">mkld</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/error.html#mkld"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.error.mkld" title="Link to this definition"></a></dt>
 <dd><p>Computes the mean Kullback-Leibler divergence (see <a class="reference internal" href="#quapy.error.kld" title="quapy.error.kld"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quapy.error.kld()</span></code></a>) across the
 sample pairs. The distributions are smoothed using the <cite>eps</cite> factor
 (see <a class="reference internal" href="#quapy.error.smooth" title="quapy.error.smooth"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quapy.error.smooth()</span></code></a>).</p>
@@ -320,9 +914,27 @@ If <cite>eps=None</cite>, the sample size will be taken from the environment var
 </dl>
 </dd></dl>
 
+<dl class="py function">
+<dt class="sig sig-object py" id="quapy.error.mnae">
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">mnae</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/error.html#mnae"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.error.mnae" title="Link to this definition"></a></dt>
+<dd><p>Computes the mean normalized absolute error (see <a class="reference internal" href="#quapy.error.nae" title="quapy.error.nae"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quapy.error.nae()</span></code></a>) across the sample pairs.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>prevs</strong> – array-like of shape <cite>(n_samples, n_classes,)</cite> with the true prevalence values</p></li>
+<li><p><strong>prevs_hat</strong> – array-like of shape <cite>(n_samples, n_classes,)</cite> with the predicted
+prevalence values</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>mean normalized absolute error</p>
+</dd>
+</dl>
+</dd></dl>
+
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.error.mnkld">
-<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">mnkld</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.mnkld" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">mnkld</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/error.html#mnkld"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.error.mnkld" title="Link to this definition"></a></dt>
 <dd><p>Computes the mean Normalized Kullback-Leibler divergence (see <a class="reference internal" href="#quapy.error.nkld" title="quapy.error.nkld"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quapy.error.nkld()</span></code></a>)
 across the sample pairs. The distributions are smoothed using the <cite>eps</cite> factor
 (see <a class="reference internal" href="#quapy.error.smooth" title="quapy.error.smooth"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quapy.error.smooth()</span></code></a>).</p>
@@ -344,9 +956,34 @@ If <cite>eps=None</cite>, the sample size will be taken from the environment var
 </dl>
 </dd></dl>
 
+<dl class="py function">
+<dt class="sig sig-object py" id="quapy.error.mnrae">
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">mnrae</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/error.html#mnrae"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.error.mnrae" title="Link to this definition"></a></dt>
+<dd><p>Computes the mean normalized relative absolute error (see <a class="reference internal" href="#quapy.error.nrae" title="quapy.error.nrae"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quapy.error.nrae()</span></code></a>) across
+the sample pairs. The distributions are smoothed using the <cite>eps</cite> factor (see
+<a class="reference internal" href="#quapy.error.smooth" title="quapy.error.smooth"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quapy.error.smooth()</span></code></a>).</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>prevs</strong> – array-like of shape <cite>(n_samples, n_classes,)</cite> with the true
+prevalence values</p></li>
+<li><p><strong>prevs_hat</strong> – array-like of shape <cite>(n_samples, n_classes,)</cite> with the predicted
+prevalence values</p></li>
+<li><p><strong>eps</strong> – smoothing factor. <cite>mnrae</cite> is not defined in cases in which the true
+distribution contains zeros; <cite>eps</cite> is typically set to be <span class="math notranslate nohighlight">\(\frac{1}{2T}\)</span>,
+with <span class="math notranslate nohighlight">\(T\)</span> the sample size. If <cite>eps=None</cite>, the sample size will be taken from
+the environment variable <cite>SAMPLE_SIZE</cite> (which has thus to be set beforehand).</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>mean normalized relative absolute error</p>
+</dd>
+</dl>
+</dd></dl>
+
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.error.mrae">
-<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">mrae</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.mrae" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">mrae</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/error.html#mrae"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.error.mrae" title="Link to this definition"></a></dt>
 <dd><p>Computes the mean relative absolute error (see <a class="reference internal" href="#quapy.error.rae" title="quapy.error.rae"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quapy.error.rae()</span></code></a>) across
 the sample pairs. The distributions are smoothed using the <cite>eps</cite> factor (see
 <a class="reference internal" href="#quapy.error.smooth" title="quapy.error.smooth"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quapy.error.smooth()</span></code></a>).</p>
@@ -371,7 +1008,7 @@ the environment variable <cite>SAMPLE_SIZE</cite> (which has thus to be set befo
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.error.mse">
-<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">mse</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.mse" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">mse</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/error.html#mse"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.error.mse" title="Link to this definition"></a></dt>
 <dd><p>Computes the mean squared error (see <a class="reference internal" href="#quapy.error.se" title="quapy.error.se"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quapy.error.se()</span></code></a>) across the sample pairs.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -388,9 +1025,32 @@ predicted prevalence values</p></li>
 </dl>
 </dd></dl>
 
+<dl class="py function">
+<dt class="sig sig-object py" id="quapy.error.nae">
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">nae</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/error.html#nae"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.error.nae" title="Link to this definition"></a></dt>
+<dd><dl class="simple">
+<dt>Computes the normalized absolute error between the two prevalence vectors.</dt><dd><p>Normalized absolute error between two prevalence vectors <span class="math notranslate nohighlight">\(p\)</span> and <span class="math notranslate nohighlight">\(\hat{p}\)</span>  is computed as
+<span class="math notranslate nohighlight">\(NAE(p,\hat{p})=\frac{AE(p,\hat{p})}{z_{AE}}\)</span>,
+where <span class="math notranslate nohighlight">\(z_{AE}=\frac{2(1-\min_{y\in \mathcal{Y}} p(y))}{|\mathcal{Y}|}\)</span>, and <span class="math notranslate nohighlight">\(\mathcal{Y}\)</span>
+are the classes of interest.</p>
+</dd>
+</dl>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>prevs</strong> – array-like of shape <cite>(n_classes,)</cite> with the true prevalence values</p></li>
+<li><p><strong>prevs_hat</strong> – array-like of shape <cite>(n_classes,)</cite> with the predicted prevalence values</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>normalized absolute error</p>
+</dd>
+</dl>
+</dd></dl>
+
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.error.nkld">
-<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">nkld</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.nkld" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">nkld</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/error.html#nkld"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.error.nkld" title="Link to this definition"></a></dt>
 <dd><dl class="simple">
 <dt>Computes the Normalized Kullback-Leibler divergence between the two prevalence distributions.</dt><dd><p>Normalized Kullback-Leibler divergence between two prevalence distributions <span class="math notranslate nohighlight">\(p\)</span> and
 <span class="math notranslate nohighlight">\(\hat{p}\)</span> is computed as
@@ -417,9 +1077,92 @@ size. If <cite>eps=None</cite>, the sample size will be taken from the environme
 </dl>
 </dd></dl>
 
+<dl class="py function">
+<dt class="sig sig-object py" id="quapy.error.normalized_absolute_error">
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">normalized_absolute_error</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.normalized_absolute_error" title="Link to this definition"></a></dt>
+<dd><dl class="simple">
+<dt>Computes the normalized absolute error between the two prevalence vectors.</dt><dd><p>Normalized absolute error between two prevalence vectors <span class="math notranslate nohighlight">\(p\)</span> and <span class="math notranslate nohighlight">\(\hat{p}\)</span>  is computed as
+<span class="math notranslate nohighlight">\(NAE(p,\hat{p})=\frac{AE(p,\hat{p})}{z_{AE}}\)</span>,
+where <span class="math notranslate nohighlight">\(z_{AE}=\frac{2(1-\min_{y\in \mathcal{Y}} p(y))}{|\mathcal{Y}|}\)</span>, and <span class="math notranslate nohighlight">\(\mathcal{Y}\)</span>
+are the classes of interest.</p>
+</dd>
+</dl>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>prevs</strong> – array-like of shape <cite>(n_classes,)</cite> with the true prevalence values</p></li>
+<li><p><strong>prevs_hat</strong> – array-like of shape <cite>(n_classes,)</cite> with the predicted prevalence values</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>normalized absolute error</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="quapy.error.normalized_relative_absolute_error">
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">normalized_relative_absolute_error</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.normalized_relative_absolute_error" title="Link to this definition"></a></dt>
+<dd><dl class="simple">
+<dt>Computes the normalized absolute relative error between the two prevalence vectors.</dt><dd><p>Relative absolute error between two prevalence vectors <span class="math notranslate nohighlight">\(p\)</span> and <span class="math notranslate nohighlight">\(\hat{p}\)</span>
+is computed as
+<span class="math notranslate nohighlight">\(NRAE(p,\hat{p})= \frac{RAE(p,\hat{p})}{z_{RAE}}\)</span>,
+where
+<span class="math notranslate nohighlight">\(z_{RAE} = \frac{|\mathcal{Y}|-1+\frac{1-\min_{y\in \mathcal{Y}} p(y)}{\min_{y\in \mathcal{Y}} p(y)}}{|\mathcal{Y}|}\)</span>
+and <span class="math notranslate nohighlight">\(\mathcal{Y}\)</span> are the classes of interest.
+The distributions are smoothed using the <cite>eps</cite> factor (see <a class="reference internal" href="#quapy.error.smooth" title="quapy.error.smooth"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quapy.error.smooth()</span></code></a>).</p>
+</dd>
+</dl>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>prevs</strong> – array-like of shape <cite>(n_classes,)</cite> with the true prevalence values</p></li>
+<li><p><strong>prevs_hat</strong> – array-like of shape <cite>(n_classes,)</cite> with the predicted prevalence values</p></li>
+<li><p><strong>eps</strong> – smoothing factor. <cite>nrae</cite> is not defined in cases in which the true distribution
+contains zeros; <cite>eps</cite> is typically set to be <span class="math notranslate nohighlight">\(\frac{1}{2T}\)</span>, with <span class="math notranslate nohighlight">\(T\)</span> the
+sample size. If <cite>eps=None</cite>, the sample size will be taken from the environment variable
+<cite>SAMPLE_SIZE</cite> (which has thus to be set beforehand).</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>normalized relative absolute error</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="quapy.error.nrae">
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">nrae</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/error.html#nrae"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.error.nrae" title="Link to this definition"></a></dt>
+<dd><dl class="simple">
+<dt>Computes the normalized absolute relative error between the two prevalence vectors.</dt><dd><p>Relative absolute error between two prevalence vectors <span class="math notranslate nohighlight">\(p\)</span> and <span class="math notranslate nohighlight">\(\hat{p}\)</span>
+is computed as
+<span class="math notranslate nohighlight">\(NRAE(p,\hat{p})= \frac{RAE(p,\hat{p})}{z_{RAE}}\)</span>,
+where
+<span class="math notranslate nohighlight">\(z_{RAE} = \frac{|\mathcal{Y}|-1+\frac{1-\min_{y\in \mathcal{Y}} p(y)}{\min_{y\in \mathcal{Y}} p(y)}}{|\mathcal{Y}|}\)</span>
+and <span class="math notranslate nohighlight">\(\mathcal{Y}\)</span> are the classes of interest.
+The distributions are smoothed using the <cite>eps</cite> factor (see <a class="reference internal" href="#quapy.error.smooth" title="quapy.error.smooth"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quapy.error.smooth()</span></code></a>).</p>
+</dd>
+</dl>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>prevs</strong> – array-like of shape <cite>(n_classes,)</cite> with the true prevalence values</p></li>
+<li><p><strong>prevs_hat</strong> – array-like of shape <cite>(n_classes,)</cite> with the predicted prevalence values</p></li>
+<li><p><strong>eps</strong> – smoothing factor. <cite>nrae</cite> is not defined in cases in which the true distribution
+contains zeros; <cite>eps</cite> is typically set to be <span class="math notranslate nohighlight">\(\frac{1}{2T}\)</span>, with <span class="math notranslate nohighlight">\(T\)</span> the
+sample size. If <cite>eps=None</cite>, the sample size will be taken from the environment variable
+<cite>SAMPLE_SIZE</cite> (which has thus to be set beforehand).</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>normalized relative absolute error</p>
+</dd>
+</dl>
+</dd></dl>
+
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.error.rae">
-<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">rae</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.rae" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">rae</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/error.html#rae"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.error.rae" title="Link to this definition"></a></dt>
 <dd><dl class="simple">
 <dt>Computes the absolute relative error between the two prevalence vectors.</dt><dd><p>Relative absolute error between two prevalence vectors <span class="math notranslate nohighlight">\(p\)</span> and <span class="math notranslate nohighlight">\(\hat{p}\)</span>
 is computed as
@@ -448,7 +1191,7 @@ sample size. If <cite>eps=None</cite>, the sample size will be taken from the en
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.error.relative_absolute_error">
-<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">relative_absolute_error</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.relative_absolute_error" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">relative_absolute_error</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.relative_absolute_error" title="Link to this definition"></a></dt>
 <dd><dl class="simple">
 <dt>Computes the absolute relative error between the two prevalence vectors.</dt><dd><p>Relative absolute error between two prevalence vectors <span class="math notranslate nohighlight">\(p\)</span> and <span class="math notranslate nohighlight">\(\hat{p}\)</span>
 is computed as
@@ -477,7 +1220,7 @@ sample size. If <cite>eps=None</cite>, the sample size will be taken from the en
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.error.se">
-<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">se</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.se" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">se</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_hat</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/error.html#se"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.error.se" title="Link to this definition"></a></dt>
 <dd><dl class="simple">
 <dt>Computes the squared error between the two prevalence vectors.</dt><dd><p>Squared error between two prevalence vectors <span class="math notranslate nohighlight">\(p\)</span> and <span class="math notranslate nohighlight">\(\hat{p}\)</span>  is computed as
 <span class="math notranslate nohighlight">\(SE(p,\hat{p})=\frac{1}{|\mathcal{Y}|}\sum_{y\in \mathcal{Y}}(\hat{p}(y)-p(y))^2\)</span>,
@@ -500,7 +1243,7 @@ where
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.error.smooth">
-<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">smooth</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eps</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.error.smooth" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.error.</span></span><span class="sig-name descname"><span class="pre">smooth</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">eps</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/error.html#smooth"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.error.smooth" title="Link to this definition"></a></dt>
 <dd><p>Smooths a prevalence distribution with <span class="math notranslate nohighlight">\(\epsilon\)</span> (<cite>eps</cite>) as:
 <span class="math notranslate nohighlight">\(\underline{p}(y)=\frac{\epsilon+p(y)}{\epsilon|\mathcal{Y}|+
 \displaystyle\sum_{y\in \mathcal{Y}}p(y)}\)</span></p>
@@ -519,10 +1262,10 @@ where
 
 </section>
 <section id="module-quapy.evaluation">
-<span id="quapy-evaluation"></span><h2>quapy.evaluation<a class="headerlink" href="#module-quapy.evaluation" title="Permalink to this heading">¶</a></h2>
+<span id="quapy-evaluation-module"></span><h2>quapy.evaluation module<a class="headerlink" href="#module-quapy.evaluation" title="Link to this heading"></a></h2>
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.evaluation.evaluate">
-<span class="sig-prename descclassname"><span class="pre">quapy.evaluation.</span></span><span class="sig-name descname"><span class="pre">evaluate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">model</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.method.html#quapy.method.base.BaseQuantifier" title="quapy.method.base.BaseQuantifier"><span class="pre">BaseQuantifier</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">protocol</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.protocol.AbstractProtocol" title="quapy.protocol.AbstractProtocol"><span class="pre">AbstractProtocol</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">error_metric</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Callable</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">aggr_speedup</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">bool</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'auto'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.evaluation.evaluate" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.evaluation.</span></span><span class="sig-name descname"><span class="pre">evaluate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">model</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.method.html#quapy.method.base.BaseQuantifier" title="quapy.method.base.BaseQuantifier"><span class="pre">BaseQuantifier</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">protocol</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.protocol.AbstractProtocol" title="quapy.protocol.AbstractProtocol"><span class="pre">AbstractProtocol</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">error_metric</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">Callable</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">aggr_speedup</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'auto'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/evaluation.html#evaluate"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.evaluation.evaluate" title="Link to this definition"></a></dt>
 <dd><p>Evaluates a quantification model according to a specific sample generation protocol and in terms of one
 evaluation metric (error).</p>
 <dl class="field-list simple">
@@ -551,7 +1294,7 @@ a single float</p>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.evaluation.evaluate_on_samples">
-<span class="sig-prename descclassname"><span class="pre">quapy.evaluation.</span></span><span class="sig-name descname"><span class="pre">evaluate_on_samples</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">model</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.method.html#quapy.method.base.BaseQuantifier" title="quapy.method.base.BaseQuantifier"><span class="pre">BaseQuantifier</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">samples</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Iterable</span><span class="p"><span class="pre">[</span></span><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">error_metric</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Callable</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.evaluation.evaluate_on_samples" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.evaluation.</span></span><span class="sig-name descname"><span class="pre">evaluate_on_samples</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">model</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.method.html#quapy.method.base.BaseQuantifier" title="quapy.method.base.BaseQuantifier"><span class="pre">BaseQuantifier</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">samples</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Iterable</span><span class="p"><span class="pre">[</span></span><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">error_metric</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">Callable</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/evaluation.html#evaluate_on_samples"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.evaluation.evaluate_on_samples" title="Link to this definition"></a></dt>
 <dd><p>Evaluates a quantification model on a given set of samples and in terms of one evaluation metric (error).</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -573,7 +1316,7 @@ a single float</p>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.evaluation.evaluation_report">
-<span class="sig-prename descclassname"><span class="pre">quapy.evaluation.</span></span><span class="sig-name descname"><span class="pre">evaluation_report</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">model</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.method.html#quapy.method.base.BaseQuantifier" title="quapy.method.base.BaseQuantifier"><span class="pre">BaseQuantifier</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">protocol</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.protocol.AbstractProtocol" title="quapy.protocol.AbstractProtocol"><span class="pre">AbstractProtocol</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">error_metrics</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Iterable</span><span class="p"><span class="pre">[</span></span><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Callable</span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'mae'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">aggr_speedup</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">bool</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'auto'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.evaluation.evaluation_report" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.evaluation.</span></span><span class="sig-name descname"><span class="pre">evaluation_report</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">model</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.method.html#quapy.method.base.BaseQuantifier" title="quapy.method.base.BaseQuantifier"><span class="pre">BaseQuantifier</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">protocol</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.protocol.AbstractProtocol" title="quapy.protocol.AbstractProtocol"><span class="pre">AbstractProtocol</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">error_metrics</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Iterable</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">Callable</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'mae'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">aggr_speedup</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'auto'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/evaluation.html#evaluation_report"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.evaluation.evaluation_report" title="Link to this definition"></a></dt>
 <dd><p>Generates a report (a pandas’ DataFrame) containing information of the evaluation of the model as according
 to a specific protocol and in terms of one or more evaluation metrics (errors).</p>
 <dl class="field-list simple">
@@ -603,7 +1346,7 @@ have been indicated, each displaying the score in terms of that metric for every
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.evaluation.prediction">
-<span class="sig-prename descclassname"><span class="pre">quapy.evaluation.</span></span><span class="sig-name descname"><span class="pre">prediction</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">model</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.method.html#quapy.method.base.BaseQuantifier" title="quapy.method.base.BaseQuantifier"><span class="pre">BaseQuantifier</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">protocol</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.protocol.AbstractProtocol" title="quapy.protocol.AbstractProtocol"><span class="pre">AbstractProtocol</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">aggr_speedup</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">bool</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'auto'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.evaluation.prediction" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.evaluation.</span></span><span class="sig-name descname"><span class="pre">prediction</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">model</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.method.html#quapy.method.base.BaseQuantifier" title="quapy.method.base.BaseQuantifier"><span class="pre">BaseQuantifier</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">protocol</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.protocol.AbstractProtocol" title="quapy.protocol.AbstractProtocol"><span class="pre">AbstractProtocol</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">aggr_speedup</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'auto'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/evaluation.html#prediction"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.evaluation.prediction" title="Link to this definition"></a></dt>
 <dd><p>Uses a quantification model to generate predictions for the samples generated via a specific protocol.
 This function is central to all evaluation processes, and is endowed with an optimization to speed-up the
 prediction of protocols that generate samples from a large collection. The optimization applies to aggregative
@@ -634,477 +1377,12 @@ convenient or not. Set to False to deactivate.</p></li>
 </dl>
 </dd></dl>
 
-</section>
-<section id="quapy-protocol">
-<h2>quapy.protocol<a class="headerlink" href="#quapy-protocol" title="Permalink to this heading">¶</a></h2>
-<div class="versionadded">
-<p><span class="versionmodified added">New in version 0.1.7.</span></p>
-</div>
-<span class="target" id="module-quapy.protocol"></span><dl class="py class">
-<dt class="sig sig-object py" id="quapy.protocol.APP">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.protocol.</span></span><span class="sig-name descname"><span class="pre">APP</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">sample_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_prevalences</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">21</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">repeats</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">10</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">smooth_limits_epsilon</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sanity_check</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">10000</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'sample_prev'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.APP" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#quapy.protocol.AbstractStochasticSeededProtocol" title="quapy.protocol.AbstractStochasticSeededProtocol"><code class="xref py py-class docutils literal notranslate"><span class="pre">AbstractStochasticSeededProtocol</span></code></a>, <a class="reference internal" href="#quapy.protocol.OnLabelledCollectionProtocol" title="quapy.protocol.OnLabelledCollectionProtocol"><code class="xref py py-class docutils literal notranslate"><span class="pre">OnLabelledCollectionProtocol</span></code></a></p>
-<p>Implementation of the artificial prevalence protocol (APP).
-The APP consists of exploring a grid of prevalence values containing <cite>n_prevalences</cite> points (e.g.,
-[0, 0.05, 0.1, 0.15, …, 1], if <cite>n_prevalences=21</cite>), and generating all valid combinations of
-prevalence values for all classes (e.g., for 3 classes, samples with [0, 0, 1], [0, 0.05, 0.95], …,
-[1, 0, 0] prevalence values of size <cite>sample_size</cite> will be yielded). The number of samples for each valid
-combination of prevalence values is indicated by <cite>repeats</cite>.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>data</strong> – a <cite>LabelledCollection</cite> from which the samples will be drawn</p></li>
-<li><p><strong>sample_size</strong> – integer, number of instances in each sample; if None (default) then it is taken from
-qp.environ[“SAMPLE_SIZE”]. If this is not set, a ValueError exception is raised.</p></li>
-<li><p><strong>n_prevalences</strong> – the number of equidistant prevalence points to extract from the [0,1] interval for the
-grid (default is 21)</p></li>
-<li><p><strong>repeats</strong> – number of copies for each valid prevalence vector (default is 10)</p></li>
-<li><p><strong>smooth_limits_epsilon</strong> – the quantity to add and subtract to the limits 0 and 1</p></li>
-<li><p><strong>random_state</strong> – allows replicating samples across runs (default 0, meaning that the sequence of samples
-will be the same every time the protocol is called)</p></li>
-<li><p><strong>sanity_check</strong> – int, raises an exception warning the user that the number of examples to be generated exceed
-this number; set to None for skipping this check</p></li>
-<li><p><strong>return_type</strong> – set to “sample_prev” (default) to get the pairs of (sample, prevalence) at each iteration, or
-to “labelled_collection” to get instead instances of LabelledCollection</p></li>
-</ul>
-</dd>
-</dl>
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.protocol.APP.prevalence_grid">
-<span class="sig-name descname"><span class="pre">prevalence_grid</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.APP.prevalence_grid" title="Permalink to this definition">¶</a></dt>
-<dd><p>Generates vectors of prevalence values from an exhaustive grid of prevalence values. The
-number of prevalence values explored for each dimension depends on <cite>n_prevalences</cite>, so that, if, for example,
-<cite>n_prevalences=11</cite> then the prevalence values of the grid are taken from [0, 0.1, 0.2, …, 0.9, 1]. Only
-valid prevalence distributions are returned, i.e., vectors of prevalence values that sum up to 1. For each
-valid vector of prevalence values, <cite>repeat</cite> copies are returned. The vector of prevalence values can be
-implicit (by setting <cite>return_constrained_dim=False</cite>), meaning that the last dimension (which is constrained
-to 1 - sum of the rest) is not returned (note that, quite obviously, in this case the vector does not sum up to
-1). Note that this method is deterministic, i.e., there is no random sampling anywhere.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
-<dd class="field-odd"><p>a <cite>np.ndarray</cite> of shape <cite>(n, dimensions)</cite> if <cite>return_constrained_dim=True</cite> or of shape
-<cite>(n, dimensions-1)</cite> if <cite>return_constrained_dim=False</cite>, where <cite>n</cite> is the number of valid combinations found
-in the grid multiplied by <cite>repeat</cite></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.protocol.APP.sample">
-<span class="sig-name descname"><span class="pre">sample</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">index</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.APP.sample" title="Permalink to this definition">¶</a></dt>
-<dd><p>Realizes the sample given the index of the instances.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><p><strong>index</strong> – indexes of the instances to select</p>
-</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p>an instance of <code class="xref py py-class docutils literal notranslate"><span class="pre">qp.data.LabelledCollection</span></code></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.protocol.APP.samples_parameters">
-<span class="sig-name descname"><span class="pre">samples_parameters</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.APP.samples_parameters" title="Permalink to this definition">¶</a></dt>
-<dd><p>Return all the necessary parameters to replicate the samples as according to the APP protocol.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
-<dd class="field-odd"><p>a list of indexes that realize the APP sampling</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.protocol.APP.total">
-<span class="sig-name descname"><span class="pre">total</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.APP.total" title="Permalink to this definition">¶</a></dt>
-<dd><p>Returns the number of samples that will be generated</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
-<dd class="field-odd"><p>int</p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt class="sig sig-object py" id="quapy.protocol.AbstractProtocol">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.protocol.</span></span><span class="sig-name descname"><span class="pre">AbstractProtocol</span></span><a class="headerlink" href="#quapy.protocol.AbstractProtocol" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
-<p>Abstract parent class for sample generation protocols.</p>
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.protocol.AbstractProtocol.total">
-<span class="sig-name descname"><span class="pre">total</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.AbstractProtocol.total" title="Permalink to this definition">¶</a></dt>
-<dd><p>Indicates the total number of samples that the protocol generates.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
-<dd class="field-odd"><p>The number of samples to generate if known, or <cite>None</cite> otherwise.</p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt class="sig sig-object py" id="quapy.protocol.AbstractStochasticSeededProtocol">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.protocol.</span></span><span class="sig-name descname"><span class="pre">AbstractStochasticSeededProtocol</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.AbstractStochasticSeededProtocol" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#quapy.protocol.AbstractProtocol" title="quapy.protocol.AbstractProtocol"><code class="xref py py-class docutils literal notranslate"><span class="pre">AbstractProtocol</span></code></a></p>
-<p>An <cite>AbstractStochasticSeededProtocol</cite> is a protocol that generates, via any random procedure (e.g.,
-via random sampling), sequences of <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> samples.
-The protocol abstraction enforces
-the object to be instantiated using a seed, so that the sequence can be fully replicated.
-In order to make this functionality possible, the classes extending this abstraction need to
-implement only two functions, <a class="reference internal" href="#quapy.protocol.AbstractStochasticSeededProtocol.samples_parameters" title="quapy.protocol.AbstractStochasticSeededProtocol.samples_parameters"><code class="xref py py-meth docutils literal notranslate"><span class="pre">samples_parameters()</span></code></a> which generates all the parameters
-needed for extracting the samples, and <a class="reference internal" href="#quapy.protocol.AbstractStochasticSeededProtocol.sample" title="quapy.protocol.AbstractStochasticSeededProtocol.sample"><code class="xref py py-meth docutils literal notranslate"><span class="pre">sample()</span></code></a> that, given some parameters as input,
-deterministically generates a sample.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><p><strong>random_state</strong> – the seed for allowing to replicate any sequence of samples. Default is 0, meaning that
-the sequence will be consistent every time the protocol is called.</p>
-</dd>
-</dl>
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.protocol.AbstractStochasticSeededProtocol.collator">
-<span class="sig-name descname"><span class="pre">collator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sample</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.AbstractStochasticSeededProtocol.collator" title="Permalink to this definition">¶</a></dt>
-<dd><p>The collator prepares the sample to accommodate the desired output format before returning the output.
-This collator simply returns the sample as it is. Classes inheriting from this abstract class can
-implement their custom collators.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>sample</strong> – the sample to be returned</p></li>
-<li><p><strong>args</strong> – additional arguments</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p>the sample adhering to a desired output format (in this case, the sample is returned as it is)</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py property">
-<dt class="sig sig-object py" id="quapy.protocol.AbstractStochasticSeededProtocol.random_state">
-<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">random_state</span></span><a class="headerlink" href="#quapy.protocol.AbstractStochasticSeededProtocol.random_state" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.protocol.AbstractStochasticSeededProtocol.sample">
-<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">sample</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">params</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.AbstractStochasticSeededProtocol.sample" title="Permalink to this definition">¶</a></dt>
-<dd><p>Extract one sample determined by the given parameters</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><p><strong>params</strong> – all the necessary parameters to generate a sample</p>
-</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p>one sample (the same sample has to be generated for the same parameters)</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.protocol.AbstractStochasticSeededProtocol.samples_parameters">
-<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">samples_parameters</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.AbstractStochasticSeededProtocol.samples_parameters" title="Permalink to this definition">¶</a></dt>
-<dd><p>This function has to return all the necessary parameters to replicate the samples</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
-<dd class="field-odd"><p>a list of parameters, each of which serves to deterministically generate a sample</p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py attribute">
-<dt class="sig sig-object py" id="quapy.protocol.ArtificialPrevalenceProtocol">
-<span class="sig-prename descclassname"><span class="pre">quapy.protocol.</span></span><span class="sig-name descname"><span class="pre">ArtificialPrevalenceProtocol</span></span><a class="headerlink" href="#quapy.protocol.ArtificialPrevalenceProtocol" title="Permalink to this definition">¶</a></dt>
-<dd><p>alias of <a class="reference internal" href="#quapy.protocol.APP" title="quapy.protocol.APP"><code class="xref py py-class docutils literal notranslate"><span class="pre">APP</span></code></a></p>
-</dd></dl>
-
-<dl class="py class">
-<dt class="sig sig-object py" id="quapy.protocol.DomainMixer">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.protocol.</span></span><span class="sig-name descname"><span class="pre">DomainMixer</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">domainA</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">domainB</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">sample_size</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">repeats</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevalence</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">mixture_points</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">11</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'sample_prev'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.DomainMixer" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#quapy.protocol.AbstractStochasticSeededProtocol" title="quapy.protocol.AbstractStochasticSeededProtocol"><code class="xref py py-class docutils literal notranslate"><span class="pre">AbstractStochasticSeededProtocol</span></code></a></p>
-<p>Generates mixtures of two domains (A and B) at controlled rates, but preserving the original class prevalence.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>domainA</strong> – one domain, an object of <code class="xref py py-class docutils literal notranslate"><span class="pre">qp.data.LabelledCollection</span></code></p></li>
-<li><p><strong>domainB</strong> – another domain, an object of <code class="xref py py-class docutils literal notranslate"><span class="pre">qp.data.LabelledCollection</span></code></p></li>
-<li><p><strong>sample_size</strong> – integer, the number of instances in each sample; if None (default) then it is taken from
-qp.environ[“SAMPLE_SIZE”]. If this is not set, a ValueError exception is raised.</p></li>
-<li><p><strong>repeats</strong> – int, number of samples to draw for every mixture rate</p></li>
-<li><p><strong>prevalence</strong> – the prevalence to preserv along the mixtures. If specified, should be an array containing
-one prevalence value (positive float) for each class and summing up to one. If not specified, the prevalence
-will be taken from the domain A (default).</p></li>
-<li><p><strong>mixture_points</strong> – an integer indicating the number of points to take from a linear scale (e.g., 21 will
-generate the mixture points [1, 0.95, 0.9, …, 0]), or the array of mixture values itself.
-the specific points</p></li>
-<li><p><strong>random_state</strong> – allows replicating samples across runs (default 0, meaning that the sequence of samples
-will be the same every time the protocol is called)</p></li>
-</ul>
-</dd>
-</dl>
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.protocol.DomainMixer.sample">
-<span class="sig-name descname"><span class="pre">sample</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">indexes</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.DomainMixer.sample" title="Permalink to this definition">¶</a></dt>
-<dd><p>Realizes the sample given a pair of indexes of the instances from A and B.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><p><strong>indexes</strong> – indexes of the instances to select from A and B</p>
-</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p>an instance of <code class="xref py py-class docutils literal notranslate"><span class="pre">qp.data.LabelledCollection</span></code></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.protocol.DomainMixer.samples_parameters">
-<span class="sig-name descname"><span class="pre">samples_parameters</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.DomainMixer.samples_parameters" title="Permalink to this definition">¶</a></dt>
-<dd><p>Return all the necessary parameters to replicate the samples as according to the this protocol.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
-<dd class="field-odd"><p>a list of zipped indexes (from A and B) that realize the sampling</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.protocol.DomainMixer.total">
-<span class="sig-name descname"><span class="pre">total</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.DomainMixer.total" title="Permalink to this definition">¶</a></dt>
-<dd><p>Returns the number of samples that will be generated (equals to “repeats * mixture_points”)</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
-<dd class="field-odd"><p>int</p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt class="sig sig-object py" id="quapy.protocol.IterateProtocol">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.protocol.</span></span><span class="sig-name descname"><span class="pre">IterateProtocol</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">samples:</span> <span class="pre">[&lt;class</span> <span class="pre">'quapy.data.base.LabelledCollection'&gt;]</span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.IterateProtocol" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#quapy.protocol.AbstractProtocol" title="quapy.protocol.AbstractProtocol"><code class="xref py py-class docutils literal notranslate"><span class="pre">AbstractProtocol</span></code></a></p>
-<p>A very simple protocol which simply iterates over a list of previously generated samples</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><p><strong>samples</strong> – a list of <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a></p>
-</dd>
-</dl>
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.protocol.IterateProtocol.total">
-<span class="sig-name descname"><span class="pre">total</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.IterateProtocol.total" title="Permalink to this definition">¶</a></dt>
-<dd><p>Returns the number of samples in this protocol</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
-<dd class="field-odd"><p>int</p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt class="sig sig-object py" id="quapy.protocol.NPP">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.protocol.</span></span><span class="sig-name descname"><span class="pre">NPP</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">sample_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">repeats</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'sample_prev'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.NPP" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#quapy.protocol.AbstractStochasticSeededProtocol" title="quapy.protocol.AbstractStochasticSeededProtocol"><code class="xref py py-class docutils literal notranslate"><span class="pre">AbstractStochasticSeededProtocol</span></code></a>, <a class="reference internal" href="#quapy.protocol.OnLabelledCollectionProtocol" title="quapy.protocol.OnLabelledCollectionProtocol"><code class="xref py py-class docutils literal notranslate"><span class="pre">OnLabelledCollectionProtocol</span></code></a></p>
-<p>A generator of samples that implements the natural prevalence protocol (NPP). The NPP consists of drawing
-samples uniformly at random, therefore approximately preserving the natural prevalence of the collection.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>data</strong> – a <cite>LabelledCollection</cite> from which the samples will be drawn</p></li>
-<li><p><strong>sample_size</strong> – integer, the number of instances in each sample; if None (default) then it is taken from
-qp.environ[“SAMPLE_SIZE”]. If this is not set, a ValueError exception is raised.</p></li>
-<li><p><strong>repeats</strong> – the number of samples to generate. Default is 100.</p></li>
-<li><p><strong>random_state</strong> – allows replicating samples across runs (default 0, meaning that the sequence of samples
-will be the same every time the protocol is called)</p></li>
-<li><p><strong>return_type</strong> – set to “sample_prev” (default) to get the pairs of (sample, prevalence) at each iteration, or
-to “labelled_collection” to get instead instances of LabelledCollection</p></li>
-</ul>
-</dd>
-</dl>
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.protocol.NPP.sample">
-<span class="sig-name descname"><span class="pre">sample</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">index</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.NPP.sample" title="Permalink to this definition">¶</a></dt>
-<dd><p>Realizes the sample given the index of the instances.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><p><strong>index</strong> – indexes of the instances to select</p>
-</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p>an instance of <code class="xref py py-class docutils literal notranslate"><span class="pre">qp.data.LabelledCollection</span></code></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.protocol.NPP.samples_parameters">
-<span class="sig-name descname"><span class="pre">samples_parameters</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.NPP.samples_parameters" title="Permalink to this definition">¶</a></dt>
-<dd><p>Return all the necessary parameters to replicate the samples as according to the NPP protocol.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
-<dd class="field-odd"><p>a list of indexes that realize the NPP sampling</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.protocol.NPP.total">
-<span class="sig-name descname"><span class="pre">total</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.NPP.total" title="Permalink to this definition">¶</a></dt>
-<dd><p>Returns the number of samples that will be generated (equals to “repeats”)</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
-<dd class="field-odd"><p>int</p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py attribute">
-<dt class="sig sig-object py" id="quapy.protocol.NaturalPrevalenceProtocol">
-<span class="sig-prename descclassname"><span class="pre">quapy.protocol.</span></span><span class="sig-name descname"><span class="pre">NaturalPrevalenceProtocol</span></span><a class="headerlink" href="#quapy.protocol.NaturalPrevalenceProtocol" title="Permalink to this definition">¶</a></dt>
-<dd><p>alias of <a class="reference internal" href="#quapy.protocol.NPP" title="quapy.protocol.NPP"><code class="xref py py-class docutils literal notranslate"><span class="pre">NPP</span></code></a></p>
-</dd></dl>
-
-<dl class="py class">
-<dt class="sig sig-object py" id="quapy.protocol.OnLabelledCollectionProtocol">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.protocol.</span></span><span class="sig-name descname"><span class="pre">OnLabelledCollectionProtocol</span></span><a class="headerlink" href="#quapy.protocol.OnLabelledCollectionProtocol" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
-<p>Protocols that generate samples from a <code class="xref py py-class docutils literal notranslate"><span class="pre">qp.data.LabelledCollection</span></code> object.</p>
-<dl class="py attribute">
-<dt class="sig sig-object py" id="quapy.protocol.OnLabelledCollectionProtocol.RETURN_TYPES">
-<span class="sig-name descname"><span class="pre">RETURN_TYPES</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['sample_prev',</span> <span class="pre">'labelled_collection',</span> <span class="pre">'index']</span></em><a class="headerlink" href="#quapy.protocol.OnLabelledCollectionProtocol.RETURN_TYPES" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.protocol.OnLabelledCollectionProtocol.get_collator">
-<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">get_collator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">return_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'sample_prev'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.OnLabelledCollectionProtocol.get_collator" title="Permalink to this definition">¶</a></dt>
-<dd><p>Returns a collator function, i.e., a function that prepares the yielded data</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><p><strong>return_type</strong> – either ‘sample_prev’ (default) if the collator is requested to yield tuples of
-<cite>(sample, prevalence)</cite>, or ‘labelled_collection’ when it is requested to yield instances of
-<code class="xref py py-class docutils literal notranslate"><span class="pre">qp.data.LabelledCollection</span></code></p>
-</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p>the collator function (a callable function that takes as input an instance of
-<code class="xref py py-class docutils literal notranslate"><span class="pre">qp.data.LabelledCollection</span></code>)</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.protocol.OnLabelledCollectionProtocol.get_labelled_collection">
-<span class="sig-name descname"><span class="pre">get_labelled_collection</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.OnLabelledCollectionProtocol.get_labelled_collection" title="Permalink to this definition">¶</a></dt>
-<dd><p>Returns the labelled collection on which this protocol acts.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
-<dd class="field-odd"><p>an object of type <code class="xref py py-class docutils literal notranslate"><span class="pre">qp.data.LabelledCollection</span></code></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.protocol.OnLabelledCollectionProtocol.on_preclassified_instances">
-<span class="sig-name descname"><span class="pre">on_preclassified_instances</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">pre_classifications</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">in_place</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.OnLabelledCollectionProtocol.on_preclassified_instances" title="Permalink to this definition">¶</a></dt>
-<dd><p>Returns a copy of this protocol that acts on a modified version of the original
-<code class="xref py py-class docutils literal notranslate"><span class="pre">qp.data.LabelledCollection</span></code> in which the original instances have been replaced
-with the outputs of a classifier for each instance. (This is convenient for speeding-up
-the evaluation procedures for many samples, by pre-classifying the instances in advance.)</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>pre_classifications</strong> – the predictions issued by a classifier, typically an array-like
-with shape <cite>(n_instances,)</cite> when the classifier is a hard one, or with shape
-<cite>(n_instances, n_classes)</cite> when the classifier is a probabilistic one.</p></li>
-<li><p><strong>in_place</strong> – whether or not to apply the modification in-place or in a new copy (default).</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p>a copy of this protocol</p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt class="sig sig-object py" id="quapy.protocol.UPP">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.protocol.</span></span><span class="sig-name descname"><span class="pre">UPP</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">sample_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">repeats</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'sample_prev'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.UPP" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#quapy.protocol.AbstractStochasticSeededProtocol" title="quapy.protocol.AbstractStochasticSeededProtocol"><code class="xref py py-class docutils literal notranslate"><span class="pre">AbstractStochasticSeededProtocol</span></code></a>, <a class="reference internal" href="#quapy.protocol.OnLabelledCollectionProtocol" title="quapy.protocol.OnLabelledCollectionProtocol"><code class="xref py py-class docutils literal notranslate"><span class="pre">OnLabelledCollectionProtocol</span></code></a></p>
-<p>A variant of <a class="reference internal" href="#quapy.protocol.APP" title="quapy.protocol.APP"><code class="xref py py-class docutils literal notranslate"><span class="pre">APP</span></code></a> that, instead of using a grid of equidistant prevalence values,
-relies on the Kraemer algorithm for sampling unit (k-1)-simplex uniformly at random, with
-k the number of classes. This protocol covers the entire range of prevalence values in a
-statistical sense, i.e., unlike APP there is no guarantee that it is covered precisely
-equally for all classes, but it is preferred in cases in which the number of possible
-combinations of the grid values of APP makes this endeavour intractable.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>data</strong> – a <cite>LabelledCollection</cite> from which the samples will be drawn</p></li>
-<li><p><strong>sample_size</strong> – integer, the number of instances in each sample; if None (default) then it is taken from
-qp.environ[“SAMPLE_SIZE”]. If this is not set, a ValueError exception is raised.</p></li>
-<li><p><strong>repeats</strong> – the number of samples to generate. Default is 100.</p></li>
-<li><p><strong>random_state</strong> – allows replicating samples across runs (default 0, meaning that the sequence of samples
-will be the same every time the protocol is called)</p></li>
-<li><p><strong>return_type</strong> – set to “sample_prev” (default) to get the pairs of (sample, prevalence) at each iteration, or
-to “labelled_collection” to get instead instances of LabelledCollection</p></li>
-</ul>
-</dd>
-</dl>
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.protocol.UPP.sample">
-<span class="sig-name descname"><span class="pre">sample</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">index</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.UPP.sample" title="Permalink to this definition">¶</a></dt>
-<dd><p>Realizes the sample given the index of the instances.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><p><strong>index</strong> – indexes of the instances to select</p>
-</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p>an instance of <code class="xref py py-class docutils literal notranslate"><span class="pre">qp.data.LabelledCollection</span></code></p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.protocol.UPP.samples_parameters">
-<span class="sig-name descname"><span class="pre">samples_parameters</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.UPP.samples_parameters" title="Permalink to this definition">¶</a></dt>
-<dd><p>Return all the necessary parameters to replicate the samples as according to the UPP protocol.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
-<dd class="field-odd"><p>a list of indexes that realize the UPP sampling</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.protocol.UPP.total">
-<span class="sig-name descname"><span class="pre">total</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quapy.protocol.UPP.total" title="Permalink to this definition">¶</a></dt>
-<dd><p>Returns the number of samples that will be generated (equals to “repeats”)</p>
-<dl class="field-list simple">
-<dt class="field-odd">Returns<span class="colon">:</span></dt>
-<dd class="field-odd"><p>int</p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py attribute">
-<dt class="sig sig-object py" id="quapy.protocol.UniformPrevalenceProtocol">
-<span class="sig-prename descclassname"><span class="pre">quapy.protocol.</span></span><span class="sig-name descname"><span class="pre">UniformPrevalenceProtocol</span></span><a class="headerlink" href="#quapy.protocol.UniformPrevalenceProtocol" title="Permalink to this definition">¶</a></dt>
-<dd><p>alias of <a class="reference internal" href="#quapy.protocol.UPP" title="quapy.protocol.UPP"><code class="xref py py-class docutils literal notranslate"><span class="pre">UPP</span></code></a></p>
-</dd></dl>
-
 </section>
 <section id="module-quapy.functional">
-<span id="quapy-functional"></span><h2>quapy.functional<a class="headerlink" href="#module-quapy.functional" title="Permalink to this heading">¶</a></h2>
+<span id="quapy-functional-module"></span><h2>quapy.functional module<a class="headerlink" href="#module-quapy.functional" title="Link to this heading"></a></h2>
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.functional.HellingerDistance">
-<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">HellingerDistance</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">P</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">Q</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.functional.HellingerDistance" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">HellingerDistance</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">P</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">Q</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">float</span></span></span><a class="reference internal" href="_modules/quapy/functional.html#HellingerDistance"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.functional.HellingerDistance" title="Link to this definition"></a></dt>
 <dd><p>Computes the Hellingher Distance (HD) between (discretized) distributions <cite>P</cite> and <cite>Q</cite>.
 The HD for two discrete distributions of <cite>k</cite> bins is defined as:</p>
 <div class="math notranslate nohighlight">
@@ -1124,7 +1402,7 @@ The HD for two discrete distributions of <cite>k</cite> bins is defined as:</p>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.functional.TopsoeDistance">
-<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">TopsoeDistance</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">P</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">Q</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">epsilon</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1e-20</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.functional.TopsoeDistance" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">TopsoeDistance</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">P</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">Q</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">epsilon</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1e-20</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/functional.html#TopsoeDistance"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.functional.TopsoeDistance" title="Link to this definition"></a></dt>
 <dd><p>Topsoe distance between two (discretized) distributions <cite>P</cite> and <cite>Q</cite>.
 The Topsoe distance for two discrete distributions of <cite>k</cite> bins is defined as:</p>
 <div class="math notranslate nohighlight">
@@ -1145,7 +1423,7 @@ The Topsoe distance for two discrete distributions of <cite>k</cite> bins is def
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.functional.adjusted_quantification">
-<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">adjusted_quantification</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevalence_estim</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tpr</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fpr</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">clip</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.functional.adjusted_quantification" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">adjusted_quantification</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevalence_estim</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tpr</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fpr</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">clip</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/functional.html#adjusted_quantification"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.functional.adjusted_quantification" title="Link to this definition"></a></dt>
 <dd><p>Implements the adjustment of ACC and PACC for the binary case. The adjustment for a prevalence estimate of the
 positive class <cite>p</cite> comes down to computing:</p>
 <div class="math notranslate nohighlight">
@@ -1165,9 +1443,33 @@ positive class <cite>p</cite> comes down to computing:</p>
 </dl>
 </dd></dl>
 
+<dl class="py function">
+<dt class="sig sig-object py" id="quapy.functional.argmin_prevalence">
+<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">argmin_prevalence</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">loss</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_classes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">method</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'optim_minimize'</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/functional.html#argmin_prevalence"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.functional.argmin_prevalence" title="Link to this definition"></a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="quapy.functional.as_binary_prevalence">
+<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">as_binary_prevalence</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">positive_prevalence</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">float</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">ndarray</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">clip_if_necessary</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/functional.html#as_binary_prevalence"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.functional.as_binary_prevalence" title="Link to this definition"></a></dt>
+<dd><p>Helper that, given a float representing the prevalence for the positive class, returns a np.ndarray of two
+values representing a binary distribution.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>positive_prevalence</strong> – prevalence for the positive class</p></li>
+<li><p><strong>clip_if_necessary</strong> – if True, clips the value in [0,1] in order to guarantee the resulting distribution
+is valid. If False, it then checks that the value is in the valid range, and raises an error if not.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>np.ndarray of shape <cite>(2,)</cite></p>
+</dd>
+</dl>
+</dd></dl>
+
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.functional.check_prevalence_vector">
-<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">check_prevalence_vector</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">p</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">raise_exception</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">toleranze</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1e-08</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.functional.check_prevalence_vector" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">check_prevalence_vector</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">p</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">raise_exception</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">toleranze</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1e-08</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/functional.html#check_prevalence_vector"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.functional.check_prevalence_vector" title="Link to this definition"></a></dt>
 <dd><p>Checks that p is a valid prevalence vector, i.e., that it contains values in [0,1] and that the values sum up to 1.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -1179,9 +1481,14 @@ positive class <cite>p</cite> comes down to computing:</p>
 </dl>
 </dd></dl>
 
+<dl class="py function">
+<dt class="sig sig-object py" id="quapy.functional.get_divergence">
+<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">get_divergence</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">divergence</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">Callable</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/functional.html#get_divergence"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.functional.get_divergence" title="Link to this definition"></a></dt>
+<dd></dd></dl>
+
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.functional.get_nprevpoints_approximation">
-<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">get_nprevpoints_approximation</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">combinations_budget</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_classes</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_repeats</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.functional.get_nprevpoints_approximation" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">get_nprevpoints_approximation</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">combinations_budget</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_classes</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_repeats</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/functional.html#get_nprevpoints_approximation"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.functional.get_nprevpoints_approximation" title="Link to this definition"></a></dt>
 <dd><p>Searches for the largest number of (equidistant) prevalence points to define for each of the <cite>n_classes</cite> classes so
 that the number of valid prevalence values generated as combinations of prevalence points (points in a
 <cite>n_classes</cite>-dimensional simplex) do not exceed combinations_budget.</p>
@@ -1199,9 +1506,28 @@ that the number of valid prevalence values generated as combinations of prevalen
 </dl>
 </dd></dl>
 
+<dl class="py function">
+<dt class="sig sig-object py" id="quapy.functional.linear_search">
+<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">linear_search</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">loss</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_classes</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/functional.html#linear_search"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.functional.linear_search" title="Link to this definition"></a></dt>
+<dd><p>Performs a linear search for the best prevalence value in binary problems. The search is carried out by exploring
+the range [0,1] stepping by 0.01. This search is inefficient, and is added only for completeness (some of the
+early methods in quantification literature used it, e.g., HDy). A most powerful alternative is <cite>optim_minimize</cite>.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>loss</strong> – (callable) the function to minimize</p></li>
+<li><p><strong>n_classes</strong> – (int) the number of classes, i.e., the dimensionality of the prevalence vector</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>(ndarray) the best prevalence vector found</p>
+</dd>
+</dl>
+</dd></dl>
+
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.functional.normalize_prevalence">
-<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">normalize_prevalence</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevalences</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.functional.normalize_prevalence" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">normalize_prevalence</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevalences</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/functional.html#normalize_prevalence"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.functional.normalize_prevalence" title="Link to this definition"></a></dt>
 <dd><p>Normalize a vector or matrix of prevalence values. The normalization consists of applying a L1 normalization in
 cases in which the prevalence values are not all-zeros, and to convert the prevalence values into <cite>1/n_classes</cite> in
 cases in which all values are zero.</p>
@@ -1217,7 +1543,7 @@ cases in which all values are zero.</p>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.functional.num_prevalence_combinations">
-<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">num_prevalence_combinations</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">n_prevpoints</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_classes</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_repeats</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.functional.num_prevalence_combinations" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">num_prevalence_combinations</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">n_prevpoints</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_classes</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_repeats</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/functional.html#num_prevalence_combinations"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.functional.num_prevalence_combinations" title="Link to this definition"></a></dt>
 <dd><p>Computes the number of valid prevalence combinations in the n_classes-dimensional simplex if <cite>n_prevpoints</cite> equally
 distant prevalence values are generated and <cite>n_repeats</cite> repetitions are requested.
 The computation comes down to calculating:</p>
@@ -1241,9 +1567,28 @@ number of possible combinations are 5, i.e.: [0,1], [0.25,0.75], [0.50,0.50], [0
 </dl>
 </dd></dl>
 
+<dl class="py function">
+<dt class="sig sig-object py" id="quapy.functional.optim_minimize">
+<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">optim_minimize</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">loss</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_classes</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/functional.html#optim_minimize"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.functional.optim_minimize" title="Link to this definition"></a></dt>
+<dd><p>Searches for the optimal prevalence values, i.e., an <cite>n_classes</cite>-dimensional vector of the (<cite>n_classes</cite>-1)-simplex
+that yields the smallest lost. This optimization is carried out by means of a constrained search using scipy’s
+SLSQP routine.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>loss</strong> – (callable) the function to minimize</p></li>
+<li><p><strong>n_classes</strong> – (int) the number of classes, i.e., the dimensionality of the prevalence vector</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>(ndarray) the best prevalence vector found</p>
+</dd>
+</dl>
+</dd></dl>
+
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.functional.prevalence_from_labels">
-<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">prevalence_from_labels</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">labels</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">classes</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.functional.prevalence_from_labels" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">prevalence_from_labels</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">labels</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">classes</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/functional.html#prevalence_from_labels"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.functional.prevalence_from_labels" title="Link to this definition"></a></dt>
 <dd><p>Computed the prevalence values from a vector of labels.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -1261,7 +1606,7 @@ some classes have no examples.</p></li>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.functional.prevalence_from_probabilities">
-<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">prevalence_from_probabilities</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">posteriors</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">binarize</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.functional.prevalence_from_probabilities" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">prevalence_from_probabilities</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">posteriors</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">binarize</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/functional.html#prevalence_from_probabilities"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.functional.prevalence_from_probabilities" title="Link to this definition"></a></dt>
 <dd><p>Returns a vector of prevalence values from a matrix of posterior probabilities.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -1279,7 +1624,7 @@ converting the vectors of posterior probabilities into class indices, by taking
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.functional.prevalence_linspace">
-<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">prevalence_linspace</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">n_prevalences</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">21</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">repeats</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">smooth_limits_epsilon</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.01</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.functional.prevalence_linspace" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">prevalence_linspace</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">n_prevalences</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">21</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">repeats</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">smooth_limits_epsilon</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.01</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/functional.html#prevalence_linspace"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.functional.prevalence_linspace" title="Link to this definition"></a></dt>
 <dd><p>Produces an array of uniformly separated values of prevalence.
 By default, produces an array of 21 prevalence values, with
 step 0.05 and with the limits smoothed, i.e.:
@@ -1300,7 +1645,7 @@ step 0.05 and with the limits smoothed, i.e.:
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.functional.strprev">
-<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">strprev</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevalences</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">3</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.functional.strprev" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">strprev</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prevalences</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">3</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/functional.html#strprev"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.functional.strprev" title="Link to this definition"></a></dt>
 <dd><p>Returns a string representation for a prevalence vector. E.g.,</p>
 <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">strprev</span><span class="p">([</span><span class="mi">1</span><span class="o">/</span><span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="o">/</span><span class="mi">3</span><span class="p">],</span> <span class="n">prec</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="s1">&#39;[0.33, 0.67]&#39;</span>
@@ -1321,7 +1666,7 @@ step 0.05 and with the limits smoothed, i.e.:
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.functional.uniform_prevalence_sampling">
-<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">uniform_prevalence_sampling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">n_classes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.functional.uniform_prevalence_sampling" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">uniform_prevalence_sampling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">n_classes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/functional.html#uniform_prevalence_sampling"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.functional.uniform_prevalence_sampling" title="Link to this definition"></a></dt>
 <dd><p>Implements the <a class="reference external" href="http://www.cs.cmu.edu/~nasmith/papers/smith+tromble.tr04.pdf">Kraemer algorithm</a>
 for sampling uniformly at random from the unit simplex. This implementation is adapted from this
 <cite>post &lt;https://cs.stackexchange.com/questions/3227/uniform-sampling-from-a-simplex&gt;_</cite>.</p>
@@ -1340,7 +1685,7 @@ for sampling uniformly at random from the unit simplex. This implementation is a
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.functional.uniform_simplex_sampling">
-<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">uniform_simplex_sampling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">n_classes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.functional.uniform_simplex_sampling" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.functional.</span></span><span class="sig-name descname"><span class="pre">uniform_simplex_sampling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">n_classes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.functional.uniform_simplex_sampling" title="Link to this definition"></a></dt>
 <dd><p>Implements the <a class="reference external" href="http://www.cs.cmu.edu/~nasmith/papers/smith+tromble.tr04.pdf">Kraemer algorithm</a>
 for sampling uniformly at random from the unit simplex. This implementation is adapted from this
 <cite>post &lt;https://cs.stackexchange.com/questions/3227/uniform-sampling-from-a-simplex&gt;_</cite>.</p>
@@ -1359,10 +1704,26 @@ for sampling uniformly at random from the unit simplex. This implementation is a
 
 </section>
 <section id="module-quapy.model_selection">
-<span id="quapy-model-selection"></span><h2>quapy.model_selection<a class="headerlink" href="#module-quapy.model_selection" title="Permalink to this heading">¶</a></h2>
+<span id="quapy-model-selection-module"></span><h2>quapy.model_selection module<a class="headerlink" href="#module-quapy.model_selection" title="Link to this heading"></a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="quapy.model_selection.ConfigStatus">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.model_selection.</span></span><span class="sig-name descname"><span class="pre">ConfigStatus</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">params</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">status</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">msg</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">''</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/model_selection.html#ConfigStatus"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.model_selection.ConfigStatus" title="Link to this definition"></a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.model_selection.ConfigStatus.failed">
+<span class="sig-name descname"><span class="pre">failed</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/model_selection.html#ConfigStatus.failed"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.model_selection.ConfigStatus.failed" title="Link to this definition"></a></dt>
+<dd></dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.model_selection.ConfigStatus.success">
+<span class="sig-name descname"><span class="pre">success</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/model_selection.html#ConfigStatus.success"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.model_selection.ConfigStatus.success" title="Link to this definition"></a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.model_selection.GridSearchQ">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.model_selection.</span></span><span class="sig-name descname"><span class="pre">GridSearchQ</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">model:</span> <span class="pre">~quapy.method.base.BaseQuantifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_grid:</span> <span class="pre">dict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">protocol:</span> <span class="pre">~quapy.protocol.AbstractProtocol</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">error:</span> <span class="pre">~typing.Union[~typing.Callable</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">str]</span> <span class="pre">=</span> <span class="pre">&lt;function</span> <span class="pre">mae&gt;</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">refit=True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timeout=-1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs=None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose=False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.model_selection.GridSearchQ" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.model_selection.</span></span><span class="sig-name descname"><span class="pre">GridSearchQ</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">model:</span> <span class="pre">~quapy.method.base.BaseQuantifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_grid:</span> <span class="pre">dict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">protocol:</span> <span class="pre">~quapy.protocol.AbstractProtocol</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">error:</span> <span class="pre">~typing.Callable</span> <span class="pre">|</span> <span class="pre">str</span> <span class="pre">=</span> <span class="pre">&lt;function</span> <span class="pre">mae&gt;</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">refit=True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timeout=-1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs=None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">raise_errors=False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose=False</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/model_selection.html#GridSearchQ"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.model_selection.GridSearchQ" title="Link to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="quapy.method.html#quapy.method.base.BaseQuantifier" title="quapy.method.base.BaseQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">BaseQuantifier</span></code></a></p>
 <p>Grid Search optimization targeting a quantification-oriented metric.</p>
 <p>Optimizes the hyperparameters of a quantification method, based on an evaluation method and on an evaluation
@@ -1375,18 +1736,21 @@ protocol for quantification.</p>
 <li><p><strong>protocol</strong> – a sample generation protocol, an instance of <a class="reference internal" href="#quapy.protocol.AbstractProtocol" title="quapy.protocol.AbstractProtocol"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.protocol.AbstractProtocol</span></code></a></p></li>
 <li><p><strong>error</strong> – an error function (callable) or a string indicating the name of an error function (valid ones
 are those in <code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.error.QUANTIFICATION_ERROR</span></code></p></li>
-<li><p><strong>refit</strong> – whether or not to refit the model on the whole labelled collection (training+validation) with
+<li><p><strong>refit</strong> – whether to refit the model on the whole labelled collection (training+validation) with
 the best chosen hyperparameter combination. Ignored if protocol=’gen’</p></li>
 <li><p><strong>timeout</strong> – establishes a timer (in seconds) for each of the hyperparameters configurations being tested.
 Whenever a run takes longer than this timer, that configuration will be ignored. If all configurations end up
 being ignored, a TimeoutError exception is raised. If -1 (default) then no time bound is set.</p></li>
+<li><p><strong>raise_errors</strong> – boolean, if True then raises an exception when a param combination yields any error, if
+otherwise is False (default), then the combination is marked with an error status, but the process goes on.
+However, if no configuration yields a valid model, then a ValueError exception will be raised.</p></li>
 <li><p><strong>verbose</strong> – set to True to get information through the stdout</p></li>
 </ul>
 </dd>
 </dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.model_selection.GridSearchQ.best_model">
-<span class="sig-name descname"><span class="pre">best_model</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quapy.model_selection.GridSearchQ.best_model" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">best_model</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/model_selection.html#GridSearchQ.best_model"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.model_selection.GridSearchQ.best_model" title="Link to this definition"></a></dt>
 <dd><p>Returns the best model found after calling the <a class="reference internal" href="#quapy.model_selection.GridSearchQ.fit" title="quapy.model_selection.GridSearchQ.fit"><code class="xref py py-meth docutils literal notranslate"><span class="pre">fit()</span></code></a> method, i.e., the one trained on the combination
 of hyper-parameters that minimized the error function.</p>
 <dl class="field-list simple">
@@ -1398,7 +1762,7 @@ of hyper-parameters that minimized the error function.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.model_selection.GridSearchQ.fit">
-<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">training</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.model_selection.GridSearchQ.fit" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">training</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/model_selection.html#GridSearchQ.fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.model_selection.GridSearchQ.fit" title="Link to this definition"></a></dt>
 <dd><dl class="simple">
 <dt>Learning routine. Fits methods with all combinations of hyperparameters and selects the one minimizing</dt><dd><p>the error metric.</p>
 </dd>
@@ -1415,7 +1779,7 @@ of hyper-parameters that minimized the error function.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.model_selection.GridSearchQ.get_params">
-<span class="sig-name descname"><span class="pre">get_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">deep</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.model_selection.GridSearchQ.get_params" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">get_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">deep</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/model_selection.html#GridSearchQ.get_params"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.model_selection.GridSearchQ.get_params" title="Link to this definition"></a></dt>
 <dd><p>Returns the dictionary of hyper-parameters to explore (<cite>param_grid</cite>)</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -1429,7 +1793,7 @@ of hyper-parameters that minimized the error function.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.model_selection.GridSearchQ.quantify">
-<span class="sig-name descname"><span class="pre">quantify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.model_selection.GridSearchQ.quantify" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">quantify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/model_selection.html#GridSearchQ.quantify"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.model_selection.GridSearchQ.quantify" title="Link to this definition"></a></dt>
 <dd><p>Estimate class prevalence values using the best model found after calling the <a class="reference internal" href="#quapy.model_selection.GridSearchQ.fit" title="quapy.model_selection.GridSearchQ.fit"><code class="xref py py-meth docutils literal notranslate"><span class="pre">fit()</span></code></a> method.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -1444,7 +1808,7 @@ by the model selection process.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.model_selection.GridSearchQ.set_params">
-<span class="sig-name descname"><span class="pre">set_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">parameters</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.model_selection.GridSearchQ.set_params" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">set_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">parameters</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/model_selection.html#GridSearchQ.set_params"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.model_selection.GridSearchQ.set_params" title="Link to this definition"></a></dt>
 <dd><p>Sets the hyper-parameters to explore.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -1455,9 +1819,36 @@ by the model selection process.</p>
 
 </dd></dl>
 
+<dl class="py class">
+<dt class="sig sig-object py" id="quapy.model_selection.Status">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.model_selection.</span></span><span class="sig-name descname"><span class="pre">Status</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/model_selection.html#Status"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.model_selection.Status" title="Link to this definition"></a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Enum</span></code></p>
+<p>An enumeration.</p>
+<dl class="py attribute">
+<dt class="sig sig-object py" id="quapy.model_selection.Status.ERROR">
+<span class="sig-name descname"><span class="pre">ERROR</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">4</span></em><a class="headerlink" href="#quapy.model_selection.Status.ERROR" title="Link to this definition"></a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="quapy.model_selection.Status.INVALID">
+<span class="sig-name descname"><span class="pre">INVALID</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">3</span></em><a class="headerlink" href="#quapy.model_selection.Status.INVALID" title="Link to this definition"></a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="quapy.model_selection.Status.SUCCESS">
+<span class="sig-name descname"><span class="pre">SUCCESS</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">1</span></em><a class="headerlink" href="#quapy.model_selection.Status.SUCCESS" title="Link to this definition"></a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="quapy.model_selection.Status.TIMEOUT">
+<span class="sig-name descname"><span class="pre">TIMEOUT</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">2</span></em><a class="headerlink" href="#quapy.model_selection.Status.TIMEOUT" title="Link to this definition"></a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.model_selection.cross_val_predict">
-<span class="sig-prename descclassname"><span class="pre">quapy.model_selection.</span></span><span class="sig-name descname"><span class="pre">cross_val_predict</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">quantifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.method.html#quapy.method.base.BaseQuantifier" title="quapy.method.base.BaseQuantifier"><span class="pre">BaseQuantifier</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">nfolds</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.model_selection.cross_val_predict" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.model_selection.</span></span><span class="sig-name descname"><span class="pre">cross_val_predict</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">quantifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.method.html#quapy.method.base.BaseQuantifier" title="quapy.method.base.BaseQuantifier"><span class="pre">BaseQuantifier</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">nfolds</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/model_selection.html#cross_val_predict"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.model_selection.cross_val_predict" title="Link to this definition"></a></dt>
 <dd><p>Akin to <a class="reference external" href="https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.cross_val_predict.html">scikit-learn’s cross_val_predict</a>
 but for quantification.</p>
 <dl class="field-list simple">
@@ -1475,12 +1866,49 @@ but for quantification.</p>
 </dl>
 </dd></dl>
 
+<dl class="py function">
+<dt class="sig sig-object py" id="quapy.model_selection.expand_grid">
+<span class="sig-prename descclassname"><span class="pre">quapy.model_selection.</span></span><span class="sig-name descname"><span class="pre">expand_grid</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">param_grid</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/model_selection.html#expand_grid"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.model_selection.expand_grid" title="Link to this definition"></a></dt>
+<dd><p>Expands a param_grid dictionary as a list of configurations.
+Example:</p>
+<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">combinations</span> <span class="o">=</span> <span class="n">expand_grid</span><span class="p">({</span><span class="s1">&#39;A&#39;</span><span class="p">:</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">100</span><span class="p">],</span> <span class="s1">&#39;B&#39;</span><span class="p">:</span> <span class="p">[</span><span class="kc">True</span><span class="p">,</span> <span class="kc">False</span><span class="p">]})</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">combinations</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="p">[{</span><span class="s1">&#39;A&#39;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;B&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">},</span> <span class="p">{</span><span class="s1">&#39;A&#39;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;B&#39;</span><span class="p">:</span> <span class="kc">False</span><span class="p">},</span> <span class="p">{</span><span class="s1">&#39;A&#39;</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span> <span class="s1">&#39;B&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">},</span> <span class="p">{</span><span class="s1">&#39;A&#39;</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span> <span class="s1">&#39;B&#39;</span><span class="p">:</span> <span class="kc">False</span><span class="p">},</span> <span class="p">{</span><span class="s1">&#39;A&#39;</span><span class="p">:</span> <span class="mi">100</span><span class="p">,</span> <span class="s1">&#39;B&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">},</span> <span class="p">{</span><span class="s1">&#39;A&#39;</span><span class="p">:</span> <span class="mi">100</span><span class="p">,</span> <span class="s1">&#39;B&#39;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}]</span>
+</pre></div>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>param_grid</strong> – dictionary with keys representing hyper-parameter names, and values representing the range
+to explore for that hyper-parameter</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>a list of configurations, i.e., combinations of hyper-parameter assignments in the grid.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="quapy.model_selection.group_params">
+<span class="sig-prename descclassname"><span class="pre">quapy.model_selection.</span></span><span class="sig-name descname"><span class="pre">group_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">param_grid</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/model_selection.html#group_params"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.model_selection.group_params" title="Link to this definition"></a></dt>
+<dd><p>Partitions a param_grid dictionary as two lists of configurations, one for the classifier-specific
+hyper-parameters, and another for que quantifier-specific hyper-parameters</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>param_grid</strong> – dictionary with keys representing hyper-parameter names, and values representing the range
+to explore for that hyper-parameter</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>two expanded grids of configurations, one for the classifier, another for the quantifier</p>
+</dd>
+</dl>
+</dd></dl>
+
 </section>
 <section id="module-quapy.plot">
-<span id="quapy-plot"></span><h2>quapy.plot<a class="headerlink" href="#module-quapy.plot" title="Permalink to this heading">¶</a></h2>
+<span id="quapy-plot-module"></span><h2>quapy.plot module<a class="headerlink" href="#module-quapy.plot" title="Link to this heading"></a></h2>
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.plot.binary_bias_bins">
-<span class="sig-prename descclassname"><span class="pre">quapy.plot.</span></span><span class="sig-name descname"><span class="pre">binary_bias_bins</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">method_names</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">true_prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">estim_prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pos_class=1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">title=None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nbins=5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">colormap=&lt;matplotlib.colors.ListedColormap</span> <span class="pre">object&gt;</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">vertical_xticks=False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">legend=True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">savepath=None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.plot.binary_bias_bins" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.plot.</span></span><span class="sig-name descname"><span class="pre">binary_bias_bins</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">method_names</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">true_prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">estim_prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pos_class=1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">title=None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nbins=5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">colormap=&lt;matplotlib.colors.ListedColormap</span> <span class="pre">object&gt;</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">vertical_xticks=False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">legend=True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">savepath=None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/plot.html#binary_bias_bins"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.plot.binary_bias_bins" title="Link to this definition"></a></dt>
 <dd><p>Box-plots displaying the local bias (i.e., signed error computed as the estimated value minus the true value)
 for different bins of (true) prevalence of the positive classs, for each quantification method.</p>
 <dl class="field-list simple">
@@ -1505,7 +1933,7 @@ for each experiment</p></li>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.plot.binary_bias_global">
-<span class="sig-prename descclassname"><span class="pre">quapy.plot.</span></span><span class="sig-name descname"><span class="pre">binary_bias_global</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">method_names</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">true_prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">estim_prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pos_class</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">title</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">savepath</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.plot.binary_bias_global" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.plot.</span></span><span class="sig-name descname"><span class="pre">binary_bias_global</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">method_names</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">true_prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">estim_prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pos_class</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">title</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">savepath</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/plot.html#binary_bias_global"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.plot.binary_bias_global" title="Link to this definition"></a></dt>
 <dd><p>Box-plots displaying the global bias (i.e., signed error computed as the estimated value minus the true value)
 for each quantification method with respect to a given positive class.</p>
 <dl class="field-list simple">
@@ -1526,7 +1954,7 @@ for each experiment</p></li>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.plot.binary_diagonal">
-<span class="sig-prename descclassname"><span class="pre">quapy.plot.</span></span><span class="sig-name descname"><span class="pre">binary_diagonal</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">method_names</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">true_prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">estim_prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pos_class</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">title</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">show_std</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">legend</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">train_prev</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">savepath</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">method_order</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.plot.binary_diagonal" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.plot.</span></span><span class="sig-name descname"><span class="pre">binary_diagonal</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">method_names</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">true_prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">estim_prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pos_class</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">title</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">show_std</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">legend</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">train_prev</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">savepath</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">method_order</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/plot.html#binary_diagonal"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.plot.binary_diagonal" title="Link to this definition"></a></dt>
 <dd><p>The diagonal plot displays the predicted prevalence values (along the y-axis) as a function of the true prevalence
 values (along the x-axis). The optimal quantifier is described by the diagonal (0,0)-(1,1) of the plot (hence the
 name). It is convenient for binary quantification problems, though it can be used for multiclass problems by
@@ -1557,7 +1985,7 @@ listed in the legend and associated with matplotlib colors).</p></li>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.plot.brokenbar_supremacy_by_drift">
-<span class="sig-prename descclassname"><span class="pre">quapy.plot.</span></span><span class="sig-name descname"><span class="pre">brokenbar_supremacy_by_drift</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">method_names</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">true_prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">estim_prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tr_prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_bins</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">20</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">binning</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'isomerous'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">x_error</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'ae'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y_error</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'ae'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ttest_alpha</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.005</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tail_density_threshold</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.005</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">method_order</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">savepath</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.plot.brokenbar_supremacy_by_drift" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.plot.</span></span><span class="sig-name descname"><span class="pre">brokenbar_supremacy_by_drift</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">method_names</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">true_prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">estim_prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tr_prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_bins</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">20</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">binning</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'isomerous'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">x_error</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'ae'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y_error</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'ae'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ttest_alpha</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.005</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tail_density_threshold</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.005</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">method_order</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">savepath</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/plot.html#brokenbar_supremacy_by_drift"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.plot.brokenbar_supremacy_by_drift" title="Link to this definition"></a></dt>
 <dd><p>Displays (only) the top performing methods for different regions of the train-test shift in form of a broken
 bar chart, in which each method has bars only for those regions in which either one of the following conditions
 hold: (i) it is the best method (in average) for the bin, or (ii) it is not statistically significantly different
@@ -1599,7 +2027,7 @@ listed in the legend and associated with matplotlib colors).</p></li>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.plot.error_by_drift">
-<span class="sig-prename descclassname"><span class="pre">quapy.plot.</span></span><span class="sig-name descname"><span class="pre">error_by_drift</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">method_names</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">true_prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">estim_prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tr_prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_bins</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">20</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">error_name</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'ae'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">show_std</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">show_density</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">show_legend</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">logscale</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">title</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'Quantification</span> <span class="pre">error</span> <span class="pre">as</span> <span class="pre">a</span> <span class="pre">function</span> <span class="pre">of</span> <span class="pre">distribution</span> <span class="pre">shift'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">vlines</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">method_order</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">savepath</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.plot.error_by_drift" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.plot.</span></span><span class="sig-name descname"><span class="pre">error_by_drift</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">method_names</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">true_prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">estim_prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tr_prevs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_bins</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">20</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">error_name</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'ae'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">show_std</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">show_density</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">show_legend</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">logscale</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">title</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'Quantification</span> <span class="pre">error</span> <span class="pre">as</span> <span class="pre">a</span> <span class="pre">function</span> <span class="pre">of</span> <span class="pre">distribution</span> <span class="pre">shift'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">vlines</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">method_order</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">savepath</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/plot.html#error_by_drift"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.plot.error_by_drift" title="Link to this definition"></a></dt>
 <dd><p>Plots the error (along the x-axis, as measured in terms of <cite>error_name</cite>) as a function of the train-test shift
 (along the y-axis, as measured in terms of <a class="reference internal" href="#quapy.error.ae" title="quapy.error.ae"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quapy.error.ae()</span></code></a>). This plot is useful especially for multiclass
 problems, in which “diagonal plots” may be cumbersone, and in order to gain understanding about how methods
@@ -1631,12 +2059,474 @@ listed in the legend and associated with matplotlib colors).</p></li>
 </dl>
 </dd></dl>
 
+</section>
+<section id="module-quapy.protocol">
+<span id="quapy-protocol-module"></span><h2>quapy.protocol module<a class="headerlink" href="#module-quapy.protocol" title="Link to this heading"></a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="quapy.protocol.APP">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.protocol.</span></span><span class="sig-name descname"><span class="pre">APP</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">sample_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_prevalences</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">21</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">repeats</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">10</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">smooth_limits_epsilon</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sanity_check</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">10000</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'sample_prev'</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#APP"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.APP" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.protocol.AbstractStochasticSeededProtocol" title="quapy.protocol.AbstractStochasticSeededProtocol"><code class="xref py py-class docutils literal notranslate"><span class="pre">AbstractStochasticSeededProtocol</span></code></a>, <a class="reference internal" href="#quapy.protocol.OnLabelledCollectionProtocol" title="quapy.protocol.OnLabelledCollectionProtocol"><code class="xref py py-class docutils literal notranslate"><span class="pre">OnLabelledCollectionProtocol</span></code></a></p>
+<p>Implementation of the artificial prevalence protocol (APP).
+The APP consists of exploring a grid of prevalence values containing <cite>n_prevalences</cite> points (e.g.,
+[0, 0.05, 0.1, 0.15, …, 1], if <cite>n_prevalences=21</cite>), and generating all valid combinations of
+prevalence values for all classes (e.g., for 3 classes, samples with [0, 0, 1], [0, 0.05, 0.95], …,
+[1, 0, 0] prevalence values of size <cite>sample_size</cite> will be yielded). The number of samples for each valid
+combination of prevalence values is indicated by <cite>repeats</cite>.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>data</strong> – a <cite>LabelledCollection</cite> from which the samples will be drawn</p></li>
+<li><p><strong>sample_size</strong> – integer, number of instances in each sample; if None (default) then it is taken from
+qp.environ[“SAMPLE_SIZE”]. If this is not set, a ValueError exception is raised.</p></li>
+<li><p><strong>n_prevalences</strong> – the number of equidistant prevalence points to extract from the [0,1] interval for the
+grid (default is 21)</p></li>
+<li><p><strong>repeats</strong> – number of copies for each valid prevalence vector (default is 10)</p></li>
+<li><p><strong>smooth_limits_epsilon</strong> – the quantity to add and subtract to the limits 0 and 1</p></li>
+<li><p><strong>random_state</strong> – allows replicating samples across runs (default 0, meaning that the sequence of samples
+will be the same every time the protocol is called)</p></li>
+<li><p><strong>sanity_check</strong> – int, raises an exception warning the user that the number of examples to be generated exceed
+this number; set to None for skipping this check</p></li>
+<li><p><strong>return_type</strong> – set to “sample_prev” (default) to get the pairs of (sample, prevalence) at each iteration, or
+to “labelled_collection” to get instead instances of LabelledCollection</p></li>
+</ul>
+</dd>
+</dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.protocol.APP.prevalence_grid">
+<span class="sig-name descname"><span class="pre">prevalence_grid</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#APP.prevalence_grid"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.APP.prevalence_grid" title="Link to this definition"></a></dt>
+<dd><p>Generates vectors of prevalence values from an exhaustive grid of prevalence values. The
+number of prevalence values explored for each dimension depends on <cite>n_prevalences</cite>, so that, if, for example,
+<cite>n_prevalences=11</cite> then the prevalence values of the grid are taken from [0, 0.1, 0.2, …, 0.9, 1]. Only
+valid prevalence distributions are returned, i.e., vectors of prevalence values that sum up to 1. For each
+valid vector of prevalence values, <cite>repeat</cite> copies are returned. The vector of prevalence values can be
+implicit (by setting <cite>return_constrained_dim=False</cite>), meaning that the last dimension (which is constrained
+to 1 - sum of the rest) is not returned (note that, quite obviously, in this case the vector does not sum up to
+1). Note that this method is deterministic, i.e., there is no random sampling anywhere.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>a <cite>np.ndarray</cite> of shape <cite>(n, dimensions)</cite> if <cite>return_constrained_dim=True</cite> or of shape
+<cite>(n, dimensions-1)</cite> if <cite>return_constrained_dim=False</cite>, where <cite>n</cite> is the number of valid combinations found
+in the grid multiplied by <cite>repeat</cite></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.protocol.APP.sample">
+<span class="sig-name descname"><span class="pre">sample</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">index</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#APP.sample"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.APP.sample" title="Link to this definition"></a></dt>
+<dd><p>Realizes the sample given the index of the instances.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>index</strong> – indexes of the instances to select</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>an instance of <code class="xref py py-class docutils literal notranslate"><span class="pre">qp.data.LabelledCollection</span></code></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.protocol.APP.samples_parameters">
+<span class="sig-name descname"><span class="pre">samples_parameters</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#APP.samples_parameters"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.APP.samples_parameters" title="Link to this definition"></a></dt>
+<dd><p>Return all the necessary parameters to replicate the samples as according to the APP protocol.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>a list of indexes that realize the APP sampling</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.protocol.APP.total">
+<span class="sig-name descname"><span class="pre">total</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#APP.total"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.APP.total" title="Link to this definition"></a></dt>
+<dd><p>Returns the number of samples that will be generated</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>int</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="quapy.protocol.AbstractProtocol">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.protocol.</span></span><span class="sig-name descname"><span class="pre">AbstractProtocol</span></span><a class="reference internal" href="_modules/quapy/protocol.html#AbstractProtocol"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.AbstractProtocol" title="Link to this definition"></a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
+<p>Abstract parent class for sample generation protocols.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.protocol.AbstractProtocol.total">
+<span class="sig-name descname"><span class="pre">total</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#AbstractProtocol.total"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.AbstractProtocol.total" title="Link to this definition"></a></dt>
+<dd><p>Indicates the total number of samples that the protocol generates.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>The number of samples to generate if known, or <cite>None</cite> otherwise.</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="quapy.protocol.AbstractStochasticSeededProtocol">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.protocol.</span></span><span class="sig-name descname"><span class="pre">AbstractStochasticSeededProtocol</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#AbstractStochasticSeededProtocol"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.AbstractStochasticSeededProtocol" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.protocol.AbstractProtocol" title="quapy.protocol.AbstractProtocol"><code class="xref py py-class docutils literal notranslate"><span class="pre">AbstractProtocol</span></code></a></p>
+<p>An <cite>AbstractStochasticSeededProtocol</cite> is a protocol that generates, via any random procedure (e.g.,
+via random sampling), sequences of <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> samples.
+The protocol abstraction enforces
+the object to be instantiated using a seed, so that the sequence can be fully replicated.
+In order to make this functionality possible, the classes extending this abstraction need to
+implement only two functions, <a class="reference internal" href="#quapy.protocol.AbstractStochasticSeededProtocol.samples_parameters" title="quapy.protocol.AbstractStochasticSeededProtocol.samples_parameters"><code class="xref py py-meth docutils literal notranslate"><span class="pre">samples_parameters()</span></code></a> which generates all the parameters
+needed for extracting the samples, and <a class="reference internal" href="#quapy.protocol.AbstractStochasticSeededProtocol.sample" title="quapy.protocol.AbstractStochasticSeededProtocol.sample"><code class="xref py py-meth docutils literal notranslate"><span class="pre">sample()</span></code></a> that, given some parameters as input,
+deterministically generates a sample.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>random_state</strong> – the seed for allowing to replicate any sequence of samples. Default is 0, meaning that
+the sequence will be consistent every time the protocol is called.</p>
+</dd>
+</dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.protocol.AbstractStochasticSeededProtocol.collator">
+<span class="sig-name descname"><span class="pre">collator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">sample</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#AbstractStochasticSeededProtocol.collator"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.AbstractStochasticSeededProtocol.collator" title="Link to this definition"></a></dt>
+<dd><p>The collator prepares the sample to accommodate the desired output format before returning the output.
+This collator simply returns the sample as it is. Classes inheriting from this abstract class can
+implement their custom collators.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>sample</strong> – the sample to be returned</p></li>
+<li><p><strong>args</strong> – additional arguments</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>the sample adhering to a desired output format (in this case, the sample is returned as it is)</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py property">
+<dt class="sig sig-object py" id="quapy.protocol.AbstractStochasticSeededProtocol.random_state">
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">random_state</span></span><a class="headerlink" href="#quapy.protocol.AbstractStochasticSeededProtocol.random_state" title="Link to this definition"></a></dt>
+<dd></dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.protocol.AbstractStochasticSeededProtocol.sample">
+<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">sample</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">params</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#AbstractStochasticSeededProtocol.sample"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.AbstractStochasticSeededProtocol.sample" title="Link to this definition"></a></dt>
+<dd><p>Extract one sample determined by the given parameters</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>params</strong> – all the necessary parameters to generate a sample</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>one sample (the same sample has to be generated for the same parameters)</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.protocol.AbstractStochasticSeededProtocol.samples_parameters">
+<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">samples_parameters</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#AbstractStochasticSeededProtocol.samples_parameters"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.AbstractStochasticSeededProtocol.samples_parameters" title="Link to this definition"></a></dt>
+<dd><p>This function has to return all the necessary parameters to replicate the samples</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>a list of parameters, each of which serves to deterministically generate a sample</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="quapy.protocol.ArtificialPrevalenceProtocol">
+<span class="sig-prename descclassname"><span class="pre">quapy.protocol.</span></span><span class="sig-name descname"><span class="pre">ArtificialPrevalenceProtocol</span></span><a class="headerlink" href="#quapy.protocol.ArtificialPrevalenceProtocol" title="Link to this definition"></a></dt>
+<dd><p>alias of <a class="reference internal" href="#quapy.protocol.APP" title="quapy.protocol.APP"><code class="xref py py-class docutils literal notranslate"><span class="pre">APP</span></code></a></p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="quapy.protocol.DomainMixer">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.protocol.</span></span><span class="sig-name descname"><span class="pre">DomainMixer</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">domainA</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">domainB</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">sample_size</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">repeats</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevalence</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">mixture_points</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">11</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'sample_prev'</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#DomainMixer"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.DomainMixer" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.protocol.AbstractStochasticSeededProtocol" title="quapy.protocol.AbstractStochasticSeededProtocol"><code class="xref py py-class docutils literal notranslate"><span class="pre">AbstractStochasticSeededProtocol</span></code></a></p>
+<p>Generates mixtures of two domains (A and B) at controlled rates, but preserving the original class prevalence.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>domainA</strong> – one domain, an object of <code class="xref py py-class docutils literal notranslate"><span class="pre">qp.data.LabelledCollection</span></code></p></li>
+<li><p><strong>domainB</strong> – another domain, an object of <code class="xref py py-class docutils literal notranslate"><span class="pre">qp.data.LabelledCollection</span></code></p></li>
+<li><p><strong>sample_size</strong> – integer, the number of instances in each sample; if None (default) then it is taken from
+qp.environ[“SAMPLE_SIZE”]. If this is not set, a ValueError exception is raised.</p></li>
+<li><p><strong>repeats</strong> – int, number of samples to draw for every mixture rate</p></li>
+<li><p><strong>prevalence</strong> – the prevalence to preserv along the mixtures. If specified, should be an array containing
+one prevalence value (positive float) for each class and summing up to one. If not specified, the prevalence
+will be taken from the domain A (default).</p></li>
+<li><p><strong>mixture_points</strong> – an integer indicating the number of points to take from a linear scale (e.g., 21 will
+generate the mixture points [1, 0.95, 0.9, …, 0]), or the array of mixture values itself.
+the specific points</p></li>
+<li><p><strong>random_state</strong> – allows replicating samples across runs (default 0, meaning that the sequence of samples
+will be the same every time the protocol is called)</p></li>
+</ul>
+</dd>
+</dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.protocol.DomainMixer.sample">
+<span class="sig-name descname"><span class="pre">sample</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">indexes</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#DomainMixer.sample"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.DomainMixer.sample" title="Link to this definition"></a></dt>
+<dd><p>Realizes the sample given a pair of indexes of the instances from A and B.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>indexes</strong> – indexes of the instances to select from A and B</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>an instance of <code class="xref py py-class docutils literal notranslate"><span class="pre">qp.data.LabelledCollection</span></code></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.protocol.DomainMixer.samples_parameters">
+<span class="sig-name descname"><span class="pre">samples_parameters</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#DomainMixer.samples_parameters"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.DomainMixer.samples_parameters" title="Link to this definition"></a></dt>
+<dd><p>Return all the necessary parameters to replicate the samples as according to the this protocol.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>a list of zipped indexes (from A and B) that realize the sampling</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.protocol.DomainMixer.total">
+<span class="sig-name descname"><span class="pre">total</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#DomainMixer.total"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.DomainMixer.total" title="Link to this definition"></a></dt>
+<dd><p>Returns the number of samples that will be generated (equals to “repeats * mixture_points”)</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>int</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="quapy.protocol.IterateProtocol">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.protocol.</span></span><span class="sig-name descname"><span class="pre">IterateProtocol</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">samples:</span> <span class="pre">[&lt;class</span> <span class="pre">'quapy.data.base.LabelledCollection'&gt;]</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#IterateProtocol"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.IterateProtocol" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.protocol.AbstractProtocol" title="quapy.protocol.AbstractProtocol"><code class="xref py py-class docutils literal notranslate"><span class="pre">AbstractProtocol</span></code></a></p>
+<p>A very simple protocol which simply iterates over a list of previously generated samples</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>samples</strong> – a list of <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a></p>
+</dd>
+</dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.protocol.IterateProtocol.total">
+<span class="sig-name descname"><span class="pre">total</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#IterateProtocol.total"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.IterateProtocol.total" title="Link to this definition"></a></dt>
+<dd><p>Returns the number of samples in this protocol</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>int</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="quapy.protocol.NPP">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.protocol.</span></span><span class="sig-name descname"><span class="pre">NPP</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">sample_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">repeats</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'sample_prev'</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#NPP"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.NPP" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.protocol.AbstractStochasticSeededProtocol" title="quapy.protocol.AbstractStochasticSeededProtocol"><code class="xref py py-class docutils literal notranslate"><span class="pre">AbstractStochasticSeededProtocol</span></code></a>, <a class="reference internal" href="#quapy.protocol.OnLabelledCollectionProtocol" title="quapy.protocol.OnLabelledCollectionProtocol"><code class="xref py py-class docutils literal notranslate"><span class="pre">OnLabelledCollectionProtocol</span></code></a></p>
+<p>A generator of samples that implements the natural prevalence protocol (NPP). The NPP consists of drawing
+samples uniformly at random, therefore approximately preserving the natural prevalence of the collection.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>data</strong> – a <cite>LabelledCollection</cite> from which the samples will be drawn</p></li>
+<li><p><strong>sample_size</strong> – integer, the number of instances in each sample; if None (default) then it is taken from
+qp.environ[“SAMPLE_SIZE”]. If this is not set, a ValueError exception is raised.</p></li>
+<li><p><strong>repeats</strong> – the number of samples to generate. Default is 100.</p></li>
+<li><p><strong>random_state</strong> – allows replicating samples across runs (default 0, meaning that the sequence of samples
+will be the same every time the protocol is called)</p></li>
+<li><p><strong>return_type</strong> – set to “sample_prev” (default) to get the pairs of (sample, prevalence) at each iteration, or
+to “labelled_collection” to get instead instances of LabelledCollection</p></li>
+</ul>
+</dd>
+</dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.protocol.NPP.sample">
+<span class="sig-name descname"><span class="pre">sample</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">index</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#NPP.sample"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.NPP.sample" title="Link to this definition"></a></dt>
+<dd><p>Realizes the sample given the index of the instances.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>index</strong> – indexes of the instances to select</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>an instance of <code class="xref py py-class docutils literal notranslate"><span class="pre">qp.data.LabelledCollection</span></code></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.protocol.NPP.samples_parameters">
+<span class="sig-name descname"><span class="pre">samples_parameters</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#NPP.samples_parameters"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.NPP.samples_parameters" title="Link to this definition"></a></dt>
+<dd><p>Return all the necessary parameters to replicate the samples as according to the NPP protocol.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>a list of indexes that realize the NPP sampling</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.protocol.NPP.total">
+<span class="sig-name descname"><span class="pre">total</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#NPP.total"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.NPP.total" title="Link to this definition"></a></dt>
+<dd><p>Returns the number of samples that will be generated (equals to “repeats”)</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>int</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="quapy.protocol.NaturalPrevalenceProtocol">
+<span class="sig-prename descclassname"><span class="pre">quapy.protocol.</span></span><span class="sig-name descname"><span class="pre">NaturalPrevalenceProtocol</span></span><a class="headerlink" href="#quapy.protocol.NaturalPrevalenceProtocol" title="Link to this definition"></a></dt>
+<dd><p>alias of <a class="reference internal" href="#quapy.protocol.NPP" title="quapy.protocol.NPP"><code class="xref py py-class docutils literal notranslate"><span class="pre">NPP</span></code></a></p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="quapy.protocol.OnLabelledCollectionProtocol">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.protocol.</span></span><span class="sig-name descname"><span class="pre">OnLabelledCollectionProtocol</span></span><a class="reference internal" href="_modules/quapy/protocol.html#OnLabelledCollectionProtocol"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.OnLabelledCollectionProtocol" title="Link to this definition"></a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
+<p>Protocols that generate samples from a <code class="xref py py-class docutils literal notranslate"><span class="pre">qp.data.LabelledCollection</span></code> object.</p>
+<dl class="py attribute">
+<dt class="sig sig-object py" id="quapy.protocol.OnLabelledCollectionProtocol.RETURN_TYPES">
+<span class="sig-name descname"><span class="pre">RETURN_TYPES</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['sample_prev',</span> <span class="pre">'labelled_collection',</span> <span class="pre">'index']</span></em><a class="headerlink" href="#quapy.protocol.OnLabelledCollectionProtocol.RETURN_TYPES" title="Link to this definition"></a></dt>
+<dd></dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.protocol.OnLabelledCollectionProtocol.get_collator">
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">get_collator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">return_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'sample_prev'</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#OnLabelledCollectionProtocol.get_collator"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.OnLabelledCollectionProtocol.get_collator" title="Link to this definition"></a></dt>
+<dd><p>Returns a collator function, i.e., a function that prepares the yielded data</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>return_type</strong> – either ‘sample_prev’ (default) if the collator is requested to yield tuples of
+<cite>(sample, prevalence)</cite>, or ‘labelled_collection’ when it is requested to yield instances of
+<code class="xref py py-class docutils literal notranslate"><span class="pre">qp.data.LabelledCollection</span></code></p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>the collator function (a callable function that takes as input an instance of
+<code class="xref py py-class docutils literal notranslate"><span class="pre">qp.data.LabelledCollection</span></code>)</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.protocol.OnLabelledCollectionProtocol.get_labelled_collection">
+<span class="sig-name descname"><span class="pre">get_labelled_collection</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#OnLabelledCollectionProtocol.get_labelled_collection"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.OnLabelledCollectionProtocol.get_labelled_collection" title="Link to this definition"></a></dt>
+<dd><p>Returns the labelled collection on which this protocol acts.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>an object of type <code class="xref py py-class docutils literal notranslate"><span class="pre">qp.data.LabelledCollection</span></code></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.protocol.OnLabelledCollectionProtocol.on_preclassified_instances">
+<span class="sig-name descname"><span class="pre">on_preclassified_instances</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">pre_classifications</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">in_place</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#OnLabelledCollectionProtocol.on_preclassified_instances"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.OnLabelledCollectionProtocol.on_preclassified_instances" title="Link to this definition"></a></dt>
+<dd><p>Returns a copy of this protocol that acts on a modified version of the original
+<code class="xref py py-class docutils literal notranslate"><span class="pre">qp.data.LabelledCollection</span></code> in which the original instances have been replaced
+with the outputs of a classifier for each instance. (This is convenient for speeding-up
+the evaluation procedures for many samples, by pre-classifying the instances in advance.)</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>pre_classifications</strong> – the predictions issued by a classifier, typically an array-like
+with shape <cite>(n_instances,)</cite> when the classifier is a hard one, or with shape
+<cite>(n_instances, n_classes)</cite> when the classifier is a probabilistic one.</p></li>
+<li><p><strong>in_place</strong> – whether or not to apply the modification in-place or in a new copy (default).</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>a copy of this protocol</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="quapy.protocol.UPP">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.protocol.</span></span><span class="sig-name descname"><span class="pre">UPP</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">sample_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">repeats</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'sample_prev'</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#UPP"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.UPP" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.protocol.AbstractStochasticSeededProtocol" title="quapy.protocol.AbstractStochasticSeededProtocol"><code class="xref py py-class docutils literal notranslate"><span class="pre">AbstractStochasticSeededProtocol</span></code></a>, <a class="reference internal" href="#quapy.protocol.OnLabelledCollectionProtocol" title="quapy.protocol.OnLabelledCollectionProtocol"><code class="xref py py-class docutils literal notranslate"><span class="pre">OnLabelledCollectionProtocol</span></code></a></p>
+<p>A variant of <a class="reference internal" href="#quapy.protocol.APP" title="quapy.protocol.APP"><code class="xref py py-class docutils literal notranslate"><span class="pre">APP</span></code></a> that, instead of using a grid of equidistant prevalence values,
+relies on the Kraemer algorithm for sampling unit (k-1)-simplex uniformly at random, with
+k the number of classes. This protocol covers the entire range of prevalence values in a
+statistical sense, i.e., unlike APP there is no guarantee that it is covered precisely
+equally for all classes, but it is preferred in cases in which the number of possible
+combinations of the grid values of APP makes this endeavour intractable.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>data</strong> – a <cite>LabelledCollection</cite> from which the samples will be drawn</p></li>
+<li><p><strong>sample_size</strong> – integer, the number of instances in each sample; if None (default) then it is taken from
+qp.environ[“SAMPLE_SIZE”]. If this is not set, a ValueError exception is raised.</p></li>
+<li><p><strong>repeats</strong> – the number of samples to generate. Default is 100.</p></li>
+<li><p><strong>random_state</strong> – allows replicating samples across runs (default 0, meaning that the sequence of samples
+will be the same every time the protocol is called)</p></li>
+<li><p><strong>return_type</strong> – set to “sample_prev” (default) to get the pairs of (sample, prevalence) at each iteration, or
+to “labelled_collection” to get instead instances of LabelledCollection</p></li>
+</ul>
+</dd>
+</dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.protocol.UPP.sample">
+<span class="sig-name descname"><span class="pre">sample</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">index</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#UPP.sample"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.UPP.sample" title="Link to this definition"></a></dt>
+<dd><p>Realizes the sample given the index of the instances.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>index</strong> – indexes of the instances to select</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>an instance of <code class="xref py py-class docutils literal notranslate"><span class="pre">qp.data.LabelledCollection</span></code></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.protocol.UPP.samples_parameters">
+<span class="sig-name descname"><span class="pre">samples_parameters</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#UPP.samples_parameters"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.UPP.samples_parameters" title="Link to this definition"></a></dt>
+<dd><p>Return all the necessary parameters to replicate the samples as according to the UPP protocol.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>a list of indexes that realize the UPP sampling</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.protocol.UPP.total">
+<span class="sig-name descname"><span class="pre">total</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/protocol.html#UPP.total"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.protocol.UPP.total" title="Link to this definition"></a></dt>
+<dd><p>Returns the number of samples that will be generated (equals to “repeats”)</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>int</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="quapy.protocol.UniformPrevalenceProtocol">
+<span class="sig-prename descclassname"><span class="pre">quapy.protocol.</span></span><span class="sig-name descname"><span class="pre">UniformPrevalenceProtocol</span></span><a class="headerlink" href="#quapy.protocol.UniformPrevalenceProtocol" title="Link to this definition"></a></dt>
+<dd><p>alias of <a class="reference internal" href="#quapy.protocol.UPP" title="quapy.protocol.UPP"><code class="xref py py-class docutils literal notranslate"><span class="pre">UPP</span></code></a></p>
+</dd></dl>
+
 </section>
 <section id="module-quapy.util">
-<span id="quapy-util"></span><h2>quapy.util<a class="headerlink" href="#module-quapy.util" title="Permalink to this heading">¶</a></h2>
+<span id="quapy-util-module"></span><h2>quapy.util module<a class="headerlink" href="#module-quapy.util" title="Link to this heading"></a></h2>
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.util.EarlyStop">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.util.</span></span><span class="sig-name descname"><span class="pre">EarlyStop</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">patience</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lower_is_better</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.util.EarlyStop" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.util.</span></span><span class="sig-name descname"><span class="pre">EarlyStop</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">patience</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lower_is_better</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/util.html#EarlyStop"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.util.EarlyStop" title="Link to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 <p>A class implementing the early-stopping condition typically used for training neural networks.</p>
 <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">earlystop</span> <span class="o">=</span> <span class="n">EarlyStop</span><span class="p">(</span><span class="n">patience</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">lower_is_better</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
@@ -1673,7 +2563,7 @@ stopping condition. An instance of this class is <cite>callable</cite>, and is t
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.util.create_if_not_exist">
-<span class="sig-prename descclassname"><span class="pre">quapy.util.</span></span><span class="sig-name descname"><span class="pre">create_if_not_exist</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.util.create_if_not_exist" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.util.</span></span><span class="sig-name descname"><span class="pre">create_if_not_exist</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/util.html#create_if_not_exist"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.util.create_if_not_exist" title="Link to this definition"></a></dt>
 <dd><p>An alias to <cite>os.makedirs(path, exist_ok=True)</cite> that also returns the path. This is useful in cases like, e.g.:</p>
 <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">path</span> <span class="o">=</span> <span class="n">create_if_not_exist</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">dir</span><span class="p">,</span> <span class="n">subdir</span><span class="p">,</span> <span class="n">anotherdir</span><span class="p">))</span>
 </pre></div>
@@ -1690,7 +2580,7 @@ stopping condition. An instance of this class is <cite>callable</cite>, and is t
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.util.create_parent_dir">
-<span class="sig-prename descclassname"><span class="pre">quapy.util.</span></span><span class="sig-name descname"><span class="pre">create_parent_dir</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.util.create_parent_dir" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.util.</span></span><span class="sig-name descname"><span class="pre">create_parent_dir</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/util.html#create_parent_dir"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.util.create_parent_dir" title="Link to this definition"></a></dt>
 <dd><p>Creates the parent dir (if any) of a given path, if not exists. E.g., for <cite>./path/to/file.txt</cite>, the path <cite>./path/to</cite>
 is created.</p>
 <dl class="field-list simple">
@@ -1702,7 +2592,7 @@ is created.</p>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.util.download_file">
-<span class="sig-prename descclassname"><span class="pre">quapy.util.</span></span><span class="sig-name descname"><span class="pre">download_file</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">url</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">archive_filename</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.util.download_file" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.util.</span></span><span class="sig-name descname"><span class="pre">download_file</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">url</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">archive_filename</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/util.html#download_file"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.util.download_file" title="Link to this definition"></a></dt>
 <dd><p>Downloads a file from a url</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -1716,7 +2606,7 @@ is created.</p>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.util.download_file_if_not_exists">
-<span class="sig-prename descclassname"><span class="pre">quapy.util.</span></span><span class="sig-name descname"><span class="pre">download_file_if_not_exists</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">url</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">archive_filename</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.util.download_file_if_not_exists" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.util.</span></span><span class="sig-name descname"><span class="pre">download_file_if_not_exists</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">url</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">archive_filename</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/util.html#download_file_if_not_exists"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.util.download_file_if_not_exists" title="Link to this definition"></a></dt>
 <dd><p>Dowloads a function (using <a class="reference internal" href="#quapy.util.download_file" title="quapy.util.download_file"><code class="xref py py-meth docutils literal notranslate"><span class="pre">download_file()</span></code></a>) if the file does not exist.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -1730,7 +2620,7 @@ is created.</p>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.util.get_quapy_home">
-<span class="sig-prename descclassname"><span class="pre">quapy.util.</span></span><span class="sig-name descname"><span class="pre">get_quapy_home</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quapy.util.get_quapy_home" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.util.</span></span><span class="sig-name descname"><span class="pre">get_quapy_home</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/util.html#get_quapy_home"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.util.get_quapy_home" title="Link to this definition"></a></dt>
 <dd><p>Gets the home directory of QuaPy, i.e., the directory where QuaPy saves permanent data, such as dowloaded datasets.
 This directory is <cite>~/quapy_data</cite></p>
 <dl class="field-list simple">
@@ -1742,8 +2632,8 @@ This directory is <cite>~/quapy_data</cite></p>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.util.map_parallel">
-<span class="sig-prename descclassname"><span class="pre">quapy.util.</span></span><span class="sig-name descname"><span class="pre">map_parallel</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.util.map_parallel" title="Permalink to this definition">¶</a></dt>
-<dd><p>Applies func to n_jobs slices of args. E.g., if args is an array of 99 items and <a href="#id2"><span class="problematic" id="id3">`</span></a>n_jobs`=2, then
+<span class="sig-prename descclassname"><span class="pre">quapy.util.</span></span><span class="sig-name descname"><span class="pre">map_parallel</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/util.html#map_parallel"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.util.map_parallel" title="Link to this definition"></a></dt>
+<dd><p>Applies func to n_jobs slices of args. E.g., if args is an array of 99 items and n_jobs=2, then
 func is applied in two parallel processes to args[0:50] and to args[50:99]. func is a function
 that already works with a list of arguments.</p>
 <dl class="field-list simple">
@@ -1759,7 +2649,7 @@ that already works with a list of arguments.</p>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.util.parallel">
-<span class="sig-prename descclassname"><span class="pre">quapy.util.</span></span><span class="sig-name descname"><span class="pre">parallel</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">seed</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.util.parallel" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.util.</span></span><span class="sig-name descname"><span class="pre">parallel</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">seed</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">asarray</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">backend</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'loky'</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/util.html#parallel"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.util.parallel" title="Link to this definition"></a></dt>
 <dd><p>A wrapper of multiprocessing:</p>
 <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">Parallel</span><span class="p">(</span><span class="n">n_jobs</span><span class="o">=</span><span class="n">n_jobs</span><span class="p">)(</span>
 <span class="gp">&gt;&gt;&gt; </span>     <span class="n">delayed</span><span class="p">(</span><span class="n">func</span><span class="p">)(</span><span class="n">args_i</span><span class="p">)</span> <span class="k">for</span> <span class="n">args_i</span> <span class="ow">in</span> <span class="n">args</span>
@@ -1767,12 +2657,23 @@ that already works with a list of arguments.</p>
 </pre></div>
 </div>
 <p>that takes the <cite>quapy.environ</cite> variable as input silently.
-Seeds the child processes to ensure reproducibility when n_jobs&gt;1</p>
+Seeds the child processes to ensure reproducibility when n_jobs&gt;1.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>func</strong> – callable</p></li>
+<li><p><strong>args</strong> – args of func</p></li>
+<li><p><strong>seed</strong> – the numeric seed</p></li>
+<li><p><strong>asarray</strong> – set to True to return a np.ndarray instead of a list</p></li>
+<li><p><strong>backend</strong> – indicates the backend used for handling parallel works</p></li>
+</ul>
+</dd>
+</dl>
 </dd></dl>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.util.pickled_resource">
-<span class="sig-prename descclassname"><span class="pre">quapy.util.</span></span><span class="sig-name descname"><span class="pre">pickled_resource</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">pickle_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">generation_func</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">callable</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.util.pickled_resource" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.util.</span></span><span class="sig-name descname"><span class="pre">pickled_resource</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">pickle_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">generation_func</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">callable</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/util.html#pickled_resource"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.util.pickled_resource" title="Link to this definition"></a></dt>
 <dd><p>Allows for fast reuse of resources that are generated only once by calling generation_func(*args). The next times
 this function is invoked, it loads the pickled resource. Example:</p>
 <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">some_array</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>  <span class="c1"># a mock resource created with one parameter (`n`)</span>
@@ -1797,7 +2698,7 @@ this function is invoked, it loads the pickled resource. Example:</p>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.util.save_text_file">
-<span class="sig-prename descclassname"><span class="pre">quapy.util.</span></span><span class="sig-name descname"><span class="pre">save_text_file</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">text</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.util.save_text_file" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.util.</span></span><span class="sig-name descname"><span class="pre">save_text_file</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">text</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/util.html#save_text_file"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.util.save_text_file" title="Link to this definition"></a></dt>
 <dd><p>Saves a text file to disk, given its full path, and creates the parent directory if missing.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -1811,7 +2712,7 @@ this function is invoked, it loads the pickled resource. Example:</p>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.util.temp_seed">
-<span class="sig-prename descclassname"><span class="pre">quapy.util.</span></span><span class="sig-name descname"><span class="pre">temp_seed</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">random_state</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.util.temp_seed" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.util.</span></span><span class="sig-name descname"><span class="pre">temp_seed</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">random_state</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/util.html#temp_seed"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.util.temp_seed" title="Link to this definition"></a></dt>
 <dd><p>Can be used in a “with” context to set a temporal seed without modifying the outer numpy’s current state. E.g.:</p>
 <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">with</span> <span class="n">temp_seed</span><span class="p">(</span><span class="n">random_seed</span><span class="p">):</span>
 <span class="gp">&gt;&gt;&gt; </span> <span class="k">pass</span> <span class="c1"># do any computation depending on np.random functionality</span>
@@ -1824,128 +2725,65 @@ this function is invoked, it loads the pickled resource. Example:</p>
 </dl>
 </dd></dl>
 
-</section>
-<section id="subpackages">
-<h2>Subpackages<a class="headerlink" href="#subpackages" title="Permalink to this heading">¶</a></h2>
-<div class="toctree-wrapper compound">
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="quapy.classification.html">quapy.classification package</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="quapy.classification.html#submodules">Submodules</a></li>
-<li class="toctree-l2"><a class="reference internal" href="quapy.classification.html#quapy-classification-calibration">quapy.classification.calibration</a></li>
-<li class="toctree-l2"><a class="reference internal" href="quapy.classification.html#module-quapy.classification.methods">quapy.classification.methods</a></li>
-<li class="toctree-l2"><a class="reference internal" href="quapy.classification.html#module-quapy.classification.neural">quapy.classification.neural</a></li>
-<li class="toctree-l2"><a class="reference internal" href="quapy.classification.html#module-quapy.classification.svmperf">quapy.classification.svmperf</a></li>
-<li class="toctree-l2"><a class="reference internal" href="quapy.classification.html#module-quapy.classification">Module contents</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="quapy.data.html">quapy.data package</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="quapy.data.html#submodules">Submodules</a></li>
-<li class="toctree-l2"><a class="reference internal" href="quapy.data.html#module-quapy.data.base">quapy.data.base</a></li>
-<li class="toctree-l2"><a class="reference internal" href="quapy.data.html#module-quapy.data.datasets">quapy.data.datasets</a></li>
-<li class="toctree-l2"><a class="reference internal" href="quapy.data.html#module-quapy.data.preprocessing">quapy.data.preprocessing</a></li>
-<li class="toctree-l2"><a class="reference internal" href="quapy.data.html#module-quapy.data.reader">quapy.data.reader</a></li>
-<li class="toctree-l2"><a class="reference internal" href="quapy.data.html#module-quapy.data">Module contents</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="quapy.method.html">quapy.method package</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="quapy.method.html#submodules">Submodules</a></li>
-<li class="toctree-l2"><a class="reference internal" href="quapy.method.html#module-quapy.method.aggregative">quapy.method.aggregative</a></li>
-<li class="toctree-l2"><a class="reference internal" href="quapy.method.html#module-quapy.method.base">quapy.method.base</a></li>
-<li class="toctree-l2"><a class="reference internal" href="quapy.method.html#module-quapy.method.meta">quapy.method.meta</a></li>
-<li class="toctree-l2"><a class="reference internal" href="quapy.method.html#module-quapy.method.neural">quapy.method.neural</a></li>
-<li class="toctree-l2"><a class="reference internal" href="quapy.method.html#module-quapy.method.non_aggregative">quapy.method.non_aggregative</a></li>
-<li class="toctree-l2"><a class="reference internal" href="quapy.method.html#module-quapy.method">Module contents</a></li>
-</ul>
-</li>
-</ul>
+<dl class="py function">
+<dt class="sig sig-object py" id="quapy.util.timeout">
+<span class="sig-prename descclassname"><span class="pre">quapy.util.</span></span><span class="sig-name descname"><span class="pre">timeout</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">seconds</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/util.html#timeout"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.util.timeout" title="Link to this definition"></a></dt>
+<dd><p>Opens a context that will launch an exception if not closed after a given number of seconds</p>
+<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="n">start_msg</span><span class="p">,</span> <span class="n">end_msg</span><span class="p">):</span>
+<span class="gp">&gt;&gt;&gt; </span>    <span class="nb">print</span><span class="p">(</span><span class="n">start_msg</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span>    <span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span>    <span class="nb">print</span><span class="p">(</span><span class="n">end_msg</span><span class="p">)</span>
+<span class="go">&gt;&gt;&gt;</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="k">with</span> <span class="n">timeout</span><span class="p">(</span><span class="mi">1</span><span class="p">):</span>
+<span class="gp">&gt;&gt;&gt; </span>    <span class="n">func</span><span class="p">(</span><span class="s1">&#39;begin function&#39;</span><span class="p">,</span> <span class="s1">&#39;end function&#39;</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">Out</span><span class="p">[]</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">begin</span> <span class="n">function</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="ne">TimeoutError</span>
+</pre></div>
 </div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>seconds</strong> – number of seconds, set to &lt;=0 to ignore the timer</p>
+</dd>
+</dl>
+</dd></dl>
+
 </section>
 <section id="module-quapy">
-<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-quapy" title="Permalink to this heading">¶</a></h2>
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-quapy" title="Link to this heading"></a></h2>
 <p>QuaPy module for quantification</p>
 </section>
 </section>
 
 
-            <div class="clearer"></div>
+           </div>
           </div>
-        </div>
-      </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-  <div>
-    <h3><a href="index.html">Table of Contents</a></h3>
-    <ul>
-<li><a class="reference internal" href="#">quapy package</a><ul>
-<li><a class="reference internal" href="#submodules">Submodules</a></li>
-<li><a class="reference internal" href="#module-quapy.error">quapy.error</a></li>
-<li><a class="reference internal" href="#module-quapy.evaluation">quapy.evaluation</a></li>
-<li><a class="reference internal" href="#quapy-protocol">quapy.protocol</a></li>
-<li><a class="reference internal" href="#module-quapy.functional">quapy.functional</a></li>
-<li><a class="reference internal" href="#module-quapy.model_selection">quapy.model_selection</a></li>
-<li><a class="reference internal" href="#module-quapy.plot">quapy.plot</a></li>
-<li><a class="reference internal" href="#module-quapy.util">quapy.util</a></li>
-<li><a class="reference internal" href="#subpackages">Subpackages</a></li>
-<li><a class="reference internal" href="#module-quapy">Module contents</a></li>
-</ul>
-</li>
-</ul>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="modules.html" class="btn btn-neutral float-left" title="quapy" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="quapy.classification.html" class="btn btn-neutral float-right" title="quapy.classification package" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
 
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2024, Alejandro Moreo.</p>
   </div>
-  <div>
-    <h4>Previous topic</h4>
-    <p class="topless"><a href="modules.html"
-                          title="previous chapter">quapy</a></p>
-  </div>
-  <div>
-    <h4>Next topic</h4>
-    <p class="topless"><a href="quapy.classification.html"
-                          title="next chapter">quapy.classification package</a></p>
-  </div>
-  <div role="note" aria-label="source link">
-    <h3>This Page</h3>
-    <ul class="this-page-menu">
-      <li><a href="_sources/quapy.rst.txt"
-            rel="nofollow">Show Source</a></li>
-    </ul>
-   </div>
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Quick search</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
-      <input type="submit" value="Go" />
-    </form>
-    </div>
-</div>
-<script>document.getElementById('searchbox').style.display = "block"</script>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
         </div>
       </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             >index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="right" >
-          <a href="quapy.classification.html" title="quapy.classification package"
-             >next</a> |</li>
-        <li class="right" >
-          <a href="modules.html" title="quapy"
-             >previous</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-          <li class="nav-item nav-item-1"><a href="modules.html" >quapy</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">quapy package</a></li> 
-      </ul>
-    </div>
-    <div class="footer" role="contentinfo">
-        &#169; Copyright 2021, Alejandro Moreo.
-      Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
-    </div>
-  </body>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
 </html>
\ No newline at end of file
diff --git a/docs/build/html/quapy.method.html b/docs/build/html/quapy.method.html
index 7c3689c..4600719 100644
--- a/docs/build/html/quapy.method.html
+++ b/docs/build/html/quapy.method.html
@@ -1,67 +1,112 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" data-content_root="./">
+<head>
+  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
 
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>quapy.method package &mdash; QuaPy: A Python-based open-source framework for quantification 0.1.8 documentation</title>
+      <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=92fd9be5" />
+      <link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=19f00094" />
 
-<!doctype html>
-
-<html lang="en">
-  <head>
-    <meta charset="utf-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
-
-    <title>quapy.method package &#8212; QuaPy 0.1.7 documentation</title>
-    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
-    <link rel="stylesheet" type="text/css" href="_static/bizstyle.css" />
-    
-    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
-    <script src="_static/jquery.js"></script>
-    <script src="_static/underscore.js"></script>
-    <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
-    <script src="_static/doctools.js"></script>
-    <script src="_static/sphinx_highlight.js"></script>
-    <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
-    <script src="_static/bizstyle.js"></script>
+  
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script src="_static/jquery.js?v=5d32c60e"></script>
+        <script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
+        <script src="_static/documentation_options.js?v=22607128"></script>
+        <script src="_static/doctools.js?v=9a2dae69"></script>
+        <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+        <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
+    <script src="_static/js/theme.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
     <link rel="search" title="Search" href="search.html" />
-    <link rel="prev" title="quapy.data package" href="quapy.data.html" />
-    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
-    <!--[if lt IE 9]>
-    <script src="_static/css3-mediaqueries.js"></script>
-    <![endif]-->
-  </head><body>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             accesskey="I">index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="right" >
-          <a href="quapy.data.html" title="quapy.data package"
-             accesskey="P">previous</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-          <li class="nav-item nav-item-1"><a href="modules.html" >quapy</a> &#187;</li>
-          <li class="nav-item nav-item-2"><a href="quapy.html" accesskey="U">quapy package</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">quapy.method package</a></li> 
-      </ul>
-    </div>  
+    <link rel="next" title="quapy.tests package" href="quapy.tests.html" />
+    <link rel="prev" title="quapy.data package" href="quapy.data.html" /> 
+</head>
 
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          <div class="body" role="main">
-            
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+
+          
+          
+          <a href="index.html" class="icon icon-home">
+            QuaPy: A Python-based open-source framework for quantification
+          </a>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <ul class="current">
+<li class="toctree-l1 current"><a class="reference internal" href="modules.html">quapy</a><ul class="current">
+<li class="toctree-l2 current"><a class="reference internal" href="quapy.html">quapy package</a><ul class="current">
+<li class="toctree-l3 current"><a class="reference internal" href="quapy.html#subpackages">Subpackages</a><ul class="current">
+<li class="toctree-l4"><a class="reference internal" href="quapy.classification.html">quapy.classification package</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.data.html">quapy.data package</a></li>
+<li class="toctree-l4 current"><a class="current reference internal" href="#">quapy.method package</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quapy.tests.html">quapy.tests package</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#submodules">Submodules</a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.error">quapy.error module</a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.evaluation">quapy.evaluation module</a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.functional">quapy.functional module</a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.model_selection">quapy.model_selection module</a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.plot">quapy.plot module</a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.protocol">quapy.protocol module</a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy.util">quapy.util module</a></li>
+<li class="toctree-l3"><a class="reference internal" href="quapy.html#module-quapy">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">QuaPy: A Python-based open-source framework for quantification</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+          <li class="breadcrumb-item"><a href="modules.html">quapy</a></li>
+          <li class="breadcrumb-item"><a href="quapy.html">quapy package</a></li>
+      <li class="breadcrumb-item active">quapy.method package</li>
+      <li class="wy-breadcrumbs-aside">
+            <a href="_sources/quapy.method.rst.txt" rel="nofollow"> View page source</a>
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
   <section id="quapy-method-package">
-<h1>quapy.method package<a class="headerlink" href="#quapy-method-package" title="Permalink to this heading">¶</a></h1>
+<h1>quapy.method package<a class="headerlink" href="#quapy-method-package" title="Link to this heading"></a></h1>
 <section id="submodules">
-<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this heading">¶</a></h2>
+<h2>Submodules<a class="headerlink" href="#submodules" title="Link to this heading"></a></h2>
 </section>
 <section id="module-quapy.method.aggregative">
-<span id="quapy-method-aggregative"></span><h2>quapy.method.aggregative<a class="headerlink" href="#module-quapy.method.aggregative" title="Permalink to this heading">¶</a></h2>
+<span id="quapy-method-aggregative-module"></span><h2>quapy.method.aggregative module<a class="headerlink" href="#module-quapy.method.aggregative" title="Link to this heading"></a></h2>
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.method.aggregative.ACC">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">ACC</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.4</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.ACC" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.AggregativeQuantifier" title="quapy.method.aggregative.AggregativeQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeQuantifier</span></code></a></p>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">ACC</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">solver</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'minimize'</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#ACC"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.ACC" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.AggregativeCrispQuantifier" title="quapy.method.aggregative.AggregativeCrispQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeCrispQuantifier</span></code></a></p>
 <p><a class="reference external" href="https://link.springer.com/article/10.1007/s10618-008-0097-y">Adjusted Classify &amp; Count</a>,
 the “adjusted” variant of <a class="reference internal" href="#quapy.method.aggregative.CC" title="quapy.method.aggregative.CC"><code class="xref py py-class docutils literal notranslate"><span class="pre">CC</span></code></a>, that corrects the predictions of CC
 according to the <cite>misclassification rates</cite>.</p>
@@ -69,18 +114,31 @@ according to the <cite>misclassification rates</cite>.</p>
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
 <dd class="field-odd"><ul class="simple">
 <li><p><strong>classifier</strong> – a sklearn’s Estimator that generates a classifier</p></li>
-<li><p><strong>val_split</strong> – indicates the proportion of data to be used as a stratified held-out validation set in which the
-misclassification rates are to be estimated.
-This parameter can be indicated as a real value (between 0 and 1, default 0.4), representing a proportion of
-validation data, or as an integer, indicating that the misclassification rates should be estimated via
-<cite>k</cite>-fold cross validation (this integer stands for the number of folds <cite>k</cite>), or as a
-<a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> (the split itself).</p></li>
+<li><p><strong>val_split</strong> – specifies the data used for generating classifier predictions. This specification
+can be made as float in (0, 1) indicating the proportion of stratified held-out validation set to
+be extracted from the training set; or as an integer (default 5), indicating that the predictions
+are to be generated in a <cite>k</cite>-fold cross-validation manner (with this integer indicating the value
+for <cite>k</cite>); or as a collection defining the specific set of data to use for validation.
+Alternatively, this set can be specified at fit time by indicating the exact set of data
+on which the predictions are to be generated.</p></li>
+<li><p><strong>n_jobs</strong> – number of parallel workers</p></li>
+<li><p><strong>solver</strong> – indicates the method to be used for obtaining the final estimates. The choice
+‘exact’ comes down to solving the system of linear equations <span class="math notranslate nohighlight">\(Ax=B\)</span> where <cite>A</cite> is a
+matrix containing the class-conditional probabilities of the predictions (e.g., the tpr and fpr in
+binary) and <cite>B</cite> is the vector of prevalence values estimated via CC, as <span class="math notranslate nohighlight">\(x=A^{-1}B\)</span>. This solution
+might not exist for degenerated classifiers, in which case the method defaults to classify and count
+(i.e., does not attempt any adjustment).
+Another option is to search for the prevalence vector that minimizes the L2 norm of <span class="math notranslate nohighlight">\(|Ax-B|\)</span>. The latter
+is achieved by indicating solver=’minimize’. This one generally works better, and is the default parameter.
+More details about this can be consulted in <a class="reference external" href="https://lq-2022.github.io/proceedings/CompleteVolume.pdf">Bunse, M. “On Multi-Class Extensions of Adjusted Classify and
+Count”, on proceedings of the 2nd International Workshop on Learning to Quantify: Methods and Applications
+(LQ 2022), ECML/PKDD 2022, Grenoble (France)</a>.</p></li>
 </ul>
 </dd>
 </dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.aggregative.ACC.aggregate">
-<span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.ACC.aggregate" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#ACC.aggregate"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.ACC.aggregate" title="Link to this definition"></a></dt>
 <dd><p>Implements the aggregation of label predictions.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -93,50 +151,24 @@ validation data, or as an integer, indicating that the misclassification rates s
 </dd></dl>
 
 <dl class="py method">
-<dt class="sig sig-object py" id="quapy.method.aggregative.ACC.classify">
-<span class="sig-name descname"><span class="pre">classify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.ACC.classify" title="Permalink to this definition">¶</a></dt>
-<dd><p>Provides the label predictions for the given instances. The predictions should respect the format expected by
-<a class="reference internal" href="#quapy.method.aggregative.ACC.aggregate" title="quapy.method.aggregative.ACC.aggregate"><code class="xref py py-meth docutils literal notranslate"><span class="pre">aggregate()</span></code></a>, i.e., posterior probabilities for probabilistic quantifiers, or crisp predictions for
-non-probabilistic quantifiers</p>
+<dt class="sig sig-object py" id="quapy.method.aggregative.ACC.aggregation_fit">
+<span class="sig-name descname"><span class="pre">aggregation_fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#ACC.aggregation_fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.ACC.aggregation_fit" title="Link to this definition"></a></dt>
+<dd><p>Estimates the misclassification rates.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><p><strong>instances</strong> – array-like</p>
-</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p>np.ndarray of shape <cite>(n_instances,)</cite> with label predictions</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.method.aggregative.ACC.fit">
-<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">fit_classifier</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">float</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">int</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.ACC.fit" title="Permalink to this definition">¶</a></dt>
-<dd><p>Trains a ACC quantifier.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>data</strong> – the training set</p></li>
-<li><p><strong>fit_classifier</strong> – set to False to bypass the training (the learner is assumed to be already fit)</p></li>
-<li><p><strong>val_split</strong> – either a float in (0,1) indicating the proportion of training instances to use for
-validation (e.g., 0.3 for using 30% of the training set as validation data), or a LabelledCollection
-indicating the validation set itself, or an int indicating the number <cite>k</cite> of folds to be used in <cite>k</cite>-fold
-cross validation to estimate the parameters</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p>self</p>
+<dd class="field-odd"><p><strong>classif_predictions</strong> – classifier predictions with true labels</p>
 </dd>
 </dl>
 </dd></dl>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.aggregative.ACC.getPteCondEstim">
-<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">getPteCondEstim</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y_</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.ACC.getPteCondEstim" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">getPteCondEstim</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y_</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#ACC.getPteCondEstim"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.ACC.getPteCondEstim" title="Link to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.aggregative.ACC.solve_adjustment">
-<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">solve_adjustment</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">PteCondEstim</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_estim</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.ACC.solve_adjustment" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">solve_adjustment</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">PteCondEstim</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prevs_estim</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">solver</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'exact'</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#ACC.solve_adjustment"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.ACC.solve_adjustment" title="Link to this definition"></a></dt>
 <dd><p>Solves the system linear system <span class="math notranslate nohighlight">\(Ax = B\)</span> with <span class="math notranslate nohighlight">\(A\)</span> = <cite>PteCondEstim</cite> and <span class="math notranslate nohighlight">\(B\)</span> = <cite>prevs_estim</cite></p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -145,6 +177,9 @@ cross validation to estimate the parameters</p></li>
 of <span class="math notranslate nohighlight">\(P(y_i|y_j)\)</span>, that is, the probability that an instance that belongs to <span class="math notranslate nohighlight">\(y_j\)</span> ends up being
 classified as belonging to <span class="math notranslate nohighlight">\(y_i\)</span></p></li>
 <li><p><strong>prevs_estim</strong> – a <cite>np.ndarray</cite> of shape <cite>(n_classes,)</cite> with the class prevalence estimates</p></li>
+<li><p><strong>solver</strong> – indicates the method to use for solving the system of linear equations. Valid options are
+‘exact’ (tries to solve the system –may fail if the misclassificatin matrix has rank &lt; n_classes) or
+‘optim_minimize’ (minimizes a norm –always exists).</p></li>
 </ul>
 </dd>
 <dt class="field-even">Returns<span class="colon">:</span></dt>
@@ -157,30 +192,100 @@ classified as belonging to <span class="math notranslate nohighlight">\(y_i\)</s
 
 <dl class="py attribute">
 <dt class="sig sig-object py" id="quapy.method.aggregative.AdjustedClassifyAndCount">
-<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">AdjustedClassifyAndCount</span></span><a class="headerlink" href="#quapy.method.aggregative.AdjustedClassifyAndCount" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">AdjustedClassifyAndCount</span></span><a class="headerlink" href="#quapy.method.aggregative.AdjustedClassifyAndCount" title="Link to this definition"></a></dt>
 <dd><p>alias of <a class="reference internal" href="#quapy.method.aggregative.ACC" title="quapy.method.aggregative.ACC"><code class="xref py py-class docutils literal notranslate"><span class="pre">ACC</span></code></a></p>
 </dd></dl>
 
 <dl class="py class">
-<dt class="sig sig-object py" id="quapy.method.aggregative.AggregativeProbabilisticQuantifier">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">AggregativeProbabilisticQuantifier</span></span><a class="headerlink" href="#quapy.method.aggregative.AggregativeProbabilisticQuantifier" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.AggregativeQuantifier" title="quapy.method.aggregative.AggregativeQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeQuantifier</span></code></a></p>
-<p>Abstract class for quantification methods that base their estimations on the aggregation of posterior probabilities
-as returned by a probabilistic classifier. Aggregative Probabilistic Quantifiers thus extend Aggregative
-Quantifiers by implementing a _posterior_probabilities_ method returning values in [0,1] – the posterior
-probabilities.</p>
+<dt class="sig sig-object py" id="quapy.method.aggregative.AggregativeCrispQuantifier">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">AggregativeCrispQuantifier</span></span><a class="reference internal" href="_modules/quapy/method/aggregative.html#AggregativeCrispQuantifier"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.AggregativeCrispQuantifier" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.AggregativeQuantifier" title="quapy.method.aggregative.AggregativeQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeQuantifier</span></code></a>, <code class="xref py py-class docutils literal notranslate"><span class="pre">ABC</span></code></p>
+<p>Abstract class for quantification methods that base their estimations on the aggregation of crips decisions
+as returned by a hard classifier. Aggregative crisp quantifiers thus extend Aggregative
+Quantifiers by implementing specifications about crisp predictions.</p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="quapy.method.aggregative.AggregativeMedianEstimator">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">AggregativeMedianEstimator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">base_quantifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.method.aggregative.AggregativeQuantifier" title="quapy.method.aggregative.AggregativeQuantifier"><span class="pre">AggregativeQuantifier</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_grid</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#AggregativeMedianEstimator"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.AggregativeMedianEstimator" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method.base.BinaryQuantifier" title="quapy.method.base.BinaryQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">BinaryQuantifier</span></code></a></p>
+<p>This method is a meta-quantifier that returns, as the estimated class prevalence values, the median of the
+estimation returned by differently (hyper)parameterized base quantifiers.
+The median of unit-vectors is only guaranteed to be a unit-vector for n=2 dimensions,
+i.e., in cases of binary quantification.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>base_quantifier</strong> – the base, binary quantifier</p></li>
+<li><p><strong>random_state</strong> – a seed to be set before fitting any base quantifier (default None)</p></li>
+<li><p><strong>param_grid</strong> – the grid or parameters towards which the median will be computed</p></li>
+<li><p><strong>n_jobs</strong> – number of parllel workes</p></li>
+</ul>
+</dd>
+</dl>
 <dl class="py method">
-<dt class="sig sig-object py" id="quapy.method.aggregative.AggregativeProbabilisticQuantifier.classify">
-<span class="sig-name descname"><span class="pre">classify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.AggregativeProbabilisticQuantifier.classify" title="Permalink to this definition">¶</a></dt>
-<dd><p>Provides the label predictions for the given instances. The predictions should respect the format expected by
-<code class="xref py py-meth docutils literal notranslate"><span class="pre">aggregate()</span></code>, i.e., posterior probabilities for probabilistic quantifiers, or crisp predictions for
-non-probabilistic quantifiers</p>
+<dt class="sig sig-object py" id="quapy.method.aggregative.AggregativeMedianEstimator.fit">
+<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">training</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#AggregativeMedianEstimator.fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.AggregativeMedianEstimator.fit" title="Link to this definition"></a></dt>
+<dd><p>Trains a quantifier.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>data</strong> – a <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> consisting of the training data</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>self</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method.aggregative.AggregativeMedianEstimator.get_params">
+<span class="sig-name descname"><span class="pre">get_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">deep</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#AggregativeMedianEstimator.get_params"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.AggregativeMedianEstimator.get_params" title="Link to this definition"></a></dt>
+<dd><p>Get parameters for this estimator.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>deep</strong> (<em>bool</em><em>, </em><em>default=True</em>) – If True, will return the parameters for this estimator and
+contained subobjects that are estimators.</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p><strong>params</strong> – Parameter names mapped to their values.</p>
+</dd>
+<dt class="field-odd">Return type<span class="colon">:</span></dt>
+<dd class="field-odd"><p>dict</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method.aggregative.AggregativeMedianEstimator.quantify">
+<span class="sig-name descname"><span class="pre">quantify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#AggregativeMedianEstimator.quantify"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.AggregativeMedianEstimator.quantify" title="Link to this definition"></a></dt>
+<dd><p>Generate class prevalence estimates for the sample’s instances</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
 <dd class="field-odd"><p><strong>instances</strong> – array-like</p>
 </dd>
 <dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p>np.ndarray of shape <cite>(n_instances,)</cite> with label predictions</p>
+<dd class="field-even"><p><cite>np.ndarray</cite> of shape <cite>(n_classes,)</cite> with class prevalence estimates.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method.aggregative.AggregativeMedianEstimator.set_params">
+<span class="sig-name descname"><span class="pre">set_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">params</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#AggregativeMedianEstimator.set_params"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.AggregativeMedianEstimator.set_params" title="Link to this definition"></a></dt>
+<dd><p>Set the parameters of this estimator.</p>
+<p>The method works on simple estimators as well as on nested objects
+(such as <code class="xref py py-class docutils literal notranslate"><span class="pre">Pipeline</span></code>). The latter have
+parameters of the form <code class="docutils literal notranslate"><span class="pre">&lt;component&gt;__&lt;parameter&gt;</span></code> so that it’s
+possible to update each component of a nested object.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>**params</strong> (<em>dict</em>) – Estimator parameters.</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p><strong>self</strong> – Estimator instance.</p>
+</dd>
+<dt class="field-odd">Return type<span class="colon">:</span></dt>
+<dd class="field-odd"><p>estimator instance</p>
 </dd>
 </dl>
 </dd></dl>
@@ -189,16 +294,21 @@ non-probabilistic quantifiers</p>
 
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.method.aggregative.AggregativeQuantifier">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">AggregativeQuantifier</span></span><a class="headerlink" href="#quapy.method.aggregative.AggregativeQuantifier" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#quapy.method.base.BaseQuantifier" title="quapy.method.base.BaseQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">BaseQuantifier</span></code></a></p>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">AggregativeQuantifier</span></span><a class="reference internal" href="_modules/quapy/method/aggregative.html#AggregativeQuantifier"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.AggregativeQuantifier" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method.base.BaseQuantifier" title="quapy.method.base.BaseQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">BaseQuantifier</span></code></a>, <code class="xref py py-class docutils literal notranslate"><span class="pre">ABC</span></code></p>
 <p>Abstract class for quantification methods that base their estimations on the aggregation of classification
-results. Aggregative Quantifiers thus implement a <a class="reference internal" href="#quapy.method.aggregative.AggregativeQuantifier.classify" title="quapy.method.aggregative.AggregativeQuantifier.classify"><code class="xref py py-meth docutils literal notranslate"><span class="pre">classify()</span></code></a> method and maintain a <a class="reference internal" href="#quapy.method.aggregative.AggregativeQuantifier.classifier" title="quapy.method.aggregative.AggregativeQuantifier.classifier"><code class="xref py py-attr docutils literal notranslate"><span class="pre">classifier</span></code></a>
-attribute. Subclasses of this abstract class must implement the method <a class="reference internal" href="#quapy.method.aggregative.AggregativeQuantifier.aggregate" title="quapy.method.aggregative.AggregativeQuantifier.aggregate"><code class="xref py py-meth docutils literal notranslate"><span class="pre">aggregate()</span></code></a> which computes the
-aggregation of label predictions. The method <a class="reference internal" href="#quapy.method.aggregative.AggregativeQuantifier.quantify" title="quapy.method.aggregative.AggregativeQuantifier.quantify"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quantify()</span></code></a> comes with a default implementation based on
-<a class="reference internal" href="#quapy.method.aggregative.AggregativeQuantifier.classify" title="quapy.method.aggregative.AggregativeQuantifier.classify"><code class="xref py py-meth docutils literal notranslate"><span class="pre">classify()</span></code></a> and <a class="reference internal" href="#quapy.method.aggregative.AggregativeQuantifier.aggregate" title="quapy.method.aggregative.AggregativeQuantifier.aggregate"><code class="xref py py-meth docutils literal notranslate"><span class="pre">aggregate()</span></code></a>.</p>
+results. Aggregative quantifiers implement a pipeline that consists of generating classification predictions
+and aggregating them. For this reason, the training phase is implemented by <code class="xref py py-meth docutils literal notranslate"><span class="pre">classification_fit()</span></code> followed
+by <a class="reference internal" href="#quapy.method.aggregative.AggregativeQuantifier.aggregation_fit" title="quapy.method.aggregative.AggregativeQuantifier.aggregation_fit"><code class="xref py py-meth docutils literal notranslate"><span class="pre">aggregation_fit()</span></code></a>, while the testing phase is implemented by <a class="reference internal" href="#quapy.method.aggregative.AggregativeQuantifier.classify" title="quapy.method.aggregative.AggregativeQuantifier.classify"><code class="xref py py-meth docutils literal notranslate"><span class="pre">classify()</span></code></a> followed by
+<a class="reference internal" href="#quapy.method.aggregative.AggregativeQuantifier.aggregate" title="quapy.method.aggregative.AggregativeQuantifier.aggregate"><code class="xref py py-meth docutils literal notranslate"><span class="pre">aggregate()</span></code></a>. Subclasses of this abstract class must provide implementations for these methods.
+Aggregative quantifiers also maintain a <a class="reference internal" href="#quapy.method.aggregative.AggregativeQuantifier.classifier" title="quapy.method.aggregative.AggregativeQuantifier.classifier"><code class="xref py py-attr docutils literal notranslate"><span class="pre">classifier</span></code></a> attribute.</p>
+<p>The method <a class="reference internal" href="#quapy.method.aggregative.AggregativeQuantifier.fit" title="quapy.method.aggregative.AggregativeQuantifier.fit"><code class="xref py py-meth docutils literal notranslate"><span class="pre">fit()</span></code></a> comes with a default implementation based on <code class="xref py py-meth docutils literal notranslate"><span class="pre">classification_fit()</span></code>
+and <a class="reference internal" href="#quapy.method.aggregative.AggregativeQuantifier.aggregation_fit" title="quapy.method.aggregative.AggregativeQuantifier.aggregation_fit"><code class="xref py py-meth docutils literal notranslate"><span class="pre">aggregation_fit()</span></code></a>.</p>
+<p>The method <a class="reference internal" href="#quapy.method.aggregative.AggregativeQuantifier.quantify" title="quapy.method.aggregative.AggregativeQuantifier.quantify"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quantify()</span></code></a> comes with a default implementation based on <a class="reference internal" href="#quapy.method.aggregative.AggregativeQuantifier.classify" title="quapy.method.aggregative.AggregativeQuantifier.classify"><code class="xref py py-meth docutils literal notranslate"><span class="pre">classify()</span></code></a>
+and <a class="reference internal" href="#quapy.method.aggregative.AggregativeQuantifier.aggregate" title="quapy.method.aggregative.AggregativeQuantifier.aggregate"><code class="xref py py-meth docutils literal notranslate"><span class="pre">aggregate()</span></code></a>.</p>
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.aggregative.AggregativeQuantifier.aggregate">
-<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">ndarray</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.AggregativeQuantifier.aggregate" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">ndarray</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#AggregativeQuantifier.aggregate"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.AggregativeQuantifier.aggregate" title="Link to this definition"></a></dt>
 <dd><p>Implements the aggregation of label predictions.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -210,9 +320,24 @@ aggregation of label predictions. The method <a class="reference internal" href=
 </dl>
 </dd></dl>
 
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method.aggregative.AggregativeQuantifier.aggregation_fit">
+<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">aggregation_fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#AggregativeQuantifier.aggregation_fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.AggregativeQuantifier.aggregation_fit" title="Link to this definition"></a></dt>
+<dd><p>Trains the aggregation function.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>classif_predictions</strong> – a LabelledCollection containing the label predictions issued
+by the classifier</p></li>
+<li><p><strong>data</strong> – a <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> consisting of the training data</p></li>
+</ul>
+</dd>
+</dl>
+</dd></dl>
+
 <dl class="py property">
 <dt class="sig sig-object py" id="quapy.method.aggregative.AggregativeQuantifier.classes_">
-<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">classes_</span></span><a class="headerlink" href="#quapy.method.aggregative.AggregativeQuantifier.classes_" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">classes_</span></span><a class="headerlink" href="#quapy.method.aggregative.AggregativeQuantifier.classes_" title="Link to this definition"></a></dt>
 <dd><p>Class labels, in the same order in which class prevalence values are to be computed.
 This default implementation actually returns the class labels of the learner.</p>
 <dl class="field-list simple">
@@ -224,7 +349,7 @@ This default implementation actually returns the class labels of the learner.</p
 
 <dl class="py property">
 <dt class="sig sig-object py" id="quapy.method.aggregative.AggregativeQuantifier.classifier">
-<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">classifier</span></span><a class="headerlink" href="#quapy.method.aggregative.AggregativeQuantifier.classifier" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">classifier</span></span><a class="headerlink" href="#quapy.method.aggregative.AggregativeQuantifier.classifier" title="Link to this definition"></a></dt>
 <dd><p>Gives access to the classifier</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns<span class="colon">:</span></dt>
@@ -234,14 +359,36 @@ This default implementation actually returns the class labels of the learner.</p
 </dd></dl>
 
 <dl class="py method">
-<dt class="sig sig-object py" id="quapy.method.aggregative.AggregativeQuantifier.classify">
-<span class="sig-name descname"><span class="pre">classify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.AggregativeQuantifier.classify" title="Permalink to this definition">¶</a></dt>
-<dd><p>Provides the label predictions for the given instances. The predictions should respect the format expected by
-<a class="reference internal" href="#quapy.method.aggregative.AggregativeQuantifier.aggregate" title="quapy.method.aggregative.AggregativeQuantifier.aggregate"><code class="xref py py-meth docutils literal notranslate"><span class="pre">aggregate()</span></code></a>, i.e., posterior probabilities for probabilistic quantifiers, or crisp predictions for
-non-probabilistic quantifiers</p>
+<dt class="sig sig-object py" id="quapy.method.aggregative.AggregativeQuantifier.classifier_fit_predict">
+<span class="sig-name descname"><span class="pre">classifier_fit_predict</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">fit_classifier</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">predict_on</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#AggregativeQuantifier.classifier_fit_predict"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.AggregativeQuantifier.classifier_fit_predict" title="Link to this definition"></a></dt>
+<dd><p>Trains the classifier if requested (<cite>fit_classifier=True</cite>) and generate the necessary predictions to
+train the aggregation function.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><p><strong>instances</strong> – array-like</p>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>data</strong> – a <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> consisting of the training data</p></li>
+<li><p><strong>fit_classifier</strong> – whether to train the learner (default is True). Set to False if the
+learner has been trained outside the quantifier.</p></li>
+<li><p><strong>predict_on</strong> – specifies the set on which predictions need to be issued. This parameter can
+be specified as None (default) to indicate no prediction is needed; a float in (0, 1) to
+indicate the proportion of instances to be used for predictions (the remainder is used for
+training); an integer &gt;1 to indicate that the predictions must be generated via k-fold
+cross-validation, using this integer as k; or the data sample itself on which to generate
+the predictions.</p></li>
+</ul>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method.aggregative.AggregativeQuantifier.classify">
+<span class="sig-name descname"><span class="pre">classify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#AggregativeQuantifier.classify"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.AggregativeQuantifier.classify" title="Link to this definition"></a></dt>
+<dd><p>Provides the label predictions for the given instances. The predictions should respect the format expected by
+<a class="reference internal" href="#quapy.method.aggregative.AggregativeQuantifier.aggregate" title="quapy.method.aggregative.AggregativeQuantifier.aggregate"><code class="xref py py-meth docutils literal notranslate"><span class="pre">aggregate()</span></code></a>, e.g., posterior probabilities for probabilistic quantifiers, or crisp predictions for
+non-probabilistic quantifiers. The default one is “decision_function”.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>instances</strong> – array-like of shape <cite>(n_instances, n_features,)</cite></p>
 </dd>
 <dt class="field-even">Returns<span class="colon">:</span></dt>
 <dd class="field-even"><p>np.ndarray of shape <cite>(n_instances,)</cite> with label predictions</p>
@@ -251,13 +398,13 @@ non-probabilistic quantifiers</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.aggregative.AggregativeQuantifier.fit">
-<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">fit_classifier</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.AggregativeQuantifier.fit" title="Permalink to this definition">¶</a></dt>
-<dd><p>Trains the aggregative quantifier</p>
+<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">fit_classifier</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#AggregativeQuantifier.fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.AggregativeQuantifier.fit" title="Link to this definition"></a></dt>
+<dd><p>Trains the aggregative quantifier. This comes down to training a classifier and an aggregation function.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
 <dd class="field-odd"><ul class="simple">
 <li><p><strong>data</strong> – a <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> consisting of the training data</p></li>
-<li><p><strong>fit_classifier</strong> – whether or not to train the learner (default is True). Set to False if the
+<li><p><strong>fit_classifier</strong> – whether to train the learner (default is True). Set to False if the
 learner has been trained outside the quantifier.</p></li>
 </ul>
 </dd>
@@ -269,7 +416,7 @@ learner has been trained outside the quantifier.</p></li>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.aggregative.AggregativeQuantifier.quantify">
-<span class="sig-name descname"><span class="pre">quantify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.AggregativeQuantifier.quantify" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">quantify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#AggregativeQuantifier.quantify"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.AggregativeQuantifier.quantify" title="Link to this definition"></a></dt>
 <dd><p>Generate class prevalence estimates for the sample’s instances by aggregating the label predictions generated
 by the classifier.</p>
 <dl class="field-list simple">
@@ -282,12 +429,66 @@ by the classifier.</p>
 </dl>
 </dd></dl>
 
+<dl class="py property">
+<dt class="sig sig-object py" id="quapy.method.aggregative.AggregativeQuantifier.val_split">
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">val_split</span></span><a class="headerlink" href="#quapy.method.aggregative.AggregativeQuantifier.val_split" title="Link to this definition"></a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="quapy.method.aggregative.AggregativeQuantifier.val_split_">
+<span class="sig-name descname"><span class="pre">val_split_</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">None</span></em><a class="headerlink" href="#quapy.method.aggregative.AggregativeQuantifier.val_split_" title="Link to this definition"></a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="quapy.method.aggregative.AggregativeSoftQuantifier">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">AggregativeSoftQuantifier</span></span><a class="reference internal" href="_modules/quapy/method/aggregative.html#AggregativeSoftQuantifier"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.AggregativeSoftQuantifier" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.AggregativeQuantifier" title="quapy.method.aggregative.AggregativeQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeQuantifier</span></code></a>, <code class="xref py py-class docutils literal notranslate"><span class="pre">ABC</span></code></p>
+<p>Abstract class for quantification methods that base their estimations on the aggregation of posterior
+probabilities as returned by a probabilistic classifier.
+Aggregative soft quantifiers thus extend Aggregative Quantifiers by implementing specifications
+about soft predictions.</p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="quapy.method.aggregative.BinaryAggregativeQuantifier">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">BinaryAggregativeQuantifier</span></span><a class="reference internal" href="_modules/quapy/method/aggregative.html#BinaryAggregativeQuantifier"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.BinaryAggregativeQuantifier" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.AggregativeQuantifier" title="quapy.method.aggregative.AggregativeQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeQuantifier</span></code></a>, <a class="reference internal" href="#quapy.method.base.BinaryQuantifier" title="quapy.method.base.BinaryQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">BinaryQuantifier</span></code></a></p>
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method.aggregative.BinaryAggregativeQuantifier.fit">
+<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">fit_classifier</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#BinaryAggregativeQuantifier.fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.BinaryAggregativeQuantifier.fit" title="Link to this definition"></a></dt>
+<dd><p>Trains the aggregative quantifier. This comes down to training a classifier and an aggregation function.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>data</strong> – a <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> consisting of the training data</p></li>
+<li><p><strong>fit_classifier</strong> – whether to train the learner (default is True). Set to False if the
+learner has been trained outside the quantifier.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>self</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py property">
+<dt class="sig sig-object py" id="quapy.method.aggregative.BinaryAggregativeQuantifier.neg_label">
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">neg_label</span></span><a class="headerlink" href="#quapy.method.aggregative.BinaryAggregativeQuantifier.neg_label" title="Link to this definition"></a></dt>
+<dd></dd></dl>
+
+<dl class="py property">
+<dt class="sig sig-object py" id="quapy.method.aggregative.BinaryAggregativeQuantifier.pos_label">
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">pos_label</span></span><a class="headerlink" href="#quapy.method.aggregative.BinaryAggregativeQuantifier.pos_label" title="Link to this definition"></a></dt>
+<dd></dd></dl>
+
 </dd></dl>
 
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.method.aggregative.CC">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">CC</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.CC" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.AggregativeQuantifier" title="quapy.method.aggregative.AggregativeQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeQuantifier</span></code></a></p>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">CC</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#CC"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.CC" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.AggregativeCrispQuantifier" title="quapy.method.aggregative.AggregativeCrispQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeCrispQuantifier</span></code></a></p>
 <p>The most basic Quantification method. One that simply classifies all instances and counts how many have been
 attributed to each of the classes in order to compute class prevalence estimates.</p>
 <dl class="field-list simple">
@@ -297,7 +498,7 @@ attributed to each of the classes in order to compute class prevalence estimates
 </dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.aggregative.CC.aggregate">
-<span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">ndarray</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.CC.aggregate" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">ndarray</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#CC.aggregate"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.CC.aggregate" title="Link to this definition"></a></dt>
 <dd><p>Computes class prevalence estimates by counting the prevalence of each of the predicted labels.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -310,19 +511,12 @@ attributed to each of the classes in order to compute class prevalence estimates
 </dd></dl>
 
 <dl class="py method">
-<dt class="sig sig-object py" id="quapy.method.aggregative.CC.fit">
-<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">fit_classifier</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.CC.fit" title="Permalink to this definition">¶</a></dt>
-<dd><p>Trains the Classify &amp; Count method unless <cite>fit_classifier</cite> is False, in which case, the classifier is assumed to
-be already fit and there is nothing else to do.</p>
+<dt class="sig sig-object py" id="quapy.method.aggregative.CC.aggregation_fit">
+<span class="sig-name descname"><span class="pre">aggregation_fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#CC.aggregation_fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.CC.aggregation_fit" title="Link to this definition"></a></dt>
+<dd><p>Nothing to do here!</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>data</strong> – a <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> consisting of the training data</p></li>
-<li><p><strong>fit_classifier</strong> – if False, the classifier is assumed to be fit</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p>self</p>
+<dd class="field-odd"><p><strong>classif_predictions</strong> – this is actually None</p>
 </dd>
 </dl>
 </dd></dl>
@@ -331,38 +525,39 @@ be already fit and there is nothing else to do.</p>
 
 <dl class="py attribute">
 <dt class="sig sig-object py" id="quapy.method.aggregative.ClassifyAndCount">
-<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">ClassifyAndCount</span></span><a class="headerlink" href="#quapy.method.aggregative.ClassifyAndCount" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">ClassifyAndCount</span></span><a class="headerlink" href="#quapy.method.aggregative.ClassifyAndCount" title="Link to this definition"></a></dt>
 <dd><p>alias of <a class="reference internal" href="#quapy.method.aggregative.CC" title="quapy.method.aggregative.CC"><code class="xref py py-class docutils literal notranslate"><span class="pre">CC</span></code></a></p>
 </dd></dl>
 
 <dl class="py class">
-<dt class="sig sig-object py" id="quapy.method.aggregative.DistributionMatching">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">DistributionMatching</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.4</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nbins</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">8</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">divergence</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Callable</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'HD'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">cdf</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.DistributionMatching" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.AggregativeProbabilisticQuantifier" title="quapy.method.aggregative.AggregativeProbabilisticQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeProbabilisticQuantifier</span></code></a></p>
-<p>Generic Distribution Matching quantifier for binary or multiclass quantification.
-This implementation takes the number of bins, the divergence, and the possibility to work on CDF as hyperparameters.</p>
+<dt class="sig sig-object py" id="quapy.method.aggregative.DMy">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">DMy</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">nbins</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">8</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">divergence</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">Callable</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'HD'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">cdf</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">search</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'optim_minimize'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#DMy"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.DMy" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.AggregativeSoftQuantifier" title="quapy.method.aggregative.AggregativeSoftQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeSoftQuantifier</span></code></a></p>
+<p>Generic Distribution Matching quantifier for binary or multiclass quantification based on the space of posterior
+probabilities. This implementation takes the number of bins, the divergence, and the possibility to work on CDF
+as hyperparameters.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
 <dd class="field-odd"><ul class="simple">
 <li><p><strong>classifier</strong> – a <cite>sklearn</cite>’s Estimator that generates a probabilistic classifier</p></li>
 <li><p><strong>val_split</strong> – indicates the proportion of data to be used as a stratified held-out validation set to model the
 validation distribution.
-This parameter can be indicated as a real value (between 0 and 1, default 0.4), representing a proportion of
+This parameter can be indicated as a real value (between 0 and 1), representing a proportion of
 validation data, or as an integer, indicating that the validation distribution should be estimated via
-<cite>k</cite>-fold cross validation (this integer stands for the number of folds <cite>k</cite>), or as a
+<cite>k</cite>-fold cross validation (this integer stands for the number of folds <cite>k</cite>, defaults 5), or as a
 <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> (the split itself).</p></li>
 <li><p><strong>nbins</strong> – number of bins used to discretize the distributions (default 8)</p></li>
 <li><p><strong>divergence</strong> – a string representing a divergence measure (currently, “HD” and “topsoe” are implemented)
 or a callable function taking two ndarrays of the same dimension as input (default “HD”, meaning Hellinger
 Distance)</p></li>
-<li><p><strong>cdf</strong> – whether or not to use CDF instead of PDF (default False)</p></li>
+<li><p><strong>cdf</strong> – whether to use CDF instead of PDF (default False)</p></li>
 <li><p><strong>n_jobs</strong> – number of parallel workers (default None)</p></li>
 </ul>
 </dd>
 </dl>
 <dl class="py method">
-<dt class="sig sig-object py" id="quapy.method.aggregative.DistributionMatching.aggregate">
-<span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">posteriors</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">ndarray</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.DistributionMatching.aggregate" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="quapy.method.aggregative.DMy.aggregate">
+<span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">posteriors</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">ndarray</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#DMy.aggregate"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.DMy.aggregate" title="Link to this definition"></a></dt>
 <dd><p>Searches for the mixture model parameter (the sought prevalence values) that yields a validation distribution
 (the mixture) that best matches the test distribution, in terms of the divergence measure of choice.
 In the multiclass case, with <cite>n</cite> the number of classes, the test and mixture distributions contain
@@ -370,7 +565,7 @@ In the multiclass case, with <cite>n</cite> the number of classes, the test and
 independently. The matching is computed as an average of the divergence across all channels.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><p><strong>instances</strong> – instances in the sample</p>
+<dd class="field-odd"><p><strong>posteriors</strong> – posterior probabilities of the instances in the sample</p>
 </dd>
 <dt class="field-even">Returns<span class="colon">:</span></dt>
 <dd class="field-even"><p>a vector of class prevalence estimates</p>
@@ -379,12 +574,12 @@ independently. The matching is computed as an average of the divergence across a
 </dd></dl>
 
 <dl class="py method">
-<dt class="sig sig-object py" id="quapy.method.aggregative.DistributionMatching.fit">
-<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">fit_classifier</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">float</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.DistributionMatching.fit" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="quapy.method.aggregative.DMy.aggregation_fit">
+<span class="sig-name descname"><span class="pre">aggregation_fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#DMy.aggregation_fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.DMy.aggregation_fit" title="Link to this definition"></a></dt>
 <dd><p>Trains the classifier (if requested) and generates the validation distributions out of the training data.
 The validation distributions have shape <cite>(n, ch, nbins)</cite>, with <cite>n</cite> the number of classes, <cite>ch</cite> the number of
-channels, and <cite>nbins</cite> the number of bins. In particular, let <cite>V</cite> be the validation distributions; <cite>di=V[i]</cite>
-are the distributions obtained from training data labelled with class <cite>i</cite>; <cite>dij = di[j]</cite> is the discrete
+channels, and <cite>nbins</cite> the number of bins. In particular, let <cite>V</cite> be the validation distributions; then <cite>di=V[i]</cite>
+are the distributions obtained from training data labelled with class <cite>i</cite>; while <cite>dij = di[j]</cite> is the discrete
 distribution of posterior probabilities <cite>P(Y=j|X=x)</cite> for training data labelled with class <cite>i</cite>, and <cite>dij[k]</cite>
 is the fraction of instances with a value in the <cite>k</cite>-th bin.</p>
 <dl class="field-list simple">
@@ -403,10 +598,16 @@ to estimate the parameters</p></li>
 
 </dd></dl>
 
+<dl class="py attribute">
+<dt class="sig sig-object py" id="quapy.method.aggregative.DistributionMatchingY">
+<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">DistributionMatchingY</span></span><a class="headerlink" href="#quapy.method.aggregative.DistributionMatchingY" title="Link to this definition"></a></dt>
+<dd><p>alias of <a class="reference internal" href="#quapy.method.aggregative.DMy" title="quapy.method.aggregative.DMy"><code class="xref py py-class docutils literal notranslate"><span class="pre">DMy</span></code></a></p>
+</dd></dl>
+
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.method.aggregative.DyS">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">DyS</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.4</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_bins</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">8</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">divergence</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Callable</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'HD'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tol</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1e-05</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.DyS" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.AggregativeProbabilisticQuantifier" title="quapy.method.aggregative.AggregativeProbabilisticQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeProbabilisticQuantifier</span></code></a>, <a class="reference internal" href="#quapy.method.base.BinaryQuantifier" title="quapy.method.base.BinaryQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">BinaryQuantifier</span></code></a></p>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">DyS</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_bins</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">8</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">divergence</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">Callable</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'HD'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tol</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1e-05</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#DyS"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.DyS" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.AggregativeSoftQuantifier" title="quapy.method.aggregative.AggregativeSoftQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeSoftQuantifier</span></code></a>, <a class="reference internal" href="#quapy.method.aggregative.BinaryAggregativeQuantifier" title="quapy.method.aggregative.BinaryAggregativeQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">BinaryAggregativeQuantifier</span></code></a></p>
 <p><a class="reference external" href="https://ojs.aaai.org/index.php/AAAI/article/view/4376">DyS framework</a> (DyS).
 DyS is a generalization of HDy method, using a Ternary Search in order to find the prevalence that
 minimizes the distance between distributions.
@@ -416,17 +617,18 @@ Details for the ternary search have been got from &lt;<a class="reference extern
 <dd class="field-odd"><ul class="simple">
 <li><p><strong>classifier</strong> – a sklearn’s Estimator that generates a binary classifier</p></li>
 <li><p><strong>val_split</strong> – a float in range (0,1) indicating the proportion of data to be used as a stratified held-out
-validation distribution, or a <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> (the split itself).</p></li>
+validation distribution, or a <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> (the split itself), or an integer indicating the number of folds (default 5)..</p></li>
 <li><p><strong>n_bins</strong> – an int with the number of bins to use to compute the histograms.</p></li>
 <li><p><strong>divergence</strong> – a str indicating the name of divergence (currently supported ones are “HD” or “topsoe”), or a
 callable function computes the divergence between two distributions (two equally sized arrays).</p></li>
 <li><p><strong>tol</strong> – a float with the tolerance for the ternary search algorithm.</p></li>
+<li><p><strong>n_jobs</strong> – number of parallel workers.</p></li>
 </ul>
 </dd>
 </dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.aggregative.DyS.aggregate">
-<span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_posteriors</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.DyS.aggregate" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_posteriors</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#DyS.aggregate"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.DyS.aggregate" title="Link to this definition"></a></dt>
 <dd><p>Implements the aggregation of label predictions.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -439,20 +641,17 @@ callable function computes the divergence between two distributions (two equally
 </dd></dl>
 
 <dl class="py method">
-<dt class="sig sig-object py" id="quapy.method.aggregative.DyS.fit">
-<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">fit_classifier</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">float</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.DyS.fit" title="Permalink to this definition">¶</a></dt>
-<dd><p>Trains the aggregative quantifier</p>
+<dt class="sig sig-object py" id="quapy.method.aggregative.DyS.aggregation_fit">
+<span class="sig-name descname"><span class="pre">aggregation_fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#DyS.aggregation_fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.DyS.aggregation_fit" title="Link to this definition"></a></dt>
+<dd><p>Trains the aggregation function.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
 <dd class="field-odd"><ul class="simple">
+<li><p><strong>classif_predictions</strong> – a LabelledCollection containing the label predictions issued
+by the classifier</p></li>
 <li><p><strong>data</strong> – a <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> consisting of the training data</p></li>
-<li><p><strong>fit_classifier</strong> – whether or not to train the learner (default is True). Set to False if the
-learner has been trained outside the quantifier.</p></li>
 </ul>
 </dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p>self</p>
-</dd>
 </dl>
 </dd></dl>
 
@@ -460,30 +659,44 @@ learner has been trained outside the quantifier.</p></li>
 
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.method.aggregative.EMQ">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">EMQ</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">exact_train_prev</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">recalib</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.EMQ" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.AggregativeProbabilisticQuantifier" title="quapy.method.aggregative.AggregativeProbabilisticQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeProbabilisticQuantifier</span></code></a></p>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">EMQ</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">exact_train_prev</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">recalib</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#EMQ"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.EMQ" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.AggregativeSoftQuantifier" title="quapy.method.aggregative.AggregativeSoftQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeSoftQuantifier</span></code></a></p>
 <p><a class="reference external" href="https://ieeexplore.ieee.org/abstract/document/6789744">Expectation Maximization for Quantification</a> (EMQ),
 aka <cite>Saerens-Latinne-Decaestecker</cite> (SLD) algorithm.
 EMQ consists of using the well-known <cite>Expectation Maximization algorithm</cite> to iteratively update the posterior
 probabilities generated by a probabilistic classifier and the class prevalence estimates obtained via
 maximum-likelihood estimation, in a mutually recursive way, until convergence.</p>
+<p>This implementation also gives access to the heuristics proposed by <a class="reference external" href="http://proceedings.mlr.press/v119/alexandari20a.html">Alexandari et al. paper</a>. These heuristics consist of using, as the training
+prevalence, an estimate of it obtained via k-fold cross validation (instead of the true training prevalence),
+and to recalibrate the posterior probabilities of the classifier.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
 <dd class="field-odd"><ul class="simple">
 <li><p><strong>classifier</strong> – a sklearn’s Estimator that generates a classifier</p></li>
-<li><p><strong>exact_train_prev</strong> – set to True (default) for using, as the initial observation, the true training prevalence;
-or set to False for computing the training prevalence as an estimate, akin to PCC, i.e., as the expected
-value of the posterior probabilities of the training instances as suggested in
-<a class="reference external" href="http://proceedings.mlr.press/v119/alexandari20a.html">Alexandari et al. paper</a>:</p></li>
-<li><p><strong>recalib</strong> – a string indicating the method of recalibration. Available choices include “nbvs” (No-Bias Vector
-Scaling), “bcts” (Bias-Corrected Temperature Scaling), “ts” (Temperature Scaling), and “vs” (Vector Scaling).
-The default value is None, indicating no recalibration.</p></li>
+<li><p><strong>val_split</strong> – specifies the data used for generating classifier predictions. This specification
+can be made as float in (0, 1) indicating the proportion of stratified held-out validation set to
+be extracted from the training set; or as an integer, indicating that the predictions
+are to be generated in a <cite>k</cite>-fold cross-validation manner (with this integer indicating the value
+for <cite>k</cite>, default 5); or as a collection defining the specific set of data to use for validation.
+Alternatively, this set can be specified at fit time by indicating the exact set of data
+on which the predictions are to be generated. This hyperparameter is only meant to be used when the
+heuristics are to be applied, i.e., if a recalibration is required. The default value is None (meaning
+the recalibration is not required). In case this hyperparameter is set to a value other than None, but
+the recalibration is not required (recalib=None), a warning message will be raised.</p></li>
+<li><p><strong>exact_train_prev</strong> – set to True (default) for using the true training prevalence as the initial observation;
+set to False for computing the training prevalence as an estimate of it, i.e., as the expected
+value of the posterior probabilities of the training instances.</p></li>
+<li><p><strong>recalib</strong> – a string indicating the method of recalibration.
+Available choices include “nbvs” (No-Bias Vector Scaling), “bcts” (Bias-Corrected Temperature Scaling,
+default), “ts” (Temperature Scaling), and “vs” (Vector Scaling). Default is None (no recalibration).</p></li>
+<li><p><strong>n_jobs</strong> – number of parallel workers. Only used for recalibrating the classifier if <cite>val_split</cite> is set to
+an integer <cite>k</cite> –the number of folds.</p></li>
 </ul>
 </dd>
 </dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.aggregative.EMQ.EM">
-<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">EM</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tr_prev</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">posterior_probabilities</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">epsilon</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.0001</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.EMQ.EM" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">EM</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tr_prev</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">posterior_probabilities</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">epsilon</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.0001</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#EMQ.EM"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.EMQ.EM" title="Link to this definition"></a></dt>
 <dd><p>Computes the <cite>Expectation Maximization</cite> routine.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -502,19 +715,38 @@ the corrected posterior probabilities (shape <cite>(n_instances, n_classes,)</ci
 </dl>
 </dd></dl>
 
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method.aggregative.EMQ.EMQ_BCTS">
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">EMQ_BCTS</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#EMQ.EMQ_BCTS"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.EMQ.EMQ_BCTS" title="Link to this definition"></a></dt>
+<dd><p>Constructs an instance of EMQ using the best configuration found in the <a class="reference external" href="http://proceedings.mlr.press/v119/alexandari20a.html">Alexandari et al. paper</a>, i.e., one that relies on Bias-Corrected Temperature
+Scaling (BCTS) as a recalibration function, and that uses an estimate of the training prevalence instead of
+the true training prevalence.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>classifier</strong> – a sklearn’s Estimator that generates a classifier</p></li>
+<li><p><strong>n_jobs</strong> – number of parallel workers.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>An instance of EMQ with BCTS</p>
+</dd>
+</dl>
+</dd></dl>
+
 <dl class="py attribute">
 <dt class="sig sig-object py" id="quapy.method.aggregative.EMQ.EPSILON">
-<span class="sig-name descname"><span class="pre">EPSILON</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">0.0001</span></em><a class="headerlink" href="#quapy.method.aggregative.EMQ.EPSILON" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">EPSILON</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">0.0001</span></em><a class="headerlink" href="#quapy.method.aggregative.EMQ.EPSILON" title="Link to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py attribute">
 <dt class="sig sig-object py" id="quapy.method.aggregative.EMQ.MAX_ITER">
-<span class="sig-name descname"><span class="pre">MAX_ITER</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">1000</span></em><a class="headerlink" href="#quapy.method.aggregative.EMQ.MAX_ITER" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">MAX_ITER</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">1000</span></em><a class="headerlink" href="#quapy.method.aggregative.EMQ.MAX_ITER" title="Link to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.aggregative.EMQ.aggregate">
-<span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_posteriors</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">epsilon</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.0001</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.EMQ.aggregate" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_posteriors</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">epsilon</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.0001</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#EMQ.aggregate"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.EMQ.aggregate" title="Link to this definition"></a></dt>
 <dd><p>Implements the aggregation of label predictions.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -527,43 +759,67 @@ the corrected posterior probabilities (shape <cite>(n_instances, n_classes,)</ci
 </dd></dl>
 
 <dl class="py method">
-<dt class="sig sig-object py" id="quapy.method.aggregative.EMQ.fit">
-<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">fit_classifier</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.EMQ.fit" title="Permalink to this definition">¶</a></dt>
-<dd><p>Trains the aggregative quantifier</p>
+<dt class="sig sig-object py" id="quapy.method.aggregative.EMQ.aggregation_fit">
+<span class="sig-name descname"><span class="pre">aggregation_fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#EMQ.aggregation_fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.EMQ.aggregation_fit" title="Link to this definition"></a></dt>
+<dd><p>Trains the aggregation function.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
 <dd class="field-odd"><ul class="simple">
+<li><p><strong>classif_predictions</strong> – a LabelledCollection containing the label predictions issued
+by the classifier</p></li>
 <li><p><strong>data</strong> – a <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> consisting of the training data</p></li>
-<li><p><strong>fit_classifier</strong> – whether or not to train the learner (default is True). Set to False if the
-learner has been trained outside the quantifier.</p></li>
 </ul>
 </dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method.aggregative.EMQ.classify">
+<span class="sig-name descname"><span class="pre">classify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#EMQ.classify"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.EMQ.classify" title="Link to this definition"></a></dt>
+<dd><p>Provides the posterior probabilities for the given instances. If the classifier was required
+to be recalibrated, then these posteriors are recalibrated accordingly.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>instances</strong> – array-like of shape <cite>(n_instances, n_dimensions,)</cite></p>
+</dd>
 <dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p>self</p>
+<dd class="field-even"><p>np.ndarray of shape <cite>(n_instances, n_classes,)</cite> with posterior probabilities</p>
 </dd>
 </dl>
 </dd></dl>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.aggregative.EMQ.predict_proba">
-<span class="sig-name descname"><span class="pre">predict_proba</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">epsilon</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.0001</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.EMQ.predict_proba" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
+<span class="sig-name descname"><span class="pre">predict_proba</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">epsilon</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.0001</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#EMQ.predict_proba"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.EMQ.predict_proba" title="Link to this definition"></a></dt>
+<dd><p>Returns the posterior probabilities updated by the EM algorithm.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>instances</strong> – np.ndarray of shape <cite>(n_instances, n_dimensions)</cite></p></li>
+<li><p><strong>epsilon</strong> – error tolerance</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>np.ndarray of shape <cite>(n_instances, n_classes)</cite></p>
+</dd>
+</dl>
+</dd></dl>
 
 </dd></dl>
 
 <dl class="py attribute">
 <dt class="sig sig-object py" id="quapy.method.aggregative.ExpectationMaximizationQuantifier">
-<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">ExpectationMaximizationQuantifier</span></span><a class="headerlink" href="#quapy.method.aggregative.ExpectationMaximizationQuantifier" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">ExpectationMaximizationQuantifier</span></span><a class="headerlink" href="#quapy.method.aggregative.ExpectationMaximizationQuantifier" title="Link to this definition"></a></dt>
 <dd><p>alias of <a class="reference internal" href="#quapy.method.aggregative.EMQ" title="quapy.method.aggregative.EMQ"><code class="xref py py-class docutils literal notranslate"><span class="pre">EMQ</span></code></a></p>
 </dd></dl>
 
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.method.aggregative.HDy">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">HDy</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.4</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.HDy" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.AggregativeProbabilisticQuantifier" title="quapy.method.aggregative.AggregativeProbabilisticQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeProbabilisticQuantifier</span></code></a>, <a class="reference internal" href="#quapy.method.base.BinaryQuantifier" title="quapy.method.base.BinaryQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">BinaryQuantifier</span></code></a></p>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">HDy</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#HDy"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.HDy" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.AggregativeSoftQuantifier" title="quapy.method.aggregative.AggregativeSoftQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeSoftQuantifier</span></code></a>, <a class="reference internal" href="#quapy.method.aggregative.BinaryAggregativeQuantifier" title="quapy.method.aggregative.BinaryAggregativeQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">BinaryAggregativeQuantifier</span></code></a></p>
 <p><a class="reference external" href="https://www.sciencedirect.com/science/article/pii/S0020025512004069">Hellinger Distance y</a> (HDy).
 HDy is a probabilistic method for training binary quantifiers, that models quantification as the problem of
-minimizing the divergence (in terms of the Hellinger Distance) between two cumulative distributions of posterior
+minimizing the divergence (in terms of the Hellinger Distance) between two distributions of posterior
 probabilities returned by the classifier. One of the distributions is generated from the unlabelled examples and
 the other is generated from a validation set. This latter distribution is defined as a mixture of the
 class-conditional distributions of the posterior probabilities returned for the positive and negative validation
@@ -573,13 +829,13 @@ examples, respectively. The parameters of the mixture thus represent the estimat
 <dd class="field-odd"><ul class="simple">
 <li><p><strong>classifier</strong> – a sklearn’s Estimator that generates a binary classifier</p></li>
 <li><p><strong>val_split</strong> – a float in range (0,1) indicating the proportion of data to be used as a stratified held-out
-validation distribution, or a <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> (the split itself).</p></li>
+validation distribution, or a <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> (the split itself), or an integer indicating the number of folds (default 5)..</p></li>
 </ul>
 </dd>
 </dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.aggregative.HDy.aggregate">
-<span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_posteriors</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.HDy.aggregate" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_posteriors</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#HDy.aggregate"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.HDy.aggregate" title="Link to this definition"></a></dt>
 <dd><p>Implements the aggregation of label predictions.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -592,8 +848,8 @@ validation distribution, or a <a class="reference internal" href="quapy.data.htm
 </dd></dl>
 
 <dl class="py method">
-<dt class="sig sig-object py" id="quapy.method.aggregative.HDy.fit">
-<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">fit_classifier</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">float</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.HDy.fit" title="Permalink to this definition">¶</a></dt>
+<dt class="sig sig-object py" id="quapy.method.aggregative.HDy.aggregation_fit">
+<span class="sig-name descname"><span class="pre">aggregation_fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#HDy.aggregation_fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.HDy.aggregation_fit" title="Link to this definition"></a></dt>
 <dd><p>Trains a HDy quantifier.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -615,98 +871,13 @@ validation (e.g., 0.3 for using 30% of the training set as validation data), or
 
 <dl class="py attribute">
 <dt class="sig sig-object py" id="quapy.method.aggregative.HellingerDistanceY">
-<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">HellingerDistanceY</span></span><a class="headerlink" href="#quapy.method.aggregative.HellingerDistanceY" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">HellingerDistanceY</span></span><a class="headerlink" href="#quapy.method.aggregative.HellingerDistanceY" title="Link to this definition"></a></dt>
 <dd><p>alias of <a class="reference internal" href="#quapy.method.aggregative.HDy" title="quapy.method.aggregative.HDy"><code class="xref py py-class docutils literal notranslate"><span class="pre">HDy</span></code></a></p>
 </dd></dl>
 
-<dl class="py class">
-<dt class="sig sig-object py" id="quapy.method.aggregative.MAX">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">MAX</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.4</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.MAX" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.ThresholdOptimization" title="quapy.method.aggregative.ThresholdOptimization"><code class="xref py py-class docutils literal notranslate"><span class="pre">ThresholdOptimization</span></code></a></p>
-<p>Threshold Optimization variant for <a class="reference internal" href="#quapy.method.aggregative.ACC" title="quapy.method.aggregative.ACC"><code class="xref py py-class docutils literal notranslate"><span class="pre">ACC</span></code></a> as proposed by
-<a class="reference external" href="https://dl.acm.org/doi/abs/10.1145/1150402.1150423">Forman 2006</a> and
-<a class="reference external" href="https://link.springer.com/article/10.1007/s10618-008-0097-y">Forman 2008</a> that looks
-for the threshold that maximizes <cite>tpr-fpr</cite>.
-The goal is to bring improved stability to the denominator of the adjustment.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>classifier</strong> – a sklearn’s Estimator that generates a classifier</p></li>
-<li><p><strong>val_split</strong> – indicates the proportion of data to be used as a stratified held-out validation set in which the
-misclassification rates are to be estimated.
-This parameter can be indicated as a real value (between 0 and 1, default 0.4), representing a proportion of
-validation data, or as an integer, indicating that the misclassification rates should be estimated via
-<cite>k</cite>-fold cross validation (this integer stands for the number of folds <cite>k</cite>), or as a
-<a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> (the split itself).</p></li>
-</ul>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py class">
-<dt class="sig sig-object py" id="quapy.method.aggregative.MS">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">MS</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.4</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.MS" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.ThresholdOptimization" title="quapy.method.aggregative.ThresholdOptimization"><code class="xref py py-class docutils literal notranslate"><span class="pre">ThresholdOptimization</span></code></a></p>
-<p>Median Sweep. Threshold Optimization variant for <a class="reference internal" href="#quapy.method.aggregative.ACC" title="quapy.method.aggregative.ACC"><code class="xref py py-class docutils literal notranslate"><span class="pre">ACC</span></code></a> as proposed by
-<a class="reference external" href="https://dl.acm.org/doi/abs/10.1145/1150402.1150423">Forman 2006</a> and
-<a class="reference external" href="https://link.springer.com/article/10.1007/s10618-008-0097-y">Forman 2008</a> that generates
-class prevalence estimates for all decision thresholds and returns the median of them all.
-The goal is to bring improved stability to the denominator of the adjustment.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>classifier</strong> – a sklearn’s Estimator that generates a classifier</p></li>
-<li><p><strong>val_split</strong> – indicates the proportion of data to be used as a stratified held-out validation set in which the
-misclassification rates are to be estimated.
-This parameter can be indicated as a real value (between 0 and 1, default 0.4), representing a proportion of
-validation data, or as an integer, indicating that the misclassification rates should be estimated via
-<cite>k</cite>-fold cross validation (this integer stands for the number of folds <cite>k</cite>), or as a
-<a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> (the split itself).</p></li>
-</ul>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py class">
-<dt class="sig sig-object py" id="quapy.method.aggregative.MS2">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">MS2</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.4</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.MS2" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.MS" title="quapy.method.aggregative.MS"><code class="xref py py-class docutils literal notranslate"><span class="pre">MS</span></code></a></p>
-<p>Median Sweep 2. Threshold Optimization variant for <a class="reference internal" href="#quapy.method.aggregative.ACC" title="quapy.method.aggregative.ACC"><code class="xref py py-class docutils literal notranslate"><span class="pre">ACC</span></code></a> as proposed by
-<a class="reference external" href="https://dl.acm.org/doi/abs/10.1145/1150402.1150423">Forman 2006</a> and
-<a class="reference external" href="https://link.springer.com/article/10.1007/s10618-008-0097-y">Forman 2008</a> that generates
-class prevalence estimates for all decision thresholds and returns the median of for cases in
-which <cite>tpr-fpr&gt;0.25</cite>
-The goal is to bring improved stability to the denominator of the adjustment.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>classifier</strong> – a sklearn’s Estimator that generates a classifier</p></li>
-<li><p><strong>val_split</strong> – indicates the proportion of data to be used as a stratified held-out validation set in which the
-misclassification rates are to be estimated.
-This parameter can be indicated as a real value (between 0 and 1, default 0.4), representing a proportion of
-validation data, or as an integer, indicating that the misclassification rates should be estimated via
-<cite>k</cite>-fold cross validation (this integer stands for the number of folds <cite>k</cite>), or as a
-<a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> (the split itself).</p></li>
-</ul>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py attribute">
-<dt class="sig sig-object py" id="quapy.method.aggregative.MedianSweep">
-<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">MedianSweep</span></span><a class="headerlink" href="#quapy.method.aggregative.MedianSweep" title="Permalink to this definition">¶</a></dt>
-<dd><p>alias of <a class="reference internal" href="#quapy.method.aggregative.MS" title="quapy.method.aggregative.MS"><code class="xref py py-class docutils literal notranslate"><span class="pre">MS</span></code></a></p>
-</dd></dl>
-
-<dl class="py attribute">
-<dt class="sig sig-object py" id="quapy.method.aggregative.MedianSweep2">
-<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">MedianSweep2</span></span><a class="headerlink" href="#quapy.method.aggregative.MedianSweep2" title="Permalink to this definition">¶</a></dt>
-<dd><p>alias of <a class="reference internal" href="#quapy.method.aggregative.MS2" title="quapy.method.aggregative.MS2"><code class="xref py py-class docutils literal notranslate"><span class="pre">MS2</span></code></a></p>
-</dd></dl>
-
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.method.aggregative.OneVsAllAggregative">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">OneVsAllAggregative</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">binary_quantifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">parallel_backend</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'multiprocessing'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.OneVsAllAggregative" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">OneVsAllAggregative</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">binary_quantifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">parallel_backend</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'multiprocessing'</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#OneVsAllAggregative"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.OneVsAllAggregative" title="Link to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#quapy.method.base.OneVsAllGeneric" title="quapy.method.base.OneVsAllGeneric"><code class="xref py py-class docutils literal notranslate"><span class="pre">OneVsAllGeneric</span></code></a>, <a class="reference internal" href="#quapy.method.aggregative.AggregativeQuantifier" title="quapy.method.aggregative.AggregativeQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeQuantifier</span></code></a></p>
 <p>Allows any binary quantifier to perform quantification on single-label datasets.
 The method maintains one binary quantifier for each class, and then l1-normalizes the outputs so that the
@@ -727,7 +898,7 @@ is removed and no longer available at predict time.</p></li>
 </dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.aggregative.OneVsAllAggregative.aggregate">
-<span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.OneVsAllAggregative.aggregate" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#OneVsAllAggregative.aggregate"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.OneVsAllAggregative.aggregate" title="Link to this definition"></a></dt>
 <dd><p>Implements the aggregation of label predictions.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -741,7 +912,7 @@ is removed and no longer available at predict time.</p></li>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.aggregative.OneVsAllAggregative.classify">
-<span class="sig-name descname"><span class="pre">classify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.OneVsAllAggregative.classify" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">classify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#OneVsAllAggregative.classify"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.OneVsAllAggregative.classify" title="Link to this definition"></a></dt>
 <dd><p>If the base quantifier is not probabilistic, returns a matrix of shape <cite>(n,m,)</cite> with <cite>n</cite> the number of
 instances and <cite>m</cite> the number of classes. The entry <cite>(i,j)</cite> is a binary value indicating whether instance
 <cite>i `belongs to class `j</cite>. The binary classifications are independent of each other, meaning that an instance
@@ -764,27 +935,39 @@ probabilities are independent of each other, meaning that, in general, they do n
 
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.method.aggregative.PACC">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">PACC</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.4</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.PACC" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.AggregativeProbabilisticQuantifier" title="quapy.method.aggregative.AggregativeProbabilisticQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeProbabilisticQuantifier</span></code></a></p>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">PACC</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">solver</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'minimize'</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#PACC"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.PACC" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.AggregativeSoftQuantifier" title="quapy.method.aggregative.AggregativeSoftQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeSoftQuantifier</span></code></a></p>
 <p><a class="reference external" href="https://ieeexplore.ieee.org/abstract/document/5694031">Probabilistic Adjusted Classify &amp; Count</a>,
 the probabilistic variant of ACC that relies on the posterior probabilities returned by a probabilistic classifier.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
 <dd class="field-odd"><ul class="simple">
 <li><p><strong>classifier</strong> – a sklearn’s Estimator that generates a classifier</p></li>
-<li><p><strong>val_split</strong> – indicates the proportion of data to be used as a stratified held-out validation set in which the
-misclassification rates are to be estimated.
-This parameter can be indicated as a real value (between 0 and 1, default 0.4), representing a proportion of
-validation data, or as an integer, indicating that the misclassification rates should be estimated via
-<cite>k</cite>-fold cross validation (this integer stands for the number of folds <cite>k</cite>), or as a
-<a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> (the split itself).</p></li>
+<li><p><strong>val_split</strong> – specifies the data used for generating classifier predictions. This specification
+can be made as float in (0, 1) indicating the proportion of stratified held-out validation set to
+be extracted from the training set; or as an integer (default 5), indicating that the predictions
+are to be generated in a <cite>k</cite>-fold cross-validation manner (with this integer indicating the value
+for <cite>k</cite>). Alternatively, this set can be specified at fit time by indicating the exact set of data
+on which the predictions are to be generated.</p></li>
 <li><p><strong>n_jobs</strong> – number of parallel workers</p></li>
+<li><p><strong>solver</strong> – <p>indicates the method to be used for obtaining the final estimates. The choice
+‘exact’ comes down to solving the system of linear equations <span class="math notranslate nohighlight">\(Ax=B\)</span> where <cite>A</cite> is a
+matrix containing the class-conditional probabilities of the predictions (e.g., the tpr and fpr in
+binary) and <cite>B</cite> is the vector of prevalence values estimated via CC, as <span class="math notranslate nohighlight">\(x=A^{-1}B\)</span>. This solution
+might not exist for degenerated classifiers, in which case the method defaults to classify and count
+(i.e., does not attempt any adjustment).
+Another option is to search for the prevalence vector that minimizes the L2 norm of <span class="math notranslate nohighlight">\(|Ax-B|\)</span>. The latter
+is achieved by indicating solver=’minimize’. This one generally works better, and is the default parameter.
+More details about this can be consulted in <a class="reference external" href="https://lq-2022.github.io/proceedings/CompleteVolume.pdf">Bunse, M. “On Multi-Class Extensions of Adjusted Classify and
+Count”, on proceedings of the 2nd International Workshop on Learning to Quantify: Methods and Applications
+(LQ 2022), ECML/PKDD 2022, Grenoble (France)</a>.</p>
+</p></li>
 </ul>
 </dd>
 </dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.aggregative.PACC.aggregate">
-<span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_posteriors</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.PACC.aggregate" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_posteriors</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#PACC.aggregate"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.PACC.aggregate" title="Link to this definition"></a></dt>
 <dd><p>Implements the aggregation of label predictions.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -797,53 +980,27 @@ validation data, or as an integer, indicating that the misclassification rates s
 </dd></dl>
 
 <dl class="py method">
-<dt class="sig sig-object py" id="quapy.method.aggregative.PACC.classify">
-<span class="sig-name descname"><span class="pre">classify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.PACC.classify" title="Permalink to this definition">¶</a></dt>
-<dd><p>Provides the label predictions for the given instances. The predictions should respect the format expected by
-<a class="reference internal" href="#quapy.method.aggregative.PACC.aggregate" title="quapy.method.aggregative.PACC.aggregate"><code class="xref py py-meth docutils literal notranslate"><span class="pre">aggregate()</span></code></a>, i.e., posterior probabilities for probabilistic quantifiers, or crisp predictions for
-non-probabilistic quantifiers</p>
+<dt class="sig sig-object py" id="quapy.method.aggregative.PACC.aggregation_fit">
+<span class="sig-name descname"><span class="pre">aggregation_fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#PACC.aggregation_fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.PACC.aggregation_fit" title="Link to this definition"></a></dt>
+<dd><p>Estimates the misclassification rates</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><p><strong>instances</strong> – array-like</p>
-</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p>np.ndarray of shape <cite>(n_instances,)</cite> with label predictions</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.method.aggregative.PACC.fit">
-<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">fit_classifier</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">float</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">int</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.PACC.fit" title="Permalink to this definition">¶</a></dt>
-<dd><p>Trains a PACC quantifier.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>data</strong> – the training set</p></li>
-<li><p><strong>fit_classifier</strong> – set to False to bypass the training (the learner is assumed to be already fit)</p></li>
-<li><p><strong>val_split</strong> – either a float in (0,1) indicating the proportion of training instances to use for
-validation (e.g., 0.3 for using 30% of the training set as validation data), or a LabelledCollection
-indicating the validation set itself, or an int indicating the number k of folds to be used in kFCV
-to estimate the parameters</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p>self</p>
+<dd class="field-odd"><p><strong>classif_predictions</strong> – classifier soft predictions with true labels</p>
 </dd>
 </dl>
 </dd></dl>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.aggregative.PACC.getPteCondEstim">
-<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">getPteCondEstim</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y_</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.PACC.getPteCondEstim" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">getPteCondEstim</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y_</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#PACC.getPteCondEstim"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.PACC.getPteCondEstim" title="Link to this definition"></a></dt>
 <dd></dd></dl>
 
 </dd></dl>
 
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.method.aggregative.PCC">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">PCC</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.PCC" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.AggregativeProbabilisticQuantifier" title="quapy.method.aggregative.AggregativeProbabilisticQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeProbabilisticQuantifier</span></code></a></p>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">PCC</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#PCC"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.PCC" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.AggregativeSoftQuantifier" title="quapy.method.aggregative.AggregativeSoftQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeSoftQuantifier</span></code></a></p>
 <p><a class="reference external" href="https://ieeexplore.ieee.org/abstract/document/5694031">Probabilistic Classify &amp; Count</a>,
 the probabilistic variant of CC that relies on the posterior probabilities returned by a probabilistic classifier.</p>
 <dl class="field-list simple">
@@ -853,7 +1010,7 @@ the probabilistic variant of CC that relies on the posterior probabilities retur
 </dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.aggregative.PCC.aggregate">
-<span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_posteriors</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.PCC.aggregate" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_posteriors</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#PCC.aggregate"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.PCC.aggregate" title="Link to this definition"></a></dt>
 <dd><p>Implements the aggregation of label predictions.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -866,19 +1023,12 @@ the probabilistic variant of CC that relies on the posterior probabilities retur
 </dd></dl>
 
 <dl class="py method">
-<dt class="sig sig-object py" id="quapy.method.aggregative.PCC.fit">
-<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">fit_classifier</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.PCC.fit" title="Permalink to this definition">¶</a></dt>
-<dd><p>Trains the aggregative quantifier</p>
+<dt class="sig sig-object py" id="quapy.method.aggregative.PCC.aggregation_fit">
+<span class="sig-name descname"><span class="pre">aggregation_fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#PCC.aggregation_fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.PCC.aggregation_fit" title="Link to this definition"></a></dt>
+<dd><p>Nothing to do here!</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>data</strong> – a <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> consisting of the training data</p></li>
-<li><p><strong>fit_classifier</strong> – whether or not to train the learner (default is True). Set to False if the
-learner has been trained outside the quantifier.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p>self</p>
+<dd class="field-odd"><p><strong>classif_predictions</strong> – this is actually None</p>
 </dd>
 </dl>
 </dd></dl>
@@ -887,41 +1037,41 @@ learner has been trained outside the quantifier.</p></li>
 
 <dl class="py attribute">
 <dt class="sig sig-object py" id="quapy.method.aggregative.ProbabilisticAdjustedClassifyAndCount">
-<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">ProbabilisticAdjustedClassifyAndCount</span></span><a class="headerlink" href="#quapy.method.aggregative.ProbabilisticAdjustedClassifyAndCount" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">ProbabilisticAdjustedClassifyAndCount</span></span><a class="headerlink" href="#quapy.method.aggregative.ProbabilisticAdjustedClassifyAndCount" title="Link to this definition"></a></dt>
 <dd><p>alias of <a class="reference internal" href="#quapy.method.aggregative.PACC" title="quapy.method.aggregative.PACC"><code class="xref py py-class docutils literal notranslate"><span class="pre">PACC</span></code></a></p>
 </dd></dl>
 
 <dl class="py attribute">
 <dt class="sig sig-object py" id="quapy.method.aggregative.ProbabilisticClassifyAndCount">
-<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">ProbabilisticClassifyAndCount</span></span><a class="headerlink" href="#quapy.method.aggregative.ProbabilisticClassifyAndCount" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">ProbabilisticClassifyAndCount</span></span><a class="headerlink" href="#quapy.method.aggregative.ProbabilisticClassifyAndCount" title="Link to this definition"></a></dt>
 <dd><p>alias of <a class="reference internal" href="#quapy.method.aggregative.PCC" title="quapy.method.aggregative.PCC"><code class="xref py py-class docutils literal notranslate"><span class="pre">PCC</span></code></a></p>
 </dd></dl>
 
 <dl class="py attribute">
 <dt class="sig sig-object py" id="quapy.method.aggregative.SLD">
-<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">SLD</span></span><a class="headerlink" href="#quapy.method.aggregative.SLD" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">SLD</span></span><a class="headerlink" href="#quapy.method.aggregative.SLD" title="Link to this definition"></a></dt>
 <dd><p>alias of <a class="reference internal" href="#quapy.method.aggregative.EMQ" title="quapy.method.aggregative.EMQ"><code class="xref py py-class docutils literal notranslate"><span class="pre">EMQ</span></code></a></p>
 </dd></dl>
 
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.method.aggregative.SMM">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">SMM</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.4</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.SMM" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.AggregativeProbabilisticQuantifier" title="quapy.method.aggregative.AggregativeProbabilisticQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeProbabilisticQuantifier</span></code></a>, <a class="reference internal" href="#quapy.method.base.BinaryQuantifier" title="quapy.method.base.BinaryQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">BinaryQuantifier</span></code></a></p>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">SMM</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#SMM"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.SMM" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.AggregativeSoftQuantifier" title="quapy.method.aggregative.AggregativeSoftQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeSoftQuantifier</span></code></a>, <a class="reference internal" href="#quapy.method.aggregative.BinaryAggregativeQuantifier" title="quapy.method.aggregative.BinaryAggregativeQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">BinaryAggregativeQuantifier</span></code></a></p>
 <p><a class="reference external" href="https://ieeexplore.ieee.org/document/9260028">SMM method</a> (SMM).
 SMM is a simplification of matching distribution methods where the representation of the examples
-is created using the mean instead of a histogram.</p>
+is created using the mean instead of a histogram (conceptually equivalent to PACC).</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
 <dd class="field-odd"><ul class="simple">
 <li><p><strong>classifier</strong> – a sklearn’s Estimator that generates a binary classifier.</p></li>
 <li><p><strong>val_split</strong> – a float in range (0,1) indicating the proportion of data to be used as a stratified held-out
-validation distribution, or a <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> (the split itself).</p></li>
+validation distribution, or a <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> (the split itself), or an integer indicating the number of folds (default 5)..</p></li>
 </ul>
 </dd>
 </dl>
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.aggregative.SMM.aggregate">
-<span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_posteriors</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.SMM.aggregate" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_posteriors</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#SMM.aggregate"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.SMM.aggregate" title="Link to this definition"></a></dt>
 <dd><p>Implements the aggregation of label predictions.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -934,139 +1084,25 @@ validation distribution, or a <a class="reference internal" href="quapy.data.htm
 </dd></dl>
 
 <dl class="py method">
-<dt class="sig sig-object py" id="quapy.method.aggregative.SMM.fit">
-<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">fit_classifier</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">float</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.SMM.fit" title="Permalink to this definition">¶</a></dt>
-<dd><p>Trains the aggregative quantifier</p>
+<dt class="sig sig-object py" id="quapy.method.aggregative.SMM.aggregation_fit">
+<span class="sig-name descname"><span class="pre">aggregation_fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#SMM.aggregation_fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.SMM.aggregation_fit" title="Link to this definition"></a></dt>
+<dd><p>Trains the aggregation function.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
 <dd class="field-odd"><ul class="simple">
+<li><p><strong>classif_predictions</strong> – a LabelledCollection containing the label predictions issued
+by the classifier</p></li>
 <li><p><strong>data</strong> – a <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> consisting of the training data</p></li>
-<li><p><strong>fit_classifier</strong> – whether or not to train the learner (default is True). Set to False if the
-learner has been trained outside the quantifier.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p>self</p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt class="sig sig-object py" id="quapy.method.aggregative.T50">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">T50</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.4</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.T50" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.ThresholdOptimization" title="quapy.method.aggregative.ThresholdOptimization"><code class="xref py py-class docutils literal notranslate"><span class="pre">ThresholdOptimization</span></code></a></p>
-<p>Threshold Optimization variant for <a class="reference internal" href="#quapy.method.aggregative.ACC" title="quapy.method.aggregative.ACC"><code class="xref py py-class docutils literal notranslate"><span class="pre">ACC</span></code></a> as proposed by
-<a class="reference external" href="https://dl.acm.org/doi/abs/10.1145/1150402.1150423">Forman 2006</a> and
-<a class="reference external" href="https://link.springer.com/article/10.1007/s10618-008-0097-y">Forman 2008</a> that looks
-for the threshold that makes <cite>tpr</cite> cosest to 0.5.
-The goal is to bring improved stability to the denominator of the adjustment.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>classifier</strong> – a sklearn’s Estimator that generates a classifier</p></li>
-<li><p><strong>val_split</strong> – indicates the proportion of data to be used as a stratified held-out validation set in which the
-misclassification rates are to be estimated.
-This parameter can be indicated as a real value (between 0 and 1, default 0.4), representing a proportion of
-validation data, or as an integer, indicating that the misclassification rates should be estimated via
-<cite>k</cite>-fold cross validation (this integer stands for the number of folds <cite>k</cite>), or as a
-<a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> (the split itself).</p></li>
 </ul>
 </dd>
 </dl>
 </dd></dl>
 
-<dl class="py class">
-<dt class="sig sig-object py" id="quapy.method.aggregative.ThresholdOptimization">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">ThresholdOptimization</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.4</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.ThresholdOptimization" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.AggregativeQuantifier" title="quapy.method.aggregative.AggregativeQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeQuantifier</span></code></a>, <a class="reference internal" href="#quapy.method.base.BinaryQuantifier" title="quapy.method.base.BinaryQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">BinaryQuantifier</span></code></a></p>
-<p>Abstract class of Threshold Optimization variants for <a class="reference internal" href="#quapy.method.aggregative.ACC" title="quapy.method.aggregative.ACC"><code class="xref py py-class docutils literal notranslate"><span class="pre">ACC</span></code></a> as proposed by
-<a class="reference external" href="https://dl.acm.org/doi/abs/10.1145/1150402.1150423">Forman 2006</a> and
-<a class="reference external" href="https://link.springer.com/article/10.1007/s10618-008-0097-y">Forman 2008</a>.
-The goal is to bring improved stability to the denominator of the adjustment.
-The different variants are based on different heuristics for choosing a decision threshold
-that would allow for more true positives and many more false positives, on the grounds this
-would deliver larger denominators.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>classifier</strong> – a sklearn’s Estimator that generates a classifier</p></li>
-<li><p><strong>val_split</strong> – indicates the proportion of data to be used as a stratified held-out validation set in which the
-misclassification rates are to be estimated.
-This parameter can be indicated as a real value (between 0 and 1, default 0.4), representing a proportion of
-validation data, or as an integer, indicating that the misclassification rates should be estimated via
-<cite>k</cite>-fold cross validation (this integer stands for the number of folds <cite>k</cite>), or as a
-<a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> (the split itself).</p></li>
-</ul>
-</dd>
-</dl>
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.method.aggregative.ThresholdOptimization.aggregate">
-<span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.ThresholdOptimization.aggregate" title="Permalink to this definition">¶</a></dt>
-<dd><p>Implements the aggregation of label predictions.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><p><strong>classif_predictions</strong> – <cite>np.ndarray</cite> of label predictions</p>
-</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p><cite>np.ndarray</cite> of shape <cite>(n_classes,)</cite> with class prevalence estimates.</p>
-</dd>
-</dl>
 </dd></dl>
 
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.method.aggregative.ThresholdOptimization.fit">
-<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">fit_classifier</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">float</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">int</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.ThresholdOptimization.fit" title="Permalink to this definition">¶</a></dt>
-<dd><p>Trains the aggregative quantifier</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>data</strong> – a <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> consisting of the training data</p></li>
-<li><p><strong>fit_classifier</strong> – whether or not to train the learner (default is True). Set to False if the
-learner has been trained outside the quantifier.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p>self</p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py class">
-<dt class="sig sig-object py" id="quapy.method.aggregative.X">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">X</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.4</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.X" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.ThresholdOptimization" title="quapy.method.aggregative.ThresholdOptimization"><code class="xref py py-class docutils literal notranslate"><span class="pre">ThresholdOptimization</span></code></a></p>
-<p>Threshold Optimization variant for <a class="reference internal" href="#quapy.method.aggregative.ACC" title="quapy.method.aggregative.ACC"><code class="xref py py-class docutils literal notranslate"><span class="pre">ACC</span></code></a> as proposed by
-<a class="reference external" href="https://dl.acm.org/doi/abs/10.1145/1150402.1150423">Forman 2006</a> and
-<a class="reference external" href="https://link.springer.com/article/10.1007/s10618-008-0097-y">Forman 2008</a> that looks
-for the threshold that yields <cite>tpr=1-fpr</cite>.
-The goal is to bring improved stability to the denominator of the adjustment.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>classifier</strong> – a sklearn’s Estimator that generates a classifier</p></li>
-<li><p><strong>val_split</strong> – indicates the proportion of data to be used as a stratified held-out validation set in which the
-misclassification rates are to be estimated.
-This parameter can be indicated as a real value (between 0 and 1, default 0.4), representing a proportion of
-validation data, or as an integer, indicating that the misclassification rates should be estimated via
-<cite>k</cite>-fold cross validation (this integer stands for the number of folds <cite>k</cite>), or as a
-<a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> (the split itself).</p></li>
-</ul>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py function">
-<dt class="sig sig-object py" id="quapy.method.aggregative.cross_generate_predictions">
-<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">cross_generate_predictions</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">probabilistic</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fit_classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.cross_generate_predictions" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.method.aggregative.newELM">
-<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">newELM</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">svmperf_base</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">loss</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'01'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">C</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.newELM" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">newELM</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">svmperf_base</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">loss</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'01'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">C</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#newELM"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.newELM" title="Link to this definition"></a></dt>
 <dd><p>Explicit Loss Minimization (ELM) quantifiers.
 Quantifiers based on ELM represent a family of methods based on structured output learning;
 these quantifiers rely on classifiers that have been optimized using a quantification-oriented loss
@@ -1096,7 +1132,7 @@ underlying classifier</p>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.method.aggregative.newSVMAE">
-<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">newSVMAE</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">svmperf_base</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">C</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.newSVMAE" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">newSVMAE</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">svmperf_base</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">C</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#newSVMAE"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.newSVMAE" title="Link to this definition"></a></dt>
 <dd><p>SVM(KLD) is an Explicit Loss Minimization (ELM) quantifier set to optimize for the Absolute Error as first used by
 <a class="reference external" href="https://arxiv.org/abs/2011.02552">Moreo and Sebastiani, 2021</a>.
 Equivalent to:</p>
@@ -1127,7 +1163,7 @@ underlying classifier</p>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.method.aggregative.newSVMKLD">
-<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">newSVMKLD</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">svmperf_base</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">C</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.newSVMKLD" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">newSVMKLD</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">svmperf_base</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">C</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#newSVMKLD"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.newSVMKLD" title="Link to this definition"></a></dt>
 <dd><p>SVM(KLD) is an Explicit Loss Minimization (ELM) quantifier set to optimize for the Kullback-Leibler Divergence
 normalized via the logistic function, as proposed by
 <a class="reference external" href="https://dl.acm.org/doi/abs/10.1145/2700406">Esuli et al. 2015</a>.
@@ -1159,7 +1195,7 @@ underlying classifier</p>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.method.aggregative.newSVMQ">
-<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">newSVMQ</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">svmperf_base</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">C</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.newSVMQ" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">newSVMQ</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">svmperf_base</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">C</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#newSVMQ"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.newSVMQ" title="Link to this definition"></a></dt>
 <dd><p>SVM(Q) is an Explicit Loss Minimization (ELM) quantifier set to optimize for the <cite>Q</cite> loss combining a
 classification-oriented loss and a quantification-oriented loss, as proposed by
 <a class="reference external" href="https://www.sciencedirect.com/science/article/pii/S003132031400291X">Barranquero et al. 2015</a>.
@@ -1191,7 +1227,7 @@ underlying classifier</p>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.method.aggregative.newSVMRAE">
-<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">newSVMRAE</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">svmperf_base</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">C</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.aggregative.newSVMRAE" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.method.aggregative.</span></span><span class="sig-name descname"><span class="pre">newSVMRAE</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">svmperf_base</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">C</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/aggregative.html#newSVMRAE"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.aggregative.newSVMRAE" title="Link to this definition"></a></dt>
 <dd><p>SVM(KLD) is an Explicit Loss Minimization (ELM) quantifier set to optimize for the Relative Absolute Error as first
 used by <a class="reference external" href="https://arxiv.org/abs/2011.02552">Moreo and Sebastiani, 2021</a>.
 Equivalent to:</p>
@@ -1220,19 +1256,835 @@ underlying classifier</p>
 </dl>
 </dd></dl>
 
+<dl class="py class" id="module-quapy.method._kdey">
+<dt class="sig sig-object py" id="quapy.method._kdey.KDEBase">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method._kdey.</span></span><span class="sig-name descname"><span class="pre">KDEBase</span></span><a class="reference internal" href="_modules/quapy/method/_kdey.html#KDEBase"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._kdey.KDEBase" title="Link to this definition"></a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
+<p>Common ancestor for KDE-based methods. Implements some common routines.</p>
+<dl class="py attribute">
+<dt class="sig sig-object py" id="quapy.method._kdey.KDEBase.BANDWIDTH_METHOD">
+<span class="sig-name descname"><span class="pre">BANDWIDTH_METHOD</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['scott',</span> <span class="pre">'silverman']</span></em><a class="headerlink" href="#quapy.method._kdey.KDEBase.BANDWIDTH_METHOD" title="Link to this definition"></a></dt>
+<dd></dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._kdey.KDEBase.get_kde_function">
+<span class="sig-name descname"><span class="pre">get_kde_function</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bandwidth</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_kdey.html#KDEBase.get_kde_function"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._kdey.KDEBase.get_kde_function" title="Link to this definition"></a></dt>
+<dd><p>Wraps the KDE function from scikit-learn.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>X</strong> – data for which the density function is to be estimated</p></li>
+<li><p><strong>bandwidth</strong> – the bandwidth of the kernel</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>a scikit-learn’s KernelDensity object</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._kdey.KDEBase.get_mixture_components">
+<span class="sig-name descname"><span class="pre">get_mixture_components</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_classes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bandwidth</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_kdey.html#KDEBase.get_mixture_components"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._kdey.KDEBase.get_mixture_components" title="Link to this definition"></a></dt>
+<dd><p>Returns an array containing the mixture components, i.e., the KDE functions for each class.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>X</strong> – the data containing the covariates</p></li>
+<li><p><strong>y</strong> – the class labels</p></li>
+<li><p><strong>n_classes</strong> – integer, the number of classes</p></li>
+<li><p><strong>bandwidth</strong> – float, the bandwidth of the kernel</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>a list of KernelDensity objects, each fitted with the corresponding class-specific covariates</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._kdey.KDEBase.pdf">
+<span class="sig-name descname"><span class="pre">pdf</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">kde</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">X</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_kdey.html#KDEBase.pdf"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._kdey.KDEBase.pdf" title="Link to this definition"></a></dt>
+<dd><p>Wraps the density evalution of scikit-learn’s KDE. Scikit-learn returns log-scores (s), so this
+function returns <span class="math notranslate nohighlight">\(e^{s}\)</span></p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>kde</strong> – a previously fit KDE function</p></li>
+<li><p><strong>X</strong> – the data for which the density is to be estimated</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>np.ndarray with the densities</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="quapy.method._kdey.KDEyCS">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method._kdey.</span></span><span class="sig-name descname"><span class="pre">KDEyCS</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">10</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bandwidth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_kdey.html#KDEyCS"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._kdey.KDEyCS" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.AggregativeSoftQuantifier" title="quapy.method.aggregative.AggregativeSoftQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeSoftQuantifier</span></code></a></p>
+<p>Kernel Density Estimation model for quantification (KDEy) relying on the Cauchy-Schwarz divergence (CS) as
+the divergence measure to be minimized. This method was first proposed in the paper
+<a class="reference external" href="https://arxiv.org/abs/2401.00490">Kernel Density Estimation for Multiclass Quantification</a>, in which
+the authors proposed a Monte Carlo approach for minimizing the divergence.</p>
+<p>The distribution matching optimization problem comes down to solving:</p>
+<p><span class="math notranslate nohighlight">\(\hat{\alpha} = \arg\min_{\alpha\in\Delta^{n-1}} \mathcal{D}(\boldsymbol{p}_{\alpha}||q_{\widetilde{U}})\)</span></p>
+<p>where <span class="math notranslate nohighlight">\(p_{\alpha}\)</span> is the mixture of class-specific KDEs with mixture parameter (hence class prevalence)
+<span class="math notranslate nohighlight">\(\alpha\)</span> defined by</p>
+<p><span class="math notranslate nohighlight">\(\boldsymbol{p}_{\alpha}(\widetilde{x}) = \sum_{i=1}^n \alpha_i p_{\widetilde{L}_i}(\widetilde{x})\)</span></p>
+<p>where <span class="math notranslate nohighlight">\(p_X(\boldsymbol{x}) = \frac{1}{|X|} \sum_{x_i\in X} K\left(\frac{x-x_i}{h}\right)\)</span> is the
+KDE function that uses the datapoints in X as the kernel centers.</p>
+<p>In KDEy-CS, the divergence is taken to be the Cauchy-Schwarz divergence given by:</p>
+<p><span class="math notranslate nohighlight">\(\mathcal{D}_{\mathrm{CS}}(p||q)=-\log\left(\frac{\int p(x)q(x)dx}{\sqrt{\int p(x)^2dx \int q(x)^2dx}}\right)\)</span></p>
+<p>The authors showed that this distribution matching admits a closed-form solution</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>classifier</strong> – a sklearn’s Estimator that generates a binary classifier.</p></li>
+<li><p><strong>val_split</strong> – specifies the data used for generating classifier predictions. This specification
+can be made as float in (0, 1) indicating the proportion of stratified held-out validation set to
+be extracted from the training set; or as an integer (default 5), indicating that the predictions
+are to be generated in a <cite>k</cite>-fold cross-validation manner (with this integer indicating the value
+for <cite>k</cite>); or as a collection defining the specific set of data to use for validation.
+Alternatively, this set can be specified at fit time by indicating the exact set of data
+on which the predictions are to be generated.</p></li>
+<li><p><strong>bandwidth</strong> – float, the bandwidth of the Kernel</p></li>
+<li><p><strong>n_jobs</strong> – number of parallel workers</p></li>
+</ul>
+</dd>
+</dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._kdey.KDEyCS.aggregate">
+<span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">posteriors</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">ndarray</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_kdey.html#KDEyCS.aggregate"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._kdey.KDEyCS.aggregate" title="Link to this definition"></a></dt>
+<dd><p>Implements the aggregation of label predictions.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>classif_predictions</strong> – <cite>np.ndarray</cite> of label predictions</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p><cite>np.ndarray</cite> of shape <cite>(n_classes,)</cite> with class prevalence estimates.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._kdey.KDEyCS.aggregation_fit">
+<span class="sig-name descname"><span class="pre">aggregation_fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_kdey.html#KDEyCS.aggregation_fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._kdey.KDEyCS.aggregation_fit" title="Link to this definition"></a></dt>
+<dd><p>Trains the aggregation function.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>classif_predictions</strong> – a LabelledCollection containing the label predictions issued
+by the classifier</p></li>
+<li><p><strong>data</strong> – a <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> consisting of the training data</p></li>
+</ul>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._kdey.KDEyCS.gram_matrix_mix_sum">
+<span class="sig-name descname"><span class="pre">gram_matrix_mix_sum</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">X</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">Y</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_kdey.html#KDEyCS.gram_matrix_mix_sum"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._kdey.KDEyCS.gram_matrix_mix_sum" title="Link to this definition"></a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="quapy.method._kdey.KDEyHD">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method._kdey.</span></span><span class="sig-name descname"><span class="pre">KDEyHD</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">10</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">divergence</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'HD'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bandwidth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">montecarlo_trials</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">10000</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_kdey.html#KDEyHD"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._kdey.KDEyHD" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.AggregativeSoftQuantifier" title="quapy.method.aggregative.AggregativeSoftQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeSoftQuantifier</span></code></a>, <a class="reference internal" href="#quapy.method._kdey.KDEBase" title="quapy.method._kdey.KDEBase"><code class="xref py py-class docutils literal notranslate"><span class="pre">KDEBase</span></code></a></p>
+<p>Kernel Density Estimation model for quantification (KDEy) relying on the squared Hellinger Disntace (HD) as
+the divergence measure to be minimized. This method was first proposed in the paper
+<a class="reference external" href="https://arxiv.org/abs/2401.00490">Kernel Density Estimation for Multiclass Quantification</a>, in which
+the authors proposed a Monte Carlo approach for minimizing the divergence.</p>
+<p>The distribution matching optimization problem comes down to solving:</p>
+<p><span class="math notranslate nohighlight">\(\hat{\alpha} = \arg\min_{\alpha\in\Delta^{n-1}} \mathcal{D}(\boldsymbol{p}_{\alpha}||q_{\widetilde{U}})\)</span></p>
+<p>where <span class="math notranslate nohighlight">\(p_{\alpha}\)</span> is the mixture of class-specific KDEs with mixture parameter (hence class prevalence)
+<span class="math notranslate nohighlight">\(\alpha\)</span> defined by</p>
+<p><span class="math notranslate nohighlight">\(\boldsymbol{p}_{\alpha}(\widetilde{x}) = \sum_{i=1}^n \alpha_i p_{\widetilde{L}_i}(\widetilde{x})\)</span></p>
+<p>where <span class="math notranslate nohighlight">\(p_X(\boldsymbol{x}) = \frac{1}{|X|} \sum_{x_i\in X} K\left(\frac{x-x_i}{h}\right)\)</span> is the
+KDE function that uses the datapoints in X as the kernel centers.</p>
+<p>In KDEy-HD, the divergence is taken to be the squared Hellinger Distance, an f-divergence with corresponding
+f-generator function given by:</p>
+<p><span class="math notranslate nohighlight">\(f(u)=(\sqrt{u}-1)^2\)</span></p>
+<p>The authors proposed a Monte Carlo solution that relies on importance sampling:</p>
+<p><span class="math notranslate nohighlight">\(\hat{D}_f(p||q)= \frac{1}{t} \sum_{i=1}^t f\left(\frac{p(x_i)}{q(x_i)}\right) \frac{q(x_i)}{r(x_i)}\)</span></p>
+<p>where the datapoints (trials) <span class="math notranslate nohighlight">\(x_1,\ldots,x_t\sim_{\mathrm{iid}} r\)</span> with <span class="math notranslate nohighlight">\(r\)</span>  the
+uniform distribution.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>classifier</strong> – a sklearn’s Estimator that generates a binary classifier.</p></li>
+<li><p><strong>val_split</strong> – specifies the data used for generating classifier predictions. This specification
+can be made as float in (0, 1) indicating the proportion of stratified held-out validation set to
+be extracted from the training set; or as an integer (default 5), indicating that the predictions
+are to be generated in a <cite>k</cite>-fold cross-validation manner (with this integer indicating the value
+for <cite>k</cite>); or as a collection defining the specific set of data to use for validation.
+Alternatively, this set can be specified at fit time by indicating the exact set of data
+on which the predictions are to be generated.</p></li>
+<li><p><strong>bandwidth</strong> – float, the bandwidth of the Kernel</p></li>
+<li><p><strong>n_jobs</strong> – number of parallel workers</p></li>
+<li><p><strong>random_state</strong> – a seed to be set before fitting any base quantifier (default None)</p></li>
+<li><p><strong>montecarlo_trials</strong> – number of Monte Carlo trials (default 10000)</p></li>
+</ul>
+</dd>
+</dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._kdey.KDEyHD.aggregate">
+<span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">posteriors</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">ndarray</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_kdey.html#KDEyHD.aggregate"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._kdey.KDEyHD.aggregate" title="Link to this definition"></a></dt>
+<dd><p>Implements the aggregation of label predictions.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>classif_predictions</strong> – <cite>np.ndarray</cite> of label predictions</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p><cite>np.ndarray</cite> of shape <cite>(n_classes,)</cite> with class prevalence estimates.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._kdey.KDEyHD.aggregation_fit">
+<span class="sig-name descname"><span class="pre">aggregation_fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_kdey.html#KDEyHD.aggregation_fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._kdey.KDEyHD.aggregation_fit" title="Link to this definition"></a></dt>
+<dd><p>Trains the aggregation function.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>classif_predictions</strong> – a LabelledCollection containing the label predictions issued
+by the classifier</p></li>
+<li><p><strong>data</strong> – a <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> consisting of the training data</p></li>
+</ul>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="quapy.method._kdey.KDEyML">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method._kdey.</span></span><span class="sig-name descname"><span class="pre">KDEyML</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">10</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bandwidth</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_kdey.html#KDEyML"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._kdey.KDEyML" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.AggregativeSoftQuantifier" title="quapy.method.aggregative.AggregativeSoftQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">AggregativeSoftQuantifier</span></code></a>, <a class="reference internal" href="#quapy.method._kdey.KDEBase" title="quapy.method._kdey.KDEBase"><code class="xref py py-class docutils literal notranslate"><span class="pre">KDEBase</span></code></a></p>
+<p>Kernel Density Estimation model for quantification (KDEy) relying on the Kullback-Leibler divergence (KLD) as
+the divergence measure to be minimized. This method was first proposed in the paper
+<a class="reference external" href="https://arxiv.org/abs/2401.00490">Kernel Density Estimation for Multiclass Quantification</a>, in which
+the authors show that minimizing the distribution mathing criterion for KLD is akin to performing
+maximum likelihood (ML).</p>
+<p>The distribution matching optimization problem comes down to solving:</p>
+<p><span class="math notranslate nohighlight">\(\hat{\alpha} = \arg\min_{\alpha\in\Delta^{n-1}} \mathcal{D}(\boldsymbol{p}_{\alpha}||q_{\widetilde{U}})\)</span></p>
+<p>where <span class="math notranslate nohighlight">\(p_{\alpha}\)</span> is the mixture of class-specific KDEs with mixture parameter (hence class prevalence)
+<span class="math notranslate nohighlight">\(\alpha\)</span> defined by</p>
+<p><span class="math notranslate nohighlight">\(\boldsymbol{p}_{\alpha}(\widetilde{x}) = \sum_{i=1}^n \alpha_i p_{\widetilde{L}_i}(\widetilde{x})\)</span></p>
+<p>where <span class="math notranslate nohighlight">\(p_X(\boldsymbol{x}) = \frac{1}{|X|} \sum_{x_i\in X} K\left(\frac{x-x_i}{h}\right)\)</span> is the
+KDE function that uses the datapoints in X as the kernel centers.</p>
+<p>In KDEy-ML, the divergence is taken to be the Kullback-Leibler Divergence. This is equivalent to solving:
+<span class="math notranslate nohighlight">\(\hat{\alpha} = \arg\min_{\alpha\in\Delta^{n-1}} -
+\mathbb{E}_{q_{\widetilde{U}}} \left[ \log \boldsymbol{p}_{\alpha}(\widetilde{x}) \right]\)</span></p>
+<p>which corresponds to the maximum likelihood estimate.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>classifier</strong> – a sklearn’s Estimator that generates a binary classifier.</p></li>
+<li><p><strong>val_split</strong> – specifies the data used for generating classifier predictions. This specification
+can be made as float in (0, 1) indicating the proportion of stratified held-out validation set to
+be extracted from the training set; or as an integer (default 5), indicating that the predictions
+are to be generated in a <cite>k</cite>-fold cross-validation manner (with this integer indicating the value
+for <cite>k</cite>); or as a collection defining the specific set of data to use for validation.
+Alternatively, this set can be specified at fit time by indicating the exact set of data
+on which the predictions are to be generated.</p></li>
+<li><p><strong>bandwidth</strong> – float, the bandwidth of the Kernel</p></li>
+<li><p><strong>n_jobs</strong> – number of parallel workers</p></li>
+<li><p><strong>random_state</strong> – a seed to be set before fitting any base quantifier (default None)</p></li>
+</ul>
+</dd>
+</dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._kdey.KDEyML.aggregate">
+<span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">posteriors</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">ndarray</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_kdey.html#KDEyML.aggregate"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._kdey.KDEyML.aggregate" title="Link to this definition"></a></dt>
+<dd><p>Searches for the mixture model parameter (the sought prevalence values) that maximizes the likelihood
+of the data (i.e., that minimizes the negative log-likelihood)</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>posteriors</strong> – instances in the sample converted into posterior probabilities</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>a vector of class prevalence estimates</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._kdey.KDEyML.aggregation_fit">
+<span class="sig-name descname"><span class="pre">aggregation_fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_kdey.html#KDEyML.aggregation_fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._kdey.KDEyML.aggregation_fit" title="Link to this definition"></a></dt>
+<dd><p>Trains the aggregation function.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>classif_predictions</strong> – a LabelledCollection containing the label predictions issued
+by the classifier</p></li>
+<li><p><strong>data</strong> – a <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> consisting of the training data</p></li>
+</ul>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class" id="module-quapy.method._neural">
+<dt class="sig sig-object py" id="quapy.method._neural.QuaNetModule">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method._neural.</span></span><span class="sig-name descname"><span class="pre">QuaNetModule</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">doc_embedding_size</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_classes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">stats_size</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lstm_hidden_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">64</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lstm_nlayers</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ff_layers</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[1024,</span> <span class="pre">512]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bidirectional</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">qdrop_p</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">order_by</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_neural.html#QuaNetModule"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._neural.QuaNetModule" title="Link to this definition"></a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Module</span></code></p>
+<p>Implements the <a class="reference external" href="https://dl.acm.org/doi/abs/10.1145/3269206.3269287">QuaNet</a> forward pass.
+See <a class="reference internal" href="#quapy.method._neural.QuaNetTrainer" title="quapy.method._neural.QuaNetTrainer"><code class="xref py py-class docutils literal notranslate"><span class="pre">QuaNetTrainer</span></code></a> for training QuaNet.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>doc_embedding_size</strong> – integer, the dimensionality of the document embeddings</p></li>
+<li><p><strong>n_classes</strong> – integer, number of classes</p></li>
+<li><p><strong>stats_size</strong> – integer, number of statistics estimated by simple quantification methods</p></li>
+<li><p><strong>lstm_hidden_size</strong> – integer, hidden dimensionality of the LSTM cell</p></li>
+<li><p><strong>lstm_nlayers</strong> – integer, number of LSTM layers</p></li>
+<li><p><strong>ff_layers</strong> – list of integers, dimensions of the densely-connected FF layers on top of the
+quantification embedding</p></li>
+<li><p><strong>bidirectional</strong> – boolean, whether or not to use bidirectional LSTM</p></li>
+<li><p><strong>qdrop_p</strong> – float, dropout probability</p></li>
+<li><p><strong>order_by</strong> – integer, class for which the document embeddings are to be sorted</p></li>
+</ul>
+</dd>
+</dl>
+<dl class="py property">
+<dt class="sig sig-object py" id="quapy.method._neural.QuaNetModule.device">
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">device</span></span><a class="headerlink" href="#quapy.method._neural.QuaNetModule.device" title="Link to this definition"></a></dt>
+<dd></dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._neural.QuaNetModule.forward">
+<span class="sig-name descname"><span class="pre">forward</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">doc_embeddings</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">doc_posteriors</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">statistics</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_neural.html#QuaNetModule.forward"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._neural.QuaNetModule.forward" title="Link to this definition"></a></dt>
+<dd><p>Defines the computation performed at every call.</p>
+<p>Should be overridden by all subclasses.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Although the recipe for forward pass needs to be defined within
+this function, one should call the <code class="xref py py-class docutils literal notranslate"><span class="pre">Module</span></code> instance afterwards
+instead of this since the former takes care of running the
+registered hooks while the latter silently ignores them.</p>
+</div>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="quapy.method._neural.QuaNetTrainer">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method._neural.</span></span><span class="sig-name descname"><span class="pre">QuaNetTrainer</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sample_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_epochs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tr_iter_per_poch</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">500</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">va_iter_per_poch</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lr</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.001</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lstm_hidden_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">64</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lstm_nlayers</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ff_layers</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[1024,</span> <span class="pre">512]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bidirectional</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">qdrop_p</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">patience</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">10</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">checkpointdir</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'../checkpoint'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">checkpointname</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">device</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'cuda'</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_neural.html#QuaNetTrainer"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._neural.QuaNetTrainer" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method.base.BaseQuantifier" title="quapy.method.base.BaseQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">BaseQuantifier</span></code></a></p>
+<p>Implementation of <a class="reference external" href="https://dl.acm.org/doi/abs/10.1145/3269206.3269287">QuaNet</a>, a neural network for
+quantification. This implementation uses <a class="reference external" href="https://pytorch.org/">PyTorch</a> and can take advantage of GPU
+for speeding-up the training phase.</p>
+<p>Example:</p>
+<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">quapy</span> <span class="k">as</span> <span class="nn">qp</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">quapy.method.meta</span> <span class="kn">import</span> <span class="n">QuaNet</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">quapy.classification.neural</span> <span class="kn">import</span> <span class="n">NeuralClassifierTrainer</span><span class="p">,</span> <span class="n">CNNnet</span>
+<span class="go">&gt;&gt;&gt;</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="c1"># use samples of 100 elements</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">qp</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s1">&#39;SAMPLE_SIZE&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">100</span>
+<span class="go">&gt;&gt;&gt;</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="c1"># load the kindle dataset as text, and convert words to numerical indexes</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">dataset</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">fetch_reviews</span><span class="p">(</span><span class="s1">&#39;kindle&#39;</span><span class="p">,</span> <span class="n">pickle</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">qp</span><span class="o">.</span><span class="n">train</span><span class="o">.</span><span class="n">preprocessing</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">dataset</span><span class="p">,</span> <span class="n">min_df</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="go">&gt;&gt;&gt;</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="c1"># the text classifier is a CNN trained by NeuralClassifierTrainer</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">cnn</span> <span class="o">=</span> <span class="n">CNNnet</span><span class="p">(</span><span class="n">dataset</span><span class="o">.</span><span class="n">vocabulary_size</span><span class="p">,</span> <span class="n">dataset</span><span class="o">.</span><span class="n">n_classes</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">classifier</span> <span class="o">=</span> <span class="n">NeuralClassifierTrainer</span><span class="p">(</span><span class="n">cnn</span><span class="p">,</span> <span class="n">device</span><span class="o">=</span><span class="s1">&#39;cuda&#39;</span><span class="p">)</span>
+<span class="go">&gt;&gt;&gt;</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="c1"># train QuaNet (QuaNet is an alias to QuaNetTrainer)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">model</span> <span class="o">=</span> <span class="n">QuaNet</span><span class="p">(</span><span class="n">classifier</span><span class="p">,</span> <span class="n">qp</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s1">&#39;SAMPLE_SIZE&#39;</span><span class="p">],</span> <span class="n">device</span><span class="o">=</span><span class="s1">&#39;cuda&#39;</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">model</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">dataset</span><span class="o">.</span><span class="n">training</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">estim_prevalence</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">quantify</span><span class="p">(</span><span class="n">dataset</span><span class="o">.</span><span class="n">test</span><span class="o">.</span><span class="n">instances</span><span class="p">)</span>
+</pre></div>
+</div>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>classifier</strong> – an object implementing <cite>fit</cite> (i.e., that can be trained on labelled data),
+<cite>predict_proba</cite> (i.e., that can generate posterior probabilities of unlabelled examples) and
+<cite>transform</cite> (i.e., that can generate embedded representations of the unlabelled instances).</p></li>
+<li><p><strong>sample_size</strong> – integer, the sample size; default is None, meaning that the sample size should be
+taken from qp.environ[“SAMPLE_SIZE”]</p></li>
+<li><p><strong>n_epochs</strong> – integer, maximum number of training epochs</p></li>
+<li><p><strong>tr_iter_per_poch</strong> – integer, number of training iterations before considering an epoch complete</p></li>
+<li><p><strong>va_iter_per_poch</strong> – integer, number of validation iterations to perform after each epoch</p></li>
+<li><p><strong>lr</strong> – float, the learning rate</p></li>
+<li><p><strong>lstm_hidden_size</strong> – integer, hidden dimensionality of the LSTM cells</p></li>
+<li><p><strong>lstm_nlayers</strong> – integer, number of LSTM layers</p></li>
+<li><p><strong>ff_layers</strong> – list of integers, dimensions of the densely-connected FF layers on top of the
+quantification embedding</p></li>
+<li><p><strong>bidirectional</strong> – boolean, indicates whether the LSTM is bidirectional or not</p></li>
+<li><p><strong>qdrop_p</strong> – float, dropout probability</p></li>
+<li><p><strong>patience</strong> – integer, number of epochs showing no improvement in the validation set before stopping the
+training phase (early stopping)</p></li>
+<li><p><strong>checkpointdir</strong> – string, a path where to store models’ checkpoints</p></li>
+<li><p><strong>checkpointname</strong> – string (optional), the name of the model’s checkpoint</p></li>
+<li><p><strong>device</strong> – string, indicate “cpu” or “cuda”</p></li>
+</ul>
+</dd>
+</dl>
+<dl class="py property">
+<dt class="sig sig-object py" id="quapy.method._neural.QuaNetTrainer.classes_">
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">classes_</span></span><a class="headerlink" href="#quapy.method._neural.QuaNetTrainer.classes_" title="Link to this definition"></a></dt>
+<dd></dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._neural.QuaNetTrainer.clean_checkpoint">
+<span class="sig-name descname"><span class="pre">clean_checkpoint</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_neural.html#QuaNetTrainer.clean_checkpoint"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._neural.QuaNetTrainer.clean_checkpoint" title="Link to this definition"></a></dt>
+<dd><p>Removes the checkpoint</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._neural.QuaNetTrainer.clean_checkpoint_dir">
+<span class="sig-name descname"><span class="pre">clean_checkpoint_dir</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_neural.html#QuaNetTrainer.clean_checkpoint_dir"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._neural.QuaNetTrainer.clean_checkpoint_dir" title="Link to this definition"></a></dt>
+<dd><p>Removes anything contained in the checkpoint directory</p>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._neural.QuaNetTrainer.fit">
+<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">fit_classifier</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_neural.html#QuaNetTrainer.fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._neural.QuaNetTrainer.fit" title="Link to this definition"></a></dt>
+<dd><p>Trains QuaNet.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>data</strong> – the training data on which to train QuaNet. If <cite>fit_classifier=True</cite>, the data will be split in
+40/40/20 for training the classifier, training QuaNet, and validating QuaNet, respectively. If
+<cite>fit_classifier=False</cite>, the data will be split in 66/34 for training QuaNet and validating it, respectively.</p></li>
+<li><p><strong>fit_classifier</strong> – if True, trains the classifier on a split containing 40% of the data</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>self</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._neural.QuaNetTrainer.get_params">
+<span class="sig-name descname"><span class="pre">get_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">deep</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_neural.html#QuaNetTrainer.get_params"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._neural.QuaNetTrainer.get_params" title="Link to this definition"></a></dt>
+<dd><p>Get parameters for this estimator.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>deep</strong> (<em>bool</em><em>, </em><em>default=True</em>) – If True, will return the parameters for this estimator and
+contained subobjects that are estimators.</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p><strong>params</strong> – Parameter names mapped to their values.</p>
+</dd>
+<dt class="field-odd">Return type<span class="colon">:</span></dt>
+<dd class="field-odd"><p>dict</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._neural.QuaNetTrainer.quantify">
+<span class="sig-name descname"><span class="pre">quantify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_neural.html#QuaNetTrainer.quantify"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._neural.QuaNetTrainer.quantify" title="Link to this definition"></a></dt>
+<dd><p>Generate class prevalence estimates for the sample’s instances</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>instances</strong> – array-like</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p><cite>np.ndarray</cite> of shape <cite>(n_classes,)</cite> with class prevalence estimates.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._neural.QuaNetTrainer.set_params">
+<span class="sig-name descname"><span class="pre">set_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">parameters</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_neural.html#QuaNetTrainer.set_params"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._neural.QuaNetTrainer.set_params" title="Link to this definition"></a></dt>
+<dd><p>Set the parameters of this estimator.</p>
+<p>The method works on simple estimators as well as on nested objects
+(such as <code class="xref py py-class docutils literal notranslate"><span class="pre">Pipeline</span></code>). The latter have
+parameters of the form <code class="docutils literal notranslate"><span class="pre">&lt;component&gt;__&lt;parameter&gt;</span></code> so that it’s
+possible to update each component of a nested object.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>**params</strong> (<em>dict</em>) – Estimator parameters.</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p><strong>self</strong> – Estimator instance.</p>
+</dd>
+<dt class="field-odd">Return type<span class="colon">:</span></dt>
+<dd class="field-odd"><p>estimator instance</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="quapy.method._neural.mae_loss">
+<span class="sig-prename descclassname"><span class="pre">quapy.method._neural.</span></span><span class="sig-name descname"><span class="pre">mae_loss</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">output</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">target</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_neural.html#mae_loss"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._neural.mae_loss" title="Link to this definition"></a></dt>
+<dd><p>Torch-like wrapper for the Mean Absolute Error</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>output</strong> – predictions</p></li>
+<li><p><strong>target</strong> – ground truth values</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>mean absolute error loss</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py class" id="module-quapy.method._threshold_optim">
+<dt class="sig sig-object py" id="quapy.method._threshold_optim.MAX">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method._threshold_optim.</span></span><span class="sig-name descname"><span class="pre">MAX</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_threshold_optim.html#MAX"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._threshold_optim.MAX" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method._threshold_optim.ThresholdOptimization" title="quapy.method._threshold_optim.ThresholdOptimization"><code class="xref py py-class docutils literal notranslate"><span class="pre">ThresholdOptimization</span></code></a></p>
+<p>Threshold Optimization variant for <code class="xref py py-class docutils literal notranslate"><span class="pre">ACC</span></code> as proposed by
+<a class="reference external" href="https://dl.acm.org/doi/abs/10.1145/1150402.1150423">Forman 2006</a> and
+<a class="reference external" href="https://link.springer.com/article/10.1007/s10618-008-0097-y">Forman 2008</a> that looks
+for the threshold that maximizes <cite>tpr-fpr</cite>.
+The goal is to bring improved stability to the denominator of the adjustment.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>classifier</strong> – a sklearn’s Estimator that generates a classifier</p></li>
+<li><p><strong>val_split</strong> – indicates the proportion of data to be used as a stratified held-out validation set in which the
+misclassification rates are to be estimated.
+This parameter can be indicated as a real value (between 0 and 1), representing a proportion of
+validation data, or as an integer, indicating that the misclassification rates should be estimated via
+<cite>k</cite>-fold cross validation (this integer stands for the number of folds <cite>k</cite>, defaults 5), or as a
+<a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> (the split itself).</p></li>
+</ul>
+</dd>
+</dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._threshold_optim.MAX.condition">
+<span class="sig-name descname"><span class="pre">condition</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tpr</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fpr</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">float</span></span></span><a class="reference internal" href="_modules/quapy/method/_threshold_optim.html#MAX.condition"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._threshold_optim.MAX.condition" title="Link to this definition"></a></dt>
+<dd><p>Implements the criterion according to which the threshold should be selected.
+This function should return the (float) score to be minimized.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>tpr</strong> – float, true positive rate</p></li>
+<li><p><strong>fpr</strong> – float, false positive rate</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>float, a score for the given <cite>tpr</cite> and <cite>fpr</cite></p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="quapy.method._threshold_optim.MS">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method._threshold_optim.</span></span><span class="sig-name descname"><span class="pre">MS</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_threshold_optim.html#MS"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._threshold_optim.MS" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method._threshold_optim.ThresholdOptimization" title="quapy.method._threshold_optim.ThresholdOptimization"><code class="xref py py-class docutils literal notranslate"><span class="pre">ThresholdOptimization</span></code></a></p>
+<p>Median Sweep. Threshold Optimization variant for <code class="xref py py-class docutils literal notranslate"><span class="pre">ACC</span></code> as proposed by
+<a class="reference external" href="https://dl.acm.org/doi/abs/10.1145/1150402.1150423">Forman 2006</a> and
+<a class="reference external" href="https://link.springer.com/article/10.1007/s10618-008-0097-y">Forman 2008</a> that generates
+class prevalence estimates for all decision thresholds and returns the median of them all.
+The goal is to bring improved stability to the denominator of the adjustment.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>classifier</strong> – a sklearn’s Estimator that generates a classifier</p></li>
+<li><p><strong>val_split</strong> – indicates the proportion of data to be used as a stratified held-out validation set in which the
+misclassification rates are to be estimated.
+This parameter can be indicated as a real value (between 0 and 1), representing a proportion of
+validation data, or as an integer, indicating that the misclassification rates should be estimated via
+<cite>k</cite>-fold cross validation (this integer stands for the number of folds <cite>k</cite>, defaults 5), or as a
+<a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> (the split itself).</p></li>
+</ul>
+</dd>
+</dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._threshold_optim.MS.aggregate">
+<span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">ndarray</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_threshold_optim.html#MS.aggregate"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._threshold_optim.MS.aggregate" title="Link to this definition"></a></dt>
+<dd><p>Implements the aggregation of label predictions.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>classif_predictions</strong> – <cite>np.ndarray</cite> of label predictions</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p><cite>np.ndarray</cite> of shape <cite>(n_classes,)</cite> with class prevalence estimates.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._threshold_optim.MS.aggregation_fit">
+<span class="sig-name descname"><span class="pre">aggregation_fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_threshold_optim.html#MS.aggregation_fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._threshold_optim.MS.aggregation_fit" title="Link to this definition"></a></dt>
+<dd><p>Trains the aggregation function.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>classif_predictions</strong> – a LabelledCollection containing the label predictions issued
+by the classifier</p></li>
+<li><p><strong>data</strong> – a <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> consisting of the training data</p></li>
+</ul>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._threshold_optim.MS.condition">
+<span class="sig-name descname"><span class="pre">condition</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tpr</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fpr</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">float</span></span></span><a class="reference internal" href="_modules/quapy/method/_threshold_optim.html#MS.condition"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._threshold_optim.MS.condition" title="Link to this definition"></a></dt>
+<dd><p>Implements the criterion according to which the threshold should be selected.
+This function should return the (float) score to be minimized.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>tpr</strong> – float, true positive rate</p></li>
+<li><p><strong>fpr</strong> – float, false positive rate</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>float, a score for the given <cite>tpr</cite> and <cite>fpr</cite></p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="quapy.method._threshold_optim.MS2">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method._threshold_optim.</span></span><span class="sig-name descname"><span class="pre">MS2</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_threshold_optim.html#MS2"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._threshold_optim.MS2" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method._threshold_optim.MS" title="quapy.method._threshold_optim.MS"><code class="xref py py-class docutils literal notranslate"><span class="pre">MS</span></code></a></p>
+<p>Median Sweep 2. Threshold Optimization variant for <code class="xref py py-class docutils literal notranslate"><span class="pre">ACC</span></code> as proposed by
+<a class="reference external" href="https://dl.acm.org/doi/abs/10.1145/1150402.1150423">Forman 2006</a> and
+<a class="reference external" href="https://link.springer.com/article/10.1007/s10618-008-0097-y">Forman 2008</a> that generates
+class prevalence estimates for all decision thresholds and returns the median of for cases in
+which <cite>tpr-fpr&gt;0.25</cite>
+The goal is to bring improved stability to the denominator of the adjustment.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>classifier</strong> – a sklearn’s Estimator that generates a classifier</p></li>
+<li><p><strong>val_split</strong> – indicates the proportion of data to be used as a stratified held-out validation set in which the
+misclassification rates are to be estimated.
+This parameter can be indicated as a real value (between 0 and 1), representing a proportion of
+validation data, or as an integer, indicating that the misclassification rates should be estimated via
+<cite>k</cite>-fold cross validation (this integer stands for the number of folds <cite>k</cite>, defaults 5), or as a
+<a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> (the split itself).</p></li>
+</ul>
+</dd>
+</dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._threshold_optim.MS2.discard">
+<span class="sig-name descname"><span class="pre">discard</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tpr</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fpr</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">bool</span></span></span><a class="reference internal" href="_modules/quapy/method/_threshold_optim.html#MS2.discard"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._threshold_optim.MS2.discard" title="Link to this definition"></a></dt>
+<dd><p>Indicates whether a combination of tpr and fpr should be discarded</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>tpr</strong> – float, true positive rate</p></li>
+<li><p><strong>fpr</strong> – float, false positive rate</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>true if the combination is to be discarded, false otherwise</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="quapy.method._threshold_optim.T50">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method._threshold_optim.</span></span><span class="sig-name descname"><span class="pre">T50</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_threshold_optim.html#T50"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._threshold_optim.T50" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method._threshold_optim.ThresholdOptimization" title="quapy.method._threshold_optim.ThresholdOptimization"><code class="xref py py-class docutils literal notranslate"><span class="pre">ThresholdOptimization</span></code></a></p>
+<p>Threshold Optimization variant for <code class="xref py py-class docutils literal notranslate"><span class="pre">ACC</span></code> as proposed by
+<a class="reference external" href="https://dl.acm.org/doi/abs/10.1145/1150402.1150423">Forman 2006</a> and
+<a class="reference external" href="https://link.springer.com/article/10.1007/s10618-008-0097-y">Forman 2008</a> that looks
+for the threshold that makes <cite>tpr</cite> closest to 0.5.
+The goal is to bring improved stability to the denominator of the adjustment.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>classifier</strong> – a sklearn’s Estimator that generates a classifier</p></li>
+<li><p><strong>val_split</strong> – indicates the proportion of data to be used as a stratified held-out validation set in which the
+misclassification rates are to be estimated.
+This parameter can be indicated as a real value (between 0 and 1), representing a proportion of
+validation data, or as an integer, indicating that the misclassification rates should be estimated via
+<cite>k</cite>-fold cross validation (this integer stands for the number of folds <cite>k</cite>, defaults 5), or as a
+<a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> (the split itself).</p></li>
+</ul>
+</dd>
+</dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._threshold_optim.T50.condition">
+<span class="sig-name descname"><span class="pre">condition</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tpr</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fpr</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">float</span></span></span><a class="reference internal" href="_modules/quapy/method/_threshold_optim.html#T50.condition"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._threshold_optim.T50.condition" title="Link to this definition"></a></dt>
+<dd><p>Implements the criterion according to which the threshold should be selected.
+This function should return the (float) score to be minimized.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>tpr</strong> – float, true positive rate</p></li>
+<li><p><strong>fpr</strong> – float, false positive rate</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>float, a score for the given <cite>tpr</cite> and <cite>fpr</cite></p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="quapy.method._threshold_optim.ThresholdOptimization">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method._threshold_optim.</span></span><span class="sig-name descname"><span class="pre">ThresholdOptimization</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_threshold_optim.html#ThresholdOptimization"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._threshold_optim.ThresholdOptimization" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method.aggregative.BinaryAggregativeQuantifier" title="quapy.method.aggregative.BinaryAggregativeQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">BinaryAggregativeQuantifier</span></code></a></p>
+<p>Abstract class of Threshold Optimization variants for <code class="xref py py-class docutils literal notranslate"><span class="pre">ACC</span></code> as proposed by
+<a class="reference external" href="https://dl.acm.org/doi/abs/10.1145/1150402.1150423">Forman 2006</a> and
+<a class="reference external" href="https://link.springer.com/article/10.1007/s10618-008-0097-y">Forman 2008</a>.
+The goal is to bring improved stability to the denominator of the adjustment.
+The different variants are based on different heuristics for choosing a decision threshold
+that would allow for more true positives and many more false positives, on the grounds this
+would deliver larger denominators.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>classifier</strong> – a sklearn’s Estimator that generates a classifier</p></li>
+<li><p><strong>val_split</strong> – indicates the proportion of data to be used as a stratified held-out validation set in which the
+misclassification rates are to be estimated.
+This parameter can be indicated as a real value (between 0 and 1), representing a proportion of
+validation data, or as an integer, indicating that the misclassification rates should be estimated via
+<cite>k</cite>-fold cross validation (this integer stands for the number of folds <cite>k</cite>, defaults 5), or as a
+<a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> (the split itself).</p></li>
+</ul>
+</dd>
+</dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._threshold_optim.ThresholdOptimization.aggregate">
+<span class="sig-name descname"><span class="pre">aggregate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">ndarray</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_threshold_optim.html#ThresholdOptimization.aggregate"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._threshold_optim.ThresholdOptimization.aggregate" title="Link to this definition"></a></dt>
+<dd><p>Implements the aggregation of label predictions.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>classif_predictions</strong> – <cite>np.ndarray</cite> of label predictions</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p><cite>np.ndarray</cite> of shape <cite>(n_classes,)</cite> with class prevalence estimates.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._threshold_optim.ThresholdOptimization.aggregate_with_threshold">
+<span class="sig-name descname"><span class="pre">aggregate_with_threshold</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tprs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fprs</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">thresholds</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_threshold_optim.html#ThresholdOptimization.aggregate_with_threshold"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._threshold_optim.ThresholdOptimization.aggregate_with_threshold" title="Link to this definition"></a></dt>
+<dd></dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._threshold_optim.ThresholdOptimization.aggregation_fit">
+<span class="sig-name descname"><span class="pre">aggregation_fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classif_predictions</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_threshold_optim.html#ThresholdOptimization.aggregation_fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._threshold_optim.ThresholdOptimization.aggregation_fit" title="Link to this definition"></a></dt>
+<dd><p>Trains the aggregation function.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>classif_predictions</strong> – a LabelledCollection containing the label predictions issued
+by the classifier</p></li>
+<li><p><strong>data</strong> – a <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> consisting of the training data</p></li>
+</ul>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._threshold_optim.ThresholdOptimization.condition">
+<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">condition</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tpr</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fpr</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">float</span></span></span><a class="reference internal" href="_modules/quapy/method/_threshold_optim.html#ThresholdOptimization.condition"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._threshold_optim.ThresholdOptimization.condition" title="Link to this definition"></a></dt>
+<dd><p>Implements the criterion according to which the threshold should be selected.
+This function should return the (float) score to be minimized.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>tpr</strong> – float, true positive rate</p></li>
+<li><p><strong>fpr</strong> – float, false positive rate</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>float, a score for the given <cite>tpr</cite> and <cite>fpr</cite></p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._threshold_optim.ThresholdOptimization.discard">
+<span class="sig-name descname"><span class="pre">discard</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tpr</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fpr</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">bool</span></span></span><a class="reference internal" href="_modules/quapy/method/_threshold_optim.html#ThresholdOptimization.discard"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._threshold_optim.ThresholdOptimization.discard" title="Link to this definition"></a></dt>
+<dd><p>Indicates whether a combination of tpr and fpr should be discarded</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>tpr</strong> – float, true positive rate</p></li>
+<li><p><strong>fpr</strong> – float, false positive rate</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>true if the combination is to be discarded, false otherwise</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="quapy.method._threshold_optim.X">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method._threshold_optim.</span></span><span class="sig-name descname"><span class="pre">X</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BaseEstimator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/_threshold_optim.html#X"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._threshold_optim.X" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method._threshold_optim.ThresholdOptimization" title="quapy.method._threshold_optim.ThresholdOptimization"><code class="xref py py-class docutils literal notranslate"><span class="pre">ThresholdOptimization</span></code></a></p>
+<p>Threshold Optimization variant for <code class="xref py py-class docutils literal notranslate"><span class="pre">ACC</span></code> as proposed by
+<a class="reference external" href="https://dl.acm.org/doi/abs/10.1145/1150402.1150423">Forman 2006</a> and
+<a class="reference external" href="https://link.springer.com/article/10.1007/s10618-008-0097-y">Forman 2008</a> that looks
+for the threshold that yields <cite>tpr=1-fpr</cite>.
+The goal is to bring improved stability to the denominator of the adjustment.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>classifier</strong> – a sklearn’s Estimator that generates a classifier</p></li>
+<li><p><strong>val_split</strong> – indicates the proportion of data to be used as a stratified held-out validation set in which the
+misclassification rates are to be estimated.
+This parameter can be indicated as a real value (between 0 and 1), representing a proportion of
+validation data, or as an integer, indicating that the misclassification rates should be estimated via
+<cite>k</cite>-fold cross validation (this integer stands for the number of folds <cite>k</cite>, defaults 5), or as a
+<a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> (the split itself).</p></li>
+</ul>
+</dd>
+</dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method._threshold_optim.X.condition">
+<span class="sig-name descname"><span class="pre">condition</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tpr</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fpr</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">float</span></span></span><a class="reference internal" href="_modules/quapy/method/_threshold_optim.html#X.condition"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method._threshold_optim.X.condition" title="Link to this definition"></a></dt>
+<dd><p>Implements the criterion according to which the threshold should be selected.
+This function should return the (float) score to be minimized.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>tpr</strong> – float, true positive rate</p></li>
+<li><p><strong>fpr</strong> – float, false positive rate</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>float, a score for the given <cite>tpr</cite> and <cite>fpr</cite></p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
 </section>
 <section id="module-quapy.method.base">
-<span id="quapy-method-base"></span><h2>quapy.method.base<a class="headerlink" href="#module-quapy.method.base" title="Permalink to this heading">¶</a></h2>
+<span id="quapy-method-base-module"></span><h2>quapy.method.base module<a class="headerlink" href="#module-quapy.method.base" title="Link to this heading"></a></h2>
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.method.base.BaseQuantifier">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.base.</span></span><span class="sig-name descname"><span class="pre">BaseQuantifier</span></span><a class="headerlink" href="#quapy.method.base.BaseQuantifier" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.base.</span></span><span class="sig-name descname"><span class="pre">BaseQuantifier</span></span><a class="reference internal" href="_modules/quapy/method/base.html#BaseQuantifier"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.base.BaseQuantifier" title="Link to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">BaseEstimator</span></code></p>
 <p>Abstract Quantifier. A quantifier is defined as an object of a class that implements the method <a class="reference internal" href="#quapy.method.base.BaseQuantifier.fit" title="quapy.method.base.BaseQuantifier.fit"><code class="xref py py-meth docutils literal notranslate"><span class="pre">fit()</span></code></a> on
 <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a>, the method <a class="reference internal" href="#quapy.method.base.BaseQuantifier.quantify" title="quapy.method.base.BaseQuantifier.quantify"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quantify()</span></code></a>, and the <code class="xref py py-meth docutils literal notranslate"><span class="pre">set_params()</span></code> and
 <code class="xref py py-meth docutils literal notranslate"><span class="pre">get_params()</span></code> for model selection (see <a class="reference internal" href="quapy.html#quapy.model_selection.GridSearchQ" title="quapy.model_selection.GridSearchQ"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quapy.model_selection.GridSearchQ()</span></code></a>)</p>
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.base.BaseQuantifier.fit">
-<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.base.BaseQuantifier.fit" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/base.html#BaseQuantifier.fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.base.BaseQuantifier.fit" title="Link to this definition"></a></dt>
 <dd><p>Trains a quantifier.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -1246,7 +2098,7 @@ underlying classifier</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.base.BaseQuantifier.quantify">
-<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">quantify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.base.BaseQuantifier.quantify" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">quantify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/base.html#BaseQuantifier.quantify"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.base.BaseQuantifier.quantify" title="Link to this definition"></a></dt>
 <dd><p>Generate class prevalence estimates for the sample’s instances</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -1262,7 +2114,7 @@ underlying classifier</p>
 
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.method.base.BinaryQuantifier">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.base.</span></span><span class="sig-name descname"><span class="pre">BinaryQuantifier</span></span><a class="headerlink" href="#quapy.method.base.BinaryQuantifier" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.base.</span></span><span class="sig-name descname"><span class="pre">BinaryQuantifier</span></span><a class="reference internal" href="_modules/quapy/method/base.html#BinaryQuantifier"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.base.BinaryQuantifier" title="Link to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#quapy.method.base.BaseQuantifier" title="quapy.method.base.BaseQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">BaseQuantifier</span></code></a></p>
 <p>Abstract class of binary quantifiers, i.e., quantifiers estimating class prevalence values for only two classes
 (typically, to be interpreted as one class and its complement).</p>
@@ -1270,24 +2122,24 @@ underlying classifier</p>
 
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.method.base.OneVsAll">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.base.</span></span><span class="sig-name descname"><span class="pre">OneVsAll</span></span><a class="headerlink" href="#quapy.method.base.OneVsAll" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.base.</span></span><span class="sig-name descname"><span class="pre">OneVsAll</span></span><a class="reference internal" href="_modules/quapy/method/base.html#OneVsAll"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.base.OneVsAll" title="Link to this definition"></a></dt>
 <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
 </dd></dl>
 
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.method.base.OneVsAllGeneric">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.base.</span></span><span class="sig-name descname"><span class="pre">OneVsAllGeneric</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">binary_quantifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.base.OneVsAllGeneric" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.base.</span></span><span class="sig-name descname"><span class="pre">OneVsAllGeneric</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">binary_quantifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/base.html#OneVsAllGeneric"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.base.OneVsAllGeneric" title="Link to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#quapy.method.base.OneVsAll" title="quapy.method.base.OneVsAll"><code class="xref py py-class docutils literal notranslate"><span class="pre">OneVsAll</span></code></a>, <a class="reference internal" href="#quapy.method.base.BaseQuantifier" title="quapy.method.base.BaseQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">BaseQuantifier</span></code></a></p>
 <p>Allows any binary quantifier to perform quantification on single-label datasets. The method maintains one binary
 quantifier for each class, and then l1-normalizes the outputs so that the class prevelence values sum up to 1.</p>
 <dl class="py property">
 <dt class="sig sig-object py" id="quapy.method.base.OneVsAllGeneric.classes_">
-<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">classes_</span></span><a class="headerlink" href="#quapy.method.base.OneVsAllGeneric.classes_" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">classes_</span></span><a class="headerlink" href="#quapy.method.base.OneVsAllGeneric.classes_" title="Link to this definition"></a></dt>
 <dd></dd></dl>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.base.OneVsAllGeneric.fit">
-<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">fit_classifier</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.base.OneVsAllGeneric.fit" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">fit_classifier</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/base.html#OneVsAllGeneric.fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.base.OneVsAllGeneric.fit" title="Link to this definition"></a></dt>
 <dd><p>Trains a quantifier.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -1301,7 +2153,7 @@ quantifier for each class, and then l1-normalizes the outputs so that the class
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.base.OneVsAllGeneric.quantify">
-<span class="sig-name descname"><span class="pre">quantify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.base.OneVsAllGeneric.quantify" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">quantify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/base.html#OneVsAllGeneric.quantify"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.base.OneVsAllGeneric.quantify" title="Link to this definition"></a></dt>
 <dd><p>Generate class prevalence estimates for the sample’s instances</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -1317,15 +2169,15 @@ quantifier for each class, and then l1-normalizes the outputs so that the class
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.method.base.newOneVsAll">
-<span class="sig-prename descclassname"><span class="pre">quapy.method.base.</span></span><span class="sig-name descname"><span class="pre">newOneVsAll</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">binary_quantifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.base.newOneVsAll" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.method.base.</span></span><span class="sig-name descname"><span class="pre">newOneVsAll</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">binary_quantifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/base.html#newOneVsAll"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.base.newOneVsAll" title="Link to this definition"></a></dt>
 <dd></dd></dl>
 
 </section>
 <section id="module-quapy.method.meta">
-<span id="quapy-method-meta"></span><h2>quapy.method.meta<a class="headerlink" href="#module-quapy.method.meta" title="Permalink to this heading">¶</a></h2>
+<span id="quapy-method-meta-module"></span><h2>quapy.method.meta module<a class="headerlink" href="#module-quapy.method.meta" title="Link to this heading"></a></h2>
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.method.meta.EACC">
-<span class="sig-prename descclassname"><span class="pre">quapy.method.meta.</span></span><span class="sig-name descname"><span class="pre">EACC</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_grid</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">optim</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_mod_sel</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.meta.EACC" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.method.meta.</span></span><span class="sig-name descname"><span class="pre">EACC</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_grid</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">optim</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_mod_sel</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/meta.html#EACC"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.meta.EACC" title="Link to this definition"></a></dt>
 <dd><p>Implements an ensemble of <a class="reference internal" href="#quapy.method.aggregative.ACC" title="quapy.method.aggregative.ACC"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.method.aggregative.ACC</span></code></a> quantifiers, as used by
 <a class="reference external" href="https://www.sciencedirect.com/science/article/pii/S1566253517303652">Pérez-Gállego et al., 2019</a>.</p>
 <p>Equivalent to:</p>
@@ -1352,7 +2204,7 @@ quantifier for each class, and then l1-normalizes the outputs so that the class
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.method.meta.ECC">
-<span class="sig-prename descclassname"><span class="pre">quapy.method.meta.</span></span><span class="sig-name descname"><span class="pre">ECC</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_grid</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">optim</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_mod_sel</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.meta.ECC" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.method.meta.</span></span><span class="sig-name descname"><span class="pre">ECC</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_grid</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">optim</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_mod_sel</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/meta.html#ECC"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.meta.ECC" title="Link to this definition"></a></dt>
 <dd><p>Implements an ensemble of <a class="reference internal" href="#quapy.method.aggregative.CC" title="quapy.method.aggregative.CC"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.method.aggregative.CC</span></code></a> quantifiers, as used by
 <a class="reference external" href="https://www.sciencedirect.com/science/article/pii/S1566253517303652">Pérez-Gállego et al., 2019</a>.</p>
 <p>Equivalent to:</p>
@@ -1379,7 +2231,7 @@ quantifier for each class, and then l1-normalizes the outputs so that the class
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.method.meta.EEMQ">
-<span class="sig-prename descclassname"><span class="pre">quapy.method.meta.</span></span><span class="sig-name descname"><span class="pre">EEMQ</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_grid</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">optim</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_mod_sel</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.meta.EEMQ" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.method.meta.</span></span><span class="sig-name descname"><span class="pre">EEMQ</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_grid</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">optim</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_mod_sel</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/meta.html#EEMQ"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.meta.EEMQ" title="Link to this definition"></a></dt>
 <dd><p>Implements an ensemble of <a class="reference internal" href="#quapy.method.aggregative.EMQ" title="quapy.method.aggregative.EMQ"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.method.aggregative.EMQ</span></code></a> quantifiers.</p>
 <p>Equivalent to:</p>
 <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">ensembleFactory</span><span class="p">(</span><span class="n">classifier</span><span class="p">,</span> <span class="n">EMQ</span><span class="p">,</span> <span class="n">param_grid</span><span class="p">,</span> <span class="n">optim</span><span class="p">,</span> <span class="n">param_mod_sel</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
@@ -1405,7 +2257,7 @@ quantifier for each class, and then l1-normalizes the outputs so that the class
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.method.meta.EHDy">
-<span class="sig-prename descclassname"><span class="pre">quapy.method.meta.</span></span><span class="sig-name descname"><span class="pre">EHDy</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_grid</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">optim</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_mod_sel</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.meta.EHDy" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.method.meta.</span></span><span class="sig-name descname"><span class="pre">EHDy</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_grid</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">optim</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_mod_sel</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/meta.html#EHDy"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.meta.EHDy" title="Link to this definition"></a></dt>
 <dd><p>Implements an ensemble of <a class="reference internal" href="#quapy.method.aggregative.HDy" title="quapy.method.aggregative.HDy"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.method.aggregative.HDy</span></code></a> quantifiers, as used by
 <a class="reference external" href="https://www.sciencedirect.com/science/article/pii/S1566253517303652">Pérez-Gállego et al., 2019</a>.</p>
 <p>Equivalent to:</p>
@@ -1432,7 +2284,7 @@ quantifier for each class, and then l1-normalizes the outputs so that the class
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.method.meta.EPACC">
-<span class="sig-prename descclassname"><span class="pre">quapy.method.meta.</span></span><span class="sig-name descname"><span class="pre">EPACC</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_grid</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">optim</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_mod_sel</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.meta.EPACC" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.method.meta.</span></span><span class="sig-name descname"><span class="pre">EPACC</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_grid</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">optim</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_mod_sel</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/meta.html#EPACC"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.meta.EPACC" title="Link to this definition"></a></dt>
 <dd><p>Implements an ensemble of <a class="reference internal" href="#quapy.method.aggregative.PACC" title="quapy.method.aggregative.PACC"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.method.aggregative.PACC</span></code></a> quantifiers.</p>
 <p>Equivalent to:</p>
 <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">ensembleFactory</span><span class="p">(</span><span class="n">classifier</span><span class="p">,</span> <span class="n">PACC</span><span class="p">,</span> <span class="n">param_grid</span><span class="p">,</span> <span class="n">optim</span><span class="p">,</span> <span class="n">param_mod_sel</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
@@ -1458,11 +2310,11 @@ quantifier for each class, and then l1-normalizes the outputs so that the class
 
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.method.meta.Ensemble">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.meta.</span></span><span class="sig-name descname"><span class="pre">Ensemble</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">quantifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.method.base.BaseQuantifier" title="quapy.method.base.BaseQuantifier"><span class="pre">BaseQuantifier</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">50</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">red_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">25</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">min_pos</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">policy</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'ave'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">max_sample_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">float</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.meta.Ensemble" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.meta.</span></span><span class="sig-name descname"><span class="pre">Ensemble</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">quantifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.method.base.BaseQuantifier" title="quapy.method.base.BaseQuantifier"><span class="pre">BaseQuantifier</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">50</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">red_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">25</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">min_pos</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">policy</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'ave'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">max_sample_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">float</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">verbose</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/meta.html#Ensemble"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.meta.Ensemble" title="Link to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#quapy.method.base.BaseQuantifier" title="quapy.method.base.BaseQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">BaseQuantifier</span></code></a></p>
 <dl class="py attribute">
 <dt class="sig sig-object py" id="quapy.method.meta.Ensemble.VALID_POLICIES">
-<span class="sig-name descname"><span class="pre">VALID_POLICIES</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'ave',</span> <span class="pre">'ds',</span> <span class="pre">'mae',</span> <span class="pre">'mkld',</span> <span class="pre">'mnkld',</span> <span class="pre">'mrae',</span> <span class="pre">'mse',</span> <span class="pre">'ptr'}</span></em><a class="headerlink" href="#quapy.method.meta.Ensemble.VALID_POLICIES" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">VALID_POLICIES</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'ave',</span> <span class="pre">'ds',</span> <span class="pre">'mae',</span> <span class="pre">'mkld',</span> <span class="pre">'mnae',</span> <span class="pre">'mnkld',</span> <span class="pre">'mnrae',</span> <span class="pre">'mrae',</span> <span class="pre">'mse',</span> <span class="pre">'ptr'}</span></em><a class="headerlink" href="#quapy.method.meta.Ensemble.VALID_POLICIES" title="Link to this definition"></a></dt>
 <dd><p>Implementation of the Ensemble methods for quantification described by
 <a class="reference external" href="https://www.sciencedirect.com/science/article/pii/S1566253516300628">Pérez-Gállego et al., 2017</a>
 and
@@ -1507,7 +2359,7 @@ validation split, or a <a class="reference internal" href="quapy.data.html#quapy
 
 <dl class="py property">
 <dt class="sig sig-object py" id="quapy.method.meta.Ensemble.aggregative">
-<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">aggregative</span></span><a class="headerlink" href="#quapy.method.meta.Ensemble.aggregative" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">aggregative</span></span><a class="headerlink" href="#quapy.method.meta.Ensemble.aggregative" title="Link to this definition"></a></dt>
 <dd><p>Indicates that the quantifier is not aggregative.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns<span class="colon">:</span></dt>
@@ -1518,7 +2370,7 @@ validation split, or a <a class="reference internal" href="quapy.data.html#quapy
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.meta.Ensemble.fit">
-<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">float</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.meta.Ensemble.fit" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_split</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">float</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/meta.html#Ensemble.fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.meta.Ensemble.fit" title="Link to this definition"></a></dt>
 <dd><p>Trains a quantifier.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -1532,7 +2384,7 @@ validation split, or a <a class="reference internal" href="quapy.data.html#quapy
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.meta.Ensemble.get_params">
-<span class="sig-name descname"><span class="pre">get_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">deep</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.meta.Ensemble.get_params" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">get_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">deep</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/meta.html#Ensemble.get_params"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.meta.Ensemble.get_params" title="Link to this definition"></a></dt>
 <dd><p>This function should not be used within <a class="reference internal" href="quapy.html#quapy.model_selection.GridSearchQ" title="quapy.model_selection.GridSearchQ"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.model_selection.GridSearchQ</span></code></a> (is here for compatibility
 with the abstract class).
 Instead, use <cite>Ensemble(GridSearchQ(q),…)</cite>, with <cite>q</cite> a Quantifier (recommended), or
@@ -1550,7 +2402,7 @@ classification (not recommended).</p>
 
 <dl class="py property">
 <dt class="sig sig-object py" id="quapy.method.meta.Ensemble.probabilistic">
-<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">probabilistic</span></span><a class="headerlink" href="#quapy.method.meta.Ensemble.probabilistic" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">probabilistic</span></span><a class="headerlink" href="#quapy.method.meta.Ensemble.probabilistic" title="Link to this definition"></a></dt>
 <dd><p>Indicates that the quantifier is not probabilistic.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Returns<span class="colon">:</span></dt>
@@ -1561,7 +2413,7 @@ classification (not recommended).</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.meta.Ensemble.quantify">
-<span class="sig-name descname"><span class="pre">quantify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.meta.Ensemble.quantify" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">quantify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/meta.html#Ensemble.quantify"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.meta.Ensemble.quantify" title="Link to this definition"></a></dt>
 <dd><p>Generate class prevalence estimates for the sample’s instances</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -1575,7 +2427,7 @@ classification (not recommended).</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.meta.Ensemble.set_params">
-<span class="sig-name descname"><span class="pre">set_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">parameters</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.meta.Ensemble.set_params" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">set_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">parameters</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/meta.html#Ensemble.set_params"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.meta.Ensemble.set_params" title="Link to this definition"></a></dt>
 <dd><p>This function should not be used within <a class="reference internal" href="quapy.html#quapy.model_selection.GridSearchQ" title="quapy.model_selection.GridSearchQ"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.model_selection.GridSearchQ</span></code></a> (is here for compatibility
 with the abstract class).
 Instead, use <cite>Ensemble(GridSearchQ(q),…)</cite>, with <cite>q</cite> a Quantifier (recommended), or
@@ -1593,9 +2445,183 @@ classification (not recommended).</p>
 
 </dd></dl>
 
+<dl class="py class">
+<dt class="sig sig-object py" id="quapy.method.meta.MedianEstimator">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.meta.</span></span><span class="sig-name descname"><span class="pre">MedianEstimator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">base_quantifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.method.base.BinaryQuantifier" title="quapy.method.base.BinaryQuantifier"><span class="pre">BinaryQuantifier</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_grid</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/meta.html#MedianEstimator"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.meta.MedianEstimator" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method.base.BinaryQuantifier" title="quapy.method.base.BinaryQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">BinaryQuantifier</span></code></a></p>
+<p>This method is a meta-quantifier that returns, as the estimated class prevalence values, the median of the
+estimation returned by differently (hyper)parameterized base quantifiers.
+The median of unit-vectors is only guaranteed to be a unit-vector for n=2 dimensions,
+i.e., in cases of binary quantification.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>base_quantifier</strong> – the base, binary quantifier</p></li>
+<li><p><strong>random_state</strong> – a seed to be set before fitting any base quantifier (default None)</p></li>
+<li><p><strong>param_grid</strong> – the grid or parameters towards which the median will be computed</p></li>
+<li><p><strong>n_jobs</strong> – number of parllel workes</p></li>
+</ul>
+</dd>
+</dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method.meta.MedianEstimator.fit">
+<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">training</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/meta.html#MedianEstimator.fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.meta.MedianEstimator.fit" title="Link to this definition"></a></dt>
+<dd><p>Trains a quantifier.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>data</strong> – a <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> consisting of the training data</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>self</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method.meta.MedianEstimator.get_params">
+<span class="sig-name descname"><span class="pre">get_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">deep</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/meta.html#MedianEstimator.get_params"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.meta.MedianEstimator.get_params" title="Link to this definition"></a></dt>
+<dd><p>Get parameters for this estimator.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>deep</strong> (<em>bool</em><em>, </em><em>default=True</em>) – If True, will return the parameters for this estimator and
+contained subobjects that are estimators.</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p><strong>params</strong> – Parameter names mapped to their values.</p>
+</dd>
+<dt class="field-odd">Return type<span class="colon">:</span></dt>
+<dd class="field-odd"><p>dict</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method.meta.MedianEstimator.quantify">
+<span class="sig-name descname"><span class="pre">quantify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/meta.html#MedianEstimator.quantify"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.meta.MedianEstimator.quantify" title="Link to this definition"></a></dt>
+<dd><p>Generate class prevalence estimates for the sample’s instances</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>instances</strong> – array-like</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p><cite>np.ndarray</cite> of shape <cite>(n_classes,)</cite> with class prevalence estimates.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method.meta.MedianEstimator.set_params">
+<span class="sig-name descname"><span class="pre">set_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">params</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/meta.html#MedianEstimator.set_params"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.meta.MedianEstimator.set_params" title="Link to this definition"></a></dt>
+<dd><p>Set the parameters of this estimator.</p>
+<p>The method works on simple estimators as well as on nested objects
+(such as <code class="xref py py-class docutils literal notranslate"><span class="pre">Pipeline</span></code>). The latter have
+parameters of the form <code class="docutils literal notranslate"><span class="pre">&lt;component&gt;__&lt;parameter&gt;</span></code> so that it’s
+possible to update each component of a nested object.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>**params</strong> (<em>dict</em>) – Estimator parameters.</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p><strong>self</strong> – Estimator instance.</p>
+</dd>
+<dt class="field-odd">Return type<span class="colon">:</span></dt>
+<dd class="field-odd"><p>estimator instance</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="quapy.method.meta.MedianEstimator2">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.meta.</span></span><span class="sig-name descname"><span class="pre">MedianEstimator2</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">base_quantifier</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#quapy.method.base.BinaryQuantifier" title="quapy.method.base.BinaryQuantifier"><span class="pre">BinaryQuantifier</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_grid</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">random_state</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/meta.html#MedianEstimator2"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.meta.MedianEstimator2" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method.base.BinaryQuantifier" title="quapy.method.base.BinaryQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">BinaryQuantifier</span></code></a></p>
+<p>This method is a meta-quantifier that returns, as the estimated class prevalence values, the median of the
+estimation returned by differently (hyper)parameterized base quantifiers.
+The median of unit-vectors is only guaranteed to be a unit-vector for n=2 dimensions,
+i.e., in cases of binary quantification.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>base_quantifier</strong> – the base, binary quantifier</p></li>
+<li><p><strong>random_state</strong> – a seed to be set before fitting any base quantifier (default None)</p></li>
+<li><p><strong>param_grid</strong> – the grid or parameters towards which the median will be computed</p></li>
+<li><p><strong>n_jobs</strong> – number of parllel workes</p></li>
+</ul>
+</dd>
+</dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method.meta.MedianEstimator2.fit">
+<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">training</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/meta.html#MedianEstimator2.fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.meta.MedianEstimator2.fit" title="Link to this definition"></a></dt>
+<dd><p>Trains a quantifier.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>data</strong> – a <a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.data.base.LabelledCollection</span></code></a> consisting of the training data</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>self</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method.meta.MedianEstimator2.get_params">
+<span class="sig-name descname"><span class="pre">get_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">deep</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/meta.html#MedianEstimator2.get_params"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.meta.MedianEstimator2.get_params" title="Link to this definition"></a></dt>
+<dd><p>Get parameters for this estimator.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>deep</strong> (<em>bool</em><em>, </em><em>default=True</em>) – If True, will return the parameters for this estimator and
+contained subobjects that are estimators.</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p><strong>params</strong> – Parameter names mapped to their values.</p>
+</dd>
+<dt class="field-odd">Return type<span class="colon">:</span></dt>
+<dd class="field-odd"><p>dict</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method.meta.MedianEstimator2.quantify">
+<span class="sig-name descname"><span class="pre">quantify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/meta.html#MedianEstimator2.quantify"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.meta.MedianEstimator2.quantify" title="Link to this definition"></a></dt>
+<dd><p>Generate class prevalence estimates for the sample’s instances</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>instances</strong> – array-like</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p><cite>np.ndarray</cite> of shape <cite>(n_classes,)</cite> with class prevalence estimates.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method.meta.MedianEstimator2.set_params">
+<span class="sig-name descname"><span class="pre">set_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">params</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/meta.html#MedianEstimator2.set_params"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.meta.MedianEstimator2.set_params" title="Link to this definition"></a></dt>
+<dd><p>Set the parameters of this estimator.</p>
+<p>The method works on simple estimators as well as on nested objects
+(such as <code class="xref py py-class docutils literal notranslate"><span class="pre">Pipeline</span></code>). The latter have
+parameters of the form <code class="docutils literal notranslate"><span class="pre">&lt;component&gt;__&lt;parameter&gt;</span></code> so that it’s
+possible to update each component of a nested object.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>**params</strong> (<em>dict</em>) – Estimator parameters.</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p><strong>self</strong> – Estimator instance.</p>
+</dd>
+<dt class="field-odd">Return type<span class="colon">:</span></dt>
+<dd class="field-odd"><p>estimator instance</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.method.meta.ensembleFactory">
-<span class="sig-prename descclassname"><span class="pre">quapy.method.meta.</span></span><span class="sig-name descname"><span class="pre">ensembleFactory</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">base_quantifier_class</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_grid</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">optim</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_model_sel</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">dict</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.meta.ensembleFactory" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.method.meta.</span></span><span class="sig-name descname"><span class="pre">ensembleFactory</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">base_quantifier_class</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_grid</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">optim</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">param_model_sel</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/meta.html#ensembleFactory"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.meta.ensembleFactory" title="Link to this definition"></a></dt>
 <dd><p>Ensemble factory. Provides a unified interface for instantiating ensembles that can be optimized (via model
 selection for quantification) for a given evaluation metric using <a class="reference internal" href="quapy.html#quapy.model_selection.GridSearchQ" title="quapy.model_selection.GridSearchQ"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.model_selection.GridSearchQ</span></code></a>.
 If the evaluation metric is classification-oriented
@@ -1645,7 +2671,7 @@ in terms of this error.</p>
 
 <dl class="py function">
 <dt class="sig sig-object py" id="quapy.method.meta.get_probability_distribution">
-<span class="sig-prename descclassname"><span class="pre">quapy.method.meta.</span></span><span class="sig-name descname"><span class="pre">get_probability_distribution</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">posterior_probabilities</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bins</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">8</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.meta.get_probability_distribution" title="Permalink to this definition">¶</a></dt>
+<span class="sig-prename descclassname"><span class="pre">quapy.method.meta.</span></span><span class="sig-name descname"><span class="pre">get_probability_distribution</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">posterior_probabilities</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bins</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">8</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/meta.html#get_probability_distribution"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.meta.get_probability_distribution" title="Link to this definition"></a></dt>
 <dd><p>Gets a histogram out of the posterior probabilities (only for the binary case).</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -1661,225 +2687,92 @@ in terms of this error.</p>
 </dd></dl>
 
 </section>
-<section id="module-quapy.method.neural">
-<span id="quapy-method-neural"></span><h2>quapy.method.neural<a class="headerlink" href="#module-quapy.method.neural" title="Permalink to this heading">¶</a></h2>
+<section id="module-quapy.method.non_aggregative">
+<span id="quapy-method-non-aggregative-module"></span><h2>quapy.method.non_aggregative module<a class="headerlink" href="#module-quapy.method.non_aggregative" title="Link to this heading"></a></h2>
 <dl class="py class">
-<dt class="sig sig-object py" id="quapy.method.neural.QuaNetModule">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.neural.</span></span><span class="sig-name descname"><span class="pre">QuaNetModule</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">doc_embedding_size</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_classes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">stats_size</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lstm_hidden_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">64</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lstm_nlayers</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ff_layers</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[1024,</span> <span class="pre">512]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bidirectional</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">qdrop_p</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">order_by</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.neural.QuaNetModule" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Module</span></code></p>
-<p>Implements the <a class="reference external" href="https://dl.acm.org/doi/abs/10.1145/3269206.3269287">QuaNet</a> forward pass.
-See <a class="reference internal" href="#quapy.method.neural.QuaNetTrainer" title="quapy.method.neural.QuaNetTrainer"><code class="xref py py-class docutils literal notranslate"><span class="pre">QuaNetTrainer</span></code></a> for training QuaNet.</p>
+<dt class="sig sig-object py" id="quapy.method.non_aggregative.DMx">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.non_aggregative.</span></span><span class="sig-name descname"><span class="pre">DMx</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">nbins</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">8</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">divergence</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">Callable</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'HD'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">cdf</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">search</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'optim_minimize'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/non_aggregative.html#DMx"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.non_aggregative.DMx" title="Link to this definition"></a></dt>
+<dd><p>Bases: <a class="reference internal" href="#quapy.method.base.BaseQuantifier" title="quapy.method.base.BaseQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">BaseQuantifier</span></code></a></p>
+<p>Generic Distribution Matching quantifier for binary or multiclass quantification based on the space of covariates.
+This implementation takes the number of bins, the divergence, and the possibility to work on CDF as hyperparameters.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
 <dd class="field-odd"><ul class="simple">
-<li><p><strong>doc_embedding_size</strong> – integer, the dimensionality of the document embeddings</p></li>
-<li><p><strong>n_classes</strong> – integer, number of classes</p></li>
-<li><p><strong>stats_size</strong> – integer, number of statistics estimated by simple quantification methods</p></li>
-<li><p><strong>lstm_hidden_size</strong> – integer, hidden dimensionality of the LSTM cell</p></li>
-<li><p><strong>lstm_nlayers</strong> – integer, number of LSTM layers</p></li>
-<li><p><strong>ff_layers</strong> – list of integers, dimensions of the densely-connected FF layers on top of the
-quantification embedding</p></li>
-<li><p><strong>bidirectional</strong> – boolean, whether or not to use bidirectional LSTM</p></li>
-<li><p><strong>qdrop_p</strong> – float, dropout probability</p></li>
-<li><p><strong>order_by</strong> – integer, class for which the document embeddings are to be sorted</p></li>
+<li><p><strong>nbins</strong> – number of bins used to discretize the distributions (default 8)</p></li>
+<li><p><strong>divergence</strong> – a string representing a divergence measure (currently, “HD” and “topsoe” are implemented)
+or a callable function taking two ndarrays of the same dimension as input (default “HD”, meaning Hellinger
+Distance)</p></li>
+<li><p><strong>cdf</strong> – whether to use CDF instead of PDF (default False)</p></li>
+<li><p><strong>n_jobs</strong> – number of parallel workers (default None)</p></li>
 </ul>
 </dd>
 </dl>
-<dl class="py property">
-<dt class="sig sig-object py" id="quapy.method.neural.QuaNetModule.device">
-<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">device</span></span><a class="headerlink" href="#quapy.method.neural.QuaNetModule.device" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method.non_aggregative.DMx.HDx">
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">HDx</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">n_jobs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/non_aggregative.html#DMx.HDx"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.non_aggregative.DMx.HDx" title="Link to this definition"></a></dt>
+<dd><p><a class="reference external" href="https://www.sciencedirect.com/science/article/pii/S0020025512004069">Hellinger Distance x</a> (HDx).
+HDx is a method for training binary quantifiers, that models quantification as the problem of
+minimizing the average divergence (in terms of the Hellinger Distance) across the feature-specific normalized
+histograms of two representations, one for the unlabelled examples, and another generated from the training
+examples as a mixture model of the class-specific representations. The parameters of the mixture thus represent
+the estimates of the class prevalence values.</p>
+<p>The method computes all matchings for nbins in [10, 20, …, 110] and reports the mean of the median.
+The best prevalence is searched via linear search, from 0 to 1 stepping by 0.01.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>n_jobs</strong> – number of parallel workers</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>an instance of this class setup to mimick the performance of the HDx as originally proposed by
+González-Castro, Alaiz-Rodríguez, Alegre (2013)</p>
+</dd>
+</dl>
+</dd></dl>
 
 <dl class="py method">
-<dt class="sig sig-object py" id="quapy.method.neural.QuaNetModule.forward">
-<span class="sig-name descname"><span class="pre">forward</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">doc_embeddings</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">doc_posteriors</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">statistics</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.neural.QuaNetModule.forward" title="Permalink to this definition">¶</a></dt>
-<dd><p>Defines the computation performed at every call.</p>
-<p>Should be overridden by all subclasses.</p>
-<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>Although the recipe for forward pass needs to be defined within
-this function, one should call the <code class="xref py py-class docutils literal notranslate"><span class="pre">Module</span></code> instance afterwards
-instead of this since the former takes care of running the
-registered hooks while the latter silently ignores them.</p>
-</div>
+<dt class="sig sig-object py" id="quapy.method.non_aggregative.DMx.fit">
+<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/non_aggregative.html#DMx.fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.non_aggregative.DMx.fit" title="Link to this definition"></a></dt>
+<dd><p>Generates the validation distributions out of the training data (covariates).
+The validation distributions have shape <cite>(n, nfeats, nbins)</cite>, with <cite>n</cite> the number of classes, <cite>nfeats</cite>
+the number of features, and <cite>nbins</cite> the number of bins.
+In particular, let <cite>V</cite> be the validation distributions; then <cite>di=V[i]</cite> are the distributions obtained from
+training data labelled with class <cite>i</cite>; while <cite>dij = di[j]</cite> is the discrete distribution for feature j in
+training data labelled with class <cite>i</cite>, and <cite>dij[k]</cite> is the fraction of instances with a value in the <cite>k</cite>-th bin.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>data</strong> – the training set</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="quapy.method.non_aggregative.DMx.quantify">
+<span class="sig-name descname"><span class="pre">quantify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/non_aggregative.html#DMx.quantify"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.non_aggregative.DMx.quantify" title="Link to this definition"></a></dt>
+<dd><p>Searches for the mixture model parameter (the sought prevalence values) that yields a validation distribution
+(the mixture) that best matches the test distribution, in terms of the divergence measure of choice.
+The matching is computed as the average dissimilarity (in terms of the dissimilarity measure of choice)
+between all feature-specific discrete distributions.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>instances</strong> – instances in the sample</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>a vector of class prevalence estimates</p>
+</dd>
+</dl>
+</dd></dl>
+
 </dd></dl>
 
 <dl class="py attribute">
-<dt class="sig sig-object py" id="quapy.method.neural.QuaNetModule.training">
-<span class="sig-name descname"><span class="pre">training</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">bool</span></em><a class="headerlink" href="#quapy.method.neural.QuaNetModule.training" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
+<dt class="sig sig-object py" id="quapy.method.non_aggregative.DistributionMatchingX">
+<span class="sig-prename descclassname"><span class="pre">quapy.method.non_aggregative.</span></span><span class="sig-name descname"><span class="pre">DistributionMatchingX</span></span><a class="headerlink" href="#quapy.method.non_aggregative.DistributionMatchingX" title="Link to this definition"></a></dt>
+<dd><p>alias of <a class="reference internal" href="#quapy.method.non_aggregative.DMx" title="quapy.method.non_aggregative.DMx"><code class="xref py py-class docutils literal notranslate"><span class="pre">DMx</span></code></a></p>
 </dd></dl>
 
-<dl class="py class">
-<dt class="sig sig-object py" id="quapy.method.neural.QuaNetTrainer">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.neural.</span></span><span class="sig-name descname"><span class="pre">QuaNetTrainer</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">classifier</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sample_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_epochs</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tr_iter_per_poch</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">500</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">va_iter_per_poch</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">100</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lr</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.001</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lstm_hidden_size</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">64</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">lstm_nlayers</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ff_layers</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">[1024,</span> <span class="pre">512]</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bidirectional</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">qdrop_p</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0.5</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">patience</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">10</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">checkpointdir</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'../checkpoint'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">checkpointname</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">device</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'cuda'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.neural.QuaNetTrainer" title="Permalink to this definition">¶</a></dt>
-<dd><p>Bases: <a class="reference internal" href="#quapy.method.base.BaseQuantifier" title="quapy.method.base.BaseQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">BaseQuantifier</span></code></a></p>
-<p>Implementation of <a class="reference external" href="https://dl.acm.org/doi/abs/10.1145/3269206.3269287">QuaNet</a>, a neural network for
-quantification. This implementation uses <a class="reference external" href="https://pytorch.org/">PyTorch</a> and can take advantage of GPU
-for speeding-up the training phase.</p>
-<p>Example:</p>
-<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">quapy</span> <span class="k">as</span> <span class="nn">qp</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">quapy.method.meta</span> <span class="kn">import</span> <span class="n">QuaNet</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">quapy.classification.neural</span> <span class="kn">import</span> <span class="n">NeuralClassifierTrainer</span><span class="p">,</span> <span class="n">CNNnet</span>
-<span class="go">&gt;&gt;&gt;</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="c1"># use samples of 100 elements</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">qp</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s1">&#39;SAMPLE_SIZE&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">100</span>
-<span class="go">&gt;&gt;&gt;</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="c1"># load the kindle dataset as text, and convert words to numerical indexes</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">dataset</span> <span class="o">=</span> <span class="n">qp</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">fetch_reviews</span><span class="p">(</span><span class="s1">&#39;kindle&#39;</span><span class="p">,</span> <span class="n">pickle</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">qp</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">preprocessing</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">dataset</span><span class="p">,</span> <span class="n">min_df</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-<span class="go">&gt;&gt;&gt;</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="c1"># the text classifier is a CNN trained by NeuralClassifierTrainer</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">cnn</span> <span class="o">=</span> <span class="n">CNNnet</span><span class="p">(</span><span class="n">dataset</span><span class="o">.</span><span class="n">vocabulary_size</span><span class="p">,</span> <span class="n">dataset</span><span class="o">.</span><span class="n">n_classes</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">classifier</span> <span class="o">=</span> <span class="n">NeuralClassifierTrainer</span><span class="p">(</span><span class="n">cnn</span><span class="p">,</span> <span class="n">device</span><span class="o">=</span><span class="s1">&#39;cuda&#39;</span><span class="p">)</span>
-<span class="go">&gt;&gt;&gt;</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="c1"># train QuaNet (QuaNet is an alias to QuaNetTrainer)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">model</span> <span class="o">=</span> <span class="n">QuaNet</span><span class="p">(</span><span class="n">classifier</span><span class="p">,</span> <span class="n">qp</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s1">&#39;SAMPLE_SIZE&#39;</span><span class="p">],</span> <span class="n">device</span><span class="o">=</span><span class="s1">&#39;cuda&#39;</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">model</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">dataset</span><span class="o">.</span><span class="n">training</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">estim_prevalence</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">quantify</span><span class="p">(</span><span class="n">dataset</span><span class="o">.</span><span class="n">test</span><span class="o">.</span><span class="n">instances</span><span class="p">)</span>
-</pre></div>
-</div>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>classifier</strong> – an object implementing <cite>fit</cite> (i.e., that can be trained on labelled data),
-<cite>predict_proba</cite> (i.e., that can generate posterior probabilities of unlabelled examples) and
-<cite>transform</cite> (i.e., that can generate embedded representations of the unlabelled instances).</p></li>
-<li><p><strong>sample_size</strong> – integer, the sample size; default is None, meaning that the sample size should be
-taken from qp.environ[“SAMPLE_SIZE”]</p></li>
-<li><p><strong>n_epochs</strong> – integer, maximum number of training epochs</p></li>
-<li><p><strong>tr_iter_per_poch</strong> – integer, number of training iterations before considering an epoch complete</p></li>
-<li><p><strong>va_iter_per_poch</strong> – integer, number of validation iterations to perform after each epoch</p></li>
-<li><p><strong>lr</strong> – float, the learning rate</p></li>
-<li><p><strong>lstm_hidden_size</strong> – integer, hidden dimensionality of the LSTM cells</p></li>
-<li><p><strong>lstm_nlayers</strong> – integer, number of LSTM layers</p></li>
-<li><p><strong>ff_layers</strong> – list of integers, dimensions of the densely-connected FF layers on top of the
-quantification embedding</p></li>
-<li><p><strong>bidirectional</strong> – boolean, indicates whether the LSTM is bidirectional or not</p></li>
-<li><p><strong>qdrop_p</strong> – float, dropout probability</p></li>
-<li><p><strong>patience</strong> – integer, number of epochs showing no improvement in the validation set before stopping the
-training phase (early stopping)</p></li>
-<li><p><strong>checkpointdir</strong> – string, a path where to store models’ checkpoints</p></li>
-<li><p><strong>checkpointname</strong> – string (optional), the name of the model’s checkpoint</p></li>
-<li><p><strong>device</strong> – string, indicate “cpu” or “cuda”</p></li>
-</ul>
-</dd>
-</dl>
-<dl class="py property">
-<dt class="sig sig-object py" id="quapy.method.neural.QuaNetTrainer.classes_">
-<em class="property"><span class="pre">property</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">classes_</span></span><a class="headerlink" href="#quapy.method.neural.QuaNetTrainer.classes_" title="Permalink to this definition">¶</a></dt>
-<dd></dd></dl>
-
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.method.neural.QuaNetTrainer.clean_checkpoint">
-<span class="sig-name descname"><span class="pre">clean_checkpoint</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.neural.QuaNetTrainer.clean_checkpoint" title="Permalink to this definition">¶</a></dt>
-<dd><p>Removes the checkpoint</p>
-</dd></dl>
-
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.method.neural.QuaNetTrainer.clean_checkpoint_dir">
-<span class="sig-name descname"><span class="pre">clean_checkpoint_dir</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.neural.QuaNetTrainer.clean_checkpoint_dir" title="Permalink to this definition">¶</a></dt>
-<dd><p>Removes anything contained in the checkpoint directory</p>
-</dd></dl>
-
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.method.neural.QuaNetTrainer.fit">
-<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">fit_classifier</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.neural.QuaNetTrainer.fit" title="Permalink to this definition">¶</a></dt>
-<dd><p>Trains QuaNet.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>data</strong> – the training data on which to train QuaNet. If <cite>fit_classifier=True</cite>, the data will be split in
-40/40/20 for training the classifier, training QuaNet, and validating QuaNet, respectively. If
-<cite>fit_classifier=False</cite>, the data will be split in 66/34 for training QuaNet and validating it, respectively.</p></li>
-<li><p><strong>fit_classifier</strong> – if True, trains the classifier on a split containing 40% of the data</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p>self</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.method.neural.QuaNetTrainer.get_params">
-<span class="sig-name descname"><span class="pre">get_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">deep</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.neural.QuaNetTrainer.get_params" title="Permalink to this definition">¶</a></dt>
-<dd><p>Get parameters for this estimator.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><p><strong>deep</strong> (<em>bool</em><em>, </em><em>default=True</em>) – If True, will return the parameters for this estimator and
-contained subobjects that are estimators.</p>
-</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p><strong>params</strong> – Parameter names mapped to their values.</p>
-</dd>
-<dt class="field-odd">Return type<span class="colon">:</span></dt>
-<dd class="field-odd"><p>dict</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.method.neural.QuaNetTrainer.quantify">
-<span class="sig-name descname"><span class="pre">quantify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.neural.QuaNetTrainer.quantify" title="Permalink to this definition">¶</a></dt>
-<dd><p>Generate class prevalence estimates for the sample’s instances</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><p><strong>instances</strong> – array-like</p>
-</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p><cite>np.ndarray</cite> of shape <cite>(n_classes,)</cite> with class prevalence estimates.</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="py method">
-<dt class="sig sig-object py" id="quapy.method.neural.QuaNetTrainer.set_params">
-<span class="sig-name descname"><span class="pre">set_params</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">parameters</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.neural.QuaNetTrainer.set_params" title="Permalink to this definition">¶</a></dt>
-<dd><p>Set the parameters of this estimator.</p>
-<p>The method works on simple estimators as well as on nested objects
-(such as <code class="xref py py-class docutils literal notranslate"><span class="pre">Pipeline</span></code>). The latter have
-parameters of the form <code class="docutils literal notranslate"><span class="pre">&lt;component&gt;__&lt;parameter&gt;</span></code> so that it’s
-possible to update each component of a nested object.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><p><strong>**params</strong> (<em>dict</em>) – Estimator parameters.</p>
-</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p><strong>self</strong> – Estimator instance.</p>
-</dd>
-<dt class="field-odd">Return type<span class="colon">:</span></dt>
-<dd class="field-odd"><p>estimator instance</p>
-</dd>
-</dl>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="py function">
-<dt class="sig sig-object py" id="quapy.method.neural.mae_loss">
-<span class="sig-prename descclassname"><span class="pre">quapy.method.neural.</span></span><span class="sig-name descname"><span class="pre">mae_loss</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">output</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">target</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.neural.mae_loss" title="Permalink to this definition">¶</a></dt>
-<dd><p>Torch-like wrapper for the Mean Absolute Error</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters<span class="colon">:</span></dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>output</strong> – predictions</p></li>
-<li><p><strong>target</strong> – ground truth values</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns<span class="colon">:</span></dt>
-<dd class="field-even"><p>mean absolute error loss</p>
-</dd>
-</dl>
-</dd></dl>
-
-</section>
-<section id="module-quapy.method.non_aggregative">
-<span id="quapy-method-non-aggregative"></span><h2>quapy.method.non_aggregative<a class="headerlink" href="#module-quapy.method.non_aggregative" title="Permalink to this heading">¶</a></h2>
 <dl class="py class">
 <dt class="sig sig-object py" id="quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation">
-<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.non_aggregative.</span></span><span class="sig-name descname"><span class="pre">MaximumLikelihoodPrevalenceEstimation</span></span><a class="headerlink" href="#quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation" title="Permalink to this definition">¶</a></dt>
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">quapy.method.non_aggregative.</span></span><span class="sig-name descname"><span class="pre">MaximumLikelihoodPrevalenceEstimation</span></span><a class="reference internal" href="_modules/quapy/method/non_aggregative.html#MaximumLikelihoodPrevalenceEstimation"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation" title="Link to this definition"></a></dt>
 <dd><p>Bases: <a class="reference internal" href="#quapy.method.base.BaseQuantifier" title="quapy.method.base.BaseQuantifier"><code class="xref py py-class docutils literal notranslate"><span class="pre">BaseQuantifier</span></code></a></p>
 <p>The <cite>Maximum Likelihood Prevalence Estimation</cite> (MLPE) method is a lazy method that assumes there is no prior
 probability shift between training and test instances (put it other way, that the i.i.d. assumpion holds).
@@ -1888,7 +2781,7 @@ itself) the class prevalence seen during training. This method is considered to
 any quantification method should beat.</p>
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation.fit">
-<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation.fit" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">fit</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="quapy.data.html#quapy.data.base.LabelledCollection" title="quapy.data.base.LabelledCollection"><span class="pre">LabelledCollection</span></a></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/non_aggregative.html#MaximumLikelihoodPrevalenceEstimation.fit"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation.fit" title="Link to this definition"></a></dt>
 <dd><p>Computes the training prevalence and stores it.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -1902,7 +2795,7 @@ any quantification method should beat.</p>
 
 <dl class="py method">
 <dt class="sig sig-object py" id="quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation.quantify">
-<span class="sig-name descname"><span class="pre">quantify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation.quantify" title="Permalink to this definition">¶</a></dt>
+<span class="sig-name descname"><span class="pre">quantify</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">instances</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/quapy/method/non_aggregative.html#MaximumLikelihoodPrevalenceEstimation.quantify"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation.quantify" title="Link to this definition"></a></dt>
 <dd><p>Ignores the input instances and returns, as the class prevalence estimantes, the training prevalence.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -1918,80 +2811,39 @@ any quantification method should beat.</p>
 
 </section>
 <section id="module-quapy.method">
-<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-quapy.method" title="Permalink to this heading">¶</a></h2>
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-quapy.method" title="Link to this heading"></a></h2>
 </section>
 </section>
 
 
-            <div class="clearer"></div>
+           </div>
           </div>
-        </div>
-      </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-  <div>
-    <h3><a href="index.html">Table of Contents</a></h3>
-    <ul>
-<li><a class="reference internal" href="#">quapy.method package</a><ul>
-<li><a class="reference internal" href="#submodules">Submodules</a></li>
-<li><a class="reference internal" href="#module-quapy.method.aggregative">quapy.method.aggregative</a></li>
-<li><a class="reference internal" href="#module-quapy.method.base">quapy.method.base</a></li>
-<li><a class="reference internal" href="#module-quapy.method.meta">quapy.method.meta</a></li>
-<li><a class="reference internal" href="#module-quapy.method.neural">quapy.method.neural</a></li>
-<li><a class="reference internal" href="#module-quapy.method.non_aggregative">quapy.method.non_aggregative</a></li>
-<li><a class="reference internal" href="#module-quapy.method">Module contents</a></li>
-</ul>
-</li>
-</ul>
+          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
+        <a href="quapy.data.html" class="btn btn-neutral float-left" title="quapy.data package" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
+        <a href="quapy.tests.html" class="btn btn-neutral float-right" title="quapy.tests package" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+    </div>
 
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2024, Alejandro Moreo.</p>
   </div>
-  <div>
-    <h4>Previous topic</h4>
-    <p class="topless"><a href="quapy.data.html"
-                          title="previous chapter">quapy.data package</a></p>
-  </div>
-  <div role="note" aria-label="source link">
-    <h3>This Page</h3>
-    <ul class="this-page-menu">
-      <li><a href="_sources/quapy.method.rst.txt"
-            rel="nofollow">Show Source</a></li>
-    </ul>
-   </div>
-<div id="searchbox" style="display: none" role="search">
-  <h3 id="searchlabel">Quick search</h3>
-    <div class="searchformwrapper">
-    <form class="search" action="search.html" method="get">
-      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
-      <input type="submit" value="Go" />
-    </form>
-    </div>
-</div>
-<script>document.getElementById('searchbox').style.display = "block"</script>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
         </div>
       </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             >index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="right" >
-          <a href="quapy.data.html" title="quapy.data package"
-             >previous</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-          <li class="nav-item nav-item-1"><a href="modules.html" >quapy</a> &#187;</li>
-          <li class="nav-item nav-item-2"><a href="quapy.html" >quapy package</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">quapy.method package</a></li> 
-      </ul>
-    </div>
-    <div class="footer" role="contentinfo">
-        &#169; Copyright 2021, Alejandro Moreo.
-      Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
-    </div>
-  </body>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script> 
+
+</body>
 </html>
\ No newline at end of file
diff --git a/docs/build/html/search.html b/docs/build/html/search.html
index 480e246..ba1b54d 100644
--- a/docs/build/html/search.html
+++ b/docs/build/html/search.html
@@ -1,111 +1,121 @@
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" data-content_root="./">
+<head>
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>Search &mdash; QuaPy: A Python-based open-source framework for quantification 0.1.8 documentation</title>
+      <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=92fd9be5" />
+      <link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=19f00094" />
 
-
-<!doctype html>
-
-<html lang="en">
-  <head>
-    <meta charset="utf-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <title>Search &#8212; QuaPy 0.1.7 documentation</title>
-    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
-    <link rel="stylesheet" type="text/css" href="_static/bizstyle.css" />
+  
     
-    
-    <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
-    <script src="_static/jquery.js"></script>
-    <script src="_static/underscore.js"></script>
-    <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
-    <script src="_static/doctools.js"></script>
-    <script src="_static/sphinx_highlight.js"></script>
-    <script src="_static/bizstyle.js"></script>
+  <!--[if lt IE 9]>
+    <script src="_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+        <script src="_static/jquery.js?v=5d32c60e"></script>
+        <script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
+        <script src="_static/documentation_options.js?v=22607128"></script>
+        <script src="_static/doctools.js?v=9a2dae69"></script>
+        <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <script src="_static/js/theme.js"></script>
     <script src="_static/searchtools.js"></script>
     <script src="_static/language_data.js"></script>
     <link rel="index" title="Index" href="genindex.html" />
-    <link rel="search" title="Search" href="#" />
-  <script src="searchindex.js" defer></script>
-  
-    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
-    <!--[if lt IE 9]>
-    <script src="_static/css3-mediaqueries.js"></script>
-    <![endif]-->
+    <link rel="search" title="Search" href="#" /> 
+</head>
 
-  </head><body>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             accesskey="I">index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">Search</a></li> 
-      </ul>
-    </div>  
+<body class="wy-body-for-nav"> 
+  <div class="wy-grid-for-nav">
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
 
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          <div class="body" role="main">
-            
-  <h1 id="search-documentation">Search</h1>
-  
+          
+          
+          <a href="index.html" class="icon icon-home">
+            QuaPy: A Python-based open-source framework for quantification
+          </a>
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="#" method="get">
+    <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
+              <ul>
+<li class="toctree-l1"><a class="reference internal" href="modules.html">quapy</a></li>
+</ul>
+
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="index.html">QuaPy: A Python-based open-source framework for quantification</a>
+      </nav>
+
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          <div role="navigation" aria-label="Page navigation">
+  <ul class="wy-breadcrumbs">
+      <li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
+      <li class="breadcrumb-item active">Search</li>
+      <li class="wy-breadcrumbs-aside">
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+             
   <noscript>
-  <div class="admonition warning">
-  <p>
-    Please activate JavaScript to enable the search
-    functionality.
-  </p>
+  <div id="fallback" class="admonition warning">
+    <p class="last">
+      Please activate JavaScript to enable the search functionality.
+    </p>
   </div>
   </noscript>
-  
-  
-  <p>
-    Searching for multiple words only shows matches that contain
-    all words.
-  </p>
-  
-  
-  <form action="" method="get">
-    <input type="text" name="q" aria-labelledby="search-documentation" value="" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
-    <input type="submit" value="search" />
-    <span id="search-progress" style="padding-left: 10px"></span>
-  </form>
-  
-  
+
   
   <div id="search-results">
   
   </div>
-  
 
-            <div class="clearer"></div>
+           </div>
           </div>
+          <footer>
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>&#169; Copyright 2024, Alejandro Moreo.</p>
+  </div>
+
+  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
+    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
+    provided by <a href="https://readthedocs.org">Read the Docs</a>.
+   
+
+</footer>
         </div>
       </div>
-      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
-        <div class="sphinxsidebarwrapper">
-        </div>
-      </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="related" role="navigation" aria-label="related navigation">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             >index</a></li>
-        <li class="right" >
-          <a href="py-modindex.html" title="Python Module Index"
-             >modules</a> |</li>
-        <li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> &#187;</li>
-        <li class="nav-item nav-item-this"><a href="">Search</a></li> 
-      </ul>
-    </div>
-    <div class="footer" role="contentinfo">
-        &#169; Copyright 2021, Alejandro Moreo.
-      Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
-    </div>
-  </body>
+    </section>
+  </div>
+  <script>
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+  <script>
+    jQuery(function() { Search.loadIndex("searchindex.js"); });
+  </script>
+  
+  <script id="searchindexloader"></script>
+   
+
+
+</body>
 </html>
\ No newline at end of file
diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js
index 6e202ab..a496ff8 100644
--- a/docs/build/html/searchindex.js
+++ b/docs/build/html/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"docnames": ["Datasets", "Evaluation", "ExplicitLossMinimization", "Home", "Installation", "Methods", "Model-Selection", "Plotting", "Protocols", "index", "modules", "quapy", "quapy.classification", "quapy.data", "quapy.method"], "filenames": ["Datasets.md", "Evaluation.md", "ExplicitLossMinimization.md", "Home.md", "Installation.rst", "Methods.md", "Model-Selection.md", "Plotting.md", "Protocols.md", "index.rst", "modules.rst", "quapy.rst", "quapy.classification.rst", "quapy.data.rst", "quapy.method.rst"], "titles": ["Datasets", "Evaluation", "Explicit Loss Minimization", "&lt;no title&gt;", "Installation", "Quantification Methods", "Model Selection", "Plotting", "Protocols", "Welcome to QuaPy\u2019s documentation!", "quapy", "quapy package", "quapy.classification package", "quapy.data package", "quapy.method package"], "terms": {"quapi": [0, 1, 2, 3, 4, 5, 6, 7, 8], "make": [0, 2, 5, 11, 14], "avail": [0, 1, 2, 4, 5, 7, 9, 12, 14], "sever": [0, 2, 13], "have": [0, 1, 4, 5, 6, 7, 8, 11, 13, 14], "been": [0, 5, 6, 7, 8, 11, 12, 13, 14], "us": [0, 1, 5, 6, 7, 8, 9, 11, 12, 13, 14], "quantif": [0, 1, 2, 8, 9, 11, 12, 13, 14], "literatur": [0, 1, 6, 8, 9], "well": [0, 5, 7, 14], "an": [0, 1, 2, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14], "interfac": [0, 1, 5, 14], "allow": [0, 2, 4, 5, 7, 8, 11, 12, 13, 14], "anyon": 0, "import": [0, 5, 6, 7, 8, 9, 13, 14], "A": [0, 1, 5, 11, 12, 13, 14], "object": [0, 8, 11, 12, 13, 14], "i": [0, 1, 2, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14], "roughli": 0, "pair": [0, 11], "labelledcollect": [0, 5, 6, 8, 11, 13, 14], "one": [0, 1, 2, 5, 6, 7, 8, 11, 13, 14], "plai": 0, "role": 0, "train": [0, 1, 5, 6, 7, 8, 9, 11, 12, 13, 14], "set": [0, 1, 5, 6, 7, 8, 9, 11, 12, 13, 14], "anoth": [0, 1, 5, 7, 8, 11], "test": [0, 1, 5, 6, 7, 8, 9, 11, 12, 13, 14], "class": [0, 1, 5, 6, 7, 8, 9, 11, 12, 13, 14], "consist": [0, 6, 7, 8, 11, 12, 13, 14], "iter": [0, 11, 13, 14], "instanc": [0, 1, 5, 6, 7, 8, 9, 11, 12, 13, 14], "label": [0, 5, 6, 7, 8, 9, 11, 12, 13, 14], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14], "handl": 0, "most": [0, 1, 5, 7, 8, 9, 11, 13, 14], "sampl": [0, 1, 5, 6, 7, 9, 11, 12, 13, 14], "function": [0, 1, 5, 6, 7, 8, 9, 10, 12, 13, 14], "take": [0, 5, 7, 8, 11, 13, 14], "look": [0, 5, 7, 14], "follow": [0, 1, 5, 6, 7, 8, 9, 11, 14], "code": [0, 1, 2, 5, 6, 7, 8, 12], "qp": [0, 1, 5, 6, 7, 8, 9, 11, 13, 14], "f": [0, 1, 5, 6, 7, 8, 9, 13], "1st": 0, "posit": [0, 5, 7, 11, 13, 14], "document": [0, 5, 7, 12, 13, 14], "2nd": 0, "onli": [0, 1, 5, 7, 11, 12, 13, 14], "neg": [0, 7, 11, 14], "neutral": 0, "3rd": 0, "2": [0, 1, 5, 6, 7, 8, 11, 13, 14], "0": [0, 1, 5, 6, 7, 8, 11, 12, 13, 14], "1": [0, 1, 5, 6, 7, 8, 9, 11, 12, 13, 14], "print": [0, 1, 5, 6, 8, 9, 12, 13], "strprev": [0, 1, 11], "preval": [0, 1, 5, 6, 7, 9, 11, 12, 13, 14], "prec": [0, 11], "output": [0, 1, 5, 6, 8, 11, 12, 13, 14], "show": [0, 3, 5, 6, 7, 8, 11, 12, 13, 14], "digit": 0, "precis": [0, 11], "17": [0, 5], "50": [0, 7, 11, 14], "33": [0, 7, 11], "One": [0, 1, 5, 8, 14], "can": [0, 1, 4, 5, 6, 7, 8, 11, 13, 14], "easili": [0, 4, 7, 12], "produc": [0, 1, 7, 8, 11], "new": [0, 5, 8, 11, 12, 13], "desir": [0, 1, 5, 8, 11, 13], "sample_s": [0, 1, 5, 6, 7, 8, 11, 14], "10": [0, 6, 7, 8, 11, 12, 14], "prev": [0, 1, 8, 11, 13], "4": [0, 1, 5, 6, 7, 8, 9, 13, 14], "5": [0, 1, 5, 6, 7, 8, 11, 12, 13, 14], "which": [0, 1, 5, 6, 7, 11, 12, 13, 14], "40": [0, 5, 14], "made": [0, 2, 4, 11, 13, 14], "across": [0, 6, 7, 9, 11, 14], "differ": [0, 5, 6, 7, 8, 9, 11, 13, 14], "run": [0, 2, 4, 5, 7, 11, 13, 14], "e": [0, 1, 5, 6, 7, 8, 9, 11, 12, 13, 14], "g": [0, 1, 5, 6, 8, 9, 11, 13, 14], "method": [0, 1, 2, 3, 6, 7, 8, 9, 11], "same": [0, 5, 6, 7, 8, 11, 13, 14], "exact": [0, 8, 13], "retain": [0, 5, 12, 14], "index": [0, 5, 9, 11, 12, 13, 14], "gener": [0, 1, 5, 6, 7, 8, 11, 12, 13, 14], "sampling_index": [0, 13], "sampling_from_index": [0, 13], "also": [0, 1, 2, 4, 5, 6, 7, 8, 9, 11, 12], "implement": [0, 1, 5, 6, 7, 8, 9, 11, 12, 13, 14], "artifici": [5, 6, 7, 9, 11], "protocol": [0, 3, 5, 6, 7, 9, 10, 13, 14], "via": [4, 5, 8, 11, 12, 14], "python": [0, 9], "": [0, 1, 5, 6, 7, 11, 12, 13, 14], "seri": [0, 6, 13], "equidist": 11, "rang": [6, 7, 8, 11, 14], "entir": [0, 1, 5, 6, 7, 8, 11], "spectrum": [7, 8, 11], "simplex": [9, 11], "space": [6, 11, 12], "artificial_sampling_gener": [], "100": [0, 1, 5, 6, 7, 8, 11, 12, 13, 14], "n_preval": [8, 11], "each": [0, 1, 5, 6, 7, 8, 11, 12, 13, 14], "valid": [0, 5, 6, 7, 8, 11, 12, 13, 14], "combin": [6, 8, 11, 14], "origin": [0, 1, 5, 8, 11, 13], "from": [0, 1, 5, 6, 7, 9, 11, 12, 13, 14], "split": [0, 5, 6, 7, 11, 12, 13, 14], "point": [5, 8, 11, 13], "25": [7, 11, 12, 14], "75": [6, 7, 8, 11], "00": [], "see": [0, 2, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14], "evalu": [0, 3, 5, 6, 7, 8, 9, 10, 12, 13, 14], "wiki": [0, 1, 3, 5], "further": [0, 5, 12, 13, 14], "detail": [0, 1, 2, 5, 9, 12, 13, 14], "how": [0, 5, 6, 7, 11, 13, 14], "properli": [5, 14], "three": [0, 7], "about": [0, 7, 11, 13], "kindl": [0, 5, 7, 13, 14], "devic": [0, 5, 7, 12, 14], "harri": 0, "potter": 0, "known": [0, 5, 6, 11, 14], "imdb": [0, 6, 7, 8, 13], "movi": 0, "fetch": [0, 9], "unifi": [0, 14], "For": [0, 1, 6, 7, 8, 9, 11, 13], "exampl": [0, 2, 3, 5, 6, 7, 8, 11, 12, 13, 14], "fetch_review": [0, 5, 6, 7, 8, 13, 14], "These": [0, 1, 2, 5, 8, 12], "esuli": [0, 2, 4, 5, 12, 13, 14], "moreo": [0, 5, 6, 13, 14], "sebastiani": [0, 5, 6, 13, 14], "2018": [0, 5, 13], "octob": [0, 5], "recurr": [0, 5, 13], "neural": [0, 11, 13], "network": [0, 11, 12, 13, 14], "In": [0, 1, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14], "proceed": [0, 5, 13], "27th": [0, 5, 13], "acm": [0, 5, 13, 14], "intern": [0, 1, 5, 12, 13], "confer": [0, 5, 12, 13], "inform": [0, 5, 6, 8, 11, 12, 13, 14], "knowledg": [0, 5, 13], "manag": [0, 5, 13], "pp": [0, 5, 6, 12], "1775": [0, 5], "1778": [0, 5], "The": [0, 1, 2, 4, 6, 7, 8, 9, 11, 12, 13, 14], "list": [0, 7, 11, 12, 13, 14], "id": [0, 5, 13], "reviews_sentiment_dataset": [0, 13], "some": [0, 1, 5, 7, 8, 11, 13, 14], "statist": [0, 8, 11, 14], "fhe": 0, "ar": [0, 1, 5, 6, 7, 8, 11, 12, 13, 14], "summar": 0, "below": [0, 4, 5, 7, 11, 13], "size": [0, 1, 5, 11, 12, 13, 14], "type": [0, 5, 11, 13, 14], "hp": [0, 5, 13], "9533": 0, "18399": 0, "018": 0, "982": 0, "065": 0, "935": 0, "text": [0, 5, 11, 12, 13, 14], "3821": [0, 13], "21591": [0, 13], "081": [0, 13], "919": [0, 13], "063": [0, 13], "937": [0, 13], "25000": 0, "500": [0, 1, 7, 14], "11": [0, 8, 9, 11], "analysi": [0, 5, 9, 13], "access": [0, 5, 13, 14], "were": 0, "tf": [0, 13], "idf": 0, "format": [0, 7, 11, 13, 14], "present": [0, 5, 13], "two": [0, 5, 7, 8, 11, 13, 14], "val": [0, 8, 12, 13], "model": [0, 1, 3, 7, 8, 9, 11, 12, 14], "select": [0, 1, 3, 5, 8, 9, 11, 13, 14], "purpos": [0, 8, 14], "exemplifi": 0, "load": [0, 5, 8, 11, 13, 14], "fetch_twitt": [0, 5, 9, 13], "gasp": [0, 13], "for_model_select": [0, 13], "true": [0, 1, 5, 6, 7, 8, 9, 11, 12, 13, 14], "gao": [0, 5, 13, 14], "w": [0, 5, 13], "2015": [0, 2, 4, 5, 12, 14], "august": 0, "tweet": [0, 5, 13], "classif": [0, 1, 5, 9, 11, 13, 14], "ieee": 0, "advanc": [0, 6, 8, 9, 11], "social": [0, 5, 13], "mine": [0, 5], "asonam": 0, "97": 0, "104": [0, 1], "semeval13": [0, 13], "semeval14": [0, 13], "semeval15": [0, 13], "share": [0, 13], "semev": 0, "mean": [0, 1, 5, 6, 7, 8, 9, 11, 12, 13, 14], "would": [0, 1, 5, 7, 9, 13, 14], "get": [0, 7, 8, 11, 12, 13, 14], "when": [0, 1, 5, 7, 8, 11, 12, 13], "request": [0, 6, 11, 13, 14], "ani": [0, 5, 6, 7, 8, 9, 11, 12, 13, 14], "them": [0, 5, 13, 14], "consult": [0, 8], "twitter_sentiment_datasets_test": [0, 13], "9": [0, 5, 7, 11], "replac": [0, 5, 11, 13], "twitter_sentiment_datasets_train": [0, 13], "found": [0, 5, 11, 12, 13], "featur": [0, 13], "3": [0, 1, 5, 6, 7, 8, 9, 11, 12, 13, 14], "8788": 0, "3765": 0, "694582": 0, "421": 0, "496": 0, "082": 0, "407": 0, "507": 0, "086": 0, "spars": [0, 13], "hcr": [0, 5, 13], "1594": 0, "798": 0, "222046": 0, "546": 0, "211": 0, "243": 0, "640": 0, "167": 0, "193": 0, "omd": [0, 13], "1839": 0, "787": 0, "199151": 0, "463": 0, "271": 0, "266": 0, "437": 0, "283": 0, "280": 0, "sander": [0, 13], "2155": 0, "923": 0, "229399": 0, "161": 0, "691": 0, "148": 0, "164": [0, 5], "688": 0, "11338": 0, "3813": 0, "1215742": 0, "159": 0, "470": 0, "372": 0, "158": 0, "430": 0, "412": 0, "1853": 0, "109": 0, "361": 0, "530": 0, "2390": 0, "153": 0, "413": 0, "434": 0, "semeval16": [0, 9, 13], "8000": 0, "2000": 0, "889504": 0, "157": 0, "351": 0, "492": 0, "163": 0, "341": 0, "497": 0, "sst": [0, 13], "2971": 0, "1271": 0, "376132": 0, "261": 0, "452": 0, "288": 0, "207": 0, "481": 0, "312": 0, "wa": [0, 5, 7, 8, 11, 13, 14], "2184": 0, "936": 0, "248563": 0, "305": 0, "414": 0, "281": 0, "282": 0, "446": 0, "272": [0, 1], "wb": [0, 13], "4259": 0, "1823": 0, "404333": 0, "270": 0, "392": 0, "337": 0, "274": 0, "335": 0, "32": [0, 6, 9], "repositori": [0, 13], "p\u00e9rez": [0, 5, 13, 14], "g\u00e1llego": [0, 5, 13, 14], "p": [0, 5, 11, 12, 13, 14], "quevedo": [0, 5, 13], "j": [0, 5, 13, 14], "r": [0, 5, 11, 13], "del": [0, 5, 13], "coz": [0, 5, 13], "2017": [0, 5, 13, 14], "ensembl": [0, 9, 13, 14], "problem": [0, 5, 7, 11, 13, 14], "characteriz": [0, 5, 13], "chang": [0, 1, 5, 13], "distribut": [0, 1, 5, 7, 8, 11, 13, 14], "case": [0, 1, 5, 7, 8, 11, 12, 13, 14], "studi": [0, 5, 13], "fusion": [0, 5, 13], "34": [0, 5, 13, 14], "87": [0, 5, 13], "doe": [0, 2, 4, 5, 11, 14], "exactli": 0, "coincid": [0, 9], "et": [0, 2, 4, 5, 12, 13, 14], "al": [0, 2, 4, 5, 12, 13, 14], "sinc": [0, 1, 5, 6, 7, 8, 13, 14], "we": [0, 1, 3, 5, 6, 7, 8, 9, 13], "unabl": 0, "find": [0, 6, 14], "diabet": 0, "phonem": 0, "call": [0, 1, 5, 7, 8, 11, 13, 14], "fetch_ucidataset": [0, 5, 13], "yeast": [0, 13], "verbos": [0, 6, 11, 12, 13, 14], "return": [0, 1, 5, 6, 7, 8, 11, 12, 13, 14], "randomli": [0, 13], "drawn": [0, 8, 11, 13], "stratifi": [0, 5, 12, 13, 14], "manner": [0, 12, 14], "whole": [0, 1, 5, 6, 11, 12], "collect": [0, 8, 11, 12, 13], "70": 0, "30": [0, 5, 6, 8, 14], "respect": [0, 1, 7, 11, 14], "option": [0, 5, 7, 13, 14], "indic": [0, 1, 5, 6, 7, 8, 11, 12, 13, 14], "descript": [0, 13], "should": [0, 5, 6, 7, 9, 11, 12, 13, 14], "standard": [0, 7, 8, 11, 12, 13, 14], "paper": [0, 5, 12, 14], "submit": 0, "kfcv": [0, 12, 13, 14], "order": [0, 4, 5, 6, 7, 8, 11, 13, 14], "accommod": [0, 11], "practic": 0, "could": [0, 1, 5, 6, 7, 8, 9], "first": [0, 1, 2, 4, 5, 7, 11, 13, 14], "instanti": [0, 1, 5, 6, 8, 11, 12, 14], "creat": [0, 9, 11, 14], "time": [0, 1, 5, 8, 11, 13, 14], "fetch_ucilabelledcollect": [0, 13], "nfold": [0, 11, 13], "nrepeat": [0, 13], "abov": [0, 2, 5, 7, 11], "conduct": [0, 11], "2x5fcv": 0, "all": [0, 1, 2, 4, 5, 7, 8, 11, 12, 14], "come": [0, 1, 8, 11, 13, 14], "numer": [0, 1, 5, 9, 13, 14], "form": [0, 11, 13, 14], "dens": [0, 14], "matric": [0, 7, 13], "acut": 0, "120": 0, "6": [0, 1, 5, 7, 13], "508": 0, "b": [0, 11, 13, 14], "583": 0, "417": 0, "balanc": [0, 6, 7, 14], "625": 0, "539": 0, "461": 0, "922": 0, "078": 0, "breast": 0, "cancer": 0, "683": 0, "350": 0, "650": 0, "cmc": 0, "1473": 0, "573": 0, "427": 0, "774": 0, "226": 0, "653": 0, "347": 0, "ctg": 0, "2126": 0, "22": [0, 5, 12, 13], "222": [0, 12], "778": 0, "861": 0, "139": 0, "917": 0, "083": 0, "german": 0, "1000": [0, 6, 14], "24": [0, 1, 12], "300": [0, 1, 12], "700": 0, "haberman": [0, 5], "306": 0, "735": 0, "265": 0, "ionospher": 0, "641": 0, "359": 0, "iri": 0, "150": 0, "667": 0, "333": 0, "mammograph": 0, "830": 0, "514": 0, "486": 0, "pageblock": 0, "5473": 0, "979": 0, "021": 0, "semeion": 0, "1593": 0, "256": [0, 12], "901": 0, "099": 0, "sonar": 0, "208": 0, "60": 0, "534": 0, "466": 0, "spambas": 0, "4601": 0, "57": 0, "606": 0, "394": 0, "spectf": 0, "267": 0, "44": 0, "794": 0, "206": 0, "tictacto": 0, "958": 0, "transfus": 0, "748": 0, "762": 0, "238": 0, "wdbc": 0, "569": 0, "627": 0, "373": 0, "wine": 0, "178": 0, "13": [0, 12], "669": 0, "331": 0, "601": 0, "399": 0, "730": 0, "q": [0, 2, 4, 5, 11, 12, 14], "red": 0, "1599": 0, "465": 0, "535": 0, "white": 0, "4898": 0, "665": 0, "1484": 0, "8": [0, 6, 7, 13, 14], "711": 0, "289": 0, "download": [0, 2, 4, 5, 11, 13], "automat": [0, 12], "thei": [0, 5, 14], "store": [0, 12, 13, 14], "quapy_data": [0, 11], "folder": [0, 6, 8, 13, 14], "faster": [0, 13], "reus": [0, 5, 11, 13], "howev": [0, 6, 7], "requir": [0, 1, 2, 5, 8, 9, 12], "special": [0, 7, 13], "action": 0, "moment": [0, 1, 5], "fulli": [0, 11], "autom": [0, 9], "cardiotocographi": 0, "excel": 0, "file": [0, 7, 11, 12, 13, 14], "user": [0, 7, 8, 11], "instal": [0, 5, 9, 12, 14], "xlrd": [0, 4], "modul": [0, 1, 5, 7, 8, 9, 10], "open": [0, 9, 13], "page": [0, 4, 9], "block": [0, 11], "need": [0, 5, 8, 11, 13, 14], "unix": 0, "compress": 0, "extens": [0, 2, 4, 7], "z": [0, 13], "directli": [0, 5], "doabl": 0, "packag": [0, 2, 4, 5, 9, 10], "like": [0, 1, 5, 7, 8, 11, 12, 13, 14], "gzip": 0, "zip": [0, 7, 11], "uncompress": 0, "o": [0, 11], "depend": [0, 6, 7, 11, 14], "softwar": 0, "manual": 0, "do": [0, 5, 6, 11, 12, 13, 14], "invok": [0, 5, 8, 11, 13], "provid": [0, 5, 7, 8, 9, 13, 14], "loader": [0, 13], "simpl": [0, 5, 7, 11, 14], "deal": 0, "t": [0, 1, 5, 11, 12, 14], "pre": [0, 5, 11], "n": [0, 8, 11, 12, 14], "second": [0, 1, 5, 7, 11, 13], "represent": [0, 5, 11, 12, 14], "col": [0, 13], "int": [0, 7, 11, 13, 14], "float": [0, 5, 11, 12, 13, 14], "charg": [0, 11, 13], "classmethod": [0, 11, 13, 14], "def": [0, 1, 5, 7, 11], "cl": 0, "path": [0, 5, 7, 11, 12, 13, 14], "str": [0, 11, 13, 14], "loader_func": [0, 13], "callabl": [0, 11, 13, 14], "defin": [0, 5, 8, 11, 12, 13, 14], "argument": [0, 1, 5, 7, 8, 11, 13, 14], "initi": [0, 12, 14], "particular": [0, 5, 14], "receiv": [0, 5, 7], "addition": 0, "number": [0, 1, 5, 6, 7, 8, 11, 12, 13, 14], "specifi": [0, 5, 7, 8, 11, 12, 13], "otherwis": [0, 5, 11, 13], "infer": [0, 13], "least": [0, 13], "pass": [0, 1, 7, 11, 12, 14], "along": [0, 1, 5, 11, 14], "train_path": [0, 13], "my_data": 0, "dat": [0, 12], "test_path": [0, 13], "my_custom_load": 0, "rb": 0, "fin": 0, "preprocess": [0, 5, 11, 14], "includ": [0, 2, 3, 5, 6, 7, 8, 9, 13, 14], "text2tfidf": [0, 5, 13], "tfidf": [0, 6, 7, 8, 13], "vector": [0, 5, 8, 11, 12, 13, 14], "reduce_column": [0, 13], "reduc": [0, 1, 13], "column": [0, 1, 11, 13], "base": [0, 5, 9, 11, 12], "term": [0, 5, 6, 7, 9, 11, 12, 13, 14], "frequenc": [0, 13, 14], "transform": [0, 12, 13, 14], "valu": [0, 1, 5, 6, 8, 11, 12, 13, 14], "score": [0, 1, 6, 11, 12, 13], "subtract": [0, 11, 13], "normal": [0, 1, 5, 11, 13, 14], "deviat": [0, 7, 8, 11, 13], "so": [0, 5, 7, 8, 11, 12, 13, 14], "zero": [0, 11], "unit": [0, 9, 11], "varianc": [0, 7], "textual": [0, 9, 13], "token": [0, 12, 13], "appeal": 1, "tool": [1, 9], "scenario": [1, 5, 6, 7, 9], "dataset": [1, 3, 5, 6, 7, 8, 9, 11, 12, 14], "shift": [1, 6, 8, 9, 11, 12, 14], "particularli": 1, "prior": [1, 5, 6, 7, 8, 9, 11, 14], "probabl": [1, 5, 6, 7, 8, 9, 11, 12, 14], "That": [1, 6], "interest": [1, 7, 8, 9, 11], "estim": [0, 1, 5, 7, 9, 11, 12, 13, 14], "aris": 1, "under": [1, 8], "belief": 1, "those": [1, 5, 6, 7, 11, 12, 14], "might": [1, 11, 13], "ones": [1, 5, 7, 11, 13, 14], "observ": [1, 14], "dure": [1, 7, 14], "other": [1, 5, 7, 9, 11, 13, 14], "word": [1, 5, 9, 12, 13, 14], "simpli": [1, 2, 4, 5, 6, 7, 9, 11, 14], "predictor": 1, "assum": [1, 9, 14], "unlik": [1, 11], "machin": [1, 6, 9, 12], "learn": [1, 4, 5, 6, 9, 11, 12, 13, 14], "govern": 1, "iid": [1, 7, 9], "assumpt": [1, 7, 9], "brief": [0, 1, 13], "dedic": [0, 1, 13], "explain": [1, 7], "here": [1, 14], "mae": [1, 6, 8, 9, 11, 12, 14], "absolut": [1, 5, 7, 9, 11, 14], "mrae": [1, 9, 11, 12, 14], "rel": [1, 5, 11, 13, 14], "mse": [1, 5, 9, 11, 14], "squar": [1, 5, 11], "mkld": [1, 11, 14], "kullback": [1, 5, 11, 14], "leibler": [1, 5, 11, 14], "diverg": [1, 5, 11, 14], "mnkld": [1, 11, 14], "ae": [1, 2, 4, 5, 7, 11], "rae": [1, 2, 4, 5, 11], "se": [1, 11], "kld": [1, 2, 4, 5, 11, 12, 14], "nkld": [1, 2, 4, 5, 9, 11, 12, 14], "individu": [1, 5], "without": [1, 5, 11, 13], "averag": [1, 5, 11, 13, 14], "acc": [1, 5, 7, 8, 9, 11, 14], "accuraci": [1, 7, 11, 14], "f1e": [1, 11], "f1": [1, 11, 12], "true_prev": [1, 7, 11], "prevs_hat": [1, 11], "ndarrai": [1, 5, 11, 13, 14], "contain": [1, 2, 4, 5, 7, 8, 11, 12, 13, 14], "smooth": [1, 11], "stabil": [1, 14], "third": [1, 7], "ep": [1, 11], "none": [1, 6, 8, 11, 12, 13, 14], "paramet": [1, 5, 6, 8, 11, 12, 13, 14], "epsilon": [1, 11, 14], "tradition": 1, "2t": [1, 11], "past": 1, "either": [1, 5, 11, 14], "environ": [1, 5, 6, 7, 8, 11, 14], "variabl": [1, 5, 7, 11, 13], "onc": [0, 1, 5, 6, 7, 8, 11, 13], "ommit": [], "thereaft": 1, "recommend": [1, 7, 14], "np": [1, 5, 6, 7, 8, 11, 13, 14], "asarrai": 1, "let": [1, 5, 6, 11, 14], "estim_prev": [1, 7, 11], "ae_": [], "3f": [1, 9], "200": [1, 12], "600": 1, "914": 1, "final": [1, 5, 7, 14], "possibl": [1, 5, 8, 11, 14], "string": [1, 11, 13, 14], "error_funct": 1, "from_nam": [1, 11], "accord": [5, 6, 11, 12, 13, 14], "fix": 8, "cover": [8, 11, 12], "full": [8, 11], "contrast": [], "natur": [9, 11], "despit": [], "introduc": [], "approxim": [5, 7, 11, 12], "preserv": [7, 11, 13], "procol": [], "equal": [8, 11, 14], "distant": [8, 11], "interv": [7, 8, 11], "n_prevpoint": [8, 11], "determin": [6, 7, 8, 11], "constrain": [7, 8, 11, 13], "obtain": [8, 11, 12, 14], "66": [8, 14], "given": [1, 5, 6, 8, 11, 12, 13, 14], "num_prevalence_combin": [8, 11], "21": [5, 7, 8, 11], "n_class": [5, 8, 11, 12, 13, 14], "n_repeat": [8, 11], "1771": 8, "note": [1, 5, 7, 8, 11, 13], "last": [5, 7, 8, 11, 12, 13], "typic": [1, 6, 7, 8, 11, 12, 13, 14], "singl": [1, 5, 8, 9, 11, 14], "higher": [7, 8], "comput": [1, 5, 7, 8, 11, 14], "perform": [1, 5, 6, 7, 8, 9, 11, 12, 14], "signific": 8, "instead": [0, 1, 5, 6, 8, 11, 13, 14], "work": [5, 7, 8, 11, 13, 14], "wai": [5, 8, 14], "around": [8, 13, 14], "maximum": [8, 11, 12, 14], "budg": 8, "close": [8, 13], "than": [1, 6, 7, 8, 11, 12, 13], "budget": 8, "achiev": [5, 6, 7, 8], "get_nprevpoints_approxim": [8, 11], "5000": [0, 1, 7, 8], "4960": 8, "cost": [], "sometim": 8, "cumbersom": 8, "control": [6, 8, 11], "overal": 11, "experi": [0, 4, 5, 6, 7, 11, 13], "rather": 6, "By": [5, 11], "avoid": 11, "lead": 13, "closer": [], "surpass": [], "script": [2, 4, 5, 9, 14], "pacc": [5, 7, 11, 14], "reli": [5, 8, 11, 14], "logist": [5, 12, 14], "regressor": 5, "classifi": [6, 7, 9, 11, 12, 14], "variou": 7, "metric": [5, 6, 9, 11, 14], "sklearn": [5, 6, 7, 8, 9, 12, 13, 14], "linear_model": [5, 6, 8, 9, 12], "logisticregress": [5, 6, 8, 9, 12, 14], "data": [5, 6, 7, 9, 11, 12, 14], "min_df": [5, 6, 7, 8, 13, 14], "inplac": [5, 13, 14], "lr": [5, 12, 14], "aggreg": [1, 6, 7, 8, 9, 11], "fit": [5, 6, 7, 8, 9, 11, 12, 13, 14], "df": [], "artificial_sampling_report": [], "mani": [1, 5, 6, 7, 8, 9, 11, 14], "extract": [11, 13], "categori": 11, "n_repetit": [], "n_job": [5, 6, 8, 11, 12, 13, 14], "parallel": [5, 6, 11, 12, 13, 14], "worker": [11, 12, 13, 14], "cpu": [12, 14], "random_se": 11, "42": [], "random": [5, 7, 8, 11, 13], "seed": [8, 11, 13], "replic": [8, 11], "error_metr": [1, 6, 8, 11], "line": [5, 11], "result": [1, 2, 4, 5, 7, 9, 14], "report": [1, 11], "panda": [1, 4, 11], "datafram": [1, 11], "displai": [1, 7, 8, 11, 12], "just": [5, 8], "clearer": [], "shown": [7, 11], "convert": [5, 11, 12, 13, 14], "repres": [5, 7, 11, 13, 14], "decim": [], "default": [5, 8, 11, 12, 13, 14], "pd": 1, "set_opt": 1, "expand_frame_repr": 1, "fals": [1, 5, 7, 11, 12, 13, 14], "map": [1, 12, 14], "000": [], "000e": [], "091": 1, "909": 1, "009": [], "048": [], "426e": [], "04": [], "837": [], "037": [], "114": [], "633e": [], "03": [], "7": [5, 6, 7, 8, 9, 11, 12, 14], "717": [], "017": [], "041": [], "383e": [], "366": [], "634": [], "034": [], "070": [], "412e": [], "459": [], "541": [], "387e": [], "565": [], "435": [], "035": 1, "073": [], "535e": [], "654": [], "346": [], "046": [], "108": [], "701e": [], "725": [], "275": [], "075": [], "235": [], "515e": [], "02": [], "858": [], "142": [], "042": [], "229": [], "740e": [], "945": [], "055": [], "27": [5, 12], "357": [], "219e": [], "578": [], "dtype": [1, 13], "float64": 1, "artificial_sampling_ev": [], "artificial_sampling_predict": [], "arrai": [5, 7, 11, 12, 13, 14], "pip": 4, "older": 4, "version": [2, 4, 11, 12], "scikit": [4, 5, 6, 11, 12, 13, 14], "numpi": [4, 6, 8, 11, 12], "scipi": [4, 13], "pytorch": [4, 14], "quanet": [4, 9, 12, 14], "svmperf": [2, 3, 4, 5, 11, 14], "patch": [2, 4, 5, 12, 14], "joblib": [4, 14], "tqdm": 4, "matplotlib": [4, 11], "involv": [4, 7, 11], "you": [4, 5], "appli": [1, 2, 4, 5, 6, 7, 11, 12, 13, 14], "ext": [2, 4], "compil": [2, 4, 5], "sourc": [2, 4, 5, 9, 12], "prepare_svmperf": [2, 4, 5], "sh": [2, 4, 5], "job": [2, 4], "directori": [2, 4, 11, 12, 13, 14], "svm_perf_quantif": [2, 4, 5], "optim": [1, 2, 4, 6, 11, 12, 14], "measur": [2, 4, 5, 6, 7, 9, 11, 14], "propos": [2, 4, 5, 8, 14], "barranquero": [2, 4, 5, 12, 14], "extend": [2, 4, 5, 11, 14], "former": [4, 14], "categor": [5, 13], "belong": [5, 6, 14], "non": [5, 14], "group": 5, "though": [5, 11], "plan": 5, "add": [5, 6, 11, 13], "more": [1, 2, 5, 7, 8, 11, 14], "futur": 5, "character": [1, 5, 9], "fact": [5, 7], "product": [0, 5, 13], "quantifi": [0, 1, 5, 6, 7, 8, 9, 11, 13, 14], "shoud": 5, "basequantifi": [5, 11, 14], "abstract": [5, 11, 12, 13, 14], "abstractmethod": 5, "self": [5, 6, 11, 12, 13, 14], "set_param": [5, 11, 12, 14], "get_param": [5, 11, 12, 14], "deep": [5, 11, 12, 14], "familiar": 5, "structur": [5, 14], "inspir": 5, "reason": [5, 7, 8, 9], "why": 5, "ha": [1, 5, 6, 7, 8, 11, 12, 13, 14], "adopt": [5, 6, 13], "respond": 5, "predict": [1, 5, 7, 11, 12, 14], "input": [5, 7, 11, 12, 13, 14], "element": [5, 11, 13, 14], "while": [0, 5, 7, 12, 13, 14], "selector": 5, "process": [1, 6, 11], "hyperparamet": [5, 8, 11, 14], "search": [6, 9, 11, 14], "part": [5, 13], "aggregativequantifi": [1, 5, 14], "must": [5, 13, 14], "fit_learn": 5, "classif_predict": [5, 14], "mention": 5, "befor": [5, 11, 12, 13, 14], "inde": [5, 8], "alreadi": [1, 5, 11, 14], "preclassifi": [], "maintain": [5, 14], "through": [5, 11], "properti": [5, 11, 12, 13, 14], "learner": [5, 6, 12, 14], "extern": 5, "probabilist": [5, 11, 12, 14], "inherit": [5, 8, 11], "aggregativeprobabilisticquantifi": [5, 14], "posterior": [5, 11, 12, 14], "crisp": [1, 5, 11, 14], "decis": [5, 11, 12, 14], "hard": [5, 11, 12], "classif_posterior": 14, "posterior_prob": 14, "advantag": [5, 8, 14], "procedur": [1, 5, 9, 11], "veri": [5, 7, 11], "effici": 5, "everi": [0, 1, 5, 6, 8, 11, 14], "leverag": 5, "speed": [1, 5, 11, 14], "up": [1, 5, 11, 12, 14], "over": [5, 6, 11], "customarili": [5, 6], "done": [5, 6], "four": 5, "cc": [5, 7, 14], "simplest": 5, "deliv": [5, 6, 14], "adjust": [5, 9, 11, 14], "pcc": [5, 7, 14], "soft": [1, 5], "serv": [5, 11, 13], "complet": [5, 7, 14], "equip": [5, 7], "svm": [2, 5, 7, 9, 12, 13, 14], "linearsvc": [5, 7, 13], "pickl": [5, 11, 13, 14], "alia": [5, 11, 13, 14], "classifyandcount": [5, 14], "estim_preval": [5, 9, 14], "rate": [5, 11, 12, 14], "binari": [0, 5, 7, 9, 11, 12, 13, 14], "init": 5, "addit": [5, 11], "val_split": [5, 6, 12, 14], "integ": [5, 11, 12, 13, 14], "k": [5, 9, 11, 12, 13, 14], "fold": [5, 11, 13, 14], "cross": [5, 11, 12, 13, 14], "specif": [1, 5, 6, 8, 11], "held": [5, 6, 11, 12, 14], "out": [0, 1, 5, 6, 7, 11, 12, 13, 14], "postpon": [1, 5], "constructor": 5, "prevail": 5, "overrid": 5, "illustr": [3, 5, 6, 7], "seem": 5, "calibr": [5, 11], "calibratedclassifiercv": 5, "base_estim": 5, "cv": [5, 6], "predict_proba": [5, 12, 14], "As": [5, 6], "calibratedclassifi": 5, "except": [5, 11, 14], "rais": [5, 11, 14], "lastli": 5, "everyth": 5, "said": 5, "aboud": 5, "sld": [5, 14], "expectationmaximizationquantifi": [5, 14], "describ": [5, 11, 14], "saeren": [5, 14], "m": [5, 11, 14], "latinn": [5, 14], "decaesteck": [5, 14], "c": [5, 6, 11, 12, 13, 14], "2002": 5, "priori": 5, "14": 5, "41": 5, "attempt": 5, "although": [5, 6, 7, 8, 14], "improv": [5, 11, 12, 14], "rank": [5, 12], "almost": 5, "alwai": [5, 7, 14], "among": 5, "effect": 5, "carri": [0, 1, 5, 11, 13, 14], "gonz\u00e1lez": 5, "castro": 5, "v": [5, 11, 12, 14], "alaiz": 5, "rodr\u0131": 5, "guez": 5, "alegr": 5, "2013": 5, "scienc": 5, "218": 5, "146": 5, "It": [1, 5, 6, 7, 11], "allia": 5, "hellingerdistancei": [5, 14], "mixtur": [5, 11, 14], "previou": 5, "overridden": [5, 14], "proport": [5, 6, 12, 13, 14], "taken": [5, 11, 12, 13, 14], "itself": [5, 11, 14], "accept": 5, "elm": [2, 5, 14], "famili": [5, 14], "target": [5, 7, 9, 11, 12, 14], "orient": [2, 5, 9, 11, 14], "joachim": [5, 12, 14], "svmq": 5, "d\u00edez": 5, "reliabl": 5, "pattern": 5, "recognit": 5, "48": 5, "591": 5, "604": 5, "svmkld": [], "multivari": [5, 12], "transact": 5, "discoveri": 5, "articl": [5, 6], "svmnkld": [], "svmae": [], "error": [5, 6, 9, 10, 12, 14], "svmrae": [], "what": 5, "nowadai": 5, "consid": [5, 7, 8, 11, 12, 13, 14], "behav": [5, 7, 8], "If": [5, 7, 11, 13, 14], "want": [5, 6], "custom": [5, 8, 9, 11, 13], "modifi": [5, 11], "assign": [5, 13], "Then": 5, "re": [5, 6, 12, 13], "thing": [5, 8], "your": 5, "svmperf_hom": [5, 14], "valid_loss": [5, 12, 14], "mycustomloss": 5, "28": [0, 1, 5, 13], "current": [5, 11, 12, 13, 14], "support": [5, 9, 13, 14], "oper": 5, "trivial": 5, "strategi": [5, 6], "2016": [5, 13, 14], "sentiment": [5, 9, 13], "19": [5, 13], "onevsal": [5, 14], "know": [5, 6], "where": [5, 7, 11, 12, 13, 14], "top": [5, 11, 14], "thu": [1, 5, 6, 7, 11, 12, 14], "nor": 5, "castano": [5, 13], "2019": [5, 13, 14], "dynam": [5, 12, 13, 14], "task": [0, 5, 6, 9, 13], "45": [5, 7, 13], "15": [5, 11, 13], "polici": [5, 14], "processor": 5, "av": [5, 14], "ptr": [5, 14], "member": [5, 14], "d": [5, 14], "static": [5, 14], "red_siz": [5, 14], "pleas": 5, "check": [5, 11], "offer": [5, 9], "torch": [5, 12, 14], "embed": [5, 12, 14], "lstm": [5, 12, 14], "cnn": [5, 14], "its": [5, 6, 8, 11, 12, 14], "layer": [5, 12, 14], "neuralclassifiertrain": [5, 12, 14], "cnnnet": [5, 12, 14], "vocabulary_s": [5, 12, 13, 14], "cuda": [5, 12, 14], "supervis": [6, 9], "strongli": [6, 7], "good": [6, 7], "choic": [1, 6, 14], "hyper": [6, 11, 12], "wherebi": 6, "chosen": [1, 6, 11], "pick": 6, "best": [6, 11, 12, 14], "being": [1, 6, 8, 11, 14], "criteria": 6, "solv": [6, 14], "assess": 6, "own": 6, "right": [6, 11, 13], "impos": [6, 11], "aim": [6, 7], "appropri": 6, "configur": [6, 11], "design": 6, "long": [6, 12], "regard": 6, "next": [6, 11, 12, 13], "section": [6, 8], "argu": 6, "alejandro": 6, "fabrizio": 6, "count": [6, 7, 9, 11, 13, 14], "arxiv": [], "preprint": [], "2011": [], "02552": [], "2020": [5, 12], "varieti": 6, "exhibit": [6, 7, 8], "degre": 6, "model_select": [6, 8, 10, 14], "gridsearchq": [6, 8, 11, 14], "grid": [6, 8, 11, 14], "explor": [6, 11], "portion": [], "param_grid": [6, 8, 11, 14], "logspac": [6, 8, 14], "class_weight": [6, 7, 14], "eval_budget": [], "refit": [6, 11], "retrain": [6, 12], "goe": 6, "end": [6, 11, 14], "best_params_": 6, "best_model_": 6, "101": [], "5f": 6, "system": [1, 6, 14], "start": 6, "hyperparam": 6, "0001": 14, "got": [6, 14], "24987": [], "48135": [], "001": [6, 12, 14], "24866": [], "100000": [], "43676": [], "finish": [1, 6], "param": [6, 11, 12, 14], "19982": [], "develop": [6, 9], "1010": [], "5005": [], "54it": [], "20342": [], "altern": [1, 6], "computation": 6, "costli": 6, "try": 6, "theoret": 6, "suboptim": 6, "opt": 6, "gridsearchcv": [6, 14], "10000": 11, "5379": [], "55it": [], "41734": [], "wors": [7, 11], "larg": 11, "between": [7, 9, 11, 12, 14], "modal": [], "turn": [], "better": [], "nonetheless": [], "happen": 7, "basic": [7, 14], "help": [1, 7, 14], "analys": [7, 9], "outcom": 7, "main": [3, 7, 8], "method_nam": [7, 11], "name": [5, 7, 11, 12, 13, 14], "shape": [7, 11, 12, 13, 14], "correspond": [1, 7, 13], "matrix": [7, 11, 14], "appear": 7, "occur": [7, 13], "merg": 7, "emq": [7, 14], "55": 7, "showcas": 7, "wide": [1, 7, 8], "variant": [7, 9, 11, 14], "linear": [7, 11, 14], "review": [7, 9, 13], "step": [7, 11], "05": [7, 11, 14], "gen_data": 7, "base_classifi": 7, "yield": [7, 8, 11, 13, 14], "tr_prev": [7, 11, 14], "append": 7, "__class__": [], "__name__": [], "insight": 7, "view": 7, "y": [7, 11, 12, 13, 14], "axi": [7, 11], "against": [6, 7], "x": [1, 5, 7, 11, 12, 13, 14], "unfortun": 7, "limit": [7, 8, 11, 14], "binary_diagon": [7, 11], "train_prev": [7, 11], "savepath": [7, 11], "bin_diag": 7, "png": 7, "save": [7, 11], "pdf": [7, 14], "cyan": 7, "dot": [7, 11], "color": [7, 11], "band": [7, 11], "hidden": [7, 12, 14], "show_std": [7, 11], "unadjust": 7, "bias": 7, "toward": [7, 13], "seen": [7, 11, 14], "evinc": 7, "box": [7, 11], "binary_bias_glob": [7, 11], "bin_bia": 7, "unbias": 7, "center": 7, "tend": 7, "overestim": 7, "high": [7, 11], "lower": [7, 14], "again": [7, 11], "accordingli": 7, "20": [1, 7, 11, 14], "90": [7, 11], "rewrit": 7, "method_data": 7, "training_preval": 7, "linspac": 7, "training_s": 7, "suffic": 7, "latex": [], "syntax": [], "_": [7, 9, 11, 13], "now": [5, 7, 8], "clearli": 7, "binary_bias_bin": [7, 11], "broken": [7, 11], "down": [1, 7, 8, 11, 13], "bin": [6, 7, 11, 14], "To": [7, 13], "nbin": [6, 7, 11, 14], "isometr": [7, 11], "subinterv": 7, "interestingli": 7, "enough": 7, "seemingli": 7, "tendenc": 7, "low": [6, 7, 11, 12], "underestim": 7, "beyond": 7, "67": [7, 11], "curios": 7, "pretti": 7, "discuss": 7, "analyz": 7, "compar": [7, 11], "both": [7, 13], "irrespect": [1, 7, 14], "harder": 7, "interpret": [7, 9, 14], "error_by_drift": [7, 11], "error_nam": [7, 11], "n_bin": [7, 11, 14], "err_drift": 7, "whenev": [7, 11], "clear": 7, "lowest": 7, "difficult": 7, "rememb": 7, "solid": 7, "comparison": [7, 8], "detriment": 7, "visual": [1, 7, 9], "hide": 7, "framework": [5, 9, 14], "written": 9, "root": 9, "concept": [3, 9], "baselin": 9, "integr": 9, "commonli": [8, 9], "facilit": 9, "twitter": [9, 13], "true_preval": 9, "hold": [9, 11, 14], "endeavour": [9, 11], "popular": [8, 9], "expect": [8, 9, 14], "maxim": [9, 14], "hdy": [9, 14], "versatil": 9, "etc": [5, 9], "uci": [9, 13], "nativ": 9, "loss": [9, 12, 14], "perf": [2, 9, 12, 14], "ad": [8, 9], "meta": [9, 11], "plot": [3, 9, 10], "diagon": [9, 11], "bia": [5, 9, 11, 12, 14], "drift": 9, "api": [5, 9], "subpackag": 10, "submodul": 10, "util": [10, 12, 13], "content": 10, "bctscalibr": 12, "nbvscalibr": 12, "recalibratedprobabilisticclassifi": 12, "recalibratedprobabilisticclassifierbas": 12, "classes_": [12, 13, 14], "fit_cv": 12, "fit_tr_val": 12, "tscalibr": 12, "vscalibr": 12, "lowranklogisticregress": 12, "document_embed": 12, "lstmnet": 12, "reset_net_param": 12, "textclassifiernet": 12, "dimens": [11, 12, 13, 14], "forward": [12, 14], "xavier_uniform": 12, "torchdataset": 12, "asdataload": 12, "decision_funct": 12, "splitstratifi": 13, "stat": 13, "train_test": [5, 6, 7, 8, 13], "xp": 13, "xy": 13, "split_random": 13, "split_stratifi": [6, 8, 13], "uniform_sampl": 13, "uniform_sampling_index": 13, "fetch_lequa2022": [0, 13], "warn": [11, 13], "indextransform": 13, "add_word": 13, "fit_transform": 13, "reader": 11, "binar": [11, 13], "from_csv": 13, "from_spars": 13, "from_text": 13, "reindex_label": 13, "getptecondestim": 14, "solve_adjust": 14, "adjustedclassifyandcount": 14, "distributionmatch": [5, 6, 14], "dy": [5, 14], "em": 14, "max_it": 14, "explicitlossminimis": [], "max": [5, 14], "ms2": [5, 14], "mediansweep": 14, "mediansweep2": 14, "probabilisticadjustedclassifyandcount": 14, "probabilisticclassifyandcount": 14, "smm": [5, 14], "t50": [5, 14], "thresholdoptim": 14, "cross_generate_predict": 14, "cross_generate_predictions_depr": [], "binaryquantifi": 14, "onevsallgener": [5, 14], "eacc": 14, "ecc": 14, "eemq": 14, "ehdi": 14, "epacc": 14, "valid_polici": 14, "ensemblefactori": 14, "get_probability_distribut": 14, "quanetmodul": 14, "quanettrain": 14, "clean_checkpoint": 14, "clean_checkpoint_dir": 14, "mae_loss": 14, "non_aggreg": 11, "maximumlikelihoodprevalenceestim": 14, "absolute_error": 11, "hat": 11, "frac": 11, "mathcal": 11, "sum_": 11, "acc_error": 11, "y_true": 11, "y_pred": 11, "tp": 11, "tn": 11, "fp": 11, "fn": 11, "stand": [5, 11, 14], "f1_error": 11, "macro": 11, "f_1": 11, "harmon": 11, "recal": 11, "2tp": 11, "independ": [11, 14], "err_nam": 11, "p_hat": [], "d_": 11, "kl": 11, "log": [11, 13], "factor": 11, "beforehand": 11, "n_sampl": [11, 12], "mean_absolute_error": 11, "mean_relative_absolute_error": 11, "relative_absolute_error": 11, "underlin": 11, "displaystyl": 11, "abstractprotocol": [8, 11], "union": [11, 13, 14], "aggr_speedup": [1, 11], "auto": [1, 11], "evaluation_report": [1, 11], "app": [6, 7, 8, 11, 14], "repeat": [7, 8, 11], "smooth_limits_epsilon": 11, "random_st": [7, 8, 11, 13], "return_typ": [8, 11], "sample_prev": [8, 11], "abstractstochasticseededprotocol": [8, 11], "onlabelledcollectionprotocol": [1, 8, 11], "95": 11, "copi": [11, 13], "quantiti": 11, "labelled_collect": [8, 11], "prevalence_grid": 11, "exhaust": 11, "sum": [11, 14], "implicit": 11, "return_constrained_dim": 11, "rest": [11, 12, 13], "quit": 11, "obvious": 11, "determinist": 11, "anywher": 11, "multipli": 11, "necessari": 11, "samples_paramet": 11, "total": [8, 11], "parent": 11, "sequenc": [8, 11], "enforc": 11, "collat": 11, "arg": [11, 13], "domainmix": 11, "domaina": 11, "domainb": 11, "mixture_point": 11, "domain": 11, "scale": [5, 11, 12, 14], "npp": [8, 11], "draw": 11, "uniformli": [8, 11], "therefor": 11, "get_col": 11, "get_labelled_collect": 11, "on_preclassified_inst": 11, "pre_classif": 11, "in_plac": 11, "usimplexpp": [], "kraemer": [8, 11], "algorithm": [8, 11, 14], "sens": 11, "guarante": [8, 11, 13], "prefer": [1, 8, 11], "intract": 11, "hellingerdist": 11, "hellingh": 11, "distanc": [11, 14], "hd": [5, 11, 14], "discret": [11, 14], "sqrt": 11, "p_i": 11, "q_i": 11, "real": [11, 12, 13, 14], "topsoedist": 11, "1e": [11, 12, 14], "topso": [11, 14], "adjusted_quantif": 11, "prevalence_estim": 11, "tpr": [11, 14], "fpr": [11, 14], "clip": 11, "exce": 11, "check_prevalence_vector": 11, "raise_except": 11, "toleranz": 11, "08": 11, "combinations_budget": 11, "largest": 11, "dimension": [11, 12, 13, 14], "repetit": 11, "less": [11, 13], "normalize_preval": 11, "l1": [11, 14], "calcul": 11, "binom": 11, "mass": 11, "alloc": [11, 12], "solut": 11, "star": 11, "bar": 11, "prevalence_from_label": 11, "n_instanc": [11, 12, 14], "correctli": 11, "even": 11, "len": 11, "prevalence_from_prob": 11, "bool": [11, 12, 14], "argmax": 11, "prevalence_linspac": 11, "01": [6, 11, 12, 14], "separ": [11, 13], "99": 11, "uniform_prevalence_sampl": 11, "adapt": [11, 12], "post": 11, "http": [11, 13, 14], "stackexchang": 11, "com": 11, "question": 11, "3227": 11, "uniform": [9, 11, 13], "uniform_simplex_sampl": 11, "dict": [11, 13, 14], "timeout": 11, "dictionari": [11, 12, 13, 14], "kei": [11, 13], "quantification_error": 11, "whether": [11, 12, 13, 14], "ignor": [11, 13, 14], "gen": 11, "establish": 11, "timer": 11, "longer": [11, 14], "timeouterror": 11, "bound": [11, 14], "stdout": 11, "best_model": 11, "after": [11, 14], "minim": [11, 14], "routin": [11, 13, 14], "unus": [11, 12], "contanin": 11, "cross_val_predict": 11, "akin": [11, 14], "issu": 11, "reproduc": [11, 13], "pos_class": [11, 13], "titl": 11, "colormap": 11, "listedcolormap": 11, "vertical_xtick": 11, "legend": 11, "local": 11, "sign": 11, "minu": 11, "classs": 11, "compon": [11, 12, 14], "cm": 11, "tab10": 11, "secondari": 11, "global": 11, "method_ord": 11, "henc": [11, 13], "conveni": [1, 5, 8, 11], "multiclass": [0, 5, 8, 11, 13, 14], "inconveni": 11, "leyend": 11, "hightlight": 11, "associ": 11, "brokenbar_supremacy_by_drift": 11, "isomer": 11, "x_error": 11, "y_error": 11, "ttest_alpha": 11, "005": 11, "tail_density_threshold": 11, "region": 11, "chart": 11, "condit": [8, 11, 14], "ii": 11, "significantli": 11, "side": 11, "confid": 11, "percentil": 11, "divid": 11, "amount": [1, 8, 11], "similar": [11, 14], "threshold": [11, 14], "densiti": 11, "tail": 11, "discard": 11, "outlier": 11, "show_dens": 11, "show_legend": 11, "logscal": 11, "vline": 11, "especi": 11, "mai": 11, "cumberson": 11, "gain": 11, "understand": 11, "fare": 11, "regim": 11, "highlight": 11, "vertic": 11, "earlystop": 11, "patienc": [11, 12, 14], "lower_is_bett": 11, "earli": [11, 12, 14], "stop": [11, 12, 14], "epoch": [11, 12, 14], "best_epoch": 11, "best_scor": 11, "consecut": [11, 12, 14], "monitor": 11, "obtaind": 11, "far": [11, 12, 13], "flag": 11, "keep": [11, 13], "track": 11, "boolean": [11, 13, 14], "create_if_not_exist": 11, "makedir": 11, "exist_ok": 11, "join": [11, 13], "dir": [11, 14], "subdir": 11, "anotherdir": 11, "create_parent_dir": 11, "exist": [8, 11], "txt": 11, "download_fil": 11, "url": 11, "archive_filenam": 11, "destin": 11, "filenam": 11, "download_file_if_not_exist": 11, "dowload": 11, "get_quapy_hom": 11, "home": [11, 13], "perman": 11, "map_parallel": 11, "func": 11, "slice": 11, "item": 11, "wrapper": [11, 12, 13, 14], "multiprocess": [11, 14], "delai": 11, "args_i": 11, "silent": [11, 14], "child": 11, "ensur": 11, "pickled_resourc": 11, "pickle_path": 11, "generation_func": 11, "fast": [0, 11, 13], "resourc": 11, "some_arrai": 11, "mock": [11, 12], "rand": 11, "my_arrai": 11, "pkl": 11, "save_text_fil": 11, "disk": 11, "miss": 11, "temp_se": 11, "context": 11, "tempor": [11, 12], "outer": 11, "state": 11, "within": [11, 14], "get_njob": [], "correct": [5, 12, 14], "temperatur": [5, 12, 14], "bct": [12, 14], "abstent": 12, "alexandari": [5, 12, 14], "afterward": [12, 14], "No": [12, 14], "nbv": [12, 14], "baseestim": [5, 12, 14], "calibratorfactori": 12, "n_compon": 12, "kwarg": [12, 13, 14], "decomposit": 12, "truncatedsvd": 12, "princip": 12, "regress": 12, "n_featur": 12, "length": [12, 13], "eventu": [12, 13], "unalt": 12, "emb": 12, "embedding_s": 12, "hidden_s": 12, "repr_siz": 12, "kernel_height": 12, "stride": 12, "pad": [12, 13], "drop_p": 12, "convolut": 12, "vocabulari": [12, 13], "kernel": 12, "drop": 12, "dropout": [12, 14], "batch": 12, "dataload": 12, "tensor": 12, "n_dimens": 12, "lstm_class_nlay": 12, "short": 12, "memori": 12, "net": 12, "weight_decai": 12, "batch_siz": 12, "64": [6, 12, 14], "batch_size_test": 12, "512": [12, 14], "padding_length": 12, "checkpointpath": 12, "checkpoint": [12, 14], "classifier_net": 12, "weight": [12, 13], "decai": 12, "wait": 12, "enabl": 12, "gpu": [12, 14], "vocab_s": 12, "reiniti": 12, "trainer": 12, "disjoint": 12, "embed_s": 12, "nn": 12, "pad_length": 12, "xavier": 12, "shuffl": [12, 13], "longest": 12, "shorter": 12, "svmperf_bas": [12, 14], "classifiermixin": 12, "thorsten": 12, "refer": [0, 12, 13], "svm_perf_learn": 12, "svm_perf_classifi": 12, "trade": [12, 14], "off": [12, 14], "margin": [12, 14], "std": 12, "qacc": 12, "qf1": 12, "qgm": 12, "12": 12, "26": 12, "23": [5, 12], "train_siz": 13, "conform": 13, "round": 13, "loader_kwarg": 13, "read": 13, "tupl": [8, 11, 13, 14], "tr": 13, "te": 13, "csr": 13, "csr_matrix": 13, "4403": 13, "my_collect": 13, "codefram": 13, "larger": [11, 13, 14], "actual": [13, 14], "empti": 13, "met": 13, "whose": [13, 14], "train_prop": [6, 8, 13], "left": [11, 13], "stratif": 13, "greater": 13, "dataset_nam": 13, "data_hom": 13, "test_split": 13, "predefin": 13, "uci_dataset": 13, "dump": 13, "leav": 13, "quay_data": 13, "ml": 13, "5fcvx2": 13, "x2": 13, "offici": 13, "lequa": [8, 9, 13], "competit": [0, 9, 13], "t1a": [0, 13], "t1b": [0, 13], "t2a": [0, 13], "t2b": [0, 13], "raw": [0, 11, 13], "merchandis": [0, 13], "sperduti": [0, 13], "2022": [0, 8, 13], "overview": [0, 13], "clef": [0, 13], "lequa2022_experi": [0, 13], "py": [0, 5, 8, 13], "guid": 13, "val_gen": 13, "test_gen": 13, "samplesfromdir": 13, "minimun": 13, "kept": 13, "subsequ": 13, "mining6": 13, "devel": 13, "style": 13, "countvector": 13, "keyword": [13, 14], "nogap": 13, "regardless": 13, "codifi": 13, "unknown": 13, "surfac": 13, "assert": 13, "gap": 13, "preced": 13, "decid": [8, 11, 13], "uniqu": 13, "rare": 13, "unk": 13, "minimum": [13, 14], "occurr": 13, "org": [13, 14], "stabl": 13, "feature_extract": 13, "html": 13, "subtyp": 13, "spmatrix": 13, "remov": [13, 14], "infrequ": 13, "aka": [13, 14], "sublinear_tf": 13, "scall": 13, "counter": 13, "tfidfvector": 13, "whcih": 13, "had": 13, "encod": 13, "utf": 13, "csv": 13, "feat1": 13, "feat2": 13, "featn": 13, "covari": 13, "express": 13, "row": [1, 13], "class2int": 13, "collet": 13, "fomart": 13, "progress": 13, "sentenc": 13, "classnam": 13, "u1": 13, "misclassif": 14, "n_classes_": [], "fit_classifi": 14, "bypass": 14, "y_": 14, "ptecondestim": 14, "prevs_estim": 14, "ax": 14, "entri": [0, 1, 14], "y_i": 14, "y_j": 14, "_posterior_probabilities_": 14, "attribut": 14, "subclass": 14, "give": [8, 14], "outsid": 14, "unless": 14, "noth": 14, "els": 14, "cdf": [5, 14], "match": [5, 14], "helling": 14, "sought": 14, "channel": 14, "proper": 14, "ch": 14, "di": 14, "dij": 14, "fraction": 14, "th": 14, "tol": 14, "ternari": 14, "dl": 14, "doi": 14, "1145": 14, "3219819": 14, "3220059": 14, "histogram": 14, "toler": 14, "explicit": 14, "exact_train_prev": [5, 14], "recalib": [5, 14], "updat": 14, "likelihood": [12, 14], "mutual": 14, "recurs": 14, "until": 14, "converg": 14, "suggest": [5, 14], "recalibr": 14, "reach": 14, "loop": 14, "cumul": 14, "unlabel": 14, "latter": 14, "forman": [5, 8, 14], "2006": [5, 14], "2008": [5, 14], "goal": 14, "bring": 14, "denomin": 14, "median": [5, 14], "sweep": [5, 14], "binary_quantifi": 14, "prevel": 14, "emploi": 14, "resp": 14, "subobject": 14, "nest": 14, "pipelin": 14, "__": 14, "simplif": 14, "2021": [5, 6, 14], "equival": 14, "cosest": 14, "heurist": [1, 14], "choos": [5, 14], "ground": 14, "complement": 14, "param_mod_sel": 14, "param_model_sel": 14, "min_po": 14, "max_sample_s": 14, "closest": 14, "preliminari": 14, "recomput": 14, "compat": [12, 14], "l": 14, "base_quantifier_class": 14, "factori": 14, "common": 14, "doc_embedding_s": 14, "stats_siz": 14, "lstm_hidden_s": 14, "lstm_nlayer": 14, "ff_layer": 14, "1024": 14, "bidirect": 14, "qdrop_p": 14, "order_bi": 14, "cell": 14, "connect": 14, "ff": 14, "sort": 14, "doc_embed": 14, "doc_posterior": 14, "recip": 14, "care": 14, "regist": 14, "hook": 14, "n_epoch": 14, "tr_iter_per_poch": 14, "va_iter_per_poch": 14, "checkpointdir": 14, "checkpointnam": 14, "phase": 14, "anyth": 14, "truth": 14, "mlpe": 14, "lazi": 14, "put": 14, "assumpion": 14, "beat": [12, 14], "estimant": 14, "kundaj": 12, "shrikumar": 12, "novemb": 12, "232": 12, "pmlr": 12, "outpu": [], "partit": 12, "ight": [], "valueerror": 11, "attach": 13, "mix": [], "onevsallaggreg": [5, 14], "parallel_backend": 14, "loki": 14, "backend": 14, "cannot": 14, "temp": 14, "getonevsal": 5, "realiz": 11, "prepar": 11, "act": 11, "modif": 11, "place": [11, 13], "host_fold": 12, "tmp": 12, "delet": 12, "newelm": 14, "underli": [5, 6, 14], "newsvma": [5, 14], "newsvmkld": [5, 14], "newsvmq": [5, 14], "newsvmra": [5, 14], "newonevsal": 14, "onlabelledcollect": [], "forc": [1, 11], "deactiv": [1, 11], "evaluate_on_sampl": 11, "central": 11, "endow": 11, "never": [8, 11], "behaviour": [1, 5, 8, 11], "undertaken": 11, "artificialprevalenceprotocol": 11, "iterateprotocol": 11, "previous": 11, "naturalprevalenceprotocol": 11, "upp": [9, 11], "uniformprevalenceprotocol": 11, "n_train": 13, "n_test": 13, "quick": 13, "omit": 1, "procotol": 1, "vari": [1, 8], "u": 1, "prot": 1, "our": [1, 8], "evaluatio": 1, "4f": [1, 8], "often": 1, "account": 1, "rise": [1, 8], "straightforward": 1, "308": 1, "692": 1, "314": 1, "686": 1, "005649": 1, "013182": 1, "000074": 1, "896": 1, "013145": 1, "069323": 1, "000985": 1, "848": 1, "152": 1, "809": 1, "191": 1, "039063": 1, "149806": 1, "005175": 1, "016": 1, "984": 1, "033": 1, "967": 1, "017236": 1, "487529": 1, "005298": 1, "728": 1, "751": 1, "249": 1, "022769": 1, "057146": 1, "001350": 1, "4995": 1, "72": 1, "698": 1, "302": 1, "021752": 1, "053631": 1, "001133": 1, "4996": 1, "868": 1, "132": 1, "888": 1, "112": 1, "020490": 1, "088230": 1, "001985": 1, "4997": 1, "292": 1, "708": 1, "298": 1, "702": 1, "006149": 1, "014788": 1, "000090": 1, "4998": 1, "76": 1, "220": 1, "780": 1, "019950": 1, "054309": 1, "001127": 1, "4999": 1, "948": 1, "052": 1, "965": 1, "016941": 1, "165776": 1, "003538": 1, "023588": 1, "108779": 1, "003631": 1, "exit": 1, "smaller": 1, "1m": 1, "convers": 1, "precomput": 1, "execut": 1, "lot": 1, "welcom": 3, "behind": 3, "simplifi": 5, "remain": 5, "unchang": 5, "v0": [5, 8, 9], "construct": 5, "depart": 5, "approach": [5, 8], "firat": 5, "mutliclasshdi": 5, "maletzk": 5, "hassan": 5, "thank": 5, "pablo": 5, "contribut": 5, "newsvmnkld": 5, "experiment": 5, "plo": 5, "ONE": 5, "There": 5, "explicit_loss_minim": 5, "one_vs_al": 5, "robustli": 8, "presenc": 8, "confront": [6, 8], "stochast": 8, "fair": 8, "radom_st": 8, "technic": 8, "explan": 8, "custom_protocol": 8, "subject": 8, "2005": 8, "usag": 8, "classifier__c": [6, 8], "equial": 8, "val_app": 8, "increas": 8, "rapidli": 8, "becom": 8, "impract": 8, "legitim": 8, "drawback": 8, "elect": 8, "yet": 8, "burden": 8, "incur": 8, "idea": 8, "deprec": 8, "due": 8, "capabl": 8, "md": 2, "_new": 9, "adher": 11, "ecir": 6, "retriev": 6, "91": 6, "devot": 6, "mark": 6, "prefix": 6, "classifier__": 6, "16": 6, "mae_scor": 6, "04021": 6, "took": 6, "1356": 6, "04286": 6, "2139": 6, "04888": 6, "2491": 6, "05163": 6, "5372": 6, "02445": 6, "9056": 6, "02234": 6, "3114": 6, "03102": 6, "conceptu": 6, "flaw": 6, "hand": 6, "surrog": 6, "train_sampl": 7, "tackl": 0, "val_gener": 0, "test_gener": 0, "doc": 0, "250": 0, "20000": 0, "math": 11, "2frac": 11, "sanity_check": 11, "skip": 11}, "objects": {"": [[11, 0, 0, "-", "quapy"]], "quapy": [[12, 0, 0, "-", "classification"], [13, 0, 0, "-", "data"], [11, 0, 0, "-", "error"], [11, 0, 0, "-", "evaluation"], [11, 0, 0, "-", "functional"], [14, 0, 0, "-", "method"], [11, 0, 0, "-", "model_selection"], [11, 0, 0, "-", "plot"], [11, 0, 0, "-", "protocol"], [11, 0, 0, "-", "util"]], "quapy.classification": [[12, 0, 0, "-", "calibration"], [12, 0, 0, "-", "methods"], [12, 0, 0, "-", "neural"], [12, 0, 0, "-", "svmperf"]], "quapy.classification.calibration": [[12, 1, 1, "", "BCTSCalibration"], [12, 1, 1, "", "NBVSCalibration"], [12, 1, 1, "", "RecalibratedProbabilisticClassifier"], [12, 1, 1, "", "RecalibratedProbabilisticClassifierBase"], [12, 1, 1, "", "TSCalibration"], [12, 1, 1, "", "VSCalibration"]], "quapy.classification.calibration.RecalibratedProbabilisticClassifierBase": [[12, 2, 1, "", "classes_"], [12, 3, 1, "", "fit"], [12, 3, 1, "", "fit_cv"], [12, 3, 1, "", "fit_tr_val"], [12, 3, 1, "", "predict"], [12, 3, 1, "", "predict_proba"]], "quapy.classification.methods": [[12, 1, 1, "", "LowRankLogisticRegression"]], "quapy.classification.methods.LowRankLogisticRegression": [[12, 3, 1, "", "fit"], [12, 3, 1, "", "get_params"], [12, 3, 1, "", "predict"], [12, 3, 1, "", "predict_proba"], [12, 3, 1, "", "set_params"], [12, 3, 1, "", "transform"]], "quapy.classification.neural": [[12, 1, 1, "", "CNNnet"], [12, 1, 1, "", "LSTMnet"], [12, 1, 1, "", "NeuralClassifierTrainer"], [12, 1, 1, "", "TextClassifierNet"], [12, 1, 1, "", "TorchDataset"]], "quapy.classification.neural.CNNnet": [[12, 3, 1, "", "document_embedding"], [12, 3, 1, "", "get_params"], [12, 4, 1, "", "training"], [12, 2, 1, "", "vocabulary_size"]], "quapy.classification.neural.LSTMnet": [[12, 3, 1, "", "document_embedding"], [12, 3, 1, "", "get_params"], [12, 4, 1, "", "training"], [12, 2, 1, "", "vocabulary_size"]], "quapy.classification.neural.NeuralClassifierTrainer": [[12, 2, 1, "", "device"], [12, 3, 1, "", "fit"], [12, 3, 1, "", "get_params"], [12, 3, 1, "", "predict"], [12, 3, 1, "", "predict_proba"], [12, 3, 1, "", "reset_net_params"], [12, 3, 1, "", "set_params"], [12, 3, 1, "", "transform"]], "quapy.classification.neural.TextClassifierNet": [[12, 3, 1, "", "dimensions"], [12, 3, 1, "", "document_embedding"], [12, 3, 1, "", "forward"], [12, 3, 1, "", "get_params"], [12, 3, 1, "", "predict_proba"], [12, 4, 1, "", "training"], [12, 2, 1, "", "vocabulary_size"], [12, 3, 1, "", "xavier_uniform"]], "quapy.classification.neural.TorchDataset": [[12, 3, 1, "", "asDataloader"]], "quapy.classification.svmperf": [[12, 1, 1, "", "SVMperf"]], "quapy.classification.svmperf.SVMperf": [[12, 3, 1, "", "decision_function"], [12, 3, 1, "", "fit"], [12, 3, 1, "", "predict"], [12, 4, 1, "", "valid_losses"]], "quapy.data": [[13, 0, 0, "-", "base"], [13, 0, 0, "-", "datasets"], [13, 0, 0, "-", "preprocessing"], [13, 0, 0, "-", "reader"]], "quapy.data.base": [[13, 1, 1, "", "Dataset"], [13, 1, 1, "", "LabelledCollection"]], "quapy.data.base.Dataset": [[13, 3, 1, "", "SplitStratified"], [13, 2, 1, "", "binary"], [13, 2, 1, "", "classes_"], [13, 3, 1, "", "kFCV"], [13, 3, 1, "", "load"], [13, 2, 1, "", "n_classes"], [13, 3, 1, "", "reduce"], [13, 3, 1, "", "stats"], [13, 2, 1, "", "train_test"], [13, 2, 1, "", "vocabulary_size"]], "quapy.data.base.LabelledCollection": [[13, 2, 1, "", "X"], [13, 2, 1, "", "Xp"], [13, 2, 1, "", "Xy"], [13, 2, 1, "", "binary"], [13, 3, 1, "", "counts"], [13, 3, 1, "", "join"], [13, 3, 1, "", "kFCV"], [13, 3, 1, "", "load"], [13, 2, 1, "", "n_classes"], [13, 2, 1, "", "p"], [13, 3, 1, "", "prevalence"], [13, 3, 1, "", "sampling"], [13, 3, 1, "", "sampling_from_index"], [13, 3, 1, "", "sampling_index"], [13, 3, 1, "", "split_random"], [13, 3, 1, "", "split_stratified"], [13, 3, 1, "", "stats"], [13, 3, 1, "", "uniform_sampling"], [13, 3, 1, "", "uniform_sampling_index"], [13, 2, 1, "", "y"]], "quapy.data.datasets": [[13, 5, 1, "", "fetch_UCIDataset"], [13, 5, 1, "", "fetch_UCILabelledCollection"], [13, 5, 1, "", "fetch_lequa2022"], [13, 5, 1, "", "fetch_reviews"], [13, 5, 1, "", "fetch_twitter"], [13, 5, 1, "", "warn"]], "quapy.data.preprocessing": [[13, 1, 1, "", "IndexTransformer"], [13, 5, 1, "", "index"], [13, 5, 1, "", "reduce_columns"], [13, 5, 1, "", "standardize"], [13, 5, 1, "", "text2tfidf"]], "quapy.data.preprocessing.IndexTransformer": [[13, 3, 1, "", "add_word"], [13, 3, 1, "", "fit"], [13, 3, 1, "", "fit_transform"], [13, 3, 1, "", "transform"], [13, 3, 1, "", "vocabulary_size"]], "quapy.data.reader": [[13, 5, 1, "", "binarize"], [13, 5, 1, "", "from_csv"], [13, 5, 1, "", "from_sparse"], [13, 5, 1, "", "from_text"], [13, 5, 1, "", "reindex_labels"]], "quapy.error": [[11, 5, 1, "", "absolute_error"], [11, 5, 1, "", "acc_error"], [11, 5, 1, "", "acce"], [11, 5, 1, "", "ae"], [11, 5, 1, "", "f1_error"], [11, 5, 1, "", "f1e"], [11, 5, 1, "", "from_name"], [11, 5, 1, "", "kld"], [11, 5, 1, "", "mae"], [11, 5, 1, "", "mean_absolute_error"], [11, 5, 1, "", "mean_relative_absolute_error"], [11, 5, 1, "", "mkld"], [11, 5, 1, "", "mnkld"], [11, 5, 1, "", "mrae"], [11, 5, 1, "", "mse"], [11, 5, 1, "", "nkld"], [11, 5, 1, "", "rae"], [11, 5, 1, "", "relative_absolute_error"], [11, 5, 1, "", "se"], [11, 5, 1, "", "smooth"]], "quapy.evaluation": [[11, 5, 1, "", "evaluate"], [11, 5, 1, "", "evaluate_on_samples"], [11, 5, 1, "", "evaluation_report"], [11, 5, 1, "", "prediction"]], "quapy.functional": [[11, 5, 1, "", "HellingerDistance"], [11, 5, 1, "", "TopsoeDistance"], [11, 5, 1, "", "adjusted_quantification"], [11, 5, 1, "", "check_prevalence_vector"], [11, 5, 1, "", "get_nprevpoints_approximation"], [11, 5, 1, "", "normalize_prevalence"], [11, 5, 1, "", "num_prevalence_combinations"], [11, 5, 1, "", "prevalence_from_labels"], [11, 5, 1, "", "prevalence_from_probabilities"], [11, 5, 1, "", "prevalence_linspace"], [11, 5, 1, "", "strprev"], [11, 5, 1, "", "uniform_prevalence_sampling"], [11, 5, 1, "", "uniform_simplex_sampling"]], "quapy.method": [[14, 0, 0, "-", "aggregative"], [14, 0, 0, "-", "base"], [14, 0, 0, "-", "meta"], [14, 0, 0, "-", "neural"], [14, 0, 0, "-", "non_aggregative"]], "quapy.method.aggregative": [[14, 1, 1, "", "ACC"], [14, 4, 1, "", "AdjustedClassifyAndCount"], [14, 1, 1, "", "AggregativeProbabilisticQuantifier"], [14, 1, 1, "", "AggregativeQuantifier"], [14, 1, 1, "", "CC"], [14, 4, 1, "", "ClassifyAndCount"], [14, 1, 1, "", "DistributionMatching"], [14, 1, 1, "", "DyS"], [14, 1, 1, "", "EMQ"], [14, 4, 1, "", "ExpectationMaximizationQuantifier"], [14, 1, 1, "", "HDy"], [14, 4, 1, "", "HellingerDistanceY"], [14, 1, 1, "", "MAX"], [14, 1, 1, "", "MS"], [14, 1, 1, "", "MS2"], [14, 4, 1, "", "MedianSweep"], [14, 4, 1, "", "MedianSweep2"], [14, 1, 1, "", "OneVsAllAggregative"], [14, 1, 1, "", "PACC"], [14, 1, 1, "", "PCC"], [14, 4, 1, "", "ProbabilisticAdjustedClassifyAndCount"], [14, 4, 1, "", "ProbabilisticClassifyAndCount"], [14, 4, 1, "", "SLD"], [14, 1, 1, "", "SMM"], [14, 1, 1, "", "T50"], [14, 1, 1, "", "ThresholdOptimization"], [14, 1, 1, "", "X"], [14, 5, 1, "", "cross_generate_predictions"], [14, 5, 1, "", "newELM"], [14, 5, 1, "", "newSVMAE"], [14, 5, 1, "", "newSVMKLD"], [14, 5, 1, "", "newSVMQ"], [14, 5, 1, "", "newSVMRAE"]], "quapy.method.aggregative.ACC": [[14, 3, 1, "", "aggregate"], [14, 3, 1, "", "classify"], [14, 3, 1, "", "fit"], [14, 3, 1, "", "getPteCondEstim"], [14, 3, 1, "", "solve_adjustment"]], "quapy.method.aggregative.AggregativeProbabilisticQuantifier": [[14, 3, 1, "", "classify"]], "quapy.method.aggregative.AggregativeQuantifier": [[14, 3, 1, "", "aggregate"], [14, 2, 1, "", "classes_"], [14, 2, 1, "", "classifier"], [14, 3, 1, "", "classify"], [14, 3, 1, "", "fit"], [14, 3, 1, "", "quantify"]], "quapy.method.aggregative.CC": [[14, 3, 1, "", "aggregate"], [14, 3, 1, "", "fit"]], "quapy.method.aggregative.DistributionMatching": [[14, 3, 1, "", "aggregate"], [14, 3, 1, "", "fit"]], "quapy.method.aggregative.DyS": [[14, 3, 1, "", "aggregate"], [14, 3, 1, "", "fit"]], "quapy.method.aggregative.EMQ": [[14, 3, 1, "", "EM"], [14, 4, 1, "", "EPSILON"], [14, 4, 1, "", "MAX_ITER"], [14, 3, 1, "", "aggregate"], [14, 3, 1, "", "fit"], [14, 3, 1, "", "predict_proba"]], "quapy.method.aggregative.HDy": [[14, 3, 1, "", "aggregate"], [14, 3, 1, "", "fit"]], "quapy.method.aggregative.OneVsAllAggregative": [[14, 3, 1, "", "aggregate"], [14, 3, 1, "", "classify"]], "quapy.method.aggregative.PACC": [[14, 3, 1, "", "aggregate"], [14, 3, 1, "", "classify"], [14, 3, 1, "", "fit"], [14, 3, 1, "", "getPteCondEstim"]], "quapy.method.aggregative.PCC": [[14, 3, 1, "", "aggregate"], [14, 3, 1, "", "fit"]], "quapy.method.aggregative.SMM": [[14, 3, 1, "", "aggregate"], [14, 3, 1, "", "fit"]], "quapy.method.aggregative.ThresholdOptimization": [[14, 3, 1, "", "aggregate"], [14, 3, 1, "", "fit"]], "quapy.method.base": [[14, 1, 1, "", "BaseQuantifier"], [14, 1, 1, "", "BinaryQuantifier"], [14, 1, 1, "", "OneVsAll"], [14, 1, 1, "", "OneVsAllGeneric"], [14, 5, 1, "", "newOneVsAll"]], "quapy.method.base.BaseQuantifier": [[14, 3, 1, "", "fit"], [14, 3, 1, "", "quantify"]], "quapy.method.base.OneVsAllGeneric": [[14, 2, 1, "", "classes_"], [14, 3, 1, "", "fit"], [14, 3, 1, "", "quantify"]], "quapy.method.meta": [[14, 5, 1, "", "EACC"], [14, 5, 1, "", "ECC"], [14, 5, 1, "", "EEMQ"], [14, 5, 1, "", "EHDy"], [14, 5, 1, "", "EPACC"], [14, 1, 1, "", "Ensemble"], [14, 5, 1, "", "ensembleFactory"], [14, 5, 1, "", "get_probability_distribution"]], "quapy.method.meta.Ensemble": [[14, 4, 1, "", "VALID_POLICIES"], [14, 2, 1, "", "aggregative"], [14, 3, 1, "", "fit"], [14, 3, 1, "", "get_params"], [14, 2, 1, "", "probabilistic"], [14, 3, 1, "", "quantify"], [14, 3, 1, "", "set_params"]], "quapy.method.neural": [[14, 1, 1, "", "QuaNetModule"], [14, 1, 1, "", "QuaNetTrainer"], [14, 5, 1, "", "mae_loss"]], "quapy.method.neural.QuaNetModule": [[14, 2, 1, "", "device"], [14, 3, 1, "", "forward"], [14, 4, 1, "", "training"]], "quapy.method.neural.QuaNetTrainer": [[14, 2, 1, "", "classes_"], [14, 3, 1, "", "clean_checkpoint"], [14, 3, 1, "", "clean_checkpoint_dir"], [14, 3, 1, "", "fit"], [14, 3, 1, "", "get_params"], [14, 3, 1, "", "quantify"], [14, 3, 1, "", "set_params"]], "quapy.method.non_aggregative": [[14, 1, 1, "", "MaximumLikelihoodPrevalenceEstimation"]], "quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation": [[14, 3, 1, "", "fit"], [14, 3, 1, "", "quantify"]], "quapy.model_selection": [[11, 1, 1, "", "GridSearchQ"], [11, 5, 1, "", "cross_val_predict"]], "quapy.model_selection.GridSearchQ": [[11, 3, 1, "", "best_model"], [11, 3, 1, "", "fit"], [11, 3, 1, "", "get_params"], [11, 3, 1, "", "quantify"], [11, 3, 1, "", "set_params"]], "quapy.plot": [[11, 5, 1, "", "binary_bias_bins"], [11, 5, 1, "", "binary_bias_global"], [11, 5, 1, "", "binary_diagonal"], [11, 5, 1, "", "brokenbar_supremacy_by_drift"], [11, 5, 1, "", "error_by_drift"]], "quapy.protocol": [[11, 1, 1, "", "APP"], [11, 1, 1, "", "AbstractProtocol"], [11, 1, 1, "", "AbstractStochasticSeededProtocol"], [11, 4, 1, "", "ArtificialPrevalenceProtocol"], [11, 1, 1, "", "DomainMixer"], [11, 1, 1, "", "IterateProtocol"], [11, 1, 1, "", "NPP"], [11, 4, 1, "", "NaturalPrevalenceProtocol"], [11, 1, 1, "", "OnLabelledCollectionProtocol"], [11, 1, 1, "", "UPP"], [11, 4, 1, "", "UniformPrevalenceProtocol"]], "quapy.protocol.APP": [[11, 3, 1, "", "prevalence_grid"], [11, 3, 1, "", "sample"], [11, 3, 1, "", "samples_parameters"], [11, 3, 1, "", "total"]], "quapy.protocol.AbstractProtocol": [[11, 3, 1, "", "total"]], "quapy.protocol.AbstractStochasticSeededProtocol": [[11, 3, 1, "", "collator"], [11, 2, 1, "", "random_state"], [11, 3, 1, "", "sample"], [11, 3, 1, "", "samples_parameters"]], "quapy.protocol.DomainMixer": [[11, 3, 1, "", "sample"], [11, 3, 1, "", "samples_parameters"], [11, 3, 1, "", "total"]], "quapy.protocol.IterateProtocol": [[11, 3, 1, "", "total"]], "quapy.protocol.NPP": [[11, 3, 1, "", "sample"], [11, 3, 1, "", "samples_parameters"], [11, 3, 1, "", "total"]], "quapy.protocol.OnLabelledCollectionProtocol": [[11, 4, 1, "", "RETURN_TYPES"], [11, 3, 1, "", "get_collator"], [11, 3, 1, "", "get_labelled_collection"], [11, 3, 1, "", "on_preclassified_instances"]], "quapy.protocol.UPP": [[11, 3, 1, "", "sample"], [11, 3, 1, "", "samples_parameters"], [11, 3, 1, "", "total"]], "quapy.util": [[11, 1, 1, "", "EarlyStop"], [11, 5, 1, "", "create_if_not_exist"], [11, 5, 1, "", "create_parent_dir"], [11, 5, 1, "", "download_file"], [11, 5, 1, "", "download_file_if_not_exists"], [11, 5, 1, "", "get_quapy_home"], [11, 5, 1, "", "map_parallel"], [11, 5, 1, "", "parallel"], [11, 5, 1, "", "pickled_resource"], [11, 5, 1, "", "save_text_file"], [11, 5, 1, "", "temp_seed"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:property", "3": "py:method", "4": "py:attribute", "5": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "property", "Python property"], "3": ["py", "method", "Python method"], "4": ["py", "attribute", "Python attribute"], "5": ["py", "function", "Python function"]}, "titleterms": {"dataset": [0, 13], "review": 0, "twitter": 0, "sentiment": 0, "uci": 0, "machin": 0, "learn": 0, "issu": 0, "ad": 0, "custom": 0, "data": [0, 13], "process": 0, "evalu": [1, 11], "error": [1, 7, 11], "measur": 1, "protocol": [1, 8, 11], "instal": 4, "requir": 4, "svm": 4, "perf": 4, "quantif": [4, 5, 6, 7], "orient": [4, 6], "loss": [2, 4, 5, 6], "method": [5, 12, 14], "aggreg": [5, 14], "The": 5, "classifi": 5, "count": 5, "variant": 5, "expect": 5, "maxim": 5, "emq": 5, "helling": 5, "distanc": 5, "y": 5, "hdy": 5, "explicit": [2, 5], "minim": [2, 5], "meta": [5, 14], "model": [5, 6], "ensembl": 5, "quanet": 5, "neural": [5, 12, 14], "network": 5, "select": 6, "target": 6, "classif": [6, 12], "plot": [7, 11], "diagon": 7, "bia": 7, "drift": 7, "welcom": 9, "quapi": [9, 10, 11, 12, 13, 14], "": 9, "document": 9, "introduct": 9, "A": 9, "quick": 9, "exampl": 9, "featur": 9, "content": [9, 11, 12, 13, 14], "indic": 9, "tabl": 9, "packag": [11, 12, 13, 14], "subpackag": 11, "submodul": [11, 12, 13, 14], "function": 11, "model_select": 11, "util": 11, "modul": [11, 12, 13, 14], "calibr": 12, "svmperf": 12, "base": [13, 14], "preprocess": 13, "reader": 13, "non_aggreg": 14, "threshold": 5, "optim": 5, "artifici": 8, "preval": 8, "sampl": 8, "from": 8, "unit": 8, "simplex": 8, "uniform": 8, "upp": 8, "natur": 8, "other": 8, "lequa": 0}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"Installation": [[4, "installation"]], "Requirements": [[4, "requirements"]], "SVM-perf with quantification-oriented losses": [[4, "svm-perf-with-quantification-oriented-losses"]], "quapy": [[10, "quapy"]], "Welcome to QuaPy\u2019s documentation!": [[9, "welcome-to-quapy-s-documentation"]], "Introduction": [[9, "introduction"]], "A quick example:": [[9, "a-quick-example"]], "Features": [[9, "features"]], "Contents:": [[9, null]], "Indices and tables": [[9, "indices-and-tables"]], "Datasets": [[0, "datasets"]], "Reviews Datasets": [[0, "reviews-datasets"]], "Twitter Sentiment Datasets": [[0, "twitter-sentiment-datasets"]], "UCI Machine Learning": [[0, "uci-machine-learning"]], "Issues:": [[0, "issues"]], "LeQua Datasets": [[0, "lequa-datasets"]], "Adding Custom Datasets": [[0, "adding-custom-datasets"]], "Data Processing": [[0, "data-processing"]], "Evaluation": [[1, "evaluation"]], "Error Measures": [[1, "error-measures"]], "Evaluation Protocols": [[1, "evaluation-protocols"]], "Explicit Loss Minimization": [[2, "explicit-loss-minimization"], [5, "explicit-loss-minimization"]], "Quantification Methods": [[5, "quantification-methods"]], "Aggregative Methods": [[5, "aggregative-methods"]], "The Classify & Count variants": [[5, "the-classify-count-variants"]], "Expectation Maximization (EMQ)": [[5, "expectation-maximization-emq"]], "Hellinger Distance y (HDy)": [[5, "hellinger-distance-y-hdy"]], "Threshold Optimization methods": [[5, "threshold-optimization-methods"]], "Meta Models": [[5, "meta-models"]], "Ensembles": [[5, "ensembles"]], "The QuaNet neural network": [[5, "the-quanet-neural-network"]], "Model Selection": [[6, "model-selection"]], "Targeting a Quantification-oriented loss": [[6, "targeting-a-quantification-oriented-loss"]], "Targeting a Classification-oriented loss": [[6, "targeting-a-classification-oriented-loss"]], "Plotting": [[7, "plotting"]], "Diagonal Plot": [[7, "diagonal-plot"]], "Quantification bias": [[7, "quantification-bias"]], "Error by Drift": [[7, "error-by-drift"]], "Protocols": [[8, "protocols"]], "Artificial-Prevalence Protocol": [[8, "artificial-prevalence-protocol"]], "Sampling from the unit-simplex, the Uniform-Prevalence Protocol (UPP)": [[8, "sampling-from-the-unit-simplex-the-uniform-prevalence-protocol-upp"]], "Natural-Prevalence Protocol": [[8, "natural-prevalence-protocol"]], "Other protocols": [[8, "other-protocols"]], "Submodules": [[12, "submodules"], [13, "submodules"], [14, "submodules"], [11, "submodules"]], "Module contents": [[12, "module-quapy.classification"], [13, "module-quapy.data"], [14, "module-quapy.method"], [11, "module-quapy"]], "quapy.classification package": [[12, "quapy-classification-package"]], "quapy.classification.calibration": [[12, "quapy-classification-calibration"]], "quapy.classification.methods": [[12, "module-quapy.classification.methods"]], "quapy.classification.neural": [[12, "module-quapy.classification.neural"]], "quapy.classification.svmperf": [[12, "module-quapy.classification.svmperf"]], "quapy.data package": [[13, "quapy-data-package"]], "quapy.data.base": [[13, "module-quapy.data.base"]], "quapy.data.datasets": [[13, "module-quapy.data.datasets"]], "quapy.data.preprocessing": [[13, "module-quapy.data.preprocessing"]], "quapy.data.reader": [[13, "module-quapy.data.reader"]], "quapy.method package": [[14, "quapy-method-package"]], "quapy.method.aggregative": [[14, "module-quapy.method.aggregative"]], "quapy.method.base": [[14, "module-quapy.method.base"]], "quapy.method.meta": [[14, "module-quapy.method.meta"]], "quapy.method.neural": [[14, "module-quapy.method.neural"]], "quapy.method.non_aggregative": [[14, "module-quapy.method.non_aggregative"]], "quapy package": [[11, "quapy-package"]], "quapy.error": [[11, "module-quapy.error"]], "quapy.evaluation": [[11, "module-quapy.evaluation"]], "quapy.protocol": [[11, "quapy-protocol"]], "quapy.functional": [[11, "module-quapy.functional"]], "quapy.model_selection": [[11, "module-quapy.model_selection"]], "quapy.plot": [[11, "module-quapy.plot"]], "quapy.util": [[11, "module-quapy.util"]], "Subpackages": [[11, "subpackages"]]}, "indexentries": {"app (class in quapy.protocol)": [[11, "quapy.protocol.APP"]], "abstractprotocol (class in quapy.protocol)": [[11, "quapy.protocol.AbstractProtocol"]], "abstractstochasticseededprotocol (class in quapy.protocol)": [[11, "quapy.protocol.AbstractStochasticSeededProtocol"]], "artificialprevalenceprotocol (in module quapy.protocol)": [[11, "quapy.protocol.ArtificialPrevalenceProtocol"]], "domainmixer (class in quapy.protocol)": [[11, "quapy.protocol.DomainMixer"]], "earlystop (class in quapy.util)": [[11, "quapy.util.EarlyStop"]], "gridsearchq (class in quapy.model_selection)": [[11, "quapy.model_selection.GridSearchQ"]], "hellingerdistance() (in module quapy.functional)": [[11, "quapy.functional.HellingerDistance"]], "iterateprotocol (class in quapy.protocol)": [[11, "quapy.protocol.IterateProtocol"]], "npp (class in quapy.protocol)": [[11, "quapy.protocol.NPP"]], "naturalprevalenceprotocol (in module quapy.protocol)": [[11, "quapy.protocol.NaturalPrevalenceProtocol"]], "onlabelledcollectionprotocol (class in quapy.protocol)": [[11, "quapy.protocol.OnLabelledCollectionProtocol"]], "return_types (quapy.protocol.onlabelledcollectionprotocol attribute)": [[11, "quapy.protocol.OnLabelledCollectionProtocol.RETURN_TYPES"]], "topsoedistance() (in module quapy.functional)": [[11, "quapy.functional.TopsoeDistance"]], "upp (class in quapy.protocol)": [[11, "quapy.protocol.UPP"]], "uniformprevalenceprotocol (in module quapy.protocol)": [[11, "quapy.protocol.UniformPrevalenceProtocol"]], "absolute_error() (in module quapy.error)": [[11, "quapy.error.absolute_error"]], "acc_error() (in module quapy.error)": [[11, "quapy.error.acc_error"]], "acce() (in module quapy.error)": [[11, "quapy.error.acce"]], "adjusted_quantification() (in module quapy.functional)": [[11, "quapy.functional.adjusted_quantification"]], "ae() (in module quapy.error)": [[11, "quapy.error.ae"]], "best_model() (quapy.model_selection.gridsearchq method)": [[11, "quapy.model_selection.GridSearchQ.best_model"]], "binary_bias_bins() (in module quapy.plot)": [[11, "quapy.plot.binary_bias_bins"]], "binary_bias_global() (in module quapy.plot)": [[11, "quapy.plot.binary_bias_global"]], "binary_diagonal() (in module quapy.plot)": [[11, "quapy.plot.binary_diagonal"]], "brokenbar_supremacy_by_drift() (in module quapy.plot)": [[11, "quapy.plot.brokenbar_supremacy_by_drift"]], "check_prevalence_vector() (in module quapy.functional)": [[11, "quapy.functional.check_prevalence_vector"]], "collator() (quapy.protocol.abstractstochasticseededprotocol method)": [[11, "quapy.protocol.AbstractStochasticSeededProtocol.collator"]], "create_if_not_exist() (in module quapy.util)": [[11, "quapy.util.create_if_not_exist"]], "create_parent_dir() (in module quapy.util)": [[11, "quapy.util.create_parent_dir"]], "cross_val_predict() (in module quapy.model_selection)": [[11, "quapy.model_selection.cross_val_predict"]], "download_file() (in module quapy.util)": [[11, "quapy.util.download_file"]], "download_file_if_not_exists() (in module quapy.util)": [[11, "quapy.util.download_file_if_not_exists"]], "error_by_drift() (in module quapy.plot)": [[11, "quapy.plot.error_by_drift"]], "evaluate() (in module quapy.evaluation)": [[11, "quapy.evaluation.evaluate"]], "evaluate_on_samples() (in module quapy.evaluation)": [[11, "quapy.evaluation.evaluate_on_samples"]], "evaluation_report() (in module quapy.evaluation)": [[11, "quapy.evaluation.evaluation_report"]], "f1_error() (in module quapy.error)": [[11, "quapy.error.f1_error"]], "f1e() (in module quapy.error)": [[11, "quapy.error.f1e"]], "fit() (quapy.model_selection.gridsearchq method)": [[11, "quapy.model_selection.GridSearchQ.fit"]], "from_name() (in module quapy.error)": [[11, "quapy.error.from_name"]], "get_collator() (quapy.protocol.onlabelledcollectionprotocol class method)": [[11, "quapy.protocol.OnLabelledCollectionProtocol.get_collator"]], "get_labelled_collection() (quapy.protocol.onlabelledcollectionprotocol method)": [[11, "quapy.protocol.OnLabelledCollectionProtocol.get_labelled_collection"]], "get_nprevpoints_approximation() (in module quapy.functional)": [[11, "quapy.functional.get_nprevpoints_approximation"]], "get_params() (quapy.model_selection.gridsearchq method)": [[11, "quapy.model_selection.GridSearchQ.get_params"]], "get_quapy_home() (in module quapy.util)": [[11, "quapy.util.get_quapy_home"]], "kld() (in module quapy.error)": [[11, "quapy.error.kld"]], "mae() (in module quapy.error)": [[11, "quapy.error.mae"]], "map_parallel() (in module quapy.util)": [[11, "quapy.util.map_parallel"]], "mean_absolute_error() (in module quapy.error)": [[11, "quapy.error.mean_absolute_error"]], "mean_relative_absolute_error() (in module quapy.error)": [[11, "quapy.error.mean_relative_absolute_error"]], "mkld() (in module quapy.error)": [[11, "quapy.error.mkld"]], "mnkld() (in module quapy.error)": [[11, "quapy.error.mnkld"]], "module": [[11, "module-quapy"], [11, "module-quapy.error"], [11, "module-quapy.evaluation"], [11, "module-quapy.functional"], [11, "module-quapy.model_selection"], [11, "module-quapy.plot"], [11, "module-quapy.protocol"], [11, "module-quapy.util"]], "mrae() (in module quapy.error)": [[11, "quapy.error.mrae"]], "mse() (in module quapy.error)": [[11, "quapy.error.mse"]], "nkld() (in module quapy.error)": [[11, "quapy.error.nkld"]], "normalize_prevalence() (in module quapy.functional)": [[11, "quapy.functional.normalize_prevalence"]], "num_prevalence_combinations() (in module quapy.functional)": [[11, "quapy.functional.num_prevalence_combinations"]], "on_preclassified_instances() (quapy.protocol.onlabelledcollectionprotocol method)": [[11, "quapy.protocol.OnLabelledCollectionProtocol.on_preclassified_instances"]], "parallel() (in module quapy.util)": [[11, "quapy.util.parallel"]], "pickled_resource() (in module quapy.util)": [[11, "quapy.util.pickled_resource"]], "prediction() (in module quapy.evaluation)": [[11, "quapy.evaluation.prediction"]], "prevalence_from_labels() (in module quapy.functional)": [[11, "quapy.functional.prevalence_from_labels"]], "prevalence_from_probabilities() (in module quapy.functional)": [[11, "quapy.functional.prevalence_from_probabilities"]], "prevalence_grid() (quapy.protocol.app method)": [[11, "quapy.protocol.APP.prevalence_grid"]], "prevalence_linspace() (in module quapy.functional)": [[11, "quapy.functional.prevalence_linspace"]], "quantify() (quapy.model_selection.gridsearchq method)": [[11, "quapy.model_selection.GridSearchQ.quantify"]], "quapy": [[11, "module-quapy"]], "quapy.error": [[11, "module-quapy.error"]], "quapy.evaluation": [[11, "module-quapy.evaluation"]], "quapy.functional": [[11, "module-quapy.functional"]], "quapy.model_selection": [[11, "module-quapy.model_selection"]], "quapy.plot": [[11, "module-quapy.plot"]], "quapy.protocol": [[11, "module-quapy.protocol"]], "quapy.util": [[11, "module-quapy.util"]], "rae() (in module quapy.error)": [[11, "quapy.error.rae"]], "random_state (quapy.protocol.abstractstochasticseededprotocol property)": [[11, "quapy.protocol.AbstractStochasticSeededProtocol.random_state"]], "relative_absolute_error() (in module quapy.error)": [[11, "quapy.error.relative_absolute_error"]], "sample() (quapy.protocol.app method)": [[11, "quapy.protocol.APP.sample"]], "sample() (quapy.protocol.abstractstochasticseededprotocol method)": [[11, "quapy.protocol.AbstractStochasticSeededProtocol.sample"]], "sample() (quapy.protocol.domainmixer method)": [[11, "quapy.protocol.DomainMixer.sample"]], "sample() (quapy.protocol.npp method)": [[11, "quapy.protocol.NPP.sample"]], "sample() (quapy.protocol.upp method)": [[11, "quapy.protocol.UPP.sample"]], "samples_parameters() (quapy.protocol.app method)": [[11, "quapy.protocol.APP.samples_parameters"]], "samples_parameters() (quapy.protocol.abstractstochasticseededprotocol method)": [[11, "quapy.protocol.AbstractStochasticSeededProtocol.samples_parameters"]], "samples_parameters() (quapy.protocol.domainmixer method)": [[11, "quapy.protocol.DomainMixer.samples_parameters"]], "samples_parameters() (quapy.protocol.npp method)": [[11, "quapy.protocol.NPP.samples_parameters"]], "samples_parameters() (quapy.protocol.upp method)": [[11, "quapy.protocol.UPP.samples_parameters"]], "save_text_file() (in module quapy.util)": [[11, "quapy.util.save_text_file"]], "se() (in module quapy.error)": [[11, "quapy.error.se"]], "set_params() (quapy.model_selection.gridsearchq method)": [[11, "quapy.model_selection.GridSearchQ.set_params"]], "smooth() (in module quapy.error)": [[11, "quapy.error.smooth"]], "strprev() (in module quapy.functional)": [[11, "quapy.functional.strprev"]], "temp_seed() (in module quapy.util)": [[11, "quapy.util.temp_seed"]], "total() (quapy.protocol.app method)": [[11, "quapy.protocol.APP.total"]], "total() (quapy.protocol.abstractprotocol method)": [[11, "quapy.protocol.AbstractProtocol.total"]], "total() (quapy.protocol.domainmixer method)": [[11, "quapy.protocol.DomainMixer.total"]], "total() (quapy.protocol.iterateprotocol method)": [[11, "quapy.protocol.IterateProtocol.total"]], "total() (quapy.protocol.npp method)": [[11, "quapy.protocol.NPP.total"]], "total() (quapy.protocol.upp method)": [[11, "quapy.protocol.UPP.total"]], "uniform_prevalence_sampling() (in module quapy.functional)": [[11, "quapy.functional.uniform_prevalence_sampling"]], "uniform_simplex_sampling() (in module quapy.functional)": [[11, "quapy.functional.uniform_simplex_sampling"]]}})
\ No newline at end of file
+Search.setIndex({"alltitles": {"Contents": [[1, "contents"]], "GitHub": [[1, "github"]], "Indices and tables": [[1, "indices-and-tables"]], "Installation": [[1, "installation"]], "Module contents": [[3, "module-quapy"], [4, "module-quapy.classification"], [5, "module-quapy.data"], [6, "module-quapy.method"]], "Submodules": [[3, "submodules"], [4, "submodules"], [5, "submodules"], [6, "submodules"]], "Subpackages": [[3, "subpackages"]], "Welcome to QuaPy\u2019s documentation!": [[1, "welcome-to-quapy-s-documentation"]], "quapy": [[0, "module-quapy"], [2, "quapy"]], "quapy package": [[3, "quapy-package"]], "quapy.classification package": [[4, "quapy-classification-package"]], "quapy.classification.calibration module": [[4, "module-quapy.classification.calibration"]], "quapy.classification.methods module": [[4, "module-quapy.classification.methods"]], "quapy.classification.neural module": [[4, "module-quapy.classification.neural"]], "quapy.classification.svmperf module": [[4, "module-quapy.classification.svmperf"]], "quapy.data package": [[5, "quapy-data-package"]], "quapy.data.base module": [[5, "module-quapy.data.base"]], "quapy.data.datasets module": [[5, "module-quapy.data.datasets"]], "quapy.data.preprocessing module": [[5, "module-quapy.data.preprocessing"]], "quapy.data.reader module": [[5, "module-quapy.data.reader"]], "quapy.error module": [[3, "module-quapy.error"]], "quapy.evaluation module": [[3, "module-quapy.evaluation"]], "quapy.functional module": [[3, "module-quapy.functional"]], "quapy.method package": [[6, "quapy-method-package"]], "quapy.method.aggregative module": [[6, "module-quapy.method.aggregative"]], "quapy.method.base module": [[6, "module-quapy.method.base"]], "quapy.method.meta module": [[6, "module-quapy.method.meta"]], "quapy.method.non_aggregative module": [[6, "module-quapy.method.non_aggregative"]], "quapy.model_selection module": [[3, "module-quapy.model_selection"]], "quapy.plot module": [[3, "module-quapy.plot"]], "quapy.protocol module": [[3, "module-quapy.protocol"]], "quapy.util module": [[3, "module-quapy.util"]]}, "docnames": ["generated/quapy", "index", "modules", "quapy", "quapy.classification", "quapy.data", "quapy.method"], "envversion": {"sphinx": 61, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1}, "filenames": ["generated/quapy.rst", "index.rst", "modules.rst", "quapy.rst", "quapy.classification.rst", "quapy.data.rst", "quapy.method.rst"], "indexentries": {"absolute_error() (in module quapy.error)": [[3, "quapy.error.absolute_error"]], "abstractprotocol (class in quapy.protocol)": [[3, "quapy.protocol.AbstractProtocol"]], "abstractstochasticseededprotocol (class in quapy.protocol)": [[3, "quapy.protocol.AbstractStochasticSeededProtocol"]], "acc_error() (in module quapy.error)": [[3, "quapy.error.acc_error"]], "acce() (in module quapy.error)": [[3, "quapy.error.acce"]], "adjusted_quantification() (in module quapy.functional)": [[3, "quapy.functional.adjusted_quantification"]], "ae() (in module quapy.error)": [[3, "quapy.error.ae"]], "app (class in quapy.protocol)": [[3, "quapy.protocol.APP"]], "argmin_prevalence() (in module quapy.functional)": [[3, "quapy.functional.argmin_prevalence"]], "artificialprevalenceprotocol (in module quapy.protocol)": [[3, "quapy.protocol.ArtificialPrevalenceProtocol"]], "as_binary_prevalence() (in module quapy.functional)": [[3, "quapy.functional.as_binary_prevalence"]], "best_model() (quapy.model_selection.gridsearchq method)": [[3, "quapy.model_selection.GridSearchQ.best_model"]], "binary_bias_bins() (in module quapy.plot)": [[3, "quapy.plot.binary_bias_bins"]], "binary_bias_global() (in module quapy.plot)": [[3, "quapy.plot.binary_bias_global"]], "binary_diagonal() (in module quapy.plot)": [[3, "quapy.plot.binary_diagonal"]], "brokenbar_supremacy_by_drift() (in module quapy.plot)": [[3, "quapy.plot.brokenbar_supremacy_by_drift"]], "check_prevalence_vector() (in module quapy.functional)": [[3, "quapy.functional.check_prevalence_vector"]], "collator() (quapy.protocol.abstractstochasticseededprotocol method)": [[3, "quapy.protocol.AbstractStochasticSeededProtocol.collator"]], "configstatus (class in quapy.model_selection)": [[3, "quapy.model_selection.ConfigStatus"]], "create_if_not_exist() (in module quapy.util)": [[3, "quapy.util.create_if_not_exist"]], "create_parent_dir() (in module quapy.util)": [[3, "quapy.util.create_parent_dir"]], "cross_val_predict() (in module quapy.model_selection)": [[3, "quapy.model_selection.cross_val_predict"]], "domainmixer (class in quapy.protocol)": [[3, "quapy.protocol.DomainMixer"]], "download_file() (in module quapy.util)": [[3, "quapy.util.download_file"]], "download_file_if_not_exists() (in module quapy.util)": [[3, "quapy.util.download_file_if_not_exists"]], "earlystop (class in quapy.util)": [[3, "quapy.util.EarlyStop"]], "error (quapy.model_selection.status attribute)": [[3, "quapy.model_selection.Status.ERROR"]], "error_by_drift() (in module quapy.plot)": [[3, "quapy.plot.error_by_drift"]], "evaluate() (in module quapy.evaluation)": [[3, "quapy.evaluation.evaluate"]], "evaluate_on_samples() (in module quapy.evaluation)": [[3, "quapy.evaluation.evaluate_on_samples"]], "evaluation_report() (in module quapy.evaluation)": [[3, "quapy.evaluation.evaluation_report"]], "expand_grid() (in module quapy.model_selection)": [[3, "quapy.model_selection.expand_grid"]], "f1_error() (in module quapy.error)": [[3, "quapy.error.f1_error"]], "f1e() (in module quapy.error)": [[3, "quapy.error.f1e"]], "failed() (quapy.model_selection.configstatus method)": [[3, "quapy.model_selection.ConfigStatus.failed"]], "fit() (quapy.model_selection.gridsearchq method)": [[3, "quapy.model_selection.GridSearchQ.fit"]], "from_name() (in module quapy.error)": [[3, "quapy.error.from_name"]], "get_collator() (quapy.protocol.onlabelledcollectionprotocol class method)": [[3, "quapy.protocol.OnLabelledCollectionProtocol.get_collator"]], "get_divergence() (in module quapy.functional)": [[3, "quapy.functional.get_divergence"]], "get_labelled_collection() (quapy.protocol.onlabelledcollectionprotocol method)": [[3, "quapy.protocol.OnLabelledCollectionProtocol.get_labelled_collection"]], "get_nprevpoints_approximation() (in module quapy.functional)": [[3, "quapy.functional.get_nprevpoints_approximation"]], "get_params() (quapy.model_selection.gridsearchq method)": [[3, "quapy.model_selection.GridSearchQ.get_params"]], "get_quapy_home() (in module quapy.util)": [[3, "quapy.util.get_quapy_home"]], "gridsearchq (class in quapy.model_selection)": [[3, "quapy.model_selection.GridSearchQ"]], "group_params() (in module quapy.model_selection)": [[3, "quapy.model_selection.group_params"]], "hellingerdistance() (in module quapy.functional)": [[3, "quapy.functional.HellingerDistance"]], "invalid (quapy.model_selection.status attribute)": [[3, "quapy.model_selection.Status.INVALID"]], "iterateprotocol (class in quapy.protocol)": [[3, "quapy.protocol.IterateProtocol"]], "kld() (in module quapy.error)": [[3, "quapy.error.kld"]], "linear_search() (in module quapy.functional)": [[3, "quapy.functional.linear_search"]], "mae() (in module quapy.error)": [[3, "quapy.error.mae"]], "map_parallel() (in module quapy.util)": [[3, "quapy.util.map_parallel"]], "mean_absolute_error() (in module quapy.error)": [[3, "quapy.error.mean_absolute_error"]], "mean_normalized_absolute_error() (in module quapy.error)": [[3, "quapy.error.mean_normalized_absolute_error"]], "mean_normalized_relative_absolute_error() (in module quapy.error)": [[3, "quapy.error.mean_normalized_relative_absolute_error"]], "mean_relative_absolute_error() (in module quapy.error)": [[3, "quapy.error.mean_relative_absolute_error"]], "mkld() (in module quapy.error)": [[3, "quapy.error.mkld"]], "mnae() (in module quapy.error)": [[3, "quapy.error.mnae"]], "mnkld() (in module quapy.error)": [[3, "quapy.error.mnkld"]], "mnrae() (in module quapy.error)": [[3, "quapy.error.mnrae"]], "module": [[3, "module-quapy"], [3, "module-quapy.error"], [3, "module-quapy.evaluation"], [3, "module-quapy.functional"], [3, "module-quapy.model_selection"], [3, "module-quapy.plot"], [3, "module-quapy.protocol"], [3, "module-quapy.util"]], "mrae() (in module quapy.error)": [[3, "quapy.error.mrae"]], "mse() (in module quapy.error)": [[3, "quapy.error.mse"]], "nae() (in module quapy.error)": [[3, "quapy.error.nae"]], "naturalprevalenceprotocol (in module quapy.protocol)": [[3, "quapy.protocol.NaturalPrevalenceProtocol"]], "nkld() (in module quapy.error)": [[3, "quapy.error.nkld"]], "normalize_prevalence() (in module quapy.functional)": [[3, "quapy.functional.normalize_prevalence"]], "normalized_absolute_error() (in module quapy.error)": [[3, "quapy.error.normalized_absolute_error"]], "normalized_relative_absolute_error() (in module quapy.error)": [[3, "quapy.error.normalized_relative_absolute_error"]], "npp (class in quapy.protocol)": [[3, "quapy.protocol.NPP"]], "nrae() (in module quapy.error)": [[3, "quapy.error.nrae"]], "num_prevalence_combinations() (in module quapy.functional)": [[3, "quapy.functional.num_prevalence_combinations"]], "on_preclassified_instances() (quapy.protocol.onlabelledcollectionprotocol method)": [[3, "quapy.protocol.OnLabelledCollectionProtocol.on_preclassified_instances"]], "onlabelledcollectionprotocol (class in quapy.protocol)": [[3, "quapy.protocol.OnLabelledCollectionProtocol"]], "optim_minimize() (in module quapy.functional)": [[3, "quapy.functional.optim_minimize"]], "parallel() (in module quapy.util)": [[3, "quapy.util.parallel"]], "pickled_resource() (in module quapy.util)": [[3, "quapy.util.pickled_resource"]], "prediction() (in module quapy.evaluation)": [[3, "quapy.evaluation.prediction"]], "prevalence_from_labels() (in module quapy.functional)": [[3, "quapy.functional.prevalence_from_labels"]], "prevalence_from_probabilities() (in module quapy.functional)": [[3, "quapy.functional.prevalence_from_probabilities"]], "prevalence_grid() (quapy.protocol.app method)": [[3, "quapy.protocol.APP.prevalence_grid"]], "prevalence_linspace() (in module quapy.functional)": [[3, "quapy.functional.prevalence_linspace"]], "quantify() (quapy.model_selection.gridsearchq method)": [[3, "quapy.model_selection.GridSearchQ.quantify"]], "quapy": [[3, "module-quapy"]], "quapy.error": [[3, "module-quapy.error"]], "quapy.evaluation": [[3, "module-quapy.evaluation"]], "quapy.functional": [[3, "module-quapy.functional"]], "quapy.model_selection": [[3, "module-quapy.model_selection"]], "quapy.plot": [[3, "module-quapy.plot"]], "quapy.protocol": [[3, "module-quapy.protocol"]], "quapy.util": [[3, "module-quapy.util"]], "rae() (in module quapy.error)": [[3, "quapy.error.rae"]], "random_state (quapy.protocol.abstractstochasticseededprotocol property)": [[3, "quapy.protocol.AbstractStochasticSeededProtocol.random_state"]], "relative_absolute_error() (in module quapy.error)": [[3, "quapy.error.relative_absolute_error"]], "return_types (quapy.protocol.onlabelledcollectionprotocol attribute)": [[3, "quapy.protocol.OnLabelledCollectionProtocol.RETURN_TYPES"]], "sample() (quapy.protocol.abstractstochasticseededprotocol method)": [[3, "quapy.protocol.AbstractStochasticSeededProtocol.sample"]], "sample() (quapy.protocol.app method)": [[3, "quapy.protocol.APP.sample"]], "sample() (quapy.protocol.domainmixer method)": [[3, "quapy.protocol.DomainMixer.sample"]], "sample() (quapy.protocol.npp method)": [[3, "quapy.protocol.NPP.sample"]], "sample() (quapy.protocol.upp method)": [[3, "quapy.protocol.UPP.sample"]], "samples_parameters() (quapy.protocol.abstractstochasticseededprotocol method)": [[3, "quapy.protocol.AbstractStochasticSeededProtocol.samples_parameters"]], "samples_parameters() (quapy.protocol.app method)": [[3, "quapy.protocol.APP.samples_parameters"]], "samples_parameters() (quapy.protocol.domainmixer method)": [[3, "quapy.protocol.DomainMixer.samples_parameters"]], "samples_parameters() (quapy.protocol.npp method)": [[3, "quapy.protocol.NPP.samples_parameters"]], "samples_parameters() (quapy.protocol.upp method)": [[3, "quapy.protocol.UPP.samples_parameters"]], "save_text_file() (in module quapy.util)": [[3, "quapy.util.save_text_file"]], "se() (in module quapy.error)": [[3, "quapy.error.se"]], "set_params() (quapy.model_selection.gridsearchq method)": [[3, "quapy.model_selection.GridSearchQ.set_params"]], "smooth() (in module quapy.error)": [[3, "quapy.error.smooth"]], "status (class in quapy.model_selection)": [[3, "quapy.model_selection.Status"]], "strprev() (in module quapy.functional)": [[3, "quapy.functional.strprev"]], "success (quapy.model_selection.status attribute)": [[3, "quapy.model_selection.Status.SUCCESS"]], "success() (quapy.model_selection.configstatus method)": [[3, "quapy.model_selection.ConfigStatus.success"]], "temp_seed() (in module quapy.util)": [[3, "quapy.util.temp_seed"]], "timeout (quapy.model_selection.status attribute)": [[3, "quapy.model_selection.Status.TIMEOUT"]], "timeout() (in module quapy.util)": [[3, "quapy.util.timeout"]], "topsoedistance() (in module quapy.functional)": [[3, "quapy.functional.TopsoeDistance"]], "total() (quapy.protocol.abstractprotocol method)": [[3, "quapy.protocol.AbstractProtocol.total"]], "total() (quapy.protocol.app method)": [[3, "quapy.protocol.APP.total"]], "total() (quapy.protocol.domainmixer method)": [[3, "quapy.protocol.DomainMixer.total"]], "total() (quapy.protocol.iterateprotocol method)": [[3, "quapy.protocol.IterateProtocol.total"]], "total() (quapy.protocol.npp method)": [[3, "quapy.protocol.NPP.total"]], "total() (quapy.protocol.upp method)": [[3, "quapy.protocol.UPP.total"]], "uniform_prevalence_sampling() (in module quapy.functional)": [[3, "quapy.functional.uniform_prevalence_sampling"]], "uniform_simplex_sampling() (in module quapy.functional)": [[3, "quapy.functional.uniform_simplex_sampling"]], "uniformprevalenceprotocol (in module quapy.protocol)": [[3, "quapy.protocol.UniformPrevalenceProtocol"]], "upp (class in quapy.protocol)": [[3, "quapy.protocol.UPP"]]}, "objects": {"": [[3, 0, 0, "-", "quapy"]], "quapy": [[4, 0, 0, "-", "classification"], [5, 0, 0, "-", "data"], [3, 0, 0, "-", "error"], [3, 0, 0, "-", "evaluation"], [3, 0, 0, "-", "functional"], [6, 0, 0, "-", "method"], [3, 0, 0, "-", "model_selection"], [3, 0, 0, "-", "plot"], [3, 0, 0, "-", "protocol"], [3, 0, 0, "-", "util"]], "quapy.classification": [[4, 0, 0, "-", "calibration"], [4, 0, 0, "-", "methods"], [4, 0, 0, "-", "neural"], [4, 0, 0, "-", "svmperf"]], "quapy.classification.calibration": [[4, 1, 1, "", "BCTSCalibration"], [4, 1, 1, "", "NBVSCalibration"], [4, 1, 1, "", "RecalibratedProbabilisticClassifier"], [4, 1, 1, "", "RecalibratedProbabilisticClassifierBase"], [4, 1, 1, "", "TSCalibration"], [4, 1, 1, "", "VSCalibration"]], "quapy.classification.calibration.RecalibratedProbabilisticClassifierBase": [[4, 2, 1, "", "classes_"], [4, 3, 1, "", "fit"], [4, 3, 1, "", "fit_cv"], [4, 3, 1, "", "fit_tr_val"], [4, 3, 1, "", "predict"], [4, 3, 1, "", "predict_proba"]], "quapy.classification.methods": [[4, 1, 1, "", "LowRankLogisticRegression"]], "quapy.classification.methods.LowRankLogisticRegression": [[4, 3, 1, "", "fit"], [4, 3, 1, "", "get_params"], [4, 3, 1, "", "predict"], [4, 3, 1, "", "predict_proba"], [4, 3, 1, "", "set_params"], [4, 3, 1, "", "transform"]], "quapy.classification.neural": [[4, 1, 1, "", "CNNnet"], [4, 1, 1, "", "LSTMnet"], [4, 1, 1, "", "NeuralClassifierTrainer"], [4, 1, 1, "", "TextClassifierNet"], [4, 1, 1, "", "TorchDataset"]], "quapy.classification.neural.CNNnet": [[4, 3, 1, "", "document_embedding"], [4, 3, 1, "", "get_params"], [4, 2, 1, "", "vocabulary_size"]], "quapy.classification.neural.LSTMnet": [[4, 3, 1, "", "document_embedding"], [4, 3, 1, "", "get_params"], [4, 2, 1, "", "vocabulary_size"]], "quapy.classification.neural.NeuralClassifierTrainer": [[4, 2, 1, "", "device"], [4, 3, 1, "", "fit"], [4, 3, 1, "", "get_params"], [4, 3, 1, "", "predict"], [4, 3, 1, "", "predict_proba"], [4, 3, 1, "", "reset_net_params"], [4, 3, 1, "", "set_params"], [4, 3, 1, "", "transform"]], "quapy.classification.neural.TextClassifierNet": [[4, 3, 1, "", "dimensions"], [4, 3, 1, "", "document_embedding"], [4, 3, 1, "", "forward"], [4, 3, 1, "", "get_params"], [4, 3, 1, "", "predict_proba"], [4, 2, 1, "", "vocabulary_size"], [4, 3, 1, "", "xavier_uniform"]], "quapy.classification.neural.TorchDataset": [[4, 3, 1, "", "asDataloader"]], "quapy.classification.svmperf": [[4, 1, 1, "", "SVMperf"]], "quapy.classification.svmperf.SVMperf": [[4, 3, 1, "", "decision_function"], [4, 3, 1, "", "fit"], [4, 3, 1, "", "predict"], [4, 4, 1, "", "valid_losses"]], "quapy.data": [[5, 0, 0, "-", "base"], [5, 0, 0, "-", "datasets"], [5, 0, 0, "-", "preprocessing"], [5, 0, 0, "-", "reader"]], "quapy.data.base": [[5, 1, 1, "", "Dataset"], [5, 1, 1, "", "LabelledCollection"]], "quapy.data.base.Dataset": [[5, 3, 1, "", "SplitStratified"], [5, 2, 1, "", "binary"], [5, 2, 1, "", "classes_"], [5, 3, 1, "", "kFCV"], [5, 3, 1, "", "load"], [5, 2, 1, "", "n_classes"], [5, 3, 1, "", "reduce"], [5, 3, 1, "", "stats"], [5, 2, 1, "", "train_test"], [5, 2, 1, "", "vocabulary_size"]], "quapy.data.base.LabelledCollection": [[5, 2, 1, "", "X"], [5, 2, 1, "", "Xp"], [5, 2, 1, "", "Xy"], [5, 2, 1, "", "binary"], [5, 3, 1, "", "counts"], [5, 3, 1, "", "join"], [5, 3, 1, "", "kFCV"], [5, 3, 1, "", "load"], [5, 2, 1, "", "n_classes"], [5, 2, 1, "", "p"], [5, 3, 1, "", "prevalence"], [5, 3, 1, "", "sampling"], [5, 3, 1, "", "sampling_from_index"], [5, 3, 1, "", "sampling_index"], [5, 3, 1, "", "split_random"], [5, 3, 1, "", "split_stratified"], [5, 3, 1, "", "stats"], [5, 3, 1, "", "uniform_sampling"], [5, 3, 1, "", "uniform_sampling_index"], [5, 2, 1, "", "y"]], "quapy.data.datasets": [[5, 5, 1, "", "fetch_IFCB"], [5, 5, 1, "", "fetch_UCIBinaryDataset"], [5, 5, 1, "", "fetch_UCIBinaryLabelledCollection"], [5, 5, 1, "", "fetch_UCIMulticlassDataset"], [5, 5, 1, "", "fetch_UCIMulticlassLabelledCollection"], [5, 5, 1, "", "fetch_lequa2022"], [5, 5, 1, "", "fetch_reviews"], [5, 5, 1, "", "fetch_twitter"], [5, 5, 1, "", "warn"]], "quapy.data.preprocessing": [[5, 1, 1, "", "IndexTransformer"], [5, 5, 1, "", "index"], [5, 5, 1, "", "reduce_columns"], [5, 5, 1, "", "standardize"], [5, 5, 1, "", "text2tfidf"]], "quapy.data.preprocessing.IndexTransformer": [[5, 3, 1, "", "add_word"], [5, 3, 1, "", "fit"], [5, 3, 1, "", "fit_transform"], [5, 3, 1, "", "transform"], [5, 3, 1, "", "vocabulary_size"]], "quapy.data.reader": [[5, 5, 1, "", "binarize"], [5, 5, 1, "", "from_csv"], [5, 5, 1, "", "from_sparse"], [5, 5, 1, "", "from_text"], [5, 5, 1, "", "reindex_labels"]], "quapy.error": [[3, 5, 1, "", "absolute_error"], [3, 5, 1, "", "acc_error"], [3, 5, 1, "", "acce"], [3, 5, 1, "", "ae"], [3, 5, 1, "", "f1_error"], [3, 5, 1, "", "f1e"], [3, 5, 1, "", "from_name"], [3, 5, 1, "", "kld"], [3, 5, 1, "", "mae"], [3, 5, 1, "", "mean_absolute_error"], [3, 5, 1, "", "mean_normalized_absolute_error"], [3, 5, 1, "", "mean_normalized_relative_absolute_error"], [3, 5, 1, "", "mean_relative_absolute_error"], [3, 5, 1, "", "mkld"], [3, 5, 1, "", "mnae"], [3, 5, 1, "", "mnkld"], [3, 5, 1, "", "mnrae"], [3, 5, 1, "", "mrae"], [3, 5, 1, "", "mse"], [3, 5, 1, "", "nae"], [3, 5, 1, "", "nkld"], [3, 5, 1, "", "normalized_absolute_error"], [3, 5, 1, "", "normalized_relative_absolute_error"], [3, 5, 1, "", "nrae"], [3, 5, 1, "", "rae"], [3, 5, 1, "", "relative_absolute_error"], [3, 5, 1, "", "se"], [3, 5, 1, "", "smooth"]], "quapy.evaluation": [[3, 5, 1, "", "evaluate"], [3, 5, 1, "", "evaluate_on_samples"], [3, 5, 1, "", "evaluation_report"], [3, 5, 1, "", "prediction"]], "quapy.functional": [[3, 5, 1, "", "HellingerDistance"], [3, 5, 1, "", "TopsoeDistance"], [3, 5, 1, "", "adjusted_quantification"], [3, 5, 1, "", "argmin_prevalence"], [3, 5, 1, "", "as_binary_prevalence"], [3, 5, 1, "", "check_prevalence_vector"], [3, 5, 1, "", "get_divergence"], [3, 5, 1, "", "get_nprevpoints_approximation"], [3, 5, 1, "", "linear_search"], [3, 5, 1, "", "normalize_prevalence"], [3, 5, 1, "", "num_prevalence_combinations"], [3, 5, 1, "", "optim_minimize"], [3, 5, 1, "", "prevalence_from_labels"], [3, 5, 1, "", "prevalence_from_probabilities"], [3, 5, 1, "", "prevalence_linspace"], [3, 5, 1, "", "strprev"], [3, 5, 1, "", "uniform_prevalence_sampling"], [3, 5, 1, "", "uniform_simplex_sampling"]], "quapy.method": [[6, 0, 0, "-", "_kdey"], [6, 0, 0, "-", "_neural"], [6, 0, 0, "-", "_threshold_optim"], [6, 0, 0, "-", "aggregative"], [6, 0, 0, "-", "base"], [6, 0, 0, "-", "meta"], [6, 0, 0, "-", "non_aggregative"]], "quapy.method._kdey": [[6, 1, 1, "", "KDEBase"], [6, 1, 1, "", "KDEyCS"], [6, 1, 1, "", "KDEyHD"], [6, 1, 1, "", "KDEyML"]], "quapy.method._kdey.KDEBase": [[6, 4, 1, "", "BANDWIDTH_METHOD"], [6, 3, 1, "", "get_kde_function"], [6, 3, 1, "", "get_mixture_components"], [6, 3, 1, "", "pdf"]], "quapy.method._kdey.KDEyCS": [[6, 3, 1, "", "aggregate"], [6, 3, 1, "", "aggregation_fit"], [6, 3, 1, "", "gram_matrix_mix_sum"]], "quapy.method._kdey.KDEyHD": [[6, 3, 1, "", "aggregate"], [6, 3, 1, "", "aggregation_fit"]], "quapy.method._kdey.KDEyML": [[6, 3, 1, "", "aggregate"], [6, 3, 1, "", "aggregation_fit"]], "quapy.method._neural": [[6, 1, 1, "", "QuaNetModule"], [6, 1, 1, "", "QuaNetTrainer"], [6, 5, 1, "", "mae_loss"]], "quapy.method._neural.QuaNetModule": [[6, 2, 1, "", "device"], [6, 3, 1, "", "forward"]], "quapy.method._neural.QuaNetTrainer": [[6, 2, 1, "", "classes_"], [6, 3, 1, "", "clean_checkpoint"], [6, 3, 1, "", "clean_checkpoint_dir"], [6, 3, 1, "", "fit"], [6, 3, 1, "", "get_params"], [6, 3, 1, "", "quantify"], [6, 3, 1, "", "set_params"]], "quapy.method._threshold_optim": [[6, 1, 1, "", "MAX"], [6, 1, 1, "", "MS"], [6, 1, 1, "", "MS2"], [6, 1, 1, "", "T50"], [6, 1, 1, "", "ThresholdOptimization"], [6, 1, 1, "", "X"]], "quapy.method._threshold_optim.MAX": [[6, 3, 1, "", "condition"]], "quapy.method._threshold_optim.MS": [[6, 3, 1, "", "aggregate"], [6, 3, 1, "", "aggregation_fit"], [6, 3, 1, "", "condition"]], "quapy.method._threshold_optim.MS2": [[6, 3, 1, "", "discard"]], "quapy.method._threshold_optim.T50": [[6, 3, 1, "", "condition"]], "quapy.method._threshold_optim.ThresholdOptimization": [[6, 3, 1, "", "aggregate"], [6, 3, 1, "", "aggregate_with_threshold"], [6, 3, 1, "", "aggregation_fit"], [6, 3, 1, "", "condition"], [6, 3, 1, "", "discard"]], "quapy.method._threshold_optim.X": [[6, 3, 1, "", "condition"]], "quapy.method.aggregative": [[6, 1, 1, "", "ACC"], [6, 4, 1, "", "AdjustedClassifyAndCount"], [6, 1, 1, "", "AggregativeCrispQuantifier"], [6, 1, 1, "", "AggregativeMedianEstimator"], [6, 1, 1, "", "AggregativeQuantifier"], [6, 1, 1, "", "AggregativeSoftQuantifier"], [6, 1, 1, "", "BinaryAggregativeQuantifier"], [6, 1, 1, "", "CC"], [6, 4, 1, "", "ClassifyAndCount"], [6, 1, 1, "", "DMy"], [6, 4, 1, "", "DistributionMatchingY"], [6, 1, 1, "", "DyS"], [6, 1, 1, "", "EMQ"], [6, 4, 1, "", "ExpectationMaximizationQuantifier"], [6, 1, 1, "", "HDy"], [6, 4, 1, "", "HellingerDistanceY"], [6, 1, 1, "", "OneVsAllAggregative"], [6, 1, 1, "", "PACC"], [6, 1, 1, "", "PCC"], [6, 4, 1, "", "ProbabilisticAdjustedClassifyAndCount"], [6, 4, 1, "", "ProbabilisticClassifyAndCount"], [6, 4, 1, "", "SLD"], [6, 1, 1, "", "SMM"], [6, 5, 1, "", "newELM"], [6, 5, 1, "", "newSVMAE"], [6, 5, 1, "", "newSVMKLD"], [6, 5, 1, "", "newSVMQ"], [6, 5, 1, "", "newSVMRAE"]], "quapy.method.aggregative.ACC": [[6, 3, 1, "", "aggregate"], [6, 3, 1, "", "aggregation_fit"], [6, 3, 1, "", "getPteCondEstim"], [6, 3, 1, "", "solve_adjustment"]], "quapy.method.aggregative.AggregativeMedianEstimator": [[6, 3, 1, "", "fit"], [6, 3, 1, "", "get_params"], [6, 3, 1, "", "quantify"], [6, 3, 1, "", "set_params"]], "quapy.method.aggregative.AggregativeQuantifier": [[6, 3, 1, "", "aggregate"], [6, 3, 1, "", "aggregation_fit"], [6, 2, 1, "", "classes_"], [6, 2, 1, "", "classifier"], [6, 3, 1, "", "classifier_fit_predict"], [6, 3, 1, "", "classify"], [6, 3, 1, "", "fit"], [6, 3, 1, "", "quantify"], [6, 2, 1, "", "val_split"], [6, 4, 1, "", "val_split_"]], "quapy.method.aggregative.BinaryAggregativeQuantifier": [[6, 3, 1, "", "fit"], [6, 2, 1, "", "neg_label"], [6, 2, 1, "", "pos_label"]], "quapy.method.aggregative.CC": [[6, 3, 1, "", "aggregate"], [6, 3, 1, "", "aggregation_fit"]], "quapy.method.aggregative.DMy": [[6, 3, 1, "", "aggregate"], [6, 3, 1, "", "aggregation_fit"]], "quapy.method.aggregative.DyS": [[6, 3, 1, "", "aggregate"], [6, 3, 1, "", "aggregation_fit"]], "quapy.method.aggregative.EMQ": [[6, 3, 1, "", "EM"], [6, 3, 1, "", "EMQ_BCTS"], [6, 4, 1, "", "EPSILON"], [6, 4, 1, "", "MAX_ITER"], [6, 3, 1, "", "aggregate"], [6, 3, 1, "", "aggregation_fit"], [6, 3, 1, "", "classify"], [6, 3, 1, "", "predict_proba"]], "quapy.method.aggregative.HDy": [[6, 3, 1, "", "aggregate"], [6, 3, 1, "", "aggregation_fit"]], "quapy.method.aggregative.OneVsAllAggregative": [[6, 3, 1, "", "aggregate"], [6, 3, 1, "", "classify"]], "quapy.method.aggregative.PACC": [[6, 3, 1, "", "aggregate"], [6, 3, 1, "", "aggregation_fit"], [6, 3, 1, "", "getPteCondEstim"]], "quapy.method.aggregative.PCC": [[6, 3, 1, "", "aggregate"], [6, 3, 1, "", "aggregation_fit"]], "quapy.method.aggregative.SMM": [[6, 3, 1, "", "aggregate"], [6, 3, 1, "", "aggregation_fit"]], "quapy.method.base": [[6, 1, 1, "", "BaseQuantifier"], [6, 1, 1, "", "BinaryQuantifier"], [6, 1, 1, "", "OneVsAll"], [6, 1, 1, "", "OneVsAllGeneric"], [6, 5, 1, "", "newOneVsAll"]], "quapy.method.base.BaseQuantifier": [[6, 3, 1, "", "fit"], [6, 3, 1, "", "quantify"]], "quapy.method.base.OneVsAllGeneric": [[6, 2, 1, "", "classes_"], [6, 3, 1, "", "fit"], [6, 3, 1, "", "quantify"]], "quapy.method.meta": [[6, 5, 1, "", "EACC"], [6, 5, 1, "", "ECC"], [6, 5, 1, "", "EEMQ"], [6, 5, 1, "", "EHDy"], [6, 5, 1, "", "EPACC"], [6, 1, 1, "", "Ensemble"], [6, 1, 1, "", "MedianEstimator"], [6, 1, 1, "", "MedianEstimator2"], [6, 5, 1, "", "ensembleFactory"], [6, 5, 1, "", "get_probability_distribution"]], "quapy.method.meta.Ensemble": [[6, 4, 1, "", "VALID_POLICIES"], [6, 2, 1, "", "aggregative"], [6, 3, 1, "", "fit"], [6, 3, 1, "", "get_params"], [6, 2, 1, "", "probabilistic"], [6, 3, 1, "", "quantify"], [6, 3, 1, "", "set_params"]], "quapy.method.meta.MedianEstimator": [[6, 3, 1, "", "fit"], [6, 3, 1, "", "get_params"], [6, 3, 1, "", "quantify"], [6, 3, 1, "", "set_params"]], "quapy.method.meta.MedianEstimator2": [[6, 3, 1, "", "fit"], [6, 3, 1, "", "get_params"], [6, 3, 1, "", "quantify"], [6, 3, 1, "", "set_params"]], "quapy.method.non_aggregative": [[6, 1, 1, "", "DMx"], [6, 4, 1, "", "DistributionMatchingX"], [6, 1, 1, "", "MaximumLikelihoodPrevalenceEstimation"]], "quapy.method.non_aggregative.DMx": [[6, 3, 1, "", "HDx"], [6, 3, 1, "", "fit"], [6, 3, 1, "", "quantify"]], "quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation": [[6, 3, 1, "", "fit"], [6, 3, 1, "", "quantify"]], "quapy.model_selection": [[3, 1, 1, "", "ConfigStatus"], [3, 1, 1, "", "GridSearchQ"], [3, 1, 1, "", "Status"], [3, 5, 1, "", "cross_val_predict"], [3, 5, 1, "", "expand_grid"], [3, 5, 1, "", "group_params"]], "quapy.model_selection.ConfigStatus": [[3, 3, 1, "", "failed"], [3, 3, 1, "", "success"]], "quapy.model_selection.GridSearchQ": [[3, 3, 1, "", "best_model"], [3, 3, 1, "", "fit"], [3, 3, 1, "", "get_params"], [3, 3, 1, "", "quantify"], [3, 3, 1, "", "set_params"]], "quapy.model_selection.Status": [[3, 4, 1, "", "ERROR"], [3, 4, 1, "", "INVALID"], [3, 4, 1, "", "SUCCESS"], [3, 4, 1, "", "TIMEOUT"]], "quapy.plot": [[3, 5, 1, "", "binary_bias_bins"], [3, 5, 1, "", "binary_bias_global"], [3, 5, 1, "", "binary_diagonal"], [3, 5, 1, "", "brokenbar_supremacy_by_drift"], [3, 5, 1, "", "error_by_drift"]], "quapy.protocol": [[3, 1, 1, "", "APP"], [3, 1, 1, "", "AbstractProtocol"], [3, 1, 1, "", "AbstractStochasticSeededProtocol"], [3, 4, 1, "", "ArtificialPrevalenceProtocol"], [3, 1, 1, "", "DomainMixer"], [3, 1, 1, "", "IterateProtocol"], [3, 1, 1, "", "NPP"], [3, 4, 1, "", "NaturalPrevalenceProtocol"], [3, 1, 1, "", "OnLabelledCollectionProtocol"], [3, 1, 1, "", "UPP"], [3, 4, 1, "", "UniformPrevalenceProtocol"]], "quapy.protocol.APP": [[3, 3, 1, "", "prevalence_grid"], [3, 3, 1, "", "sample"], [3, 3, 1, "", "samples_parameters"], [3, 3, 1, "", "total"]], "quapy.protocol.AbstractProtocol": [[3, 3, 1, "", "total"]], "quapy.protocol.AbstractStochasticSeededProtocol": [[3, 3, 1, "", "collator"], [3, 2, 1, "", "random_state"], [3, 3, 1, "", "sample"], [3, 3, 1, "", "samples_parameters"]], "quapy.protocol.DomainMixer": [[3, 3, 1, "", "sample"], [3, 3, 1, "", "samples_parameters"], [3, 3, 1, "", "total"]], "quapy.protocol.IterateProtocol": [[3, 3, 1, "", "total"]], "quapy.protocol.NPP": [[3, 3, 1, "", "sample"], [3, 3, 1, "", "samples_parameters"], [3, 3, 1, "", "total"]], "quapy.protocol.OnLabelledCollectionProtocol": [[3, 4, 1, "", "RETURN_TYPES"], [3, 3, 1, "", "get_collator"], [3, 3, 1, "", "get_labelled_collection"], [3, 3, 1, "", "on_preclassified_instances"]], "quapy.protocol.UPP": [[3, 3, 1, "", "sample"], [3, 3, 1, "", "samples_parameters"], [3, 3, 1, "", "total"]], "quapy.util": [[3, 1, 1, "", "EarlyStop"], [3, 5, 1, "", "create_if_not_exist"], [3, 5, 1, "", "create_parent_dir"], [3, 5, 1, "", "download_file"], [3, 5, 1, "", "download_file_if_not_exists"], [3, 5, 1, "", "get_quapy_home"], [3, 5, 1, "", "map_parallel"], [3, 5, 1, "", "parallel"], [3, 5, 1, "", "pickled_resource"], [3, 5, 1, "", "save_text_file"], [3, 5, 1, "", "temp_seed"], [3, 5, 1, "", "timeout"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "property", "Python property"], "3": ["py", "method", "Python method"], "4": ["py", "attribute", "Python attribute"], "5": ["py", "function", "Python function"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:property", "3": "py:method", "4": "py:attribute", "5": "py:function"}, "terms": {"": [3, 4, 5, 6], "0": [3, 4, 5, 6], "0001": 6, "001": [4, 6], "005": 3, "01": [3, 4, 6], "05": [3, 6], "063": 5, "08": 3, "081": 5, "1": [3, 4, 5, 6], "10": [3, 4, 6], "100": [3, 4, 5, 6], "1000": [5, 6], "10000": [3, 6], "10036244": 5, "1024": 6, "11": 3, "110": 6, "1145": 6, "12": 4, "13": 4, "15": [3, 5], "19": 5, "1e": [3, 4, 6], "2": [3, 5, 6], "20": [3, 6], "200": 4, "2006": 6, "2008": 6, "2013": 6, "2015": [4, 6], "2016": [5, 6], "2017": [5, 6], "2018": 5, "2019": [5, 6], "2020": 4, "2021": 6, "2022": [5, 6], "21": 3, "21591": 5, "22": [4, 5], "222": 4, "23": 4, "232": 4, "24": 4, "25": [3, 4, 6], "256": 4, "26": 4, "27": 4, "27th": 5, "28": 5, "2dx": 6, "2frac": 3, "2nd": 6, "2t": 3, "2tp": 3, "3": [3, 4, 5, 6], "30": 6, "300": 4, "3219819": 6, "3220059": 6, "3227": 3, "33": 3, "34": [5, 6], "3821": 5, "4": [3, 5], "40": 6, "4403": 5, "45": 5, "5": [3, 4, 5, 6], "50": [3, 6], "500": 6, "512": [4, 6], "5fcvx2": 5, "6": 5, "64": [4, 6], "66": 6, "67": 3, "7": [3, 4, 6], "75": 3, "8": [5, 6], "87": 5, "9": 3, "90": 3, "919": 5, "937": 5, "95": 3, "99": 3, "A": [3, 4, 5, 6], "By": 3, "For": [3, 5, 6], "If": [3, 5, 6], "In": [3, 4, 5, 6], "It": [3, 5], "No": [4, 6], "On": 6, "One": 6, "The": [3, 4, 5, 6], "These": [4, 6], "To": 5, "_": [3, 5, 6], "__": 6, "_f": 6, "_i": 6, "_ifcb": 5, "_kdei": 6, "_lequa2022": 5, "_neural": 6, "_threshold_optim": 6, "abc": 6, "about": [3, 5, 6], "abov": 3, "absolut": [3, 6], "absolute_error": [1, 2, 3], "abstent": 4, "abstract": [3, 4, 5, 6], "abstractprotocol": [1, 2, 3, 5], "abstractstochasticseededprotocol": [1, 2, 3], "acc": [1, 2, 3, 6], "acc_error": [1, 2, 3], "access": [5, 6], "accommod": 3, "accord": [3, 4, 5, 6], "accordingli": 6, "accuraci": [3, 6], "achiev": 6, "acm": [5, 6], "across": [3, 6], "act": 3, "actual": [5, 6], "ad": 3, "adapt": [3, 4], "add": [3, 5], "add_word": [1, 3, 5], "addit": 3, "adher": 3, "adjust": [3, 6], "adjusted_quantif": [1, 2, 3], "adjustedclassifyandcount": [1, 3, 6], "admit": 6, "adopt": 5, "advanc": 3, "advantag": 6, "ae": [1, 2, 3], "after": [3, 6], "afterward": [4, 6], "again": 3, "aggr_speedup": 3, "aggreg": [1, 2, 3], "aggregate_with_threshold": [1, 3, 6], "aggregation_fit": [1, 3, 6], "aggregative_method": [], "aggregativecrispquantifi": [1, 3, 6], "aggregativemedianestim": [1, 3, 6], "aggregativequantifi": [1, 3, 6], "aggregativesoftquantifi": [1, 3, 6], "aka": [5, 6], "akin": [3, 6], "al": [4, 5, 6], "alaiz": 6, "alegr": 6, "alexandari": [4, 6], "algorithm": [3, 5, 6], "alia": [3, 5, 6], "all": [3, 4, 5, 6], "alloc": [3, 4], "allow": [3, 4, 5, 6], "along": [3, 6], "alpha": 6, "alpha_i": 6, "alreadi": [3, 6], "also": [3, 4, 6], "altern": [3, 6], "although": 6, "alwai": 6, "amount": 3, "an": [3, 4, 5, 6], "analysi": 5, "ancestor": 6, "ani": [3, 4, 5, 6], "anoth": [3, 6], "anotherdir": 3, "anyth": 6, "anywher": 3, "api": 1, "app": [1, 2, 3, 6], "appli": [3, 4, 5, 6], "applic": 6, "approach": 6, "approxim": [3, 4], "ar": [3, 4, 5, 6], "archiv": 5, "archive_filenam": 3, "arg": [3, 4, 5, 6], "argmax": 3, "argmin_preval": [1, 2, 3], "args_i": 3, "argument": [3, 5, 6], "around": [5, 6], "arrai": [3, 4, 5, 6], "artifici": 3, "artificialprevalenceprotocol": [1, 2, 3], "as_binary_preval": [1, 2, 3], "asarrai": 3, "asdataload": [1, 3, 4], "assert": 5, "assign": [3, 5], "associ": 3, "assum": 6, "assumpion": 6, "attach": 5, "attempt": 6, "attribut": 6, "author": 6, "auto": 3, "automat": 4, "av": 6, "avail": [4, 5, 6], "averag": [3, 5, 6], "avoid": 3, "ax": 6, "axi": 3, "b": [3, 5, 6], "backend": [3, 6], "balanc": 6, "band": 3, "bandwidth": 6, "bandwidth_method": [1, 3, 6], "bar": 3, "barranquero": [4, 6], "base": [1, 2, 3, 4], "base_method": [], "base_quantifi": 6, "base_quantifier_class": 6, "baseestim": [4, 6], "basequantifi": [1, 3, 6], "basic": [5, 6], "batch": 4, "batch_siz": 4, "batch_size_test": 4, "bct": [4, 6], "bctscalibr": [1, 3, 4], "bean": 5, "beat": [4, 6], "been": [3, 4, 5, 6], "befor": [3, 4, 5, 6], "beforehand": 3, "begin": 3, "behaviour": 3, "being": [3, 6], "belong": 6, "below": [3, 5], "benchmark": [], "best": [3, 4, 6], "best_epoch": 3, "best_model": [1, 2, 3], "best_scor": 3, "better": 6, "between": [3, 4, 6], "bia": [3, 4, 6], "bidirect": 6, "bin": [3, 6], "binar": [1, 3, 5], "binari": [1, 3, 4, 5, 6], "binary_bias_bin": [1, 2, 3], "binary_bias_glob": [1, 2, 3], "binary_diagon": [1, 2, 3], "binary_quantifi": 6, "binaryaggregativequantifi": [1, 3, 6], "binaryquantifi": [1, 3, 6], "binom": 3, "block": 3, "boldsymbol": 6, "bool": [3, 6], "boolean": [3, 5, 6], "both": 5, "bound": [3, 6], "box": 3, "brief": 5, "bring": 6, "broken": 3, "brokenbar_supremacy_by_drift": [1, 2, 3], "buns": 6, "bypass": 6, "c": [3, 4, 5, 6], "calcul": 3, "calibr": [1, 2, 3], "calibratorfactori": 4, "call": [3, 5, 6], "callabl": [3, 5, 6], "can": [3, 5, 6], "cannot": 6, "care": 6, "carlo": 6, "carri": [3, 5, 6], "case": [3, 4, 5, 6], "castano": 5, "castro": 6, "categor": 5, "categori": 3, "cauchi": 6, "cc": [1, 3, 6], "cdf": 6, "cell": 6, "center": 6, "central": 3, "ch": 6, "chang": 5, "channel": 6, "characteriz": 5, "charg": [3, 5], "chart": 3, "check": [3, 5], "check_dataframe_format": [], "check_file_format": [], "check_prevalence_vector": [1, 2, 3], "checkpoint": [4, 6], "checkpointdir": 6, "checkpointnam": 6, "checkpointpath": 4, "child": 3, "choic": 6, "choos": 6, "chosen": 3, "class": [3, 4, 5, 6], "class2int": 5, "class_weight": 6, "classes_": [1, 3, 4, 5, 6], "classif": [1, 2, 3, 5, 6], "classif_posterior": 6, "classif_predict": 6, "classifi": [1, 3, 4, 6], "classification_fit": 6, "classifier_fit_predict": [1, 3, 6], "classifier_net": 4, "classifiermixin": 4, "classifyandcount": [1, 3, 6], "classmethod": [3, 5, 6], "classnam": 5, "classs": 3, "clean_checkpoint": [1, 3, 6], "clean_checkpoint_dir": [1, 3, 6], "clef": 5, "clip": 3, "clip_if_necessari": 3, "close": [3, 5, 6], "closest": 6, "cm": 3, "cnn": 6, "cnnnet": [1, 3, 4, 6], "code": 4, "codefram": 5, "codifi": 5, "col": 5, "collat": [1, 2, 3], "collect": [3, 4, 5, 6], "collet": 5, "color": 3, "colormap": 3, "column": [3, 5], "com": [1, 3, 5], "combin": [3, 6], "combinations_budget": 3, "come": [3, 5, 6], "common": 6, "compar": 3, "compat": 6, "competit": 5, "complement": 6, "complet": [3, 6], "compon": [3, 4, 6], "comput": [3, 6], "conceptu": 6, "condit": [1, 3, 6], "conduct": 3, "confer": [4, 5], "confid": 3, "configstatu": [1, 2, 3], "configur": [3, 6], "conform": 5, "connect": 6, "consecut": [3, 4, 5, 6], "consid": [3, 4, 5, 6], "consist": [3, 4, 5, 6], "constrain": [3, 5], "construct": 6, "consult": 6, "contain": [1, 3, 4, 5, 6], "contanin": 3, "content": 2, "context": 3, "control": 3, "conveni": 3, "converg": 6, "convert": [3, 4, 5, 6], "convolut": 4, "copi": [3, 5], "correct": [4, 6], "correctli": 3, "correspond": [5, 6], "count": [1, 3, 5, 6], "counter": 5, "countvector": 5, "covari": [5, 6], "cover": [3, 4], "coz": 5, "cpu": [4, 6], "creat": [3, 6], "create_if_not_exist": [1, 2, 3], "create_parent_dir": [1, 2, 3], "crip": 6, "crisp": [3, 6], "criteria": 5, "criterion": 6, "cross": [3, 4, 5, 6], "cross_val_predict": [1, 2, 3], "csr": 5, "csr_matrix": 5, "csv": 5, "cuda": [4, 6], "cumberson": 3, "current": [3, 4, 5, 6], "custom": [3, 5], "d": 6, "d_": 3, "dat": 4, "data": [1, 2, 3, 4, 6], "data_hom": 5, "datafram": 3, "dataload": 4, "datapoint": 6, "dataset": [1, 2, 3, 4, 6], "dataset_nam": 5, "deactiv": 3, "decaesteck": 6, "decai": 4, "decid": [3, 5], "decis": [3, 4, 6], "decision_funct": [1, 3, 4, 6], "decomposit": 4, "dedic": 5, "deep": [3, 6], "def": 3, "default": [3, 4, 5, 6], "defin": [3, 4, 5, 6], "degener": 6, "del": 5, "delai": 3, "delet": 4, "deliv": 6, "delta": 6, "denomin": 6, "dens": 6, "densiti": [3, 6], "depend": [3, 6], "describ": [3, 6], "descript": 5, "desir": [3, 5], "destin": 3, "detail": [4, 5, 6], "determin": 3, "determinist": 3, "devel": 5, "deviat": [3, 5], "devic": [1, 3, 4, 6], "df": [], "di": 6, "diagon": 3, "dict": [3, 5, 6], "dictionari": [3, 4, 5, 6], "differ": [3, 5, 6], "dij": 6, "dimens": [1, 3, 4, 5, 6], "dimension": [3, 4, 5, 6], "dir": [3, 6], "directori": [3, 4, 5, 6], "discard": [1, 3, 6], "discret": [3, 6], "disjoint": 4, "disk": [3, 5], "disntac": 6, "displai": [3, 4], "displaystyl": 3, "dissimilar": 6, "distanc": [3, 6], "distant": 3, "distribut": [3, 5, 6], "distributionmatch": [], "distributionmatchingi": [1, 3, 6], "distributionmatchingx": [1, 3, 6], "diverg": [3, 6], "divid": 3, "dl": 6, "dmx": [1, 3, 6], "dmy": [1, 3, 6], "do": [3, 4, 5, 6], "doc_embed": 6, "doc_embedding_s": 6, "doc_posterior": 6, "document": [4, 5, 6], "document_embed": [1, 3, 4], "doe": [3, 6], "doi": 6, "domain": 3, "domaina": 3, "domainb": 3, "domainmix": [1, 2, 3], "dot": 3, "dowload": 3, "down": [3, 5, 6], "download": [3, 5], "download_fil": [1, 2, 3], "download_file_if_not_exist": [1, 2, 3], "draw": 3, "drawn": [3, 5], "drop": 4, "drop_p": 4, "dropout": [4, 6], "dry": 5, "dtype": 5, "dump": 5, "dure": 6, "dx": 6, "dy": [1, 3, 6], "dynam": [4, 5, 6], "e": [3, 4, 5, 6], "eacc": [1, 3, 6], "each": [3, 4, 5, 6], "earli": [3, 4, 6], "earlystop": [1, 2, 3], "easili": 4, "ecc": [1, 3, 6], "ecml": 6, "edu": 5, "eemq": [1, 3, 6], "ehdi": [1, 3, 6], "either": [3, 6], "element": [3, 5, 6], "elm": 6, "em": [1, 3, 6], "emb": 4, "embed": [4, 6], "embed_s": 4, "embedding_s": 4, "emploi": 6, "empti": 5, "emq": [1, 3, 6], "emq_bct": [1, 3, 6], "enabl": 4, "encod": 5, "end": [3, 6], "end_msg": 3, "endeavour": 3, "endow": 3, "enforc": 3, "ensembl": [1, 3, 5, 6], "ensemblefactori": [1, 3, 6], "ensur": 3, "entir": 3, "entri": 6, "enum": 3, "enumer": 3, "environ": [3, 6], "ep": 3, "epacc": [1, 3, 6], "epoch": [3, 4, 6], "epsilon": [1, 3, 6], "equal": [3, 6], "equat": 6, "equidist": 3, "equival": 6, "err_nam": 3, "error": [1, 2, 4, 6], "error_by_drift": [1, 2, 3], "error_metr": 3, "error_nam": 3, "especi": 3, "establish": 3, "estim": [3, 4, 5, 6], "estim_prev": 3, "estim_preval": 6, "estimant": 6, "esuli": [4, 5, 6], "et": [4, 5, 6], "evaltestcas": [], "evalu": [1, 2, 4, 5, 6], "evaluate_on_sampl": [1, 2, 3], "evaluation_report": [1, 2, 3], "evalut": 6, "even": 3, "eventu": [4, 5], "everi": [3, 6], "exact": [5, 6], "exact_train_prev": 6, "exampl": [3, 4, 5, 6], "exce": 3, "except": [3, 6], "exhaust": 3, "exist": [3, 6], "exist_ok": 3, "expand": 3, "expand_grid": [1, 2, 3], "expect": 6, "expectationmaximizationquantifi": [1, 3, 6], "experi": [3, 5], "explicit": 6, "explor": 3, "express": 5, "extend": [3, 6], "extens": 6, "extract": [3, 5, 6], "f": [5, 6], "f1": [3, 4], "f1_error": [1, 2, 3], "f1e": [1, 2, 3], "f_1": 3, "factor": 3, "factori": 6, "fail": [1, 2, 3, 6], "fals": [3, 4, 5, 6], "famili": 6, "far": [3, 4, 5], "fare": 3, "fast": [3, 5], "faster": 5, "feat1": 5, "feat2": 5, "featn": 5, "featur": [5, 6], "feature_extract": 5, "fetch_ifcb": [1, 3, 5], "fetch_lequa2022": [1, 3, 5], "fetch_review": [1, 3, 5, 6], "fetch_twitt": [1, 3, 5], "fetch_ucibinarydataset": [1, 3, 5], "fetch_ucibinarylabelledcollect": [1, 3, 5], "fetch_ucilabelledcollect": 5, "fetch_ucimulticlassdataset": [1, 3, 5], "fetch_ucimulticlasslabelledcollect": [1, 3, 5], "ff": 6, "ff_layer": 6, "file": [3, 4, 5, 6], "filenam": 3, "final": 6, "find": 6, "first": [3, 5, 6], "fit": [1, 2, 3, 4, 5, 6], "fit_classifi": 6, "fit_cv": [1, 3, 4], "fit_tr_val": [1, 3, 4], "fit_transform": [1, 3, 5], "flag": 3, "float": [3, 4, 5, 6], "fn": 3, "fold": [3, 5, 6], "folder": [5, 6], "follow": [3, 5, 6], "fomart": 5, "for_model_select": 5, "forc": 3, "form": [3, 5, 6], "forman": 6, "format": [3, 5, 6], "former": 6, "forward": [1, 3, 4, 6], "found": [3, 4, 5, 6], "fp": 3, "fpr": [3, 6], "frac": [3, 6], "fraction": 6, "framework": [1, 6], "franc": 6, "frequenc": [5, 6], "from": [3, 4, 5, 6], "from_csv": [1, 3, 5], "from_nam": [1, 2, 3], "from_spars": [1, 3, 5], "from_text": [1, 3, 5], "full": 3, "fulli": 3, "func": 3, "function": [1, 2, 4, 5, 6], "further": [4, 5, 6], "fusion": 5, "g": [3, 5, 6], "gain": 3, "gao": [5, 6], "gap": 5, "gasp": 5, "gen": 3, "gener": [3, 4, 5, 6], "generation_func": 3, "get": [3, 4, 5, 6], "get_col": [1, 2, 3], "get_diverg": [1, 2, 3], "get_kde_funct": [1, 3, 6], "get_labelled_collect": [1, 2, 3], "get_mixture_compon": [1, 3, 6], "get_nprevpoints_approxim": [1, 2, 3], "get_param": [1, 2, 3, 4, 6], "get_probability_distribut": [1, 3, 6], "get_quapy_hom": [1, 2, 3], "getptecondestim": [1, 3, 6], "github": 5, "give": 6, "given": [3, 4, 5, 6], "global": 3, "goal": 6, "goe": 3, "gonz\u00e1lez": 6, "got": 6, "gpu": [4, 6], "gram_matrix_mix_sum": [1, 3, 6], "greater": 5, "grenobl": 6, "grid": [3, 6], "gridsearchcv": 6, "gridsearchq": [1, 2, 3, 6], "ground": 6, "ground_truth_path": [], "group_param": [1, 2, 3], "guarante": [3, 5, 6], "guid": 5, "g\u00e1llego": [5, 6], "h": 6, "ha": [3, 4, 5, 6], "had": 5, "handl": 3, "hard": [3, 4, 6], "harmon": 3, "hat": [3, 6], "have": [3, 5, 6], "hcr": 5, "hd": [3, 6], "hdx": [1, 3, 6], "hdy": [1, 3, 6], "held": [3, 4, 6], "helling": 6, "hellingerdist": [1, 2, 3], "hellingerdistancei": [1, 3, 6], "hellingh": 3, "help": 6, "helper": 3, "henc": [3, 5, 6], "here": 6, "heurist": 6, "hidden": [4, 6], "hidden_s": 4, "hierarchytestcas": [], "high": 3, "highlight": 3, "hightlight": 3, "histogram": 6, "hlt": 1, "hold": [3, 6], "home": [3, 5], "hook": 6, "host": 1, "host_fold": 4, "how": [3, 5, 6], "howev": 3, "hp": 5, "hsosik": 5, "html": 5, "http": [1, 3, 5, 6], "hyper": [3, 4, 6], "hyperparamet": [3, 6], "i": [1, 3, 4, 5, 6], "ic": 5, "id": 5, "ifcb": 5, "ifcb_zenodo": 5, "ifcbtestsampl": 5, "ifcbtrainsamplesfromdir": 5, "ignor": [3, 5, 6], "ii": 3, "iid": 6, "imdb": 5, "implement": [3, 4, 5, 6], "implicit": 3, "import": [5, 6], "impos": 3, "improv": [3, 4, 6], "in_plac": 3, "includ": [1, 5, 6], "inconveni": 3, "independ": [3, 6], "index": [1, 3, 4, 5, 6], "indextransform": [1, 3, 5], "indic": [3, 4, 5, 6], "individu": 5, "ineffici": 3, "infer": 5, "inform": [3, 4, 5, 6], "infrequ": 5, "inherit": 3, "initi": [4, 6], "inplac": [5, 6], "input": [3, 4, 5, 6], "instal": [4, 6], "instanc": [3, 4, 5, 6], "instanti": [3, 4, 6], "instead": [3, 5, 6], "int": [3, 5, 6], "integ": [3, 4, 5, 6], "interest": 3, "interfac": 6, "intern": [4, 5, 6], "interpret": 6, "interv": 3, "intract": 3, "invalid": [1, 2, 3], "invok": [3, 5], "involv": 3, "irrespect": 6, "isomer": 3, "isometr": 3, "issu": [3, 6], "isti": 1, "item": 3, "iter": [3, 5, 6], "iterateprotocol": [1, 2, 3], "iterrow": [], "its": [3, 4, 6], "itself": [3, 6], "j": [5, 6], "joachim": [4, 6], "joblib": 6, "join": [1, 3, 5], "k": [3, 4, 5, 6], "kde": 6, "kdebas": [1, 3, 6], "kdei": 6, "kdeyc": [1, 3, 6], "kdeyhd": [1, 3, 6], "kdeyml": [1, 3, 6], "keep": [3, 5], "kei": [3, 5], "kept": 5, "kernel": [4, 6], "kernel_height": 4, "kerneldens": 6, "keyword": [5, 6], "kfcv": [1, 3, 4, 5, 6], "kindl": [5, 6], "kl": 3, "kld": [1, 2, 3, 4, 6], "knowledg": 5, "known": [3, 6], "kraemer": 3, "kullback": [3, 6], "kundaj": 4, "kwarg": [4, 5, 6], "l": 6, "l1": [3, 6], "l2": 6, "label": [3, 4, 5, 6], "labelcollectiontestcas": [], "labelled_collect": 3, "labelledcollect": [1, 3, 5, 6], "larg": 3, "larger": [3, 5, 6], "largest": 3, "last": [3, 4, 5], "latinn": 6, "latter": 6, "launch": 3, "layer": [4, 6], "lazi": 6, "ldot": 6, "lead": 5, "learn": [3, 4, 5, 6], "learner": [4, 6], "least": 5, "leav": 5, "left": [3, 5, 6], "legend": 3, "leibler": [3, 6], "len": 3, "length": [4, 5], "lequa": 5, "lequa2022_experi": 5, "less": [3, 5], "let": [3, 6], "leyend": 3, "like": [3, 4, 5, 6], "likelihood": [4, 6], "limit": [3, 6], "line": 3, "linear": [3, 6], "linear_model": 4, "linear_search": [1, 2, 3], "linearsvc": 5, "list": [3, 4, 5, 6], "listedcolormap": 3, "literatur": 3, "load": [1, 3, 5, 6], "load_category_map": [], "load_fn": [], "load_raw_docu": [], "load_vector_docu": [], "loader": 5, "loader_func": 5, "loader_kwarg": 5, "local": 3, "log": [3, 5, 6], "logist": [4, 6], "logisticregress": [4, 6], "logscal": 3, "logspac": 6, "loki": [3, 6], "long": 4, "longer": [3, 6], "longest": 4, "look": 6, "loop": 6, "loss": [3, 4, 6], "lost": 3, "low": [3, 4], "lower": 6, "lower_is_bett": 3, "lowranklogisticregress": [1, 3, 4], "lpha": [], "lq": 6, "lr": [4, 6], "lstm": [4, 6], "lstm_class_nlay": 4, "lstm_hidden_s": 6, "lstm_nlayer": 6, "lstmnet": [1, 3, 4], "m": [1, 3, 6], "machin": 4, "macro": 3, "made": [3, 5, 6], "mae": [1, 2, 3, 4, 6], "mae_loss": [1, 3, 6], "mai": [3, 6], "maintain": 6, "make": [3, 6], "makedir": 3, "manag": 5, "mani": [3, 6], "manner": [4, 6], "map": [4, 6], "map_parallel": [1, 2, 3], "margin": [4, 6], "mark": 3, "mass": 3, "match": 6, "math": [3, 6], "mathbb": 6, "mathcal": [3, 6], "mathrm": 6, "matplotlib": 3, "matric": 5, "matrix": [3, 6], "max": [1, 3, 6], "max_it": [1, 3, 6], "max_sample_s": 6, "maxim": 6, "maximum": [3, 4, 6], "maximumlikelihoodprevalenceestim": [1, 3, 6], "mean": [3, 4, 5, 6], "mean_absolute_error": [1, 2, 3], "mean_normalized_absolute_error": [1, 2, 3], "mean_normalized_relative_absolute_error": [1, 2, 3], "mean_relative_absolute_error": [1, 2, 3], "meant": 6, "measur": [3, 6], "median": 6, "medianestim": [1, 3, 6], "medianestimator2": [1, 3, 6], "medianquantifi": [], "member": 6, "memori": 4, "merchandis": 5, "messag": 6, "met": 5, "meta": [1, 2, 3], "method": [1, 2, 3], "method_nam": 3, "method_ord": 3, "methodnam": [], "metric": [3, 6], "might": [3, 5, 6], "mimick": 6, "min_": [3, 6], "min_df": [5, 6], "min_po": 6, "minim": [3, 6], "minimum": [5, 6], "minimun": 5, "mining6": 5, "minu": 3, "misclassif": 6, "misclassificatin": 6, "miss": 3, "mixtur": [3, 6], "mixture_point": 3, "mkld": [1, 2, 3, 6], "ml": [5, 6], "mlpe": 6, "mnae": [1, 2, 3, 6], "mnkld": [1, 2, 3, 6], "mnrae": [1, 2, 3, 6], "mock": [3, 4], "mock_labelled_collect": [], "model": [3, 4, 6], "model_select": [1, 2, 6], "modif": 3, "modifi": 3, "modseltestcas": [], "modul": [0, 1, 2], "monitor": 3, "mont": 6, "montecarlo_tri": 6, "more": [3, 5, 6], "moreo": [5, 6], "most": [3, 5, 6], "mrae": [1, 2, 3, 4, 6], "ms2": [1, 3, 6], "mse": [1, 2, 3, 6], "msg": 3, "multi": 6, "multiclass": [3, 5, 6], "multipli": 3, "multiprocess": [3, 6], "multivari": 4, "must": [5, 6], "mutual": 6, "my_arrai": 3, "my_collect": 5, "mytestcas": [], "n": [3, 4, 6], "n_bin": [3, 6], "n_categori": [], "n_class": [1, 3, 4, 5, 6], "n_compon": 4, "n_dimens": [4, 6], "n_epoch": 6, "n_featur": [4, 6], "n_instanc": [3, 4, 6], "n_job": [3, 4, 5, 6], "n_preval": 3, "n_prevpoint": 3, "n_repeat": 3, "n_sampl": [3, 4], "n_test": 5, "n_train": 5, "nae": [1, 2, 3], "name": [3, 4, 5, 6], "natur": 3, "naturalprevalenceprotocol": [1, 2, 3], "nbin": [3, 6], "nbv": [4, 6], "nbvscalibr": [1, 3, 4], "ndarrai": [3, 5, 6], "necessari": [3, 6], "need": [3, 5, 6], "neg": [3, 6], "neg_label": [1, 3, 6], "nest": 6, "net": 4, "network": [3, 4, 5, 6], "neural": [1, 2, 3, 5, 6], "neuralclassifiertrain": [1, 3, 4, 6], "never": 3, "new": [3, 5], "newelm": [1, 3, 6], "newonevsal": [1, 3, 6], "newsvma": [1, 3, 6], "newsvmkld": [1, 3, 6], "newsvmq": [1, 3, 6], "newsvmra": [1, 3, 6], "next": [3, 4, 5], "nfeat": 6, "nfold": [3, 5], "nkld": [1, 2, 3, 4, 6], "nn": 4, "nogap": 5, "non": 6, "non_aggreg": [1, 2, 3], "non_aggregative_method": [], "none": [3, 4, 5, 6], "norm": 6, "normal": [3, 5, 6], "normalize_preval": [1, 2, 3], "normalized_absolute_error": [1, 2, 3], "normalized_relative_absolute_error": [1, 2, 3], "note": [3, 5], "noth": 6, "novemb": 4, "np": [3, 5, 6], "npp": [1, 2, 3], "nrae": [1, 2, 3], "nrepeat": 5, "num_prevalence_combin": [1, 2, 3], "number": [3, 4, 5, 6], "numer": [3, 5, 6], "numpi": [3, 4], "o": 3, "object": [3, 4, 5, 6], "observ": 6, "obtain": [3, 4, 6], "obtaind": 3, "obvious": 3, "occur": 5, "occurr": 5, "off": [4, 6], "offici": 5, "oldsymbol": [], "omd": 5, "on_preclassified_inst": [1, 2, 3], "onc": [3, 5], "one": [3, 5, 6], "ones": [3, 5, 6], "onevsal": [1, 3, 6], "onevsallaggreg": [1, 3, 6], "onevsallgener": [1, 3, 6], "onlabelledcollectionprotocol": [1, 2, 3], "onli": [3, 4, 5, 6], "open": [1, 3, 5], "optim": [3, 4, 6], "optim_minim": [1, 2, 3, 6], "option": [5, 6], "order": [3, 5, 6], "order_bi": 6, "org": [5, 6], "orient": [3, 6], "origin": [3, 5, 6], "other": [3, 5, 6], "otherwis": [3, 5, 6], "out": [3, 4, 5, 6], "outer": 3, "outlier": 3, "output": [3, 4, 5, 6], "outsid": 6, "over": 3, "overal": 3, "overridden": 6, "overview": 5, "p": [1, 3, 4, 5, 6], "p_": 6, "p_i": 3, "p_x": 6, "pacc": [1, 3, 6], "packag": [1, 2], "pad": [4, 5], "pad_length": 4, "padding_length": 4, "page": 1, "pair": 3, "panda": 3, "paper": [4, 6], "parallel": [1, 2, 3, 4, 5, 6], "parallel_backend": 6, "param": [3, 4, 6], "param_grid": [3, 6], "param_mod_sel": 6, "param_model_sel": 6, "paramet": [3, 4, 5, 6], "parameter": 6, "parent": 3, "parllel": 6, "part": 5, "particular": 6, "partit": [3, 4], "pass": [3, 4, 6], "patch": [4, 6], "path": [3, 4, 5, 6], "path_dir": [], "patienc": [3, 4, 6], "pcc": [1, 3, 6], "pdf": [1, 3, 6], "percentil": 3, "perf": [4, 6], "perform": [3, 4, 6], "perman": 3, "pglez82": 5, "phase": 6, "pickl": [3, 5, 6], "pickle_path": 3, "pickled_resourc": [1, 2, 3], "pip": 1, "pipelin": 6, "pkdd": 6, "pkl": 3, "place": [3, 5], "plankton": 5, "plot": [1, 2], "pmlr": 4, "point": [3, 5], "polici": 6, "pos_class": [3, 5], "pos_label": [1, 3, 6], "posit": [3, 5, 6], "positive_preval": 3, "possibl": [3, 6], "post": 3, "posterior": [3, 4, 6], "posterior_prob": 6, "power": 3, "pp": 4, "pre": 3, "pre_classif": 3, "prec": 3, "preced": 5, "precis": 3, "precomput": 5, "predefin": 5, "predict": [1, 2, 3, 4, 6], "predict_on": 6, "predict_proba": [1, 3, 4, 6], "prefer": 3, "prefix": [], "preliminari": 6, "prepar": 3, "preprocess": [1, 2, 3, 6], "present": 5, "preserv": [3, 5], "prev": [3, 5], "preval": [1, 3, 4, 5, 6], "prevalence_estim": 3, "prevalence_from_label": [1, 2, 3], "prevalence_from_prob": [1, 2, 3], "prevalence_grid": [1, 2, 3], "prevalence_linspac": [1, 2, 3], "prevalence_valu": [], "prevel": 6, "previous": [3, 6], "prevs_estim": 6, "prevs_hat": 3, "princip": 4, "print": [3, 4, 5], "prior": [3, 6], "probabilist": [1, 3, 4, 6], "probabilisticadjustedclassifyandcount": [1, 3, 6], "probabilisticclassifyandcount": [1, 3, 6], "probabl": [3, 4, 6], "problem": [3, 5, 6], "procedur": 3, "proceed": [5, 6], "process": [3, 5], "produc": 3, "product": 5, "progress": 5, "proper": 6, "properli": 6, "properti": [3, 4, 5, 6], "proport": [4, 5, 6], "propos": 6, "protocol": [1, 2, 5, 6], "provid": [5, 6], "ptecondestim": 6, "ptr": 6, "publicli": 5, "purpos": 6, "put": 6, "py": 5, "python": [1, 5], "pytorch": 6, "p\u00e9rez": [5, 6], "q": [3, 4, 6], "q_": 6, "q_i": 3, "qacc": 4, "qdrop_p": 6, "qf1": 4, "qgm": 4, "qp": [3, 5, 6], "quanet": [4, 6], "quanetmodul": [1, 3, 6], "quanettrain": [1, 3, 6], "quantif": [0, 1, 3, 4, 5, 6], "quantifi": [1, 2, 3, 5, 6], "quantification_error": 3, "quantiti": 3, "quapy_data": 3, "quay_data": 5, "que": 3, "question": 3, "quevedo": 5, "quick": 5, "quit": 3, "r": [3, 5, 6], "rae": [1, 2, 3], "rais": [3, 6], "raise_error": 3, "raise_except": 3, "rand": 3, "random": [3, 5], "random_se": 3, "random_st": [1, 2, 3, 5, 6], "randomli": 5, "rang": [3, 6], "rank": [4, 6], "rare": 5, "rate": [3, 4, 6], "raw": [3, 5], "re": [4, 5], "reach": 6, "read": 5, "reader": [1, 2, 3], "real": [3, 4, 5, 6], "realiz": 3, "reason": 6, "recal": 3, "recalib": 6, "recalibr": 6, "recalibratedprobabilisticclassifi": [1, 3, 4], "recalibratedprobabilisticclassifierbas": [1, 3, 4], "recip": 6, "recommend": 6, "recomput": 6, "record": 5, "recurr": 5, "recurs": 6, "red_siz": 6, "reduc": [1, 3, 5], "reduce_column": [1, 3, 5], "refer": [4, 5], "refit": 3, "regardless": 5, "regim": 3, "region": 3, "regist": 6, "regress": 4, "reindex_label": [1, 3, 5], "reiniti": 4, "rel": [3, 5, 6], "relative_absolute_error": [1, 2, 3], "reli": [3, 6], "remaind": 6, "remov": [5, 6], "repeat": 3, "repetit": 3, "replac": [3, 5], "replic": 3, "report": [3, 6], "repositori": 5, "repr_siz": 4, "repres": [3, 5, 6], "represent": [3, 4, 6], "reproduc": [3, 5], "request": [3, 5, 6], "requir": [4, 5, 6], "reset_net_param": [1, 3, 4], "resourc": 3, "resp": 6, "respect": [3, 6], "rest": [3, 4, 5], "result": [3, 6], "resultsubmiss": [], "retain": [4, 6], "retrain": 4, "return": [3, 4, 5, 6], "return_constrained_dim": 3, "return_typ": [1, 2, 3], "reus": [3, 5], "review": 5, "reviews_sentiment_dataset": 5, "rgmin_": [], "right": [3, 5, 6], "rodr\u00edguez": 6, "round": 5, "routin": [3, 5, 6], "row": 5, "run": [3, 5, 6], "runtest": [], "saeren": 6, "same": [3, 5, 6], "sampl": [1, 2, 3, 4, 5, 6], "sample_id": [], "sample_prev": 3, "sample_s": [3, 6], "samples_paramet": [1, 2, 3], "samples_to_str": [], "samplesfromdir": 5, "sampling_from_index": [1, 3, 5], "sampling_index": [1, 3, 5], "sander": 5, "sanity_check": 3, "save": [3, 5], "save_text_fil": [1, 2, 3], "savepath": 3, "scale": [3, 4, 6], "scall": 5, "schwarz": 6, "scikit": [3, 4, 5, 6], "scipi": [3, 5], "score": [3, 4, 5, 6], "scott": 6, "script": [5, 6], "se": [1, 2, 3], "search": [1, 3, 6], "sebastiani": [5, 6], "second": [3, 5], "secondari": 3, "see": [3, 4, 5, 6], "seed": [3, 5, 6], "seen": [3, 6], "select": [3, 5, 6], "self": [3, 4, 5, 6], "semeval13": 5, "semeval14": 5, "semeval15": 5, "semeval16": 5, "sens": 3, "sentenc": 5, "sentiment": 5, "separ": [3, 5], "sequenc": 3, "seri": 5, "serv": [3, 5], "set": [3, 4, 5, 6], "set_param": [1, 2, 3, 4, 6], "setup": 6, "sever": 5, "shape": [3, 4, 5, 6], "share": 5, "shift": [3, 4, 6], "short": 4, "shorter": 4, "should": [3, 4, 5, 6], "show": [3, 4, 5, 6], "show_dens": 3, "show_legend": 3, "show_std": 3, "shown": 3, "shrikumar": 4, "shuffl": [4, 5], "side": 3, "sign": 3, "significantli": 3, "silent": [3, 6], "silverman": 6, "sim_": 6, "similar": [3, 6], "simpl": [3, 6], "simplex": 3, "simpli": [3, 6], "simplif": 6, "sinc": [5, 6], "singl": [3, 6], "single_sample_train": 5, "site": 5, "size": [3, 4, 5, 6], "skip": 3, "sklearn": [4, 5, 6], "sld": [1, 3, 6], "sleep": 3, "slice": 3, "slsqp": 3, "smallest": 3, "smm": [1, 3, 6], "smooth": [1, 2, 3], "smooth_limits_epsilon": 3, "so": [3, 4, 5, 6], "social": 5, "soft": 6, "solut": [3, 6], "solv": 6, "solve_adjust": [1, 3, 6], "solver": 6, "some": [3, 5, 6], "some_arrai": 3, "sort": 6, "sought": 6, "sourc": [1, 3, 4, 5, 6], "space": [3, 4, 6], "spars": 5, "special": 5, "specif": [3, 6], "specifi": [3, 4, 5, 6], "spectrum": 3, "speed": [3, 6], "sperduti": 5, "split": [3, 4, 5, 6], "split_random": [1, 3, 5], "split_stratifi": [1, 3, 5], "splitstratifi": [1, 3, 5], "spmatrix": 5, "sqrt": [3, 6], "squar": [3, 6], "sst": 5, "stabil": 6, "stabl": 5, "stackexchang": 3, "stand": [3, 6], "standard": [1, 3, 4, 5, 6], "star": 3, "start_msg": 3, "stat": [1, 3, 5], "state": 3, "static": 6, "statist": [3, 6], "stats_siz": 6, "statu": [1, 2, 3], "std": 4, "stdout": 3, "step": [3, 6], "stop": [3, 4, 6], "store": [4, 5, 6], "str": [3, 5, 6], "stratif": 5, "stratifi": [4, 5, 6], "stride": 4, "string": [3, 5, 6], "strprev": [1, 2, 3], "structur": 6, "studi": 5, "style": 5, "subclass": [5, 6], "subdir": 3, "sublinear_tf": 5, "submodul": [1, 2], "subobject": 6, "subpackag": [1, 2], "subsequ": 5, "subtract": [3, 5], "subtyp": 5, "success": [1, 2, 3], "suit": 5, "sum": [3, 6], "sum_": [3, 6], "support": [5, 6], "surfac": 5, "svm": [4, 5, 6], "svm_perf_classifi": 4, "svm_perf_learn": 4, "svmperf": [1, 2, 3, 6], "svmperf_bas": [4, 6], "svmperf_hom": 6, "sweep": 6, "system": 6, "t": [3, 4, 6], "t1a": 5, "t1b": 5, "t2a": 5, "t2b": 5, "t50": [1, 3, 6], "tab10": 3, "tail": 3, "tail_density_threshold": 3, "take": [3, 5, 6], "taken": [3, 4, 5, 6], "target": [3, 4, 6], "task": 5, "te": 5, "temp": 6, "temp_se": [1, 2, 3], "temperatur": [4, 6], "tempor": [3, 4], "tensor": 4, "term": [3, 4, 5, 6], "ternari": 6, "test": [3, 4, 5, 6], "test_aggreg": [], "test_aggregative_method": [], "test_app_not_repl": [], "test_app_numb": [], "test_app_repl": [], "test_app_sanity_check": [], "test_bas": [], "test_binari": [], "test_covariate_shift_not_repl": [], "test_covariate_shift_repl": [], "test_dataset": [], "test_ensemble_method": [], "test_eval_speedup": [], "test_evalu": [], "test_evaluation_output": [], "test_fetch_lequa2022": [], "test_fetch_review": [], "test_fetch_twitt": [], "test_fetch_ucidataset": [], "test_fetch_ucimultidataset": [], "test_gen": 5, "test_hierarchi": [], "test_import": [], "test_join": [], "test_kraemer_not_repl": [], "test_kraemer_repl": [], "test_labelcollect": [], "test_median_meta": [], "test_median_meta_modsel": [], "test_method": [], "test_modsel": [], "test_modsel_parallel": [], "test_modsel_parallel_speedup": [], "test_modsel_timeout": [], "test_no_seed_init": [], "test_non_aggregative_method": [], "test_npp_not_repl": [], "test_npp_repl": [], "test_parallel_replic": [], "test_path": 5, "test_prediction_replic": [], "test_prevalences_path": [], "test_probabilist": [], "test_protocol": [], "test_quanet_method": [], "test_replic": [], "test_samping_replic": [], "test_split": 5, "test_str_label_nam": [], "testcas": [], "testprotocol": [], "text": [3, 4, 5, 6], "text2tfidf": [1, 3, 5], "textclassifiernet": [1, 3, 4], "textual": 5, "tf": 5, "tfidf": 5, "tfidfvector": 5, "th": 6, "than": [3, 4, 5, 6], "thei": 6, "them": [5, 6], "therefor": 3, "thi": [1, 3, 4, 5, 6], "thorsten": 4, "those": [3, 4, 6], "though": 3, "threshold": [3, 6], "thresholdoptim": [1, 3, 6], "through": 3, "thu": [3, 4, 6], "time": [3, 5, 6], "timeout": [1, 2, 3], "timeouterror": 3, "timer": 3, "titl": 3, "tmp": 4, "tn": 3, "togeth": 5, "token": [4, 5], "tol": 6, "toler": 6, "toleranz": 3, "top": [3, 6], "topso": [3, 6], "topsoedist": [1, 2, 3], "torch": [4, 6], "torchdataset": [1, 3, 4], "total": [1, 2, 3], "toward": [5, 6], "tp": 3, "tpr": [3, 6], "tr": 5, "tr_iter_per_poch": 6, "tr_prev": [3, 6], "track": 3, "trade": [4, 6], "train": [3, 4, 5, 6], "train_path": 5, "train_prev": 3, "train_prop": 5, "train_siz": 5, "train_test": [1, 3, 5], "trainer": 4, "transform": [1, 3, 4, 5, 6], "tri": 6, "trial": 6, "true": [3, 4, 5, 6], "true_prev": 3, "truncatedsvd": 4, "truth": 6, "tscalibr": [1, 3, 4], "ttest_alpha": 3, "tupl": [3, 5, 6], "tweet": 5, "twitter": 5, "twitter_sentiment_datasets_test": 5, "twitter_sentiment_datasets_train": 5, "two": [3, 5, 6], "txt": 3, "type": [3, 5, 6], "typic": [3, 4, 5, 6], "u": 6, "u1": 5, "uci": 5, "uci_dataset": 5, "uci_multiclass_dataset": 5, "ucimlrepo": 5, "unalt": 4, "underli": 6, "underlin": 3, "understand": 3, "undertaken": 3, "unifi": 6, "uniform": [3, 5, 6], "uniform_prevalence_sampl": [1, 2, 3], "uniform_sampl": [1, 3, 5], "uniform_sampling_index": [1, 3, 5], "uniform_simplex_sampl": [1, 2, 3], "uniformli": 3, "uniformprevalenceprotocol": [1, 2, 3], "union": 5, "uniqu": 5, "unit": [3, 6], "unk": 5, "unknown": 5, "unlabel": 6, "unlik": 3, "until": 6, "unus": [3, 4], "up": [3, 4, 6], "updat": 6, "upp": [1, 2, 3], "url": 3, "us": [3, 4, 5, 6], "user": 3, "utf": 5, "util": [1, 2, 4, 5], "v": [3, 4, 6], "va_iter_per_poch": 6, "val": [4, 5], "val_gen": 5, "val_split": [1, 3, 4, 6], "val_split_": [1, 3, 6], "valid": [3, 4, 5, 6], "valid_loss": [1, 3, 4, 6], "valid_polici": [1, 3, 6], "valu": [3, 4, 5, 6], "valueerror": 3, "variabl": [3, 5], "variant": [3, 6], "vector": [3, 4, 5, 6], "verbos": [3, 4, 5, 6], "veri": 3, "version": [3, 4], "vertic": 3, "vertical_xtick": 3, "via": [3, 4, 6], "vline": 3, "vocab_s": 4, "vocabulari": [4, 5], "vocabulary_s": [1, 3, 4, 5, 6], "vscalibr": [1, 3, 4], "w": 5, "wa": [3, 5, 6], "wai": 6, "wait": 4, "warn": [1, 3, 5, 6], "wb": 5, "we": 5, "weight": [4, 5], "weight_decai": 4, "well": 6, "whcih": 5, "when": [3, 4, 5, 6], "whenev": 3, "where": [3, 4, 5, 6], "whether": [3, 4, 5, 6], "which": [3, 4, 5, 6], "while": [4, 5, 6], "whoi": 5, "whole": [3, 4], "whose": [5, 6], "widetild": 6, "within": [3, 6], "without": [3, 5], "word": [4, 5, 6], "work": [3, 5, 6], "worker": [3, 4, 5, 6], "workshop": 6, "wors": 3, "would": [5, 6], "wrap": 6, "wrap_cls_param": [], "wrapper": [3, 4, 5, 6], "x": [1, 3, 4, 5, 6], "x2": 5, "x_1": 6, "x_error": 3, "x_i": 6, "x_t": 6, "xavier": 4, "xavier_uniform": [1, 3, 4], "xp": [1, 3, 5], "xy": [1, 3, 5], "y": [1, 3, 4, 5, 6], "y_": 6, "y_error": 3, "y_i": 6, "y_j": 6, "y_pred": 3, "y_true": 3, "yeast": 5, "yield": [3, 5, 6], "z": 5, "z_": 3, "zenodo": 5, "zero": 3, "zip": 3}, "titles": ["quapy", "Welcome to QuaPy\u2019s documentation!", "quapy", "quapy package", "quapy.classification package", "quapy.data package", "quapy.method package"], "titleterms": {"": 1, "A": [], "aggreg": 6, "api": [], "base": [5, 6], "benchmark": [], "calibr": 4, "classif": 4, "content": [1, 3, 4, 5, 6], "data": 5, "dataset": 5, "document": 1, "error": 3, "evalu": 3, "framework": [], "function": 3, "github": 1, "indic": 1, "instal": 1, "meta": 6, "method": [4, 6], "model_select": 3, "modul": [3, 4, 5, 6], "neural": 4, "non_aggreg": 6, "open": [], "packag": [3, 4, 5, 6], "plot": 3, "preprocess": 5, "protocol": 3, "python": [], "quantif": [], "quapi": [0, 1, 2, 3, 4, 5, 6], "reader": 5, "sourc": [], "submodul": [3, 4, 5, 6], "subpackag": 3, "svmperf": 4, "tabl": 1, "test": [], "test_bas": [], "test_dataset": [], "test_evalu": [], "test_hierarchi": [], "test_labelcollect": [], "test_method": [], "test_modsel": [], "test_protocol": [], "test_replic": [], "typic": [], "util": 3, "welcom": 1}})
\ No newline at end of file
diff --git a/docs/index.html b/docs/index.html
deleted file mode 100644
index 0707108..0000000
--- a/docs/index.html
+++ /dev/null
@@ -1 +0,0 @@
-<meta http-equiv="refresh" content="0; url=./build/html/index.html" />
diff --git a/examples/comparing_HDy_HDx.py b/examples/comparing_HDy_HDx.py
index e7a32ef..9ee3190 100644
--- a/examples/comparing_HDy_HDx.py
+++ b/examples/comparing_HDy_HDx.py
@@ -24,10 +24,10 @@ qp.environ['SAMPLE_SIZE']=100
 df = pd.DataFrame(columns=['method', 'dataset', 'MAE', 'MRAE', 'tr-time', 'te-time'])
 
 
-for dataset_name in tqdm(qp.datasets.UCI_DATASETS, total=len(qp.datasets.UCI_DATASETS)):
+for dataset_name in tqdm(qp.datasets.UCI_BINARY_DATASETS, total=len(qp.datasets.UCI_BINARY_DATASETS)):
     if dataset_name in ['acute.a', 'acute.b', 'balance.2', 'iris.1']: continue
 
-    collection = qp.datasets.fetch_UCILabelledCollection(dataset_name, verbose=False)
+    collection = qp.datasets.fetch_UCIBinaryLabelledCollection(dataset_name, verbose=False)
     train, test = collection.split_stratified()
 
     # HDy............................................
diff --git a/examples/uci_experiments.py b/examples/uci_experiments.py
index 09efe5d..07db7cd 100644
--- a/examples/uci_experiments.py
+++ b/examples/uci_experiments.py
@@ -84,7 +84,7 @@ def run(experiment):
     optim_loss, dataset_name, (model_name, model, hyperparams) = experiment
     if dataset_name in ['acute.a', 'acute.b', 'iris.1']: return
 
-    collection = qp.datasets.fetch_UCILabelledCollection(dataset_name)
+    collection = qp.datasets.fetch_UCIBinaryLabelledCollection(dataset_name)
     for run, data in enumerate(qp.data.Dataset.kFCV(collection, nfolds=5, nrepeats=1)):
         if is_already_computed(dataset_name, model_name, run=run, optim_loss=optim_loss):
             print(f'result for dataset={dataset_name} model={model_name} loss={optim_loss} run={run+1}/5 already computed.')
@@ -141,7 +141,7 @@ if __name__ == '__main__':
     qp.environ['SVMPERF_HOME'] = args.svmperfpath
 
     optim_losses = ['mae']
-    datasets = qp.datasets.UCI_DATASETS
+    datasets = qp.datasets.UCI_BINARY_DATASETS
 
     models = quantification_models()
     qp.util.parallel(run, itertools.product(optim_losses, datasets, models), n_jobs=N_JOBS)
diff --git a/quapy/data/datasets.py b/quapy/data/datasets.py
index 32edb78..31ba270 100644
--- a/quapy/data/datasets.py
+++ b/quapy/data/datasets.py
@@ -20,29 +20,29 @@ TWITTER_SENTIMENT_DATASETS_TEST = ['gasp', 'hcr', 'omd', 'sanders',
 TWITTER_SENTIMENT_DATASETS_TRAIN = ['gasp', 'hcr', 'omd', 'sanders',
                                  'semeval', 'semeval16',
                                  'sst', 'wa', 'wb']
-UCI_DATASETS = ['acute.a', 'acute.b',
+UCI_BINARY_DATASETS = ['acute.a', 'acute.b',
                 'balance.1', 'balance.2', 'balance.3',
                 'breast-cancer',
                 'cmc.1', 'cmc.2', 'cmc.3',
                 'ctg.1', 'ctg.2', 'ctg.3',
-                #'diabetes', # <-- I haven't found this one...
+                       #'diabetes', # <-- I haven't found this one...
                 'german',
                 'haberman',
                 'ionosphere',
                 'iris.1', 'iris.2', 'iris.3',
                 'mammographic',
-                'pageblocks.5',
-                #'phoneme', # <-- I haven't found this one...
-                'semeion',
-                'sonar',
-                'spambase',
-                'spectf',
-                'tictactoe',
-                'transfusion',
-                'wdbc',
-                'wine.1', 'wine.2', 'wine.3',
-                'wine-q-red', 'wine-q-white',
-                'yeast']
+                       'pageblocks.5',
+                       #'phoneme', # <-- I haven't found this one...
+                       'semeion',
+                       'sonar',
+                       'spambase',
+                       'spectf',
+                       'tictactoe',
+                       'transfusion',
+                       'wdbc',
+                       'wine.1', 'wine.2', 'wine.3',
+                       'wine-q-red', 'wine-q-white',
+                       'yeast']
 
 UCI_MULTICLASS_DATASETS = ['dry-bean',
                            'wine-quality',
@@ -187,7 +187,7 @@ def fetch_twitter(dataset_name, for_model_selection=False, min_df=None, data_hom
     return data
 
 
-def fetch_UCIDataset(dataset_name, data_home=None, test_split=0.3, verbose=False) -> Dataset:
+def fetch_UCIBinaryDataset(dataset_name, data_home=None, test_split=0.3, verbose=False) -> Dataset:
     """
     Loads a UCI dataset as an instance of :class:`quapy.data.base.Dataset`, as used in
     `Pérez-Gállego, P., Quevedo, J. R., & del Coz, J. J. (2017).
@@ -208,11 +208,11 @@ def fetch_UCIDataset(dataset_name, data_home=None, test_split=0.3, verbose=False
     :param verbose: set to True (default is False) to get information (from the UCI ML repository) about the datasets
     :return: a :class:`quapy.data.base.Dataset` instance
     """
-    data = fetch_UCILabelledCollection(dataset_name, data_home, verbose)
+    data = fetch_UCIBinaryLabelledCollection(dataset_name, data_home, verbose)
     return Dataset(*data.split_stratified(1 - test_split, random_state=0))
 
 
-def fetch_UCILabelledCollection(dataset_name, data_home=None, verbose=False) -> LabelledCollection:
+def fetch_UCIBinaryLabelledCollection(dataset_name, data_home=None, verbose=False) -> LabelledCollection:
     """
     Loads a UCI collection as an instance of :class:`quapy.data.base.LabelledCollection`, as used in
     `Pérez-Gállego, P., Quevedo, J. R., & del Coz, J. J. (2017).
@@ -227,8 +227,8 @@ def fetch_UCILabelledCollection(dataset_name, data_home=None, verbose=False) ->
     This can be reproduced by using :meth:`quapy.data.base.Dataset.kFCV`, e.g.:
 
     >>> import quapy as qp
-    >>> collection = qp.datasets.fetch_UCILabelledCollection("yeast")
-    >>> for data in qp.domains.Dataset.kFCV(collection, nfolds=5, nrepeats=2):
+    >>> collection = qp.datasets.fetch_UCIBinaryLabelledCollection("yeast")
+    >>> for data in qp.train.Dataset.kFCV(collection, nfolds=5, nrepeats=2):
     >>>     ...
 
     The list of valid dataset names can be accessed in `quapy.data.datasets.UCI_DATASETS`
@@ -241,9 +241,9 @@ def fetch_UCILabelledCollection(dataset_name, data_home=None, verbose=False) ->
     :return: a :class:`quapy.data.base.LabelledCollection` instance
     """
 
-    assert dataset_name in UCI_DATASETS, \
+    assert dataset_name in UCI_BINARY_DATASETS, \
         f'Name {dataset_name} does not match any known dataset from the UCI Machine Learning datasets repository. ' \
-        f'Valid ones are {UCI_DATASETS}'
+        f'Valid ones are {UCI_BINARY_DATASETS}'
     if data_home is None:
         data_home = get_quapy_home()
 
diff --git a/quapy/method/_kdey.py b/quapy/method/_kdey.py
index c066ec8..e55a699 100644
--- a/quapy/method/_kdey.py
+++ b/quapy/method/_kdey.py
@@ -20,25 +20,92 @@ class KDEBase:
 
     @classmethod
     def _check_bandwidth(cls, bandwidth):
+        """
+        Checks that the bandwidth parameter is correct
+
+        :param bandwidth: either a string (see BANDWIDTH_METHOD) or a float
+        :return: nothing, but raises an exception for invalid values
+        """
         assert bandwidth in KDEBase.BANDWIDTH_METHOD or isinstance(bandwidth, float), \
             f'invalid bandwidth, valid ones are {KDEBase.BANDWIDTH_METHOD} or float values'
         if isinstance(bandwidth, float):
             assert 0 < bandwidth < 1,  "the bandwith for KDEy should be in (0,1), since this method models the unit simplex"
 
     def get_kde_function(self, X, bandwidth):
+        """
+        Wraps the KDE function from scikit-learn.
+
+        :param X: data for which the density function is to be estimated
+        :param bandwidth: the bandwidth of the kernel
+        :return: a scikit-learn's KernelDensity object
+        """
         return KernelDensity(bandwidth=bandwidth).fit(X)
 
     def pdf(self, kde, X):
+        """
+        Wraps the density evalution of scikit-learn's KDE. Scikit-learn returns log-scores (s), so this
+        function returns :math:`e^{s}`
+
+        :param kde: a previously fit KDE function
+        :param X: the data for which the density is to be estimated
+        :return: np.ndarray with the densities
+        """
         return np.exp(kde.score_samples(X))
 
     def get_mixture_components(self, X, y, n_classes, bandwidth):
+        """
+        Returns an array containing the mixture components, i.e., the KDE functions for each class.
+
+        :param X: the data containing the covariates
+        :param y: the class labels
+        :param n_classes: integer, the number of classes
+        :param bandwidth: float, the bandwidth of the kernel
+        :return: a list of KernelDensity objects, each fitted with the corresponding class-specific covariates
+        """
         return [self.get_kde_function(X[y == cat], bandwidth) for cat in range(n_classes)]
 
 
 
 class KDEyML(AggregativeSoftQuantifier, KDEBase):
+    """
+    Kernel Density Estimation model for quantification (KDEy) relying on the Kullback-Leibler divergence (KLD) as
+    the divergence measure to be minimized. This method was first proposed in the paper
+    `Kernel Density Estimation for Multiclass Quantification <https://arxiv.org/abs/2401.00490>`_, in which
+    the authors show that minimizing the distribution mathing criterion for KLD is akin to performing
+    maximum likelihood (ML).
 
-    def __init__(self, classifier: BaseEstimator, val_split=10, bandwidth=0.1, n_jobs=None, random_state=0):
+    The distribution matching optimization problem comes down to solving:
+
+    :math:`\\hat{\\alpha} = \\arg\\min_{\\alpha\\in\\Delta^{n-1}} \\mathcal{D}(\\boldsymbol{p}_{\\alpha}||q_{\\widetilde{U}})`
+
+    where :math:`p_{\\alpha}` is the mixture of class-specific KDEs with mixture parameter (hence class prevalence)
+    :math:`\\alpha` defined by
+
+    :math:`\\boldsymbol{p}_{\\alpha}(\\widetilde{x}) = \\sum_{i=1}^n \\alpha_i p_{\\widetilde{L}_i}(\\widetilde{x})`
+
+    where :math:`p_X(\\boldsymbol{x}) = \\frac{1}{|X|} \\sum_{x_i\\in X} K\\left(\\frac{x-x_i}{h}\\right)` is the
+    KDE function that uses the datapoints in X as the kernel centers.
+
+    In KDEy-ML, the divergence is taken to be the Kullback-Leibler Divergence. This is equivalent to solving:
+    :math:`\\hat{\\alpha} = \\arg\\min_{\\alpha\\in\\Delta^{n-1}} -
+    \\mathbb{E}_{q_{\\widetilde{U}}} \\left[ \\log \\boldsymbol{p}_{\\alpha}(\\widetilde{x}) \\right]`
+
+    which corresponds to the maximum likelihood estimate.
+
+    :param classifier: a sklearn's Estimator that generates a binary classifier.
+    :param val_split: specifies the data used for generating classifier predictions. This specification
+        can be made as float in (0, 1) indicating the proportion of stratified held-out validation set to
+        be extracted from the training set; or as an integer (default 5), indicating that the predictions
+        are to be generated in a `k`-fold cross-validation manner (with this integer indicating the value
+        for `k`); or as a collection defining the specific set of data to use for validation.
+        Alternatively, this set can be specified at fit time by indicating the exact set of data
+        on which the predictions are to be generated.
+    :param bandwidth: float, the bandwidth of the Kernel
+    :param n_jobs: number of parallel workers
+    :param random_state: a seed to be set before fitting any base quantifier (default None)
+    """
+
+    def __init__(self, classifier: BaseEstimator, val_split=10, bandwidth=0.1, n_jobs=None, random_state=None):
         self._check_bandwidth(bandwidth)
         self.classifier = classifier
         self.val_split = val_split
@@ -72,9 +139,52 @@ class KDEyML(AggregativeSoftQuantifier, KDEBase):
 
 
 class KDEyHD(AggregativeSoftQuantifier, KDEBase):
+    """
+    Kernel Density Estimation model for quantification (KDEy) relying on the squared Hellinger Disntace (HD) as
+    the divergence measure to be minimized. This method was first proposed in the paper
+    `Kernel Density Estimation for Multiclass Quantification <https://arxiv.org/abs/2401.00490>`_, in which
+    the authors proposed a Monte Carlo approach for minimizing the divergence.
+
+    The distribution matching optimization problem comes down to solving:
+
+    :math:`\\hat{\\alpha} = \\arg\\min_{\\alpha\\in\\Delta^{n-1}} \\mathcal{D}(\\boldsymbol{p}_{\\alpha}||q_{\\widetilde{U}})`
+
+    where :math:`p_{\\alpha}` is the mixture of class-specific KDEs with mixture parameter (hence class prevalence)
+    :math:`\\alpha` defined by
+
+    :math:`\\boldsymbol{p}_{\\alpha}(\\widetilde{x}) = \\sum_{i=1}^n \\alpha_i p_{\\widetilde{L}_i}(\\widetilde{x})`
+
+    where :math:`p_X(\\boldsymbol{x}) = \\frac{1}{|X|} \\sum_{x_i\\in X} K\\left(\\frac{x-x_i}{h}\\right)` is the
+    KDE function that uses the datapoints in X as the kernel centers.
+
+    In KDEy-HD, the divergence is taken to be the squared Hellinger Distance, an f-divergence with corresponding
+    f-generator function given by:
+
+    :math:`f(u)=(\\sqrt{u}-1)^2`
+
+    The authors proposed a Monte Carlo solution that relies on importance sampling:
+
+    :math:`\\hat{D}_f(p||q)= \\frac{1}{t} \\sum_{i=1}^t f\\left(\\frac{p(x_i)}{q(x_i)}\\right) \\frac{q(x_i)}{r(x_i)}`
+
+    where the datapoints (trials) :math:`x_1,\\ldots,x_t\\sim_{\\mathrm{iid}} r` with :math:`r`  the
+    uniform distribution.
+
+    :param classifier: a sklearn's Estimator that generates a binary classifier.
+    :param val_split: specifies the data used for generating classifier predictions. This specification
+        can be made as float in (0, 1) indicating the proportion of stratified held-out validation set to
+        be extracted from the training set; or as an integer (default 5), indicating that the predictions
+        are to be generated in a `k`-fold cross-validation manner (with this integer indicating the value
+        for `k`); or as a collection defining the specific set of data to use for validation.
+        Alternatively, this set can be specified at fit time by indicating the exact set of data
+        on which the predictions are to be generated.
+    :param bandwidth: float, the bandwidth of the Kernel
+    :param n_jobs: number of parallel workers
+    :param random_state: a seed to be set before fitting any base quantifier (default None)
+    :param montecarlo_trials: number of Monte Carlo trials (default 10000)
+    """
 
     def __init__(self, classifier: BaseEstimator, val_split=10, divergence: str='HD',
-                 bandwidth=0.1, n_jobs=None, random_state=0, montecarlo_trials=10000):
+                 bandwidth=0.1, n_jobs=None, random_state=None, montecarlo_trials=10000):
         
         self._check_bandwidth(bandwidth)
         self.classifier = classifier
@@ -130,14 +240,48 @@ class KDEyHD(AggregativeSoftQuantifier, KDEBase):
 
 
 class KDEyCS(AggregativeSoftQuantifier):
+    """
+    Kernel Density Estimation model for quantification (KDEy) relying on the Cauchy-Schwarz divergence (CS) as
+    the divergence measure to be minimized. This method was first proposed in the paper
+    `Kernel Density Estimation for Multiclass Quantification <https://arxiv.org/abs/2401.00490>`_, in which
+    the authors proposed a Monte Carlo approach for minimizing the divergence.
 
-    def __init__(self, classifier: BaseEstimator, val_split=10, bandwidth=0.1, n_jobs=None, random_state=0):
+    The distribution matching optimization problem comes down to solving:
+
+    :math:`\\hat{\\alpha} = \\arg\\min_{\\alpha\\in\\Delta^{n-1}} \\mathcal{D}(\\boldsymbol{p}_{\\alpha}||q_{\\widetilde{U}})`
+
+    where :math:`p_{\\alpha}` is the mixture of class-specific KDEs with mixture parameter (hence class prevalence)
+    :math:`\\alpha` defined by
+
+    :math:`\\boldsymbol{p}_{\\alpha}(\\widetilde{x}) = \\sum_{i=1}^n \\alpha_i p_{\\widetilde{L}_i}(\\widetilde{x})`
+
+    where :math:`p_X(\\boldsymbol{x}) = \\frac{1}{|X|} \\sum_{x_i\\in X} K\\left(\\frac{x-x_i}{h}\\right)` is the
+    KDE function that uses the datapoints in X as the kernel centers.
+
+    In KDEy-CS, the divergence is taken to be the Cauchy-Schwarz divergence given by:
+
+    :math:`\\mathcal{D}_{\\mathrm{CS}}(p||q)=-\\log\\left(\\frac{\\int p(x)q(x)dx}{\\sqrt{\\int p(x)^2dx \\int q(x)^2dx}}\\right)`
+
+    The authors showed that this distribution matching admits a closed-form solution
+
+    :param classifier: a sklearn's Estimator that generates a binary classifier.
+    :param val_split: specifies the data used for generating classifier predictions. This specification
+        can be made as float in (0, 1) indicating the proportion of stratified held-out validation set to
+        be extracted from the training set; or as an integer (default 5), indicating that the predictions
+        are to be generated in a `k`-fold cross-validation manner (with this integer indicating the value
+        for `k`); or as a collection defining the specific set of data to use for validation.
+        Alternatively, this set can be specified at fit time by indicating the exact set of data
+        on which the predictions are to be generated.
+    :param bandwidth: float, the bandwidth of the Kernel
+    :param n_jobs: number of parallel workers
+    """
+
+    def __init__(self, classifier: BaseEstimator, val_split=10, bandwidth=0.1, n_jobs=None):
         KDEBase._check_bandwidth(bandwidth)
         self.classifier = classifier
         self.val_split = val_split
         self.bandwidth = bandwidth
         self.n_jobs = n_jobs
-        self.random_state=random_state
 
     def gram_matrix_mix_sum(self, X, Y=None):
         # this adapts the output of the rbf_kernel function (pairwise evaluations of Gaussian kernels k(x,y))
diff --git a/quapy/method/_neural.py b/quapy/method/_neural.py
index 330ac60..11c2dc4 100644
--- a/quapy/method/_neural.py
+++ b/quapy/method/_neural.py
@@ -29,7 +29,7 @@ class QuaNetTrainer(BaseQuantifier):
     >>>
     >>> # load the kindle dataset as text, and convert words to numerical indexes
     >>> dataset = qp.datasets.fetch_reviews('kindle', pickle=True)
-    >>> qp.domains.preprocessing.index(dataset, min_df=5, inplace=True)
+    >>> qp.train.preprocessing.index(dataset, min_df=5, inplace=True)
     >>>
     >>> # the text classifier is a CNN trained by NeuralClassifierTrainer
     >>> cnn = CNNnet(dataset.vocabulary_size, dataset.n_classes)
diff --git a/quapy/method/aggregative.py b/quapy/method/aggregative.py
index e07213d..a831bcb 100644
--- a/quapy/method/aggregative.py
+++ b/quapy/method/aggregative.py
@@ -107,7 +107,7 @@ class AggregativeQuantifier(BaseQuantifier, ABC):
                     raise ValueError(f'proportion {predict_on=} out of range, must be in (0,1)')
                 train, val = data.split_stratified(train_prop=(1 - predict_on))
                 self.classifier.fit(*train.Xy)
-                predictions = LabelledCollection(self.classify(val.X), val.y, classes=data.classes_)
+                predictions = LabelledCollection(self.classify(val.Xtr), val.ytr, classes=data.classes_)
             else:
                 raise ValueError(f'wrong type for predict_on: since fit_classifier=False, '
                                  f'the set on which predictions have to be issued must be '
@@ -350,13 +350,13 @@ class ACC(AggregativeCrispQuantifier):
         on which the predictions are to be generated.
     :param n_jobs: number of parallel workers
     :param solver: indicates the method to be used for obtaining the final estimates. The choice
-        'exact' comes down to solving the system of linear equations `Ax=B` where `A` is a
+        'exact' comes down to solving the system of linear equations :math:`Ax=B` where `A` is a
         matrix containing the class-conditional probabilities of the predictions (e.g., the tpr and fpr in 
-        binary) and `B` is the vector of prevalence values estimated via CC, as $x=A^{-1}B$. This solution 
+        binary) and `B` is the vector of prevalence values estimated via CC, as :math:`x=A^{-1}B`. This solution
         might not exist for degenerated classifiers, in which case the method defaults to classify and count 
         (i.e., does not attempt any adjustment).
-        Another option is to search for the prevalence vector that minimizes the L2 norm of |Ax-B|. The latter is
-        achieved by indicating solver='minimize'. This one generally works better, and is the default parameter.
+        Another option is to search for the prevalence vector that minimizes the L2 norm of :math:`|Ax-B|`. The latter
+        is achieved by indicating solver='minimize'. This one generally works better, and is the default parameter.
         More details about this can be consulted in `Bunse, M. "On Multi-Class Extensions of Adjusted Classify and
         Count", on proceedings of the 2nd International Workshop on Learning to Quantify: Methods and Applications
         (LQ 2022), ECML/PKDD 2022, Grenoble (France) <https://lq-2022.github.io/proceedings/CompleteVolume.pdf>`_.
@@ -475,13 +475,13 @@ class PACC(AggregativeSoftQuantifier):
         on which the predictions are to be generated.
     :param n_jobs: number of parallel workers
     :param solver: indicates the method to be used for obtaining the final estimates. The choice
-        'exact' comes down to solving the system of linear equations `Ax=B` where `A` is a
+        'exact' comes down to solving the system of linear equations :math:`Ax=B` where `A` is a
         matrix containing the class-conditional probabilities of the predictions (e.g., the tpr and fpr in
-        binary) and `B` is the vector of prevalence values estimated via CC, as $x=A^{-1}B$. This solution
+        binary) and `B` is the vector of prevalence values estimated via CC, as :math:`x=A^{-1}B`. This solution
         might not exist for degenerated classifiers, in which case the method defaults to classify and count
         (i.e., does not attempt any adjustment).
-        Another option is to search for the prevalence vector that minimizes the L2 norm of |Ax-B|. The latter is
-        achieved by indicating solver='minimize'. This one generally works better, and is the default parameter.
+        Another option is to search for the prevalence vector that minimizes the L2 norm of :math:`|Ax-B|`. The latter
+        is achieved by indicating solver='minimize'. This one generally works better, and is the default parameter.
         More details about this can be consulted in `Bunse, M. "On Multi-Class Extensions of Adjusted Classify and
         Count", on proceedings of the 2nd International Workshop on Learning to Quantify: Methods and Applications
         (LQ 2022), ECML/PKDD 2022, Grenoble (France) <https://lq-2022.github.io/proceedings/CompleteVolume.pdf>`_.
diff --git a/quapy/model_selection.py b/quapy/model_selection.py
index 9baace9..e53e900 100644
--- a/quapy/model_selection.py
+++ b/quapy/model_selection.py
@@ -364,7 +364,7 @@ def cross_val_predict(quantifier: BaseQuantifier, data: LabelledCollection, nfol
 
     for train, test in data.kFCV(nfolds=nfolds, random_state=random_state):
         quantifier.fit(train)
-        fold_prev = quantifier.quantify(test.X)
+        fold_prev = quantifier.quantify(test.Xtr)
         rel_size = 1. * len(test) / len(data)
         total_prev += fold_prev*rel_size
 
diff --git a/quapy/tests/test_datasets.py b/quapy/tests/test_datasets.py
index e90a502..4ed5aa9 100644
--- a/quapy/tests/test_datasets.py
+++ b/quapy/tests/test_datasets.py
@@ -1,8 +1,8 @@
 import pytest
 
 from quapy.data.datasets import REVIEWS_SENTIMENT_DATASETS, TWITTER_SENTIMENT_DATASETS_TEST, \
-    TWITTER_SENTIMENT_DATASETS_TRAIN, UCI_DATASETS, LEQUA2022_TASKS, UCI_MULTICLASS_DATASETS,\
-    fetch_reviews, fetch_twitter, fetch_UCIDataset, fetch_lequa2022, fetch_UCIMulticlassLabelledCollection
+    TWITTER_SENTIMENT_DATASETS_TRAIN, UCI_BINARY_DATASETS, LEQUA2022_TASKS, UCI_MULTICLASS_DATASETS,\
+    fetch_reviews, fetch_twitter, fetch_UCIBinaryDataset, fetch_lequa2022, fetch_UCIMulticlassLabelledCollection
 
 
 @pytest.mark.parametrize('dataset_name', REVIEWS_SENTIMENT_DATASETS)
@@ -29,10 +29,10 @@ def test_fetch_twitter(dataset_name):
     print('Test set stats')
 
 
-@pytest.mark.parametrize('dataset_name', UCI_DATASETS)
+@pytest.mark.parametrize('dataset_name', UCI_BINARY_DATASETS)
 def test_fetch_UCIDataset(dataset_name):
     try:
-        dataset = fetch_UCIDataset(dataset_name)
+        dataset = fetch_UCIBinaryDataset(dataset_name)
     except FileNotFoundError as fnfe:
         if dataset_name == 'pageblocks.5' and fnfe.args[0].find(
                 'If this is the first time you attempt to load this dataset') > 0:
diff --git a/quapy/tests/test_methods.py b/quapy/tests/test_methods.py
index 2139e8d..3fbe991 100644
--- a/quapy/tests/test_methods.py
+++ b/quapy/tests/test_methods.py
@@ -18,7 +18,7 @@ from quapy.method.meta import MedianEstimator
 #             pytest.param(qp.datasets.fetch_UCIDataset('ionosphere'), id='ionosphere')]
 
 tinydatasets = [pytest.param(qp.datasets.fetch_twitter('hcr', pickle=True).reduce(), id='tiny_hcr'),
-            pytest.param(qp.datasets.fetch_UCIDataset('ionosphere').reduce(), id='tiny_ionosphere')]
+                pytest.param(qp.datasets.fetch_UCIBinaryDataset('ionosphere').reduce(), id='tiny_ionosphere')]
 
 learners = [LogisticRegression, LinearSVC]
 
diff --git a/quapy/tests/test_replicability.py b/quapy/tests/test_replicability.py
index 871f519..3ec1bbb 100644
--- a/quapy/tests/test_replicability.py
+++ b/quapy/tests/test_replicability.py
@@ -12,7 +12,7 @@ class MyTestCase(unittest.TestCase):
 
     def test_prediction_replicability(self):
 
-        dataset = qp.datasets.fetch_UCIDataset('yeast')
+        dataset = qp.datasets.fetch_UCIBinaryDataset('yeast')
 
         with qp.util.temp_seed(0):
             lr = LogisticRegression(random_state=0, max_iter=10000)
@@ -32,8 +32,8 @@ class MyTestCase(unittest.TestCase):
     def test_samping_replicability(self):
 
         def equal_collections(c1, c2, value=True):
-            self.assertEqual(np.all(c1.X == c2.X), value)
-            self.assertEqual(np.all(c1.y == c2.y), value)
+            self.assertEqual(np.all(c1.Xtr == c2.Xtr), value)
+            self.assertEqual(np.all(c1.ytr == c2.ytr), value)
             if value:
                 self.assertEqual(np.all(c1.classes_ == c2.classes_), value)
 
diff --git a/quapy/util.py b/quapy/util.py
index de5c131..dfaef57 100644
--- a/quapy/util.py
+++ b/quapy/util.py
@@ -24,7 +24,7 @@ def _get_parallel_slices(n_tasks, n_jobs):
 
 def map_parallel(func, args, n_jobs):
     """
-    Applies func to n_jobs slices of args. E.g., if args is an array of 99 items and `n_jobs`=2, then
+    Applies func to n_jobs slices of args. E.g., if args is an array of 99 items and n_jobs=2, then
     func is applied in two parallel processes to args[0:50] and to args[50:99]. func is a function
     that already works with a list of arguments.
 
@@ -49,7 +49,13 @@ def parallel(func, args, n_jobs, seed=None, asarray=True, backend='loky'):
     >>> )
 
     that takes the `quapy.environ` variable as input silently.
-    Seeds the child processes to ensure reproducibility when n_jobs>1
+    Seeds the child processes to ensure reproducibility when n_jobs>1.
+
+    :param func: callable
+    :param args: args of func
+    :param seed: the numeric seed
+    :param asarray: set to True to return a np.ndarray instead of a list
+    :param backend: indicates the backend used for handling parallel works
     """
     def func_dec(environ, seed, *args):
         qp.environ = environ.copy()