forked from moreo/QuaPy
adding documentation and adding one new example
This commit is contained in:
parent
ceb88792c5
commit
2485117f05
|
@ -2,23 +2,26 @@
|
||||||
|
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
|
|
||||||
<html>
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||||
<title>Datasets — QuaPy 0.1.6 documentation</title>
|
|
||||||
|
<title>Datasets — QuaPy 0.1.7 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/bizstyle.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 data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
<script src="_static/jquery.js"></script>
|
<script src="_static/jquery.js"></script>
|
||||||
<script src="_static/underscore.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/doctools.js"></script>
|
||||||
|
<script src="_static/sphinx_highlight.js"></script>
|
||||||
<script src="_static/bizstyle.js"></script>
|
<script src="_static/bizstyle.js"></script>
|
||||||
<link rel="index" title="Index" href="genindex.html" />
|
<link rel="index" title="Index" href="genindex.html" />
|
||||||
<link rel="search" title="Search" href="search.html" />
|
<link rel="search" title="Search" href="search.html" />
|
||||||
<link rel="next" title="quapy" href="modules.html" />
|
<link rel="next" title="Evaluation" href="Evaluation.html" />
|
||||||
<link rel="prev" title="Getting Started" href="readme.html" />
|
<link rel="prev" title="Installation" href="Installation.html" />
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
|
||||||
<!--[if lt IE 9]>
|
<!--[if lt IE 9]>
|
||||||
<script src="_static/css3-mediaqueries.js"></script>
|
<script src="_static/css3-mediaqueries.js"></script>
|
||||||
|
@ -34,12 +37,12 @@
|
||||||
<a href="py-modindex.html" title="Python Module Index"
|
<a href="py-modindex.html" title="Python Module Index"
|
||||||
>modules</a> |</li>
|
>modules</a> |</li>
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="modules.html" title="quapy"
|
<a href="Evaluation.html" title="Evaluation"
|
||||||
accesskey="N">next</a> |</li>
|
accesskey="N">next</a> |</li>
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="readme.html" title="Getting Started"
|
<a href="Installation.html" title="Installation"
|
||||||
accesskey="P">previous</a> |</li>
|
accesskey="P">previous</a> |</li>
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.6 documentation</a> »</li>
|
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> »</li>
|
||||||
<li class="nav-item nav-item-this"><a href="">Datasets</a></li>
|
<li class="nav-item nav-item-this"><a href="">Datasets</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -49,8 +52,8 @@
|
||||||
<div class="bodywrapper">
|
<div class="bodywrapper">
|
||||||
<div class="body" role="main">
|
<div class="body" role="main">
|
||||||
|
|
||||||
<div class="tex2jax_ignore mathjax_ignore section" id="datasets">
|
<section id="datasets">
|
||||||
<h1>Datasets<a class="headerlink" href="#datasets" title="Permalink to this headline">¶</a></h1>
|
<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
|
<p>QuaPy makes available several datasets that have been used in
|
||||||
quantification literature, as well as an interface to allow
|
quantification literature, as well as an interface to allow
|
||||||
anyone import their custom datasets.</p>
|
anyone import their custom datasets.</p>
|
||||||
|
@ -129,8 +132,8 @@ that is:</p>
|
||||||
<p>See the <a class="reference external" href="https://github.com/HLT-ISTI/QuaPy/wiki/Evaluation">Evaluation wiki</a> for
|
<p>See the <a class="reference external" href="https://github.com/HLT-ISTI/QuaPy/wiki/Evaluation">Evaluation wiki</a> for
|
||||||
further details on how to use the artificial sampling protocol to properly
|
further details on how to use the artificial sampling protocol to properly
|
||||||
evaluate a quantification method.</p>
|
evaluate a quantification method.</p>
|
||||||
<div class="section" id="reviews-datasets">
|
<section id="reviews-datasets">
|
||||||
<h2>Reviews Datasets<a class="headerlink" href="#reviews-datasets" title="Permalink to this headline">¶</a></h2>
|
<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
|
<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.
|
the well-known IMDb movie reviews can be fetched using a unified interface.
|
||||||
For example:</p>
|
For example:</p>
|
||||||
|
@ -150,47 +153,47 @@ For example:</p>
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
<p>Some statistics of the fhe available datasets are summarized below:</p>
|
<p>Some statistics of the fhe available datasets are summarized below:</p>
|
||||||
<table class="colwidths-auto docutils align-default">
|
<table class="docutils align-default">
|
||||||
<thead>
|
<thead>
|
||||||
<tr class="row-odd"><th class="head"><p>Dataset</p></th>
|
<tr class="row-odd"><th class="head"><p>Dataset</p></th>
|
||||||
<th class="text-align:center head"><p>classes</p></th>
|
<th class="head text-center"><p>classes</p></th>
|
||||||
<th class="text-align:center head"><p>train size</p></th>
|
<th class="head text-center"><p>train size</p></th>
|
||||||
<th class="text-align:center head"><p>test size</p></th>
|
<th class="head text-center"><p>test size</p></th>
|
||||||
<th class="text-align:center head"><p>train prev</p></th>
|
<th class="head text-center"><p>train prev</p></th>
|
||||||
<th class="text-align:center head"><p>test prev</p></th>
|
<th class="head text-center"><p>test prev</p></th>
|
||||||
<th class="head"><p>type</p></th>
|
<th class="head"><p>type</p></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr class="row-even"><td><p>hp</p></td>
|
<tr class="row-even"><td><p>hp</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>9533</p></td>
|
<td class="text-center"><p>9533</p></td>
|
||||||
<td class="text-align:center"><p>18399</p></td>
|
<td class="text-center"><p>18399</p></td>
|
||||||
<td class="text-align:center"><p>[0.018, 0.982]</p></td>
|
<td class="text-center"><p>[0.018, 0.982]</p></td>
|
||||||
<td class="text-align:center"><p>[0.065, 0.935]</p></td>
|
<td class="text-center"><p>[0.065, 0.935]</p></td>
|
||||||
<td><p>text</p></td>
|
<td><p>text</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-odd"><td><p>kindle</p></td>
|
<tr class="row-odd"><td><p>kindle</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>3821</p></td>
|
<td class="text-center"><p>3821</p></td>
|
||||||
<td class="text-align:center"><p>21591</p></td>
|
<td class="text-center"><p>21591</p></td>
|
||||||
<td class="text-align:center"><p>[0.081, 0.919]</p></td>
|
<td class="text-center"><p>[0.081, 0.919]</p></td>
|
||||||
<td class="text-align:center"><p>[0.063, 0.937]</p></td>
|
<td class="text-center"><p>[0.063, 0.937]</p></td>
|
||||||
<td><p>text</p></td>
|
<td><p>text</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-even"><td><p>imdb</p></td>
|
<tr class="row-even"><td><p>imdb</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>25000</p></td>
|
<td class="text-center"><p>25000</p></td>
|
||||||
<td class="text-align:center"><p>25000</p></td>
|
<td class="text-center"><p>25000</p></td>
|
||||||
<td class="text-align:center"><p>[0.500, 0.500]</p></td>
|
<td class="text-center"><p>[0.500, 0.500]</p></td>
|
||||||
<td class="text-align:center"><p>[0.500, 0.500]</p></td>
|
<td class="text-center"><p>[0.500, 0.500]</p></td>
|
||||||
<td><p>text</p></td>
|
<td><p>text</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</section>
|
||||||
<div class="section" id="twitter-sentiment-datasets">
|
<section id="twitter-sentiment-datasets">
|
||||||
<h2>Twitter Sentiment Datasets<a class="headerlink" href="#twitter-sentiment-datasets" title="Permalink to this headline">¶</a></h2>
|
<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.
|
<p>11 Twitter datasets for sentiment analysis.
|
||||||
Text is not accessible, and the documents were made available
|
Text is not accessible, and the documents were made available
|
||||||
in tf-idf format. Each dataset presents two splits: a train/val
|
in tf-idf format. Each dataset presents two splits: a train/val
|
||||||
|
@ -221,123 +224,123 @@ The lists of the Twitter dataset’s ids can be consulted in:</p>
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
<p>Some details can be found below:</p>
|
<p>Some details can be found below:</p>
|
||||||
<table class="colwidths-auto docutils align-default">
|
<table class="docutils align-default">
|
||||||
<thead>
|
<thead>
|
||||||
<tr class="row-odd"><th class="head"><p>Dataset</p></th>
|
<tr class="row-odd"><th class="head"><p>Dataset</p></th>
|
||||||
<th class="text-align:center head"><p>classes</p></th>
|
<th class="head text-center"><p>classes</p></th>
|
||||||
<th class="text-align:center head"><p>train size</p></th>
|
<th class="head text-center"><p>train size</p></th>
|
||||||
<th class="text-align:center head"><p>test size</p></th>
|
<th class="head text-center"><p>test size</p></th>
|
||||||
<th class="text-align:center head"><p>features</p></th>
|
<th class="head text-center"><p>features</p></th>
|
||||||
<th class="text-align:center head"><p>train prev</p></th>
|
<th class="head text-center"><p>train prev</p></th>
|
||||||
<th class="text-align:center head"><p>test prev</p></th>
|
<th class="head text-center"><p>test prev</p></th>
|
||||||
<th class="head"><p>type</p></th>
|
<th class="head"><p>type</p></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr class="row-even"><td><p>gasp</p></td>
|
<tr class="row-even"><td><p>gasp</p></td>
|
||||||
<td class="text-align:center"><p>3</p></td>
|
<td class="text-center"><p>3</p></td>
|
||||||
<td class="text-align:center"><p>8788</p></td>
|
<td class="text-center"><p>8788</p></td>
|
||||||
<td class="text-align:center"><p>3765</p></td>
|
<td class="text-center"><p>3765</p></td>
|
||||||
<td class="text-align:center"><p>694582</p></td>
|
<td class="text-center"><p>694582</p></td>
|
||||||
<td class="text-align:center"><p>[0.421, 0.496, 0.082]</p></td>
|
<td class="text-center"><p>[0.421, 0.496, 0.082]</p></td>
|
||||||
<td class="text-align:center"><p>[0.407, 0.507, 0.086]</p></td>
|
<td class="text-center"><p>[0.407, 0.507, 0.086]</p></td>
|
||||||
<td><p>sparse</p></td>
|
<td><p>sparse</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-odd"><td><p>hcr</p></td>
|
<tr class="row-odd"><td><p>hcr</p></td>
|
||||||
<td class="text-align:center"><p>3</p></td>
|
<td class="text-center"><p>3</p></td>
|
||||||
<td class="text-align:center"><p>1594</p></td>
|
<td class="text-center"><p>1594</p></td>
|
||||||
<td class="text-align:center"><p>798</p></td>
|
<td class="text-center"><p>798</p></td>
|
||||||
<td class="text-align:center"><p>222046</p></td>
|
<td class="text-center"><p>222046</p></td>
|
||||||
<td class="text-align:center"><p>[0.546, 0.211, 0.243]</p></td>
|
<td class="text-center"><p>[0.546, 0.211, 0.243]</p></td>
|
||||||
<td class="text-align:center"><p>[0.640, 0.167, 0.193]</p></td>
|
<td class="text-center"><p>[0.640, 0.167, 0.193]</p></td>
|
||||||
<td><p>sparse</p></td>
|
<td><p>sparse</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-even"><td><p>omd</p></td>
|
<tr class="row-even"><td><p>omd</p></td>
|
||||||
<td class="text-align:center"><p>3</p></td>
|
<td class="text-center"><p>3</p></td>
|
||||||
<td class="text-align:center"><p>1839</p></td>
|
<td class="text-center"><p>1839</p></td>
|
||||||
<td class="text-align:center"><p>787</p></td>
|
<td class="text-center"><p>787</p></td>
|
||||||
<td class="text-align:center"><p>199151</p></td>
|
<td class="text-center"><p>199151</p></td>
|
||||||
<td class="text-align:center"><p>[0.463, 0.271, 0.266]</p></td>
|
<td class="text-center"><p>[0.463, 0.271, 0.266]</p></td>
|
||||||
<td class="text-align:center"><p>[0.437, 0.283, 0.280]</p></td>
|
<td class="text-center"><p>[0.437, 0.283, 0.280]</p></td>
|
||||||
<td><p>sparse</p></td>
|
<td><p>sparse</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-odd"><td><p>sanders</p></td>
|
<tr class="row-odd"><td><p>sanders</p></td>
|
||||||
<td class="text-align:center"><p>3</p></td>
|
<td class="text-center"><p>3</p></td>
|
||||||
<td class="text-align:center"><p>2155</p></td>
|
<td class="text-center"><p>2155</p></td>
|
||||||
<td class="text-align:center"><p>923</p></td>
|
<td class="text-center"><p>923</p></td>
|
||||||
<td class="text-align:center"><p>229399</p></td>
|
<td class="text-center"><p>229399</p></td>
|
||||||
<td class="text-align:center"><p>[0.161, 0.691, 0.148]</p></td>
|
<td class="text-center"><p>[0.161, 0.691, 0.148]</p></td>
|
||||||
<td class="text-align:center"><p>[0.164, 0.688, 0.148]</p></td>
|
<td class="text-center"><p>[0.164, 0.688, 0.148]</p></td>
|
||||||
<td><p>sparse</p></td>
|
<td><p>sparse</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-even"><td><p>semeval13</p></td>
|
<tr class="row-even"><td><p>semeval13</p></td>
|
||||||
<td class="text-align:center"><p>3</p></td>
|
<td class="text-center"><p>3</p></td>
|
||||||
<td class="text-align:center"><p>11338</p></td>
|
<td class="text-center"><p>11338</p></td>
|
||||||
<td class="text-align:center"><p>3813</p></td>
|
<td class="text-center"><p>3813</p></td>
|
||||||
<td class="text-align:center"><p>1215742</p></td>
|
<td class="text-center"><p>1215742</p></td>
|
||||||
<td class="text-align:center"><p>[0.159, 0.470, 0.372]</p></td>
|
<td class="text-center"><p>[0.159, 0.470, 0.372]</p></td>
|
||||||
<td class="text-align:center"><p>[0.158, 0.430, 0.412]</p></td>
|
<td class="text-center"><p>[0.158, 0.430, 0.412]</p></td>
|
||||||
<td><p>sparse</p></td>
|
<td><p>sparse</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-odd"><td><p>semeval14</p></td>
|
<tr class="row-odd"><td><p>semeval14</p></td>
|
||||||
<td class="text-align:center"><p>3</p></td>
|
<td class="text-center"><p>3</p></td>
|
||||||
<td class="text-align:center"><p>11338</p></td>
|
<td class="text-center"><p>11338</p></td>
|
||||||
<td class="text-align:center"><p>1853</p></td>
|
<td class="text-center"><p>1853</p></td>
|
||||||
<td class="text-align:center"><p>1215742</p></td>
|
<td class="text-center"><p>1215742</p></td>
|
||||||
<td class="text-align:center"><p>[0.159, 0.470, 0.372]</p></td>
|
<td class="text-center"><p>[0.159, 0.470, 0.372]</p></td>
|
||||||
<td class="text-align:center"><p>[0.109, 0.361, 0.530]</p></td>
|
<td class="text-center"><p>[0.109, 0.361, 0.530]</p></td>
|
||||||
<td><p>sparse</p></td>
|
<td><p>sparse</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-even"><td><p>semeval15</p></td>
|
<tr class="row-even"><td><p>semeval15</p></td>
|
||||||
<td class="text-align:center"><p>3</p></td>
|
<td class="text-center"><p>3</p></td>
|
||||||
<td class="text-align:center"><p>11338</p></td>
|
<td class="text-center"><p>11338</p></td>
|
||||||
<td class="text-align:center"><p>2390</p></td>
|
<td class="text-center"><p>2390</p></td>
|
||||||
<td class="text-align:center"><p>1215742</p></td>
|
<td class="text-center"><p>1215742</p></td>
|
||||||
<td class="text-align:center"><p>[0.159, 0.470, 0.372]</p></td>
|
<td class="text-center"><p>[0.159, 0.470, 0.372]</p></td>
|
||||||
<td class="text-align:center"><p>[0.153, 0.413, 0.434]</p></td>
|
<td class="text-center"><p>[0.153, 0.413, 0.434]</p></td>
|
||||||
<td><p>sparse</p></td>
|
<td><p>sparse</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-odd"><td><p>semeval16</p></td>
|
<tr class="row-odd"><td><p>semeval16</p></td>
|
||||||
<td class="text-align:center"><p>3</p></td>
|
<td class="text-center"><p>3</p></td>
|
||||||
<td class="text-align:center"><p>8000</p></td>
|
<td class="text-center"><p>8000</p></td>
|
||||||
<td class="text-align:center"><p>2000</p></td>
|
<td class="text-center"><p>2000</p></td>
|
||||||
<td class="text-align:center"><p>889504</p></td>
|
<td class="text-center"><p>889504</p></td>
|
||||||
<td class="text-align:center"><p>[0.157, 0.351, 0.492]</p></td>
|
<td class="text-center"><p>[0.157, 0.351, 0.492]</p></td>
|
||||||
<td class="text-align:center"><p>[0.163, 0.341, 0.497]</p></td>
|
<td class="text-center"><p>[0.163, 0.341, 0.497]</p></td>
|
||||||
<td><p>sparse</p></td>
|
<td><p>sparse</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-even"><td><p>sst</p></td>
|
<tr class="row-even"><td><p>sst</p></td>
|
||||||
<td class="text-align:center"><p>3</p></td>
|
<td class="text-center"><p>3</p></td>
|
||||||
<td class="text-align:center"><p>2971</p></td>
|
<td class="text-center"><p>2971</p></td>
|
||||||
<td class="text-align:center"><p>1271</p></td>
|
<td class="text-center"><p>1271</p></td>
|
||||||
<td class="text-align:center"><p>376132</p></td>
|
<td class="text-center"><p>376132</p></td>
|
||||||
<td class="text-align:center"><p>[0.261, 0.452, 0.288]</p></td>
|
<td class="text-center"><p>[0.261, 0.452, 0.288]</p></td>
|
||||||
<td class="text-align:center"><p>[0.207, 0.481, 0.312]</p></td>
|
<td class="text-center"><p>[0.207, 0.481, 0.312]</p></td>
|
||||||
<td><p>sparse</p></td>
|
<td><p>sparse</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-odd"><td><p>wa</p></td>
|
<tr class="row-odd"><td><p>wa</p></td>
|
||||||
<td class="text-align:center"><p>3</p></td>
|
<td class="text-center"><p>3</p></td>
|
||||||
<td class="text-align:center"><p>2184</p></td>
|
<td class="text-center"><p>2184</p></td>
|
||||||
<td class="text-align:center"><p>936</p></td>
|
<td class="text-center"><p>936</p></td>
|
||||||
<td class="text-align:center"><p>248563</p></td>
|
<td class="text-center"><p>248563</p></td>
|
||||||
<td class="text-align:center"><p>[0.305, 0.414, 0.281]</p></td>
|
<td class="text-center"><p>[0.305, 0.414, 0.281]</p></td>
|
||||||
<td class="text-align:center"><p>[0.282, 0.446, 0.272]</p></td>
|
<td class="text-center"><p>[0.282, 0.446, 0.272]</p></td>
|
||||||
<td><p>sparse</p></td>
|
<td><p>sparse</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-even"><td><p>wb</p></td>
|
<tr class="row-even"><td><p>wb</p></td>
|
||||||
<td class="text-align:center"><p>3</p></td>
|
<td class="text-center"><p>3</p></td>
|
||||||
<td class="text-align:center"><p>4259</p></td>
|
<td class="text-center"><p>4259</p></td>
|
||||||
<td class="text-align:center"><p>1823</p></td>
|
<td class="text-center"><p>1823</p></td>
|
||||||
<td class="text-align:center"><p>404333</p></td>
|
<td class="text-center"><p>404333</p></td>
|
||||||
<td class="text-align:center"><p>[0.270, 0.392, 0.337]</p></td>
|
<td class="text-center"><p>[0.270, 0.392, 0.337]</p></td>
|
||||||
<td class="text-align:center"><p>[0.274, 0.392, 0.335]</p></td>
|
<td class="text-center"><p>[0.274, 0.392, 0.335]</p></td>
|
||||||
<td><p>sparse</p></td>
|
<td><p>sparse</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</section>
|
||||||
<div class="section" id="uci-machine-learning">
|
<section id="uci-machine-learning">
|
||||||
<h2>UCI Machine Learning<a class="headerlink" href="#uci-machine-learning" title="Permalink to this headline">¶</a></h2>
|
<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>
|
<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>
|
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">&</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>
|
<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">&</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>
|
||||||
|
@ -371,252 +374,252 @@ training+test dataset at a time, following a kFCV protocol:</p>
|
||||||
<p>Above code will allow to conduct a 2x5FCV evaluation on the “yeast” dataset.</p>
|
<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
|
<p>All datasets come in numerical form (dense matrices); some statistics
|
||||||
are summarized below.</p>
|
are summarized below.</p>
|
||||||
<table class="colwidths-auto docutils align-default">
|
<table class="docutils align-default">
|
||||||
<thead>
|
<thead>
|
||||||
<tr class="row-odd"><th class="head"><p>Dataset</p></th>
|
<tr class="row-odd"><th class="head"><p>Dataset</p></th>
|
||||||
<th class="text-align:center head"><p>classes</p></th>
|
<th class="head text-center"><p>classes</p></th>
|
||||||
<th class="text-align:center head"><p>instances</p></th>
|
<th class="head text-center"><p>instances</p></th>
|
||||||
<th class="text-align:center head"><p>features</p></th>
|
<th class="head text-center"><p>features</p></th>
|
||||||
<th class="text-align:center head"><p>prev</p></th>
|
<th class="head text-center"><p>prev</p></th>
|
||||||
<th class="head"><p>type</p></th>
|
<th class="head"><p>type</p></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr class="row-even"><td><p>acute.a</p></td>
|
<tr class="row-even"><td><p>acute.a</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>120</p></td>
|
<td class="text-center"><p>120</p></td>
|
||||||
<td class="text-align:center"><p>6</p></td>
|
<td class="text-center"><p>6</p></td>
|
||||||
<td class="text-align:center"><p>[0.508, 0.492]</p></td>
|
<td class="text-center"><p>[0.508, 0.492]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-odd"><td><p>acute.b</p></td>
|
<tr class="row-odd"><td><p>acute.b</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>120</p></td>
|
<td class="text-center"><p>120</p></td>
|
||||||
<td class="text-align:center"><p>6</p></td>
|
<td class="text-center"><p>6</p></td>
|
||||||
<td class="text-align:center"><p>[0.583, 0.417]</p></td>
|
<td class="text-center"><p>[0.583, 0.417]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-even"><td><p>balance.1</p></td>
|
<tr class="row-even"><td><p>balance.1</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>625</p></td>
|
<td class="text-center"><p>625</p></td>
|
||||||
<td class="text-align:center"><p>4</p></td>
|
<td class="text-center"><p>4</p></td>
|
||||||
<td class="text-align:center"><p>[0.539, 0.461]</p></td>
|
<td class="text-center"><p>[0.539, 0.461]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-odd"><td><p>balance.2</p></td>
|
<tr class="row-odd"><td><p>balance.2</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>625</p></td>
|
<td class="text-center"><p>625</p></td>
|
||||||
<td class="text-align:center"><p>4</p></td>
|
<td class="text-center"><p>4</p></td>
|
||||||
<td class="text-align:center"><p>[0.922, 0.078]</p></td>
|
<td class="text-center"><p>[0.922, 0.078]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-even"><td><p>balance.3</p></td>
|
<tr class="row-even"><td><p>balance.3</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>625</p></td>
|
<td class="text-center"><p>625</p></td>
|
||||||
<td class="text-align:center"><p>4</p></td>
|
<td class="text-center"><p>4</p></td>
|
||||||
<td class="text-align:center"><p>[0.539, 0.461]</p></td>
|
<td class="text-center"><p>[0.539, 0.461]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-odd"><td><p>breast-cancer</p></td>
|
<tr class="row-odd"><td><p>breast-cancer</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>683</p></td>
|
<td class="text-center"><p>683</p></td>
|
||||||
<td class="text-align:center"><p>9</p></td>
|
<td class="text-center"><p>9</p></td>
|
||||||
<td class="text-align:center"><p>[0.350, 0.650]</p></td>
|
<td class="text-center"><p>[0.350, 0.650]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-even"><td><p>cmc.1</p></td>
|
<tr class="row-even"><td><p>cmc.1</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>1473</p></td>
|
<td class="text-center"><p>1473</p></td>
|
||||||
<td class="text-align:center"><p>9</p></td>
|
<td class="text-center"><p>9</p></td>
|
||||||
<td class="text-align:center"><p>[0.573, 0.427]</p></td>
|
<td class="text-center"><p>[0.573, 0.427]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-odd"><td><p>cmc.2</p></td>
|
<tr class="row-odd"><td><p>cmc.2</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>1473</p></td>
|
<td class="text-center"><p>1473</p></td>
|
||||||
<td class="text-align:center"><p>9</p></td>
|
<td class="text-center"><p>9</p></td>
|
||||||
<td class="text-align:center"><p>[0.774, 0.226]</p></td>
|
<td class="text-center"><p>[0.774, 0.226]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-even"><td><p>cmc.3</p></td>
|
<tr class="row-even"><td><p>cmc.3</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>1473</p></td>
|
<td class="text-center"><p>1473</p></td>
|
||||||
<td class="text-align:center"><p>9</p></td>
|
<td class="text-center"><p>9</p></td>
|
||||||
<td class="text-align:center"><p>[0.653, 0.347]</p></td>
|
<td class="text-center"><p>[0.653, 0.347]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-odd"><td><p>ctg.1</p></td>
|
<tr class="row-odd"><td><p>ctg.1</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>2126</p></td>
|
<td class="text-center"><p>2126</p></td>
|
||||||
<td class="text-align:center"><p>22</p></td>
|
<td class="text-center"><p>22</p></td>
|
||||||
<td class="text-align:center"><p>[0.222, 0.778]</p></td>
|
<td class="text-center"><p>[0.222, 0.778]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-even"><td><p>ctg.2</p></td>
|
<tr class="row-even"><td><p>ctg.2</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>2126</p></td>
|
<td class="text-center"><p>2126</p></td>
|
||||||
<td class="text-align:center"><p>22</p></td>
|
<td class="text-center"><p>22</p></td>
|
||||||
<td class="text-align:center"><p>[0.861, 0.139]</p></td>
|
<td class="text-center"><p>[0.861, 0.139]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-odd"><td><p>ctg.3</p></td>
|
<tr class="row-odd"><td><p>ctg.3</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>2126</p></td>
|
<td class="text-center"><p>2126</p></td>
|
||||||
<td class="text-align:center"><p>22</p></td>
|
<td class="text-center"><p>22</p></td>
|
||||||
<td class="text-align:center"><p>[0.917, 0.083]</p></td>
|
<td class="text-center"><p>[0.917, 0.083]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-even"><td><p>german</p></td>
|
<tr class="row-even"><td><p>german</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>1000</p></td>
|
<td class="text-center"><p>1000</p></td>
|
||||||
<td class="text-align:center"><p>24</p></td>
|
<td class="text-center"><p>24</p></td>
|
||||||
<td class="text-align:center"><p>[0.300, 0.700]</p></td>
|
<td class="text-center"><p>[0.300, 0.700]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-odd"><td><p>haberman</p></td>
|
<tr class="row-odd"><td><p>haberman</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>306</p></td>
|
<td class="text-center"><p>306</p></td>
|
||||||
<td class="text-align:center"><p>3</p></td>
|
<td class="text-center"><p>3</p></td>
|
||||||
<td class="text-align:center"><p>[0.735, 0.265]</p></td>
|
<td class="text-center"><p>[0.735, 0.265]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-even"><td><p>ionosphere</p></td>
|
<tr class="row-even"><td><p>ionosphere</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>351</p></td>
|
<td class="text-center"><p>351</p></td>
|
||||||
<td class="text-align:center"><p>34</p></td>
|
<td class="text-center"><p>34</p></td>
|
||||||
<td class="text-align:center"><p>[0.641, 0.359]</p></td>
|
<td class="text-center"><p>[0.641, 0.359]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-odd"><td><p>iris.1</p></td>
|
<tr class="row-odd"><td><p>iris.1</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>150</p></td>
|
<td class="text-center"><p>150</p></td>
|
||||||
<td class="text-align:center"><p>4</p></td>
|
<td class="text-center"><p>4</p></td>
|
||||||
<td class="text-align:center"><p>[0.667, 0.333]</p></td>
|
<td class="text-center"><p>[0.667, 0.333]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-even"><td><p>iris.2</p></td>
|
<tr class="row-even"><td><p>iris.2</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>150</p></td>
|
<td class="text-center"><p>150</p></td>
|
||||||
<td class="text-align:center"><p>4</p></td>
|
<td class="text-center"><p>4</p></td>
|
||||||
<td class="text-align:center"><p>[0.667, 0.333]</p></td>
|
<td class="text-center"><p>[0.667, 0.333]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-odd"><td><p>iris.3</p></td>
|
<tr class="row-odd"><td><p>iris.3</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>150</p></td>
|
<td class="text-center"><p>150</p></td>
|
||||||
<td class="text-align:center"><p>4</p></td>
|
<td class="text-center"><p>4</p></td>
|
||||||
<td class="text-align:center"><p>[0.667, 0.333]</p></td>
|
<td class="text-center"><p>[0.667, 0.333]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-even"><td><p>mammographic</p></td>
|
<tr class="row-even"><td><p>mammographic</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>830</p></td>
|
<td class="text-center"><p>830</p></td>
|
||||||
<td class="text-align:center"><p>5</p></td>
|
<td class="text-center"><p>5</p></td>
|
||||||
<td class="text-align:center"><p>[0.514, 0.486]</p></td>
|
<td class="text-center"><p>[0.514, 0.486]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-odd"><td><p>pageblocks.5</p></td>
|
<tr class="row-odd"><td><p>pageblocks.5</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>5473</p></td>
|
<td class="text-center"><p>5473</p></td>
|
||||||
<td class="text-align:center"><p>10</p></td>
|
<td class="text-center"><p>10</p></td>
|
||||||
<td class="text-align:center"><p>[0.979, 0.021]</p></td>
|
<td class="text-center"><p>[0.979, 0.021]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-even"><td><p>semeion</p></td>
|
<tr class="row-even"><td><p>semeion</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>1593</p></td>
|
<td class="text-center"><p>1593</p></td>
|
||||||
<td class="text-align:center"><p>256</p></td>
|
<td class="text-center"><p>256</p></td>
|
||||||
<td class="text-align:center"><p>[0.901, 0.099]</p></td>
|
<td class="text-center"><p>[0.901, 0.099]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-odd"><td><p>sonar</p></td>
|
<tr class="row-odd"><td><p>sonar</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>208</p></td>
|
<td class="text-center"><p>208</p></td>
|
||||||
<td class="text-align:center"><p>60</p></td>
|
<td class="text-center"><p>60</p></td>
|
||||||
<td class="text-align:center"><p>[0.534, 0.466]</p></td>
|
<td class="text-center"><p>[0.534, 0.466]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-even"><td><p>spambase</p></td>
|
<tr class="row-even"><td><p>spambase</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>4601</p></td>
|
<td class="text-center"><p>4601</p></td>
|
||||||
<td class="text-align:center"><p>57</p></td>
|
<td class="text-center"><p>57</p></td>
|
||||||
<td class="text-align:center"><p>[0.606, 0.394]</p></td>
|
<td class="text-center"><p>[0.606, 0.394]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-odd"><td><p>spectf</p></td>
|
<tr class="row-odd"><td><p>spectf</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>267</p></td>
|
<td class="text-center"><p>267</p></td>
|
||||||
<td class="text-align:center"><p>44</p></td>
|
<td class="text-center"><p>44</p></td>
|
||||||
<td class="text-align:center"><p>[0.794, 0.206]</p></td>
|
<td class="text-center"><p>[0.794, 0.206]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-even"><td><p>tictactoe</p></td>
|
<tr class="row-even"><td><p>tictactoe</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>958</p></td>
|
<td class="text-center"><p>958</p></td>
|
||||||
<td class="text-align:center"><p>9</p></td>
|
<td class="text-center"><p>9</p></td>
|
||||||
<td class="text-align:center"><p>[0.653, 0.347]</p></td>
|
<td class="text-center"><p>[0.653, 0.347]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-odd"><td><p>transfusion</p></td>
|
<tr class="row-odd"><td><p>transfusion</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>748</p></td>
|
<td class="text-center"><p>748</p></td>
|
||||||
<td class="text-align:center"><p>4</p></td>
|
<td class="text-center"><p>4</p></td>
|
||||||
<td class="text-align:center"><p>[0.762, 0.238]</p></td>
|
<td class="text-center"><p>[0.762, 0.238]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-even"><td><p>wdbc</p></td>
|
<tr class="row-even"><td><p>wdbc</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>569</p></td>
|
<td class="text-center"><p>569</p></td>
|
||||||
<td class="text-align:center"><p>30</p></td>
|
<td class="text-center"><p>30</p></td>
|
||||||
<td class="text-align:center"><p>[0.627, 0.373]</p></td>
|
<td class="text-center"><p>[0.627, 0.373]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-odd"><td><p>wine.1</p></td>
|
<tr class="row-odd"><td><p>wine.1</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>178</p></td>
|
<td class="text-center"><p>178</p></td>
|
||||||
<td class="text-align:center"><p>13</p></td>
|
<td class="text-center"><p>13</p></td>
|
||||||
<td class="text-align:center"><p>[0.669, 0.331]</p></td>
|
<td class="text-center"><p>[0.669, 0.331]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-even"><td><p>wine.2</p></td>
|
<tr class="row-even"><td><p>wine.2</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>178</p></td>
|
<td class="text-center"><p>178</p></td>
|
||||||
<td class="text-align:center"><p>13</p></td>
|
<td class="text-center"><p>13</p></td>
|
||||||
<td class="text-align:center"><p>[0.601, 0.399]</p></td>
|
<td class="text-center"><p>[0.601, 0.399]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-odd"><td><p>wine.3</p></td>
|
<tr class="row-odd"><td><p>wine.3</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>178</p></td>
|
<td class="text-center"><p>178</p></td>
|
||||||
<td class="text-align:center"><p>13</p></td>
|
<td class="text-center"><p>13</p></td>
|
||||||
<td class="text-align:center"><p>[0.730, 0.270]</p></td>
|
<td class="text-center"><p>[0.730, 0.270]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-even"><td><p>wine-q-red</p></td>
|
<tr class="row-even"><td><p>wine-q-red</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>1599</p></td>
|
<td class="text-center"><p>1599</p></td>
|
||||||
<td class="text-align:center"><p>11</p></td>
|
<td class="text-center"><p>11</p></td>
|
||||||
<td class="text-align:center"><p>[0.465, 0.535]</p></td>
|
<td class="text-center"><p>[0.465, 0.535]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-odd"><td><p>wine-q-white</p></td>
|
<tr class="row-odd"><td><p>wine-q-white</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>4898</p></td>
|
<td class="text-center"><p>4898</p></td>
|
||||||
<td class="text-align:center"><p>11</p></td>
|
<td class="text-center"><p>11</p></td>
|
||||||
<td class="text-align:center"><p>[0.335, 0.665]</p></td>
|
<td class="text-center"><p>[0.335, 0.665]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="row-even"><td><p>yeast</p></td>
|
<tr class="row-even"><td><p>yeast</p></td>
|
||||||
<td class="text-align:center"><p>2</p></td>
|
<td class="text-center"><p>2</p></td>
|
||||||
<td class="text-align:center"><p>1484</p></td>
|
<td class="text-center"><p>1484</p></td>
|
||||||
<td class="text-align:center"><p>8</p></td>
|
<td class="text-center"><p>8</p></td>
|
||||||
<td class="text-align:center"><p>[0.711, 0.289]</p></td>
|
<td class="text-center"><p>[0.711, 0.289]</p></td>
|
||||||
<td><p>dense</p></td>
|
<td><p>dense</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="section" id="issues">
|
<section id="issues">
|
||||||
<h3>Issues:<a class="headerlink" href="#issues" title="Permalink to this headline">¶</a></h3>
|
<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
|
<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.
|
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
|
However, some datasets require special actions that at the moment are not fully
|
||||||
|
@ -631,10 +634,10 @@ standard Pythons packages like gzip or zip. This file would need to be uncompres
|
||||||
OS-dependent software manually. Information on how to do it will be printed the first
|
OS-dependent software manually. Information on how to do it will be printed the first
|
||||||
time the dataset is invoked.</p></li>
|
time the dataset is invoked.</p></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</section>
|
||||||
</div>
|
</section>
|
||||||
<div class="section" id="adding-custom-datasets">
|
<section id="adding-custom-datasets">
|
||||||
<h2>Adding Custom Datasets<a class="headerlink" href="#adding-custom-datasets" title="Permalink to this headline">¶</a></h2>
|
<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
|
<p>QuaPy provides data loaders for simple formats dealing with
|
||||||
text, following the format:</p>
|
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">'s pre-processed text </span><span class="se">\n</span>
|
<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">'s pre-processed text </span><span class="se">\n</span>
|
||||||
|
@ -673,8 +676,8 @@ e.g.:</p>
|
||||||
<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>
|
<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>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="data-processing">
|
<section id="data-processing">
|
||||||
<h3>Data Processing<a class="headerlink" href="#data-processing" title="Permalink to this headline">¶</a></h3>
|
<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>
|
<p>QuaPy implements a number of preprocessing functions in the package <em>qp.data.preprocessing</em>, including:</p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><p><em>text2tfidf</em>: tfidf vectorization</p></li>
|
<li><p><em>text2tfidf</em>: tfidf vectorization</p></li>
|
||||||
|
@ -683,9 +686,9 @@ e.g.:</p>
|
||||||
that the column values have zero mean and unit variance).</p></li>
|
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>
|
<li><p><em>index</em>: transforms textual tokens into lists of numeric ids)</p></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</section>
|
||||||
</div>
|
</section>
|
||||||
</div>
|
</section>
|
||||||
|
|
||||||
|
|
||||||
<div class="clearer"></div>
|
<div class="clearer"></div>
|
||||||
|
@ -694,6 +697,7 @@ that the column values have zero mean and unit variance).</p></li>
|
||||||
</div>
|
</div>
|
||||||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||||||
<div class="sphinxsidebarwrapper">
|
<div class="sphinxsidebarwrapper">
|
||||||
|
<div>
|
||||||
<h3><a href="index.html">Table of Contents</a></h3>
|
<h3><a href="index.html">Table of Contents</a></h3>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a class="reference internal" href="#">Datasets</a><ul>
|
<li><a class="reference internal" href="#">Datasets</a><ul>
|
||||||
|
@ -711,12 +715,17 @@ that the column values have zero mean and unit variance).</p></li>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
<h4>Previous topic</h4>
|
<h4>Previous topic</h4>
|
||||||
<p class="topless"><a href="readme.html"
|
<p class="topless"><a href="Installation.html"
|
||||||
title="previous chapter">Getting Started</a></p>
|
title="previous chapter">Installation</a></p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
<h4>Next topic</h4>
|
<h4>Next topic</h4>
|
||||||
<p class="topless"><a href="modules.html"
|
<p class="topless"><a href="Evaluation.html"
|
||||||
title="next chapter">quapy</a></p>
|
title="next chapter">Evaluation</a></p>
|
||||||
|
</div>
|
||||||
<div role="note" aria-label="source link">
|
<div role="note" aria-label="source link">
|
||||||
<h3>This Page</h3>
|
<h3>This Page</h3>
|
||||||
<ul class="this-page-menu">
|
<ul class="this-page-menu">
|
||||||
|
@ -733,7 +742,7 @@ that the column values have zero mean and unit variance).</p></li>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>$('#searchbox').show(0);</script>
|
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="clearer"></div>
|
<div class="clearer"></div>
|
||||||
|
@ -748,18 +757,18 @@ that the column values have zero mean and unit variance).</p></li>
|
||||||
<a href="py-modindex.html" title="Python Module Index"
|
<a href="py-modindex.html" title="Python Module Index"
|
||||||
>modules</a> |</li>
|
>modules</a> |</li>
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="modules.html" title="quapy"
|
<a href="Evaluation.html" title="Evaluation"
|
||||||
>next</a> |</li>
|
>next</a> |</li>
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="readme.html" title="Getting Started"
|
<a href="Installation.html" title="Installation"
|
||||||
>previous</a> |</li>
|
>previous</a> |</li>
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.6 documentation</a> »</li>
|
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> »</li>
|
||||||
<li class="nav-item nav-item-this"><a href="">Datasets</a></li>
|
<li class="nav-item nav-item-this"><a href="">Datasets</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer" role="contentinfo">
|
<div class="footer" role="contentinfo">
|
||||||
© Copyright 2021, Alejandro Moreo.
|
© Copyright 2021, Alejandro Moreo.
|
||||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.2.0.
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -2,18 +2,21 @@
|
||||||
|
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
|
|
||||||
<html>
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||||
<title>Evaluation — QuaPy 0.1.6 documentation</title>
|
|
||||||
|
<title>Evaluation — QuaPy 0.1.7 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/bizstyle.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 data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
<script src="_static/jquery.js"></script>
|
<script src="_static/jquery.js"></script>
|
||||||
<script src="_static/underscore.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/doctools.js"></script>
|
||||||
|
<script src="_static/sphinx_highlight.js"></script>
|
||||||
<script src="_static/bizstyle.js"></script>
|
<script src="_static/bizstyle.js"></script>
|
||||||
<link rel="index" title="Index" href="genindex.html" />
|
<link rel="index" title="Index" href="genindex.html" />
|
||||||
<link rel="search" title="Search" href="search.html" />
|
<link rel="search" title="Search" href="search.html" />
|
||||||
|
@ -39,7 +42,7 @@
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="Datasets.html" title="Datasets"
|
<a href="Datasets.html" title="Datasets"
|
||||||
accesskey="P">previous</a> |</li>
|
accesskey="P">previous</a> |</li>
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.6 documentation</a> »</li>
|
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> »</li>
|
||||||
<li class="nav-item nav-item-this"><a href="">Evaluation</a></li>
|
<li class="nav-item nav-item-this"><a href="">Evaluation</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -49,8 +52,8 @@
|
||||||
<div class="bodywrapper">
|
<div class="bodywrapper">
|
||||||
<div class="body" role="main">
|
<div class="body" role="main">
|
||||||
|
|
||||||
<div class="tex2jax_ignore mathjax_ignore section" id="evaluation">
|
<section id="evaluation">
|
||||||
<h1>Evaluation<a class="headerlink" href="#evaluation" title="Permalink to this headline">¶</a></h1>
|
<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,
|
<p>Quantification is an appealing tool in scenarios of dataset shift,
|
||||||
and particularly in scenarios of prior-probability shift.
|
and particularly in scenarios of prior-probability shift.
|
||||||
That is, the interest in estimating the class prevalences arises
|
That is, the interest in estimating the class prevalences arises
|
||||||
|
@ -62,8 +65,8 @@ to be unlikely (as is the case in general scenarios of
|
||||||
machine learning governed by the iid assumption).
|
machine learning governed by the iid assumption).
|
||||||
In brief, quantification requires dedicated evaluation protocols,
|
In brief, quantification requires dedicated evaluation protocols,
|
||||||
which are implemented in QuaPy and explained here.</p>
|
which are implemented in QuaPy and explained here.</p>
|
||||||
<div class="section" id="error-measures">
|
<section id="error-measures">
|
||||||
<h2>Error Measures<a class="headerlink" href="#error-measures" title="Permalink to this headline">¶</a></h2>
|
<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>
|
<p>The module quapy.error implements the following error measures for quantification:</p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><p><em>mae</em>: mean absolute error</p></li>
|
<li><p><em>mae</em>: mean absolute error</p></li>
|
||||||
|
@ -116,9 +119,9 @@ error functions from strings using, e.g.:</p>
|
||||||
<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>
|
<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>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</section>
|
||||||
<div class="section" id="evaluation-protocols">
|
<section id="evaluation-protocols">
|
||||||
<h2>Evaluation Protocols<a class="headerlink" href="#evaluation-protocols" title="Permalink to this headline">¶</a></h2>
|
<h2>Evaluation Protocols<a class="headerlink" href="#evaluation-protocols" title="Permalink to this heading">¶</a></h2>
|
||||||
<p>QuaPy implements the so-called “artificial sampling protocol”,
|
<p>QuaPy implements the so-called “artificial sampling protocol”,
|
||||||
according to which a test set is used to generate samplings at
|
according to which a test set is used to generate samplings at
|
||||||
desired prevalences of fixed size and covering the full spectrum
|
desired prevalences of fixed size and covering the full spectrum
|
||||||
|
@ -254,8 +257,8 @@ given evaluation metric, returning the average instead of a dataframe.</p></li>
|
||||||
true prevalences and the estimated prevalences.</p></li>
|
true prevalences and the estimated prevalences.</p></li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>See the documentation for further details.</p>
|
<p>See the documentation for further details.</p>
|
||||||
</div>
|
</section>
|
||||||
</div>
|
</section>
|
||||||
|
|
||||||
|
|
||||||
<div class="clearer"></div>
|
<div class="clearer"></div>
|
||||||
|
@ -264,6 +267,7 @@ true prevalences and the estimated prevalences.</p></li>
|
||||||
</div>
|
</div>
|
||||||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||||||
<div class="sphinxsidebarwrapper">
|
<div class="sphinxsidebarwrapper">
|
||||||
|
<div>
|
||||||
<h3><a href="index.html">Table of Contents</a></h3>
|
<h3><a href="index.html">Table of Contents</a></h3>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a class="reference internal" href="#">Evaluation</a><ul>
|
<li><a class="reference internal" href="#">Evaluation</a><ul>
|
||||||
|
@ -273,12 +277,17 @@ true prevalences and the estimated prevalences.</p></li>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
<h4>Previous topic</h4>
|
<h4>Previous topic</h4>
|
||||||
<p class="topless"><a href="Datasets.html"
|
<p class="topless"><a href="Datasets.html"
|
||||||
title="previous chapter">Datasets</a></p>
|
title="previous chapter">Datasets</a></p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
<h4>Next topic</h4>
|
<h4>Next topic</h4>
|
||||||
<p class="topless"><a href="Methods.html"
|
<p class="topless"><a href="Methods.html"
|
||||||
title="next chapter">Quantification Methods</a></p>
|
title="next chapter">Quantification Methods</a></p>
|
||||||
|
</div>
|
||||||
<div role="note" aria-label="source link">
|
<div role="note" aria-label="source link">
|
||||||
<h3>This Page</h3>
|
<h3>This Page</h3>
|
||||||
<ul class="this-page-menu">
|
<ul class="this-page-menu">
|
||||||
|
@ -295,7 +304,7 @@ true prevalences and the estimated prevalences.</p></li>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>$('#searchbox').show(0);</script>
|
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="clearer"></div>
|
<div class="clearer"></div>
|
||||||
|
@ -315,13 +324,13 @@ true prevalences and the estimated prevalences.</p></li>
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="Datasets.html" title="Datasets"
|
<a href="Datasets.html" title="Datasets"
|
||||||
>previous</a> |</li>
|
>previous</a> |</li>
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.6 documentation</a> »</li>
|
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> »</li>
|
||||||
<li class="nav-item nav-item-this"><a href="">Evaluation</a></li>
|
<li class="nav-item nav-item-this"><a href="">Evaluation</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer" role="contentinfo">
|
<div class="footer" role="contentinfo">
|
||||||
© Copyright 2021, Alejandro Moreo.
|
© Copyright 2021, Alejandro Moreo.
|
||||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.2.0.
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -2,18 +2,21 @@
|
||||||
|
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
|
|
||||||
<html>
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||||
<title>Installation — QuaPy 0.1.6 documentation</title>
|
|
||||||
|
<title>Installation — QuaPy 0.1.7 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/bizstyle.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 data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
<script src="_static/jquery.js"></script>
|
<script src="_static/jquery.js"></script>
|
||||||
<script src="_static/underscore.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/doctools.js"></script>
|
||||||
|
<script src="_static/sphinx_highlight.js"></script>
|
||||||
<script src="_static/bizstyle.js"></script>
|
<script src="_static/bizstyle.js"></script>
|
||||||
<link rel="index" title="Index" href="genindex.html" />
|
<link rel="index" title="Index" href="genindex.html" />
|
||||||
<link rel="search" title="Search" href="search.html" />
|
<link rel="search" title="Search" href="search.html" />
|
||||||
|
@ -39,7 +42,7 @@
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="index.html" title="Welcome to QuaPy’s documentation!"
|
<a href="index.html" title="Welcome to QuaPy’s documentation!"
|
||||||
accesskey="P">previous</a> |</li>
|
accesskey="P">previous</a> |</li>
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.6 documentation</a> »</li>
|
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> »</li>
|
||||||
<li class="nav-item nav-item-this"><a href="">Installation</a></li>
|
<li class="nav-item nav-item-this"><a href="">Installation</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -49,15 +52,15 @@
|
||||||
<div class="bodywrapper">
|
<div class="bodywrapper">
|
||||||
<div class="body" role="main">
|
<div class="body" role="main">
|
||||||
|
|
||||||
<div class="section" id="installation">
|
<section id="installation">
|
||||||
<h1>Installation<a class="headerlink" href="#installation" title="Permalink to this headline">¶</a></h1>
|
<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>
|
<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>
|
<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>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
<p>See <a class="reference external" href="https://pypi.org/project/QuaPy/">pip page</a> for older versions.</p>
|
<p>See <a class="reference external" href="https://pypi.org/project/QuaPy/">pip page</a> for older versions.</p>
|
||||||
<div class="section" id="requirements">
|
<section id="requirements">
|
||||||
<h2>Requirements<a class="headerlink" href="#requirements" title="Permalink to this headline">¶</a></h2>
|
<h2>Requirements<a class="headerlink" href="#requirements" title="Permalink to this heading">¶</a></h2>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><p>scikit-learn, numpy, scipy</p></li>
|
<li><p>scikit-learn, numpy, scipy</p></li>
|
||||||
<li><p>pytorch (for QuaNet)</p></li>
|
<li><p>pytorch (for QuaNet)</p></li>
|
||||||
|
@ -67,9 +70,9 @@
|
||||||
<li><p>pandas, xlrd</p></li>
|
<li><p>pandas, xlrd</p></li>
|
||||||
<li><p>matplotlib</p></li>
|
<li><p>matplotlib</p></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</section>
|
||||||
<div class="section" id="svm-perf-with-quantification-oriented-losses">
|
<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 headline">¶</a></h2>
|
<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),
|
<p>In order to run experiments involving SVM(Q), SVM(KLD), SVM(NKLD),
|
||||||
SVM(AE), or SVM(RAE), you have to first download the
|
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>
|
<a class="reference external" href="http://www.cs.cornell.edu/people/tj/svm_light/svm_perf.html">svmperf</a>
|
||||||
|
@ -96,8 +99,8 @@ and for the <cite>KLD</cite> and <cite>NKLD</cite> as proposed by
|
||||||
for quantification.
|
for quantification.
|
||||||
This patch extends the former by also allowing SVMperf to optimize for
|
This patch extends the former by also allowing SVMperf to optimize for
|
||||||
<cite>AE</cite> and <cite>RAE</cite>.</p>
|
<cite>AE</cite> and <cite>RAE</cite>.</p>
|
||||||
</div>
|
</section>
|
||||||
</div>
|
</section>
|
||||||
|
|
||||||
|
|
||||||
<div class="clearer"></div>
|
<div class="clearer"></div>
|
||||||
|
@ -106,6 +109,7 @@ This patch extends the former by also allowing SVMperf to optimize for
|
||||||
</div>
|
</div>
|
||||||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||||||
<div class="sphinxsidebarwrapper">
|
<div class="sphinxsidebarwrapper">
|
||||||
|
<div>
|
||||||
<h3><a href="index.html">Table of Contents</a></h3>
|
<h3><a href="index.html">Table of Contents</a></h3>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a class="reference internal" href="#">Installation</a><ul>
|
<li><a class="reference internal" href="#">Installation</a><ul>
|
||||||
|
@ -115,12 +119,17 @@ This patch extends the former by also allowing SVMperf to optimize for
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
<h4>Previous topic</h4>
|
<h4>Previous topic</h4>
|
||||||
<p class="topless"><a href="index.html"
|
<p class="topless"><a href="index.html"
|
||||||
title="previous chapter">Welcome to QuaPy’s documentation!</a></p>
|
title="previous chapter">Welcome to QuaPy’s documentation!</a></p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
<h4>Next topic</h4>
|
<h4>Next topic</h4>
|
||||||
<p class="topless"><a href="Datasets.html"
|
<p class="topless"><a href="Datasets.html"
|
||||||
title="next chapter">Datasets</a></p>
|
title="next chapter">Datasets</a></p>
|
||||||
|
</div>
|
||||||
<div role="note" aria-label="source link">
|
<div role="note" aria-label="source link">
|
||||||
<h3>This Page</h3>
|
<h3>This Page</h3>
|
||||||
<ul class="this-page-menu">
|
<ul class="this-page-menu">
|
||||||
|
@ -137,7 +146,7 @@ This patch extends the former by also allowing SVMperf to optimize for
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>$('#searchbox').show(0);</script>
|
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="clearer"></div>
|
<div class="clearer"></div>
|
||||||
|
@ -157,13 +166,13 @@ This patch extends the former by also allowing SVMperf to optimize for
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="index.html" title="Welcome to QuaPy’s documentation!"
|
<a href="index.html" title="Welcome to QuaPy’s documentation!"
|
||||||
>previous</a> |</li>
|
>previous</a> |</li>
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.6 documentation</a> »</li>
|
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> »</li>
|
||||||
<li class="nav-item nav-item-this"><a href="">Installation</a></li>
|
<li class="nav-item nav-item-this"><a href="">Installation</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer" role="contentinfo">
|
<div class="footer" role="contentinfo">
|
||||||
© Copyright 2021, Alejandro Moreo.
|
© Copyright 2021, Alejandro Moreo.
|
||||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.2.0.
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -2,22 +2,25 @@
|
||||||
|
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
|
|
||||||
<html>
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<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 — QuaPy 0.1.6 documentation</title>
|
|
||||||
|
<title>Quantification Methods — QuaPy 0.1.7 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/bizstyle.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 data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
<script src="_static/jquery.js"></script>
|
<script src="_static/jquery.js"></script>
|
||||||
<script src="_static/underscore.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/doctools.js"></script>
|
||||||
|
<script src="_static/sphinx_highlight.js"></script>
|
||||||
<script src="_static/bizstyle.js"></script>
|
<script src="_static/bizstyle.js"></script>
|
||||||
<link rel="index" title="Index" href="genindex.html" />
|
<link rel="index" title="Index" href="genindex.html" />
|
||||||
<link rel="search" title="Search" href="search.html" />
|
<link rel="search" title="Search" href="search.html" />
|
||||||
<link rel="next" title="Plotting" href="Plotting.html" />
|
<link rel="next" title="Model Selection" href="Model-Selection.html" />
|
||||||
<link rel="prev" title="Evaluation" href="Evaluation.html" />
|
<link rel="prev" title="Evaluation" href="Evaluation.html" />
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
|
||||||
<!--[if lt IE 9]>
|
<!--[if lt IE 9]>
|
||||||
|
@ -34,12 +37,12 @@
|
||||||
<a href="py-modindex.html" title="Python Module Index"
|
<a href="py-modindex.html" title="Python Module Index"
|
||||||
>modules</a> |</li>
|
>modules</a> |</li>
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="Plotting.html" title="Plotting"
|
<a href="Model-Selection.html" title="Model Selection"
|
||||||
accesskey="N">next</a> |</li>
|
accesskey="N">next</a> |</li>
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="Evaluation.html" title="Evaluation"
|
<a href="Evaluation.html" title="Evaluation"
|
||||||
accesskey="P">previous</a> |</li>
|
accesskey="P">previous</a> |</li>
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.6 documentation</a> »</li>
|
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> »</li>
|
||||||
<li class="nav-item nav-item-this"><a href="">Quantification Methods</a></li>
|
<li class="nav-item nav-item-this"><a href="">Quantification Methods</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -49,8 +52,8 @@
|
||||||
<div class="bodywrapper">
|
<div class="bodywrapper">
|
||||||
<div class="body" role="main">
|
<div class="body" role="main">
|
||||||
|
|
||||||
<div class="tex2jax_ignore mathjax_ignore section" id="quantification-methods">
|
<section id="quantification-methods">
|
||||||
<h1>Quantification Methods<a class="headerlink" href="#quantification-methods" title="Permalink to this headline">¶</a></h1>
|
<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
|
<p>Quantification methods can be categorized as belonging to
|
||||||
<em>aggregative</em> and <em>non-aggregative</em> groups.
|
<em>aggregative</em> and <em>non-aggregative</em> groups.
|
||||||
Most methods included in QuaPy at the moment are of type <em>aggregative</em>
|
Most methods included in QuaPy at the moment are of type <em>aggregative</em>
|
||||||
|
@ -86,8 +89,8 @@ is one single array of class prevalences), while functions <em>set_params</em>
|
||||||
and <em>get_params</em> allow a
|
and <em>get_params</em> allow a
|
||||||
<a class="reference external" href="https://github.com/HLT-ISTI/QuaPy/wiki/Model-Selection">model selector</a>
|
<a class="reference external" href="https://github.com/HLT-ISTI/QuaPy/wiki/Model-Selection">model selector</a>
|
||||||
to automate the process of hyperparameter search.</p>
|
to automate the process of hyperparameter search.</p>
|
||||||
<div class="section" id="aggregative-methods">
|
<section id="aggregative-methods">
|
||||||
<h2>Aggregative Methods<a class="headerlink" href="#aggregative-methods" title="Permalink to this headline">¶</a></h2>
|
<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
|
<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</em> package. In particular, <em>aggregative</em> methods are defined in
|
||||||
<em>qp.method.aggregative</em>, and extend <em>AggregativeQuantifier(BaseQuantifier)</em>.
|
<em>qp.method.aggregative</em>, and extend <em>AggregativeQuantifier(BaseQuantifier)</em>.
|
||||||
|
@ -133,8 +136,8 @@ reuse these predictions, without requiring to classify each element every time.
|
||||||
QuaPy leverages this property to speed-up any procedure having to do with
|
QuaPy leverages this property to speed-up any procedure having to do with
|
||||||
quantification over samples, as is customarily done in model selection or
|
quantification over samples, as is customarily done in model selection or
|
||||||
in evaluation.</p>
|
in evaluation.</p>
|
||||||
<div class="section" id="the-classify-count-variants">
|
<section id="the-classify-count-variants">
|
||||||
<h3>The Classify & Count variants<a class="headerlink" href="#the-classify-count-variants" title="Permalink to this headline">¶</a></h3>
|
<h3>The Classify & 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>
|
<p>QuaPy implements the four CC variants, i.e.:</p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><p><em>CC</em> (Classify & Count), the simplest aggregative quantifier; one that
|
<li><p><em>CC</em> (Classify & Count), the simplest aggregative quantifier; one that
|
||||||
|
@ -214,9 +217,9 @@ be applied to hard classifiers when <em>fit_learner=True</em>; an exception
|
||||||
will be raised otherwise.</p>
|
will be raised otherwise.</p>
|
||||||
<p>Lastly, everything we said aboud ACC and PCC
|
<p>Lastly, everything we said aboud ACC and PCC
|
||||||
applies to PACC as well.</p>
|
applies to PACC as well.</p>
|
||||||
</div>
|
</section>
|
||||||
<div class="section" id="expectation-maximization-emq">
|
<section id="expectation-maximization-emq">
|
||||||
<h3>Expectation Maximization (EMQ)<a class="headerlink" href="#expectation-maximization-emq" title="Permalink to this headline">¶</a></h3>
|
<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
|
<p>The Expectation Maximization Quantifier (EMQ), also known as
|
||||||
the SLD, is available at <em>qp.method.aggregative.EMQ</em> or via the
|
the SLD, is available at <em>qp.method.aggregative.EMQ</em> or via the
|
||||||
alias <em>qp.method.aggregative.ExpectationMaximizationQuantifier</em>.
|
alias <em>qp.method.aggregative.ExpectationMaximizationQuantifier</em>.
|
||||||
|
@ -241,9 +244,9 @@ experiments we have carried out.</p>
|
||||||
<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>
|
<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>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</section>
|
||||||
<div class="section" id="hellinger-distance-y-hdy">
|
<section id="hellinger-distance-y-hdy">
|
||||||
<h3>Hellinger Distance y (HDy)<a class="headerlink" href="#hellinger-distance-y-hdy" title="Permalink to this headline">¶</a></h3>
|
<h3>Hellinger Distance y (HDy)<a class="headerlink" href="#hellinger-distance-y-hdy" title="Permalink to this heading">¶</a></h3>
|
||||||
<p>The method HDy is described in:</p>
|
<p>The method HDy is described in:</p>
|
||||||
<p><em>Implementation of the method based on the Hellinger Distance y (HDy) proposed by
|
<p><em>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
|
González-Castro, V., Alaiz-Rodrı́guez, R., and Alegre, E. (2013). Class distribution
|
||||||
|
@ -274,9 +277,9 @@ provided in QuaPy accepts only binary datasets.</p>
|
||||||
<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>
|
<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>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</section>
|
||||||
<div class="section" id="explicit-loss-minimization">
|
<section id="explicit-loss-minimization">
|
||||||
<h3>Explicit Loss Minimization<a class="headerlink" href="#explicit-loss-minimization" title="Permalink to this headline">¶</a></h3>
|
<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
|
<p>The Explicit Loss Minimization (ELM) represent a family of methods
|
||||||
based on structured output learning, i.e., quantifiers relying on
|
based on structured output learning, i.e., quantifiers relying on
|
||||||
classifiers that have been optimized targeting a
|
classifiers that have been optimized targeting a
|
||||||
|
@ -344,17 +347,17 @@ In QuaPy this is possible by using the <em>OneVsAll</em> class:</p>
|
||||||
<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>
|
<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>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</section>
|
||||||
</div>
|
</section>
|
||||||
<div class="section" id="meta-models">
|
<section id="meta-models">
|
||||||
<h2>Meta Models<a class="headerlink" href="#meta-models" title="Permalink to this headline">¶</a></h2>
|
<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
|
<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
|
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
|
the non-aggregative group (indeed, <em>meta</em> models could use quantifiers from any of those
|
||||||
groups).
|
groups).
|
||||||
<em>Meta</em> models are implemented in the <em>qp.method.meta</em> module.</p>
|
<em>Meta</em> models are implemented in the <em>qp.method.meta</em> module.</p>
|
||||||
<div class="section" id="ensembles">
|
<section id="ensembles">
|
||||||
<h3>Ensembles<a class="headerlink" href="#ensembles" title="Permalink to this headline">¶</a></h3>
|
<h3>Ensembles<a class="headerlink" href="#ensembles" title="Permalink to this heading">¶</a></h3>
|
||||||
<p>QuaPy implements (some of) the variants proposed in:</p>
|
<p>QuaPy implements (some of) the variants proposed in:</p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><p><em>Pérez-Gállego, P., Quevedo, J. R., & del Coz, J. J. (2017).
|
<li><p><em>Pérez-Gállego, P., Quevedo, J. R., & del Coz, J. J. (2017).
|
||||||
|
@ -391,9 +394,9 @@ the performance estimated for each member of the ensemble in terms of that evalu
|
||||||
informs of the number of members to retain.</p>
|
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>
|
<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>
|
wiki if you want to optimize the hyperparameters of ensemble for classification or quantification.</p>
|
||||||
</div>
|
</section>
|
||||||
<div class="section" id="the-quanet-neural-network">
|
<section id="the-quanet-neural-network">
|
||||||
<h3>The QuaNet neural network<a class="headerlink" href="#the-quanet-neural-network" title="Permalink to this headline">¶</a></h3>
|
<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>QuaPy offers an implementation of QuaNet, a deep learning model presented in:</p>
|
||||||
<p><em>Esuli, A., Moreo, A., & Sebastiani, F. (2018, October).
|
<p><em>Esuli, A., Moreo, A., & Sebastiani, F. (2018, October).
|
||||||
A recurrent neural network for sentiment quantification.
|
A recurrent neural network for sentiment quantification.
|
||||||
|
@ -425,9 +428,9 @@ In the following example, we show an instantiation of QuaNet that instead uses C
|
||||||
<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>
|
<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>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</section>
|
||||||
</div>
|
</section>
|
||||||
</div>
|
</section>
|
||||||
|
|
||||||
|
|
||||||
<div class="clearer"></div>
|
<div class="clearer"></div>
|
||||||
|
@ -436,6 +439,7 @@ In the following example, we show an instantiation of QuaNet that instead uses C
|
||||||
</div>
|
</div>
|
||||||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||||||
<div class="sphinxsidebarwrapper">
|
<div class="sphinxsidebarwrapper">
|
||||||
|
<div>
|
||||||
<h3><a href="index.html">Table of Contents</a></h3>
|
<h3><a href="index.html">Table of Contents</a></h3>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a class="reference internal" href="#">Quantification Methods</a><ul>
|
<li><a class="reference internal" href="#">Quantification Methods</a><ul>
|
||||||
|
@ -455,12 +459,17 @@ In the following example, we show an instantiation of QuaNet that instead uses C
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
<h4>Previous topic</h4>
|
<h4>Previous topic</h4>
|
||||||
<p class="topless"><a href="Evaluation.html"
|
<p class="topless"><a href="Evaluation.html"
|
||||||
title="previous chapter">Evaluation</a></p>
|
title="previous chapter">Evaluation</a></p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
<h4>Next topic</h4>
|
<h4>Next topic</h4>
|
||||||
<p class="topless"><a href="Plotting.html"
|
<p class="topless"><a href="Model-Selection.html"
|
||||||
title="next chapter">Plotting</a></p>
|
title="next chapter">Model Selection</a></p>
|
||||||
|
</div>
|
||||||
<div role="note" aria-label="source link">
|
<div role="note" aria-label="source link">
|
||||||
<h3>This Page</h3>
|
<h3>This Page</h3>
|
||||||
<ul class="this-page-menu">
|
<ul class="this-page-menu">
|
||||||
|
@ -477,7 +486,7 @@ In the following example, we show an instantiation of QuaNet that instead uses C
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>$('#searchbox').show(0);</script>
|
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="clearer"></div>
|
<div class="clearer"></div>
|
||||||
|
@ -492,18 +501,18 @@ In the following example, we show an instantiation of QuaNet that instead uses C
|
||||||
<a href="py-modindex.html" title="Python Module Index"
|
<a href="py-modindex.html" title="Python Module Index"
|
||||||
>modules</a> |</li>
|
>modules</a> |</li>
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="Plotting.html" title="Plotting"
|
<a href="Model-Selection.html" title="Model Selection"
|
||||||
>next</a> |</li>
|
>next</a> |</li>
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="Evaluation.html" title="Evaluation"
|
<a href="Evaluation.html" title="Evaluation"
|
||||||
>previous</a> |</li>
|
>previous</a> |</li>
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.6 documentation</a> »</li>
|
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> »</li>
|
||||||
<li class="nav-item nav-item-this"><a href="">Quantification Methods</a></li>
|
<li class="nav-item nav-item-this"><a href="">Quantification Methods</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer" role="contentinfo">
|
<div class="footer" role="contentinfo">
|
||||||
© Copyright 2021, Alejandro Moreo.
|
© Copyright 2021, Alejandro Moreo.
|
||||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.2.0.
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -2,21 +2,26 @@
|
||||||
|
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
|
|
||||||
<html>
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<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 — QuaPy 0.1.6 documentation</title>
|
|
||||||
|
<title>Model Selection — QuaPy 0.1.7 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/bizstyle.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 data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
<script src="_static/jquery.js"></script>
|
<script src="_static/jquery.js"></script>
|
||||||
<script src="_static/underscore.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/doctools.js"></script>
|
||||||
|
<script src="_static/sphinx_highlight.js"></script>
|
||||||
<script src="_static/bizstyle.js"></script>
|
<script src="_static/bizstyle.js"></script>
|
||||||
<link rel="index" title="Index" href="genindex.html" />
|
<link rel="index" title="Index" href="genindex.html" />
|
||||||
<link rel="search" title="Search" href="search.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" />
|
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
|
||||||
<!--[if lt IE 9]>
|
<!--[if lt IE 9]>
|
||||||
<script src="_static/css3-mediaqueries.js"></script>
|
<script src="_static/css3-mediaqueries.js"></script>
|
||||||
|
@ -31,7 +36,13 @@
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="py-modindex.html" title="Python Module Index"
|
<a href="py-modindex.html" title="Python Module Index"
|
||||||
>modules</a> |</li>
|
>modules</a> |</li>
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.6 documentation</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> »</li>
|
||||||
<li class="nav-item nav-item-this"><a href="">Model Selection</a></li>
|
<li class="nav-item nav-item-this"><a href="">Model Selection</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -41,8 +52,8 @@
|
||||||
<div class="bodywrapper">
|
<div class="bodywrapper">
|
||||||
<div class="body" role="main">
|
<div class="body" role="main">
|
||||||
|
|
||||||
<div class="tex2jax_ignore mathjax_ignore section" id="model-selection">
|
<section id="model-selection">
|
||||||
<h1>Model Selection<a class="headerlink" href="#model-selection" title="Permalink to this headline">¶</a></h1>
|
<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
|
<p>As a supervised machine learning task, quantification methods
|
||||||
can strongly depend on a good choice of model hyper-parameters.
|
can strongly depend on a good choice of model hyper-parameters.
|
||||||
The process whereby those hyper-parameters are chosen is
|
The process whereby those hyper-parameters are chosen is
|
||||||
|
@ -50,8 +61,8 @@ typically known as <em>Model Selection</em>, and typically consists of
|
||||||
testing different settings and picking the one that performed
|
testing different settings and picking the one that performed
|
||||||
best in a held-out validation set in terms of any given
|
best in a held-out validation set in terms of any given
|
||||||
evaluation measure.</p>
|
evaluation measure.</p>
|
||||||
<div class="section" id="targeting-a-quantification-oriented-loss">
|
<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 headline">¶</a></h2>
|
<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,
|
<p>The task being optimized determines the evaluation protocol,
|
||||||
i.e., the criteria according to which the performance of
|
i.e., the criteria according to which the performance of
|
||||||
any given method for solving is to be assessed.
|
any given method for solving is to be assessed.
|
||||||
|
@ -145,9 +156,9 @@ 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
|
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
|
on the specific data split to be used across different model selection
|
||||||
experiments.</p>
|
experiments.</p>
|
||||||
</div>
|
</section>
|
||||||
<div class="section" id="targeting-a-classification-oriented-loss">
|
<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 headline">¶</a></h2>
|
<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
|
<p>Optimizing a model for quantification could rather be
|
||||||
computationally costly.
|
computationally costly.
|
||||||
In aggregative methods, one could alternatively try to optimize
|
In aggregative methods, one could alternatively try to optimize
|
||||||
|
@ -185,8 +196,8 @@ find examples
|
||||||
in which optimizing for classification ends up resulting in a better
|
in which optimizing for classification ends up resulting in a better
|
||||||
quantifier than when optimizing for quantification.
|
quantifier than when optimizing for quantification.
|
||||||
Nonetheless, this is theoretically unlikely to happen.</p>
|
Nonetheless, this is theoretically unlikely to happen.</p>
|
||||||
</div>
|
</section>
|
||||||
</div>
|
</section>
|
||||||
|
|
||||||
|
|
||||||
<div class="clearer"></div>
|
<div class="clearer"></div>
|
||||||
|
@ -195,6 +206,7 @@ Nonetheless, this is theoretically unlikely to happen.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||||||
<div class="sphinxsidebarwrapper">
|
<div class="sphinxsidebarwrapper">
|
||||||
|
<div>
|
||||||
<h3><a href="index.html">Table of Contents</a></h3>
|
<h3><a href="index.html">Table of Contents</a></h3>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a class="reference internal" href="#">Model Selection</a><ul>
|
<li><a class="reference internal" href="#">Model Selection</a><ul>
|
||||||
|
@ -204,6 +216,17 @@ Nonetheless, this is theoretically unlikely to happen.</p>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</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">
|
<div role="note" aria-label="source link">
|
||||||
<h3>This Page</h3>
|
<h3>This Page</h3>
|
||||||
<ul class="this-page-menu">
|
<ul class="this-page-menu">
|
||||||
|
@ -220,7 +243,7 @@ Nonetheless, this is theoretically unlikely to happen.</p>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>$('#searchbox').show(0);</script>
|
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="clearer"></div>
|
<div class="clearer"></div>
|
||||||
|
@ -234,13 +257,19 @@ Nonetheless, this is theoretically unlikely to happen.</p>
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="py-modindex.html" title="Python Module Index"
|
<a href="py-modindex.html" title="Python Module Index"
|
||||||
>modules</a> |</li>
|
>modules</a> |</li>
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.6 documentation</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> »</li>
|
||||||
<li class="nav-item nav-item-this"><a href="">Model Selection</a></li>
|
<li class="nav-item nav-item-this"><a href="">Model Selection</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer" role="contentinfo">
|
<div class="footer" role="contentinfo">
|
||||||
© Copyright 2021, Alejandro Moreo.
|
© Copyright 2021, Alejandro Moreo.
|
||||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.2.0.
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -2,23 +2,26 @@
|
||||||
|
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
|
|
||||||
<html>
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||||
<title>Plotting — QuaPy 0.1.6 documentation</title>
|
|
||||||
|
<title>Plotting — QuaPy 0.1.7 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/bizstyle.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 data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
<script src="_static/jquery.js"></script>
|
<script src="_static/jquery.js"></script>
|
||||||
<script src="_static/underscore.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/doctools.js"></script>
|
||||||
|
<script src="_static/sphinx_highlight.js"></script>
|
||||||
<script src="_static/bizstyle.js"></script>
|
<script src="_static/bizstyle.js"></script>
|
||||||
<link rel="index" title="Index" href="genindex.html" />
|
<link rel="index" title="Index" href="genindex.html" />
|
||||||
<link rel="search" title="Search" href="search.html" />
|
<link rel="search" title="Search" href="search.html" />
|
||||||
<link rel="next" title="quapy" href="modules.html" />
|
<link rel="next" title="quapy" href="modules.html" />
|
||||||
<link rel="prev" title="Quantification Methods" href="Methods.html" />
|
<link rel="prev" title="Model Selection" href="Model-Selection.html" />
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
|
||||||
<!--[if lt IE 9]>
|
<!--[if lt IE 9]>
|
||||||
<script src="_static/css3-mediaqueries.js"></script>
|
<script src="_static/css3-mediaqueries.js"></script>
|
||||||
|
@ -37,9 +40,9 @@
|
||||||
<a href="modules.html" title="quapy"
|
<a href="modules.html" title="quapy"
|
||||||
accesskey="N">next</a> |</li>
|
accesskey="N">next</a> |</li>
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="Methods.html" title="Quantification Methods"
|
<a href="Model-Selection.html" title="Model Selection"
|
||||||
accesskey="P">previous</a> |</li>
|
accesskey="P">previous</a> |</li>
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.6 documentation</a> »</li>
|
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> »</li>
|
||||||
<li class="nav-item nav-item-this"><a href="">Plotting</a></li>
|
<li class="nav-item nav-item-this"><a href="">Plotting</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -49,8 +52,8 @@
|
||||||
<div class="bodywrapper">
|
<div class="bodywrapper">
|
||||||
<div class="body" role="main">
|
<div class="body" role="main">
|
||||||
|
|
||||||
<div class="tex2jax_ignore mathjax_ignore section" id="plotting">
|
<section id="plotting">
|
||||||
<h1>Plotting<a class="headerlink" href="#plotting" title="Permalink to this headline">¶</a></h1>
|
<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
|
<p>The module <em>qp.plot</em> implements some basic plotting functions
|
||||||
that can help analyse the performance of a quantification method.</p>
|
that can help analyse the performance of a quantification method.</p>
|
||||||
<p>All plotting functions receive as inputs the outcomes of
|
<p>All plotting functions receive as inputs the outcomes of
|
||||||
|
@ -137,8 +140,8 @@ generating 100 random samples at each prevalence).</p>
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
<p>the plots that can be generated are explained below.</p>
|
<p>the plots that can be generated are explained below.</p>
|
||||||
<div class="section" id="diagonal-plot">
|
<section id="diagonal-plot">
|
||||||
<h2>Diagonal Plot<a class="headerlink" href="#diagonal-plot" title="Permalink to this headline">¶</a></h2>
|
<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
|
<p>The <em>diagonal</em> plot shows a very insightful view of the
|
||||||
quantifier’s performance. It plots the predicted class
|
quantifier’s performance. It plots the predicted class
|
||||||
prevalence (in the y-axis) against the true class prevalence
|
prevalence (in the y-axis) against the true class prevalence
|
||||||
|
@ -164,9 +167,9 @@ the complete list of arguments in the documentation).</p>
|
||||||
<p>Finally, note how most quantifiers, and specially the “unadjusted”
|
<p>Finally, note how most quantifiers, and specially the “unadjusted”
|
||||||
variants CC and PCC, are strongly biased towards the
|
variants CC and PCC, are strongly biased towards the
|
||||||
prevalence seen during training.</p>
|
prevalence seen during training.</p>
|
||||||
</div>
|
</section>
|
||||||
<div class="section" id="quantification-bias">
|
<section id="quantification-bias">
|
||||||
<h2>Quantification bias<a class="headerlink" href="#quantification-bias" title="Permalink to this headline">¶</a></h2>
|
<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
|
<p>This plot aims at evincing the bias that any quantifier
|
||||||
displays with respect to the training prevalences by
|
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>.
|
means of <a class="reference external" href="https://en.wikipedia.org/wiki/Box_plot">box plots</a>.
|
||||||
|
@ -209,7 +212,7 @@ like this:</p>
|
||||||
<span class="n">model</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">sample</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">'SAMPLE_SIZE'</span><span class="p">],</span> <span class="n">n_repetitions</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span> <span class="n">n_prevpoints</span><span class="o">=</span><span class="mi">21</span>
|
<span class="n">model</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">sample</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">'SAMPLE_SIZE'</span><span class="p">],</span> <span class="n">n_repetitions</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span> <span class="n">n_prevpoints</span><span class="o">=</span><span class="mi">21</span>
|
||||||
<span class="p">)</span>
|
<span class="p">)</span>
|
||||||
<span class="c1"># method names can contain Latex syntax</span>
|
<span class="c1"># method names can contain Latex syntax</span>
|
||||||
<span class="n">method_name</span> <span class="o">=</span> <span class="s1">'CC$_{'</span> <span class="o">+</span> <span class="sa">f</span><span class="s1">'</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">'</span> <span class="o">+</span> <span class="s1">'\%}$'</span>
|
<span class="n">method_name</span> <span class="o">=</span> <span class="s1">'CC$_{'</span> <span class="o">+</span> <span class="sa">f</span><span class="s1">'</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="mi">100</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">training_prevalence</span><span class="p">)</span><span class="si">}</span><span class="s1">'</span> <span class="o">+</span> <span class="s1">'\%}$'</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">training</span><span class="o">.</span><span class="n">prevalence</span><span class="p">()))</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">training</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>
|
<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>
|
||||||
|
@ -237,9 +240,9 @@ and a negative bias (or a tendency to underestimate) in cases of high prevalence
|
||||||
<p><img alt="diag plot on IMDb" src="_images/bin_diag_cc.png" /></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
|
<p>showing pretty clearly the dependency of CC on the prior probabilities
|
||||||
of the labeled set it was trained on.</p>
|
of the labeled set it was trained on.</p>
|
||||||
</div>
|
</section>
|
||||||
<div class="section" id="error-by-drift">
|
<section id="error-by-drift">
|
||||||
<h2>Error by Drift<a class="headerlink" href="#error-by-drift" title="Permalink to this headline">¶</a></h2>
|
<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
|
<p>Above discussed plots are useful for analyzing and comparing
|
||||||
the performance of different quantification methods, but are
|
the performance of different quantification methods, but are
|
||||||
limited to the binary case. The “error by drift” is a plot
|
limited to the binary case. The “error by drift” is a plot
|
||||||
|
@ -270,8 +273,8 @@ In those cases, however, it is likely that the variances of each
|
||||||
method get higher, to the detriment of the visualization.
|
method get higher, to the detriment of the visualization.
|
||||||
We recommend to set <em>show_std=False</em> in those cases
|
We recommend to set <em>show_std=False</em> in those cases
|
||||||
in order to hide the color bands.</p>
|
in order to hide the color bands.</p>
|
||||||
</div>
|
</section>
|
||||||
</div>
|
</section>
|
||||||
|
|
||||||
|
|
||||||
<div class="clearer"></div>
|
<div class="clearer"></div>
|
||||||
|
@ -280,6 +283,7 @@ in order to hide the color bands.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||||||
<div class="sphinxsidebarwrapper">
|
<div class="sphinxsidebarwrapper">
|
||||||
|
<div>
|
||||||
<h3><a href="index.html">Table of Contents</a></h3>
|
<h3><a href="index.html">Table of Contents</a></h3>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a class="reference internal" href="#">Plotting</a><ul>
|
<li><a class="reference internal" href="#">Plotting</a><ul>
|
||||||
|
@ -290,12 +294,17 @@ in order to hide the color bands.</p>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
<h4>Previous topic</h4>
|
<h4>Previous topic</h4>
|
||||||
<p class="topless"><a href="Methods.html"
|
<p class="topless"><a href="Model-Selection.html"
|
||||||
title="previous chapter">Quantification Methods</a></p>
|
title="previous chapter">Model Selection</a></p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
<h4>Next topic</h4>
|
<h4>Next topic</h4>
|
||||||
<p class="topless"><a href="modules.html"
|
<p class="topless"><a href="modules.html"
|
||||||
title="next chapter">quapy</a></p>
|
title="next chapter">quapy</a></p>
|
||||||
|
</div>
|
||||||
<div role="note" aria-label="source link">
|
<div role="note" aria-label="source link">
|
||||||
<h3>This Page</h3>
|
<h3>This Page</h3>
|
||||||
<ul class="this-page-menu">
|
<ul class="this-page-menu">
|
||||||
|
@ -312,7 +321,7 @@ in order to hide the color bands.</p>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>$('#searchbox').show(0);</script>
|
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="clearer"></div>
|
<div class="clearer"></div>
|
||||||
|
@ -330,15 +339,15 @@ in order to hide the color bands.</p>
|
||||||
<a href="modules.html" title="quapy"
|
<a href="modules.html" title="quapy"
|
||||||
>next</a> |</li>
|
>next</a> |</li>
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="Methods.html" title="Quantification Methods"
|
<a href="Model-Selection.html" title="Model Selection"
|
||||||
>previous</a> |</li>
|
>previous</a> |</li>
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.6 documentation</a> »</li>
|
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> »</li>
|
||||||
<li class="nav-item nav-item-this"><a href="">Plotting</a></li>
|
<li class="nav-item nav-item-this"><a href="">Plotting</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer" role="contentinfo">
|
<div class="footer" role="contentinfo">
|
||||||
© Copyright 2021, Alejandro Moreo.
|
© Copyright 2021, Alejandro Moreo.
|
||||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.2.0.
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -76,7 +76,7 @@ Features
|
||||||
Datasets
|
Datasets
|
||||||
Evaluation
|
Evaluation
|
||||||
Methods
|
Methods
|
||||||
Model Selection
|
Model-Selection
|
||||||
Plotting
|
Plotting
|
||||||
API Developers documentation<modules>
|
API Developers documentation<modules>
|
||||||
|
|
||||||
|
|
|
@ -1,27 +1,38 @@
|
||||||
|
:tocdepth: 2
|
||||||
|
|
||||||
quapy.classification package
|
quapy.classification package
|
||||||
============================
|
============================
|
||||||
|
|
||||||
Submodules
|
Submodules
|
||||||
----------
|
----------
|
||||||
|
|
||||||
quapy.classification.methods module
|
quapy.classification.calibration
|
||||||
-----------------------------------
|
--------------------------------
|
||||||
|
|
||||||
|
.. versionadded:: 0.1.7
|
||||||
|
.. automodule:: quapy.classification.calibration
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
quapy.classification.methods
|
||||||
|
----------------------------
|
||||||
|
|
||||||
.. automodule:: quapy.classification.methods
|
.. automodule:: quapy.classification.methods
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
quapy.classification.neural module
|
quapy.classification.neural
|
||||||
----------------------------------
|
---------------------------
|
||||||
|
|
||||||
.. automodule:: quapy.classification.neural
|
.. automodule:: quapy.classification.neural
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
quapy.classification.svmperf module
|
quapy.classification.svmperf
|
||||||
-----------------------------------
|
----------------------------
|
||||||
|
|
||||||
.. automodule:: quapy.classification.svmperf
|
.. automodule:: quapy.classification.svmperf
|
||||||
:members:
|
:members:
|
||||||
|
|
|
@ -1,35 +1,37 @@
|
||||||
|
:tocdepth: 2
|
||||||
|
|
||||||
quapy.data package
|
quapy.data package
|
||||||
==================
|
==================
|
||||||
|
|
||||||
Submodules
|
Submodules
|
||||||
----------
|
----------
|
||||||
|
|
||||||
quapy.data.base module
|
quapy.data.base
|
||||||
----------------------
|
---------------
|
||||||
|
|
||||||
.. automodule:: quapy.data.base
|
.. automodule:: quapy.data.base
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
quapy.data.datasets module
|
quapy.data.datasets
|
||||||
--------------------------
|
-------------------
|
||||||
|
|
||||||
.. automodule:: quapy.data.datasets
|
.. automodule:: quapy.data.datasets
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
quapy.data.preprocessing module
|
quapy.data.preprocessing
|
||||||
-------------------------------
|
------------------------
|
||||||
|
|
||||||
.. automodule:: quapy.data.preprocessing
|
.. automodule:: quapy.data.preprocessing
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
quapy.data.reader module
|
quapy.data.reader
|
||||||
------------------------
|
-----------------
|
||||||
|
|
||||||
.. automodule:: quapy.data.reader
|
.. automodule:: quapy.data.reader
|
||||||
:members:
|
:members:
|
||||||
|
|
|
@ -1,43 +1,45 @@
|
||||||
|
:tocdepth: 2
|
||||||
|
|
||||||
quapy.method package
|
quapy.method package
|
||||||
====================
|
====================
|
||||||
|
|
||||||
Submodules
|
Submodules
|
||||||
----------
|
----------
|
||||||
|
|
||||||
quapy.method.aggregative module
|
quapy.method.aggregative
|
||||||
-------------------------------
|
------------------------
|
||||||
|
|
||||||
.. automodule:: quapy.method.aggregative
|
.. automodule:: quapy.method.aggregative
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
quapy.method.base module
|
quapy.method.base
|
||||||
------------------------
|
-----------------
|
||||||
|
|
||||||
.. automodule:: quapy.method.base
|
.. automodule:: quapy.method.base
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
quapy.method.meta module
|
quapy.method.meta
|
||||||
------------------------
|
-----------------
|
||||||
|
|
||||||
.. automodule:: quapy.method.meta
|
.. automodule:: quapy.method.meta
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
quapy.method.neural module
|
quapy.method.neural
|
||||||
--------------------------
|
-------------------
|
||||||
|
|
||||||
.. automodule:: quapy.method.neural
|
.. automodule:: quapy.method.neural
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
quapy.method.non\_aggregative module
|
quapy.method.non\_aggregative
|
||||||
------------------------------------
|
-----------------------------
|
||||||
|
|
||||||
.. automodule:: quapy.method.non_aggregative
|
.. automodule:: quapy.method.non_aggregative
|
||||||
:members:
|
:members:
|
||||||
|
|
|
@ -1,68 +1,79 @@
|
||||||
|
:tocdepth: 2
|
||||||
|
|
||||||
quapy package
|
quapy package
|
||||||
=============
|
=============
|
||||||
|
|
||||||
Subpackages
|
|
||||||
-----------
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 4
|
|
||||||
|
|
||||||
quapy.classification
|
|
||||||
quapy.data
|
|
||||||
quapy.method
|
|
||||||
quapy.tests
|
|
||||||
|
|
||||||
Submodules
|
Submodules
|
||||||
----------
|
----------
|
||||||
|
|
||||||
quapy.error module
|
quapy.error
|
||||||
------------------
|
-----------
|
||||||
|
|
||||||
.. automodule:: quapy.error
|
.. automodule:: quapy.error
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
quapy.evaluation module
|
quapy.evaluation
|
||||||
-----------------------
|
----------------
|
||||||
|
|
||||||
.. automodule:: quapy.evaluation
|
.. automodule:: quapy.evaluation
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
quapy.functional module
|
quapy.protocol
|
||||||
-----------------------
|
--------------
|
||||||
|
|
||||||
|
.. versionadded:: 0.1.7
|
||||||
|
.. automodule:: quapy.protocol
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
quapy.functional
|
||||||
|
----------------
|
||||||
|
|
||||||
.. automodule:: quapy.functional
|
.. automodule:: quapy.functional
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
quapy.model\_selection module
|
quapy.model\_selection
|
||||||
-----------------------------
|
----------------------
|
||||||
|
|
||||||
.. automodule:: quapy.model_selection
|
.. automodule:: quapy.model_selection
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
quapy.plot module
|
quapy.plot
|
||||||
-----------------
|
----------
|
||||||
|
|
||||||
.. automodule:: quapy.plot
|
.. automodule:: quapy.plot
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
quapy.util module
|
quapy.util
|
||||||
-----------------
|
----------
|
||||||
|
|
||||||
.. automodule:: quapy.util
|
.. automodule:: quapy.util
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
|
Subpackages
|
||||||
|
-----------
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 3
|
||||||
|
|
||||||
|
quapy.classification
|
||||||
|
quapy.data
|
||||||
|
quapy.method
|
||||||
|
|
||||||
|
|
||||||
Module contents
|
Module contents
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
|
@ -70,3 +81,4 @@ Module contents
|
||||||
:members:
|
:members:
|
||||||
:undoc-members:
|
:undoc-members:
|
||||||
:show-inheritance:
|
:show-inheritance:
|
||||||
|
|
||||||
|
|
|
@ -1,37 +0,0 @@
|
||||||
quapy.tests package
|
|
||||||
===================
|
|
||||||
|
|
||||||
Submodules
|
|
||||||
----------
|
|
||||||
|
|
||||||
quapy.tests.test\_base module
|
|
||||||
-----------------------------
|
|
||||||
|
|
||||||
.. automodule:: quapy.tests.test_base
|
|
||||||
:members:
|
|
||||||
:undoc-members:
|
|
||||||
:show-inheritance:
|
|
||||||
|
|
||||||
quapy.tests.test\_datasets module
|
|
||||||
---------------------------------
|
|
||||||
|
|
||||||
.. automodule:: quapy.tests.test_datasets
|
|
||||||
:members:
|
|
||||||
:undoc-members:
|
|
||||||
:show-inheritance:
|
|
||||||
|
|
||||||
quapy.tests.test\_methods module
|
|
||||||
--------------------------------
|
|
||||||
|
|
||||||
.. automodule:: quapy.tests.test_methods
|
|
||||||
:members:
|
|
||||||
:undoc-members:
|
|
||||||
:show-inheritance:
|
|
||||||
|
|
||||||
Module contents
|
|
||||||
---------------
|
|
||||||
|
|
||||||
.. automodule:: quapy.tests
|
|
||||||
:members:
|
|
||||||
:undoc-members:
|
|
||||||
:show-inheritance:
|
|
|
@ -1,7 +0,0 @@
|
||||||
Getting Started
|
|
||||||
===============
|
|
||||||
QuaPy is an open source framework for Quantification (a.k.a. Supervised Prevalence Estimation) written in Python.
|
|
||||||
|
|
||||||
Installation
|
|
||||||
------------
|
|
||||||
>>> pip install quapy
|
|
|
@ -1 +0,0 @@
|
||||||
.. include:: ../../README.md
|
|
|
@ -1,701 +0,0 @@
|
||||||
@import url("basic.css");
|
|
||||||
|
|
||||||
/* -- page layout ----------------------------------------------------------- */
|
|
||||||
|
|
||||||
body {
|
|
||||||
font-family: Georgia, serif;
|
|
||||||
font-size: 17px;
|
|
||||||
background-color: #fff;
|
|
||||||
color: #000;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
div.document {
|
|
||||||
width: 940px;
|
|
||||||
margin: 30px auto 0 auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.documentwrapper {
|
|
||||||
float: left;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.bodywrapper {
|
|
||||||
margin: 0 0 0 220px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar {
|
|
||||||
width: 220px;
|
|
||||||
font-size: 14px;
|
|
||||||
line-height: 1.5;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr {
|
|
||||||
border: 1px solid #B1B4B6;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.body {
|
|
||||||
background-color: #fff;
|
|
||||||
color: #3E4349;
|
|
||||||
padding: 0 30px 0 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.body > .section {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.footer {
|
|
||||||
width: 940px;
|
|
||||||
margin: 20px auto 30px auto;
|
|
||||||
font-size: 14px;
|
|
||||||
color: #888;
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.footer a {
|
|
||||||
color: #888;
|
|
||||||
}
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-family: inherit;
|
|
||||||
font-size: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
div.relations {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
div.sphinxsidebar a {
|
|
||||||
color: #444;
|
|
||||||
text-decoration: none;
|
|
||||||
border-bottom: 1px dotted #999;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar a:hover {
|
|
||||||
border-bottom: 1px solid #999;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebarwrapper {
|
|
||||||
padding: 18px 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebarwrapper p.logo {
|
|
||||||
padding: 0;
|
|
||||||
margin: -10px 0 0 0px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebarwrapper h1.logo {
|
|
||||||
margin-top: -10px;
|
|
||||||
text-align: center;
|
|
||||||
margin-bottom: 5px;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebarwrapper h1.logo-name {
|
|
||||||
margin-top: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebarwrapper p.blurb {
|
|
||||||
margin-top: 0;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar h3,
|
|
||||||
div.sphinxsidebar h4 {
|
|
||||||
font-family: Georgia, serif;
|
|
||||||
color: #444;
|
|
||||||
font-size: 24px;
|
|
||||||
font-weight: normal;
|
|
||||||
margin: 0 0 5px 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar h4 {
|
|
||||||
font-size: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar h3 a {
|
|
||||||
color: #444;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar p.logo a,
|
|
||||||
div.sphinxsidebar h3 a,
|
|
||||||
div.sphinxsidebar p.logo a:hover,
|
|
||||||
div.sphinxsidebar h3 a:hover {
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar p {
|
|
||||||
color: #555;
|
|
||||||
margin: 10px 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar ul {
|
|
||||||
margin: 10px 0;
|
|
||||||
padding: 0;
|
|
||||||
color: #000;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar ul li.toctree-l1 > a {
|
|
||||||
font-size: 120%;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar ul li.toctree-l2 > a {
|
|
||||||
font-size: 110%;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar input {
|
|
||||||
border: 1px solid #CCC;
|
|
||||||
font-family: Georgia, serif;
|
|
||||||
font-size: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar hr {
|
|
||||||
border: none;
|
|
||||||
height: 1px;
|
|
||||||
color: #AAA;
|
|
||||||
background: #AAA;
|
|
||||||
|
|
||||||
text-align: left;
|
|
||||||
margin-left: 0;
|
|
||||||
width: 50%;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar .badge {
|
|
||||||
border-bottom: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar .badge:hover {
|
|
||||||
border-bottom: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* To address an issue with donation coming after search */
|
|
||||||
div.sphinxsidebar h3.donation {
|
|
||||||
margin-top: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -- body styles ----------------------------------------------------------- */
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: #004B6B;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover {
|
|
||||||
color: #6D4100;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.body h1,
|
|
||||||
div.body h2,
|
|
||||||
div.body h3,
|
|
||||||
div.body h4,
|
|
||||||
div.body h5,
|
|
||||||
div.body h6 {
|
|
||||||
font-family: Georgia, serif;
|
|
||||||
font-weight: normal;
|
|
||||||
margin: 30px 0px 10px 0px;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; }
|
|
||||||
div.body h2 { font-size: 180%; }
|
|
||||||
div.body h3 { font-size: 150%; }
|
|
||||||
div.body h4 { font-size: 130%; }
|
|
||||||
div.body h5 { font-size: 100%; }
|
|
||||||
div.body h6 { font-size: 100%; }
|
|
||||||
|
|
||||||
a.headerlink {
|
|
||||||
color: #DDD;
|
|
||||||
padding: 0 4px;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.headerlink:hover {
|
|
||||||
color: #444;
|
|
||||||
background: #EAEAEA;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.body p, div.body dd, div.body li {
|
|
||||||
line-height: 1.4em;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.admonition {
|
|
||||||
margin: 20px 0px;
|
|
||||||
padding: 10px 30px;
|
|
||||||
background-color: #EEE;
|
|
||||||
border: 1px solid #CCC;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.admonition tt.xref, div.admonition code.xref, div.admonition a tt {
|
|
||||||
background-color: #FBFBFB;
|
|
||||||
border-bottom: 1px solid #fafafa;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.admonition p.admonition-title {
|
|
||||||
font-family: Georgia, serif;
|
|
||||||
font-weight: normal;
|
|
||||||
font-size: 24px;
|
|
||||||
margin: 0 0 10px 0;
|
|
||||||
padding: 0;
|
|
||||||
line-height: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.admonition p.last {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.highlight {
|
|
||||||
background-color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
dt:target, .highlight {
|
|
||||||
background: #FAF3E8;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.warning {
|
|
||||||
background-color: #FCC;
|
|
||||||
border: 1px solid #FAA;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.danger {
|
|
||||||
background-color: #FCC;
|
|
||||||
border: 1px solid #FAA;
|
|
||||||
-moz-box-shadow: 2px 2px 4px #D52C2C;
|
|
||||||
-webkit-box-shadow: 2px 2px 4px #D52C2C;
|
|
||||||
box-shadow: 2px 2px 4px #D52C2C;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.error {
|
|
||||||
background-color: #FCC;
|
|
||||||
border: 1px solid #FAA;
|
|
||||||
-moz-box-shadow: 2px 2px 4px #D52C2C;
|
|
||||||
-webkit-box-shadow: 2px 2px 4px #D52C2C;
|
|
||||||
box-shadow: 2px 2px 4px #D52C2C;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.caution {
|
|
||||||
background-color: #FCC;
|
|
||||||
border: 1px solid #FAA;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.attention {
|
|
||||||
background-color: #FCC;
|
|
||||||
border: 1px solid #FAA;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.important {
|
|
||||||
background-color: #EEE;
|
|
||||||
border: 1px solid #CCC;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.note {
|
|
||||||
background-color: #EEE;
|
|
||||||
border: 1px solid #CCC;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.tip {
|
|
||||||
background-color: #EEE;
|
|
||||||
border: 1px solid #CCC;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.hint {
|
|
||||||
background-color: #EEE;
|
|
||||||
border: 1px solid #CCC;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.seealso {
|
|
||||||
background-color: #EEE;
|
|
||||||
border: 1px solid #CCC;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
background-color: #EEE;
|
|
||||||
}
|
|
||||||
|
|
||||||
p.admonition-title {
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
|
|
||||||
p.admonition-title:after {
|
|
||||||
content: ":";
|
|
||||||
}
|
|
||||||
|
|
||||||
pre, tt, code {
|
|
||||||
font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
|
|
||||||
font-size: 0.9em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hll {
|
|
||||||
background-color: #FFC;
|
|
||||||
margin: 0 -12px;
|
|
||||||
padding: 0 12px;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
img.screenshot {
|
|
||||||
}
|
|
||||||
|
|
||||||
tt.descname, tt.descclassname, code.descname, code.descclassname {
|
|
||||||
font-size: 0.95em;
|
|
||||||
}
|
|
||||||
|
|
||||||
tt.descname, code.descname {
|
|
||||||
padding-right: 0.08em;
|
|
||||||
}
|
|
||||||
|
|
||||||
img.screenshot {
|
|
||||||
-moz-box-shadow: 2px 2px 4px #EEE;
|
|
||||||
-webkit-box-shadow: 2px 2px 4px #EEE;
|
|
||||||
box-shadow: 2px 2px 4px #EEE;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
border: 1px solid #888;
|
|
||||||
-moz-box-shadow: 2px 2px 4px #EEE;
|
|
||||||
-webkit-box-shadow: 2px 2px 4px #EEE;
|
|
||||||
box-shadow: 2px 2px 4px #EEE;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th {
|
|
||||||
border: 1px solid #888;
|
|
||||||
padding: 0.25em 0.7em;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.field-list, table.footnote {
|
|
||||||
border: none;
|
|
||||||
-moz-box-shadow: none;
|
|
||||||
-webkit-box-shadow: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
margin: 15px 0;
|
|
||||||
width: 100%;
|
|
||||||
border: 1px solid #EEE;
|
|
||||||
background: #FDFDFD;
|
|
||||||
font-size: 0.9em;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.footnote + table.footnote {
|
|
||||||
margin-top: -15px;
|
|
||||||
border-top: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.field-list th {
|
|
||||||
padding: 0 0.8em 0 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.field-list td {
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.field-list p {
|
|
||||||
margin-bottom: 0.8em;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Cloned from
|
|
||||||
* https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68
|
|
||||||
*/
|
|
||||||
.field-name {
|
|
||||||
-moz-hyphens: manual;
|
|
||||||
-ms-hyphens: manual;
|
|
||||||
-webkit-hyphens: manual;
|
|
||||||
hyphens: manual;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.footnote td.label {
|
|
||||||
width: .1px;
|
|
||||||
padding: 0.3em 0 0.3em 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.footnote td {
|
|
||||||
padding: 0.3em 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
dl {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
dl dd {
|
|
||||||
margin-left: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote {
|
|
||||||
margin: 0 0 0 30px;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul, ol {
|
|
||||||
/* Matches the 30px from the narrow-screen "li > ul" selector below */
|
|
||||||
margin: 10px 0 10px 30px;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre {
|
|
||||||
background: #EEE;
|
|
||||||
padding: 7px 30px;
|
|
||||||
margin: 15px 0px;
|
|
||||||
line-height: 1.3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.viewcode-block:target {
|
|
||||||
background: #ffd;
|
|
||||||
}
|
|
||||||
|
|
||||||
dl pre, blockquote pre, li pre {
|
|
||||||
margin-left: 0;
|
|
||||||
padding-left: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
tt, code {
|
|
||||||
background-color: #ecf0f3;
|
|
||||||
color: #222;
|
|
||||||
/* padding: 1px 2px; */
|
|
||||||
}
|
|
||||||
|
|
||||||
tt.xref, code.xref, a tt {
|
|
||||||
background-color: #FBFBFB;
|
|
||||||
border-bottom: 1px solid #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.reference {
|
|
||||||
text-decoration: none;
|
|
||||||
border-bottom: 1px dotted #004B6B;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Don't put an underline on images */
|
|
||||||
a.image-reference, a.image-reference:hover {
|
|
||||||
border-bottom: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.reference:hover {
|
|
||||||
border-bottom: 1px solid #6D4100;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.footnote-reference {
|
|
||||||
text-decoration: none;
|
|
||||||
font-size: 0.7em;
|
|
||||||
vertical-align: top;
|
|
||||||
border-bottom: 1px dotted #004B6B;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.footnote-reference:hover {
|
|
||||||
border-bottom: 1px solid #6D4100;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover tt, a:hover code {
|
|
||||||
background: #EEE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@media screen and (max-width: 870px) {
|
|
||||||
|
|
||||||
div.sphinxsidebar {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.document {
|
|
||||||
width: 100%;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
div.documentwrapper {
|
|
||||||
margin-left: 0;
|
|
||||||
margin-top: 0;
|
|
||||||
margin-right: 0;
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.bodywrapper {
|
|
||||||
margin-top: 0;
|
|
||||||
margin-right: 0;
|
|
||||||
margin-bottom: 0;
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul {
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
li > ul {
|
|
||||||
/* Matches the 30px from the "ul, ol" selector above */
|
|
||||||
margin-left: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.document {
|
|
||||||
width: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer {
|
|
||||||
width: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bodywrapper {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer {
|
|
||||||
width: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.github {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@media screen and (max-width: 875px) {
|
|
||||||
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
padding: 20px 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.documentwrapper {
|
|
||||||
float: none;
|
|
||||||
background: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar {
|
|
||||||
display: block;
|
|
||||||
float: none;
|
|
||||||
width: 102.5%;
|
|
||||||
margin: 50px -30px -20px -30px;
|
|
||||||
padding: 10px 20px;
|
|
||||||
background: #333;
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p,
|
|
||||||
div.sphinxsidebar h3 a {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar a {
|
|
||||||
color: #AAA;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.sphinxsidebar p.logo {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.document {
|
|
||||||
width: 100%;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.footer {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.bodywrapper {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.body {
|
|
||||||
min-height: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.rtd_doc_footer {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.document {
|
|
||||||
width: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer {
|
|
||||||
width: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer {
|
|
||||||
width: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.github {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* misc. */
|
|
||||||
|
|
||||||
.revsys-inline {
|
|
||||||
display: none!important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Make nested-list/multi-paragraph items look better in Releases changelog
|
|
||||||
* pages. Without this, docutils' magical list fuckery causes inconsistent
|
|
||||||
* formatting between different release sub-lists.
|
|
||||||
*/
|
|
||||||
div#changelog > div.section > ul > li > p:only-child {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Hide fugly table cell borders in ..bibliography:: directive output */
|
|
||||||
table.docutils.citation, table.docutils.citation td, table.docutils.citation th {
|
|
||||||
border: none;
|
|
||||||
/* Below needed in some edge cases; if not applied, bottom shadows appear */
|
|
||||||
-moz-box-shadow: none;
|
|
||||||
-webkit-box-shadow: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* relbar */
|
|
||||||
|
|
||||||
.related {
|
|
||||||
line-height: 30px;
|
|
||||||
width: 100%;
|
|
||||||
font-size: 0.9rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.related.top {
|
|
||||||
border-bottom: 1px solid #EEE;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.related.bottom {
|
|
||||||
border-top: 1px solid #EEE;
|
|
||||||
}
|
|
||||||
|
|
||||||
.related ul {
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
list-style: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.related li {
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
|
|
||||||
nav#rellinks {
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
nav#rellinks li+li:before {
|
|
||||||
content: "|";
|
|
||||||
}
|
|
||||||
|
|
||||||
nav#breadcrumbs li+li:before {
|
|
||||||
content: "\00BB";
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Hide certain items when printing */
|
|
||||||
@media print {
|
|
||||||
div.related {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -4,7 +4,7 @@
|
||||||
*
|
*
|
||||||
* Sphinx stylesheet -- basic theme.
|
* Sphinx stylesheet -- basic theme.
|
||||||
*
|
*
|
||||||
* :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
|
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
|
||||||
* :license: BSD, see LICENSE for details.
|
* :license: BSD, see LICENSE for details.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -222,7 +222,7 @@ table.modindextable td {
|
||||||
/* -- general body styles --------------------------------------------------- */
|
/* -- general body styles --------------------------------------------------- */
|
||||||
|
|
||||||
div.body {
|
div.body {
|
||||||
min-width: 450px;
|
min-width: 360px;
|
||||||
max-width: 800px;
|
max-width: 800px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -237,16 +237,6 @@ a.headerlink {
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.brackets:before,
|
|
||||||
span.brackets > a:before{
|
|
||||||
content: "[";
|
|
||||||
}
|
|
||||||
|
|
||||||
a.brackets:after,
|
|
||||||
span.brackets > a:after {
|
|
||||||
content: "]";
|
|
||||||
}
|
|
||||||
|
|
||||||
h1:hover > a.headerlink,
|
h1:hover > a.headerlink,
|
||||||
h2:hover > a.headerlink,
|
h2:hover > a.headerlink,
|
||||||
h3:hover > a.headerlink,
|
h3:hover > a.headerlink,
|
||||||
|
@ -334,13 +324,15 @@ aside.sidebar {
|
||||||
p.sidebar-title {
|
p.sidebar-title {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
nav.contents,
|
||||||
|
aside.topic,
|
||||||
div.admonition, div.topic, blockquote {
|
div.admonition, div.topic, blockquote {
|
||||||
clear: left;
|
clear: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- topics ---------------------------------------------------------------- */
|
/* -- topics ---------------------------------------------------------------- */
|
||||||
|
nav.contents,
|
||||||
|
aside.topic,
|
||||||
div.topic {
|
div.topic {
|
||||||
border: 1px solid #ccc;
|
border: 1px solid #ccc;
|
||||||
padding: 7px;
|
padding: 7px;
|
||||||
|
@ -379,6 +371,8 @@ div.body p.centered {
|
||||||
|
|
||||||
div.sidebar > :last-child,
|
div.sidebar > :last-child,
|
||||||
aside.sidebar > :last-child,
|
aside.sidebar > :last-child,
|
||||||
|
nav.contents > :last-child,
|
||||||
|
aside.topic > :last-child,
|
||||||
div.topic > :last-child,
|
div.topic > :last-child,
|
||||||
div.admonition > :last-child {
|
div.admonition > :last-child {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
|
@ -386,6 +380,8 @@ div.admonition > :last-child {
|
||||||
|
|
||||||
div.sidebar::after,
|
div.sidebar::after,
|
||||||
aside.sidebar::after,
|
aside.sidebar::after,
|
||||||
|
nav.contents::after,
|
||||||
|
aside.topic::after,
|
||||||
div.topic::after,
|
div.topic::after,
|
||||||
div.admonition::after,
|
div.admonition::after,
|
||||||
blockquote::after {
|
blockquote::after {
|
||||||
|
@ -428,10 +424,6 @@ table.docutils td, table.docutils th {
|
||||||
border-bottom: 1px solid #aaa;
|
border-bottom: 1px solid #aaa;
|
||||||
}
|
}
|
||||||
|
|
||||||
table.footnote td, table.footnote th {
|
|
||||||
border: 0 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
th {
|
th {
|
||||||
text-align: left;
|
text-align: left;
|
||||||
padding-right: 5px;
|
padding-right: 5px;
|
||||||
|
@ -614,20 +606,26 @@ ol.simple p,
|
||||||
ul.simple p {
|
ul.simple p {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
|
aside.footnote > span,
|
||||||
dl.footnote > dt,
|
div.citation > span {
|
||||||
dl.citation > dt {
|
|
||||||
float: left;
|
float: left;
|
||||||
margin-right: 0.5em;
|
|
||||||
}
|
}
|
||||||
|
aside.footnote > span:last-of-type,
|
||||||
dl.footnote > dd,
|
div.citation > span:last-of-type {
|
||||||
dl.citation > dd {
|
padding-right: 0.5em;
|
||||||
|
}
|
||||||
|
aside.footnote > p {
|
||||||
|
margin-left: 2em;
|
||||||
|
}
|
||||||
|
div.citation > p {
|
||||||
|
margin-left: 4em;
|
||||||
|
}
|
||||||
|
aside.footnote > p:last-of-type,
|
||||||
|
div.citation > p:last-of-type {
|
||||||
margin-bottom: 0em;
|
margin-bottom: 0em;
|
||||||
}
|
}
|
||||||
|
aside.footnote > p:last-of-type:after,
|
||||||
dl.footnote > dd:after,
|
div.citation > p:last-of-type:after {
|
||||||
dl.citation > dd:after {
|
|
||||||
content: "";
|
content: "";
|
||||||
clear: both;
|
clear: both;
|
||||||
}
|
}
|
||||||
|
@ -644,10 +642,6 @@ dl.field-list > dt {
|
||||||
padding-right: 5px;
|
padding-right: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.field-list > dt:after {
|
|
||||||
content: ":";
|
|
||||||
}
|
|
||||||
|
|
||||||
dl.field-list > dd {
|
dl.field-list > dd {
|
||||||
padding-left: 0.5em;
|
padding-left: 0.5em;
|
||||||
margin-top: 0em;
|
margin-top: 0em;
|
||||||
|
@ -731,8 +725,9 @@ dl.glossary dt {
|
||||||
|
|
||||||
.classifier:before {
|
.classifier:before {
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
margin: 0.5em;
|
margin: 0 0.5em;
|
||||||
content: ":";
|
content: ":";
|
||||||
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
abbr, acronym {
|
abbr, acronym {
|
||||||
|
@ -756,6 +751,7 @@ span.pre {
|
||||||
-ms-hyphens: none;
|
-ms-hyphens: none;
|
||||||
-webkit-hyphens: none;
|
-webkit-hyphens: none;
|
||||||
hyphens: none;
|
hyphens: none;
|
||||||
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
div[class*="highlight-"] {
|
div[class*="highlight-"] {
|
||||||
|
|
|
@ -294,6 +294,8 @@ div.quotebar {
|
||||||
padding: 2px 7px;
|
padding: 2px 7px;
|
||||||
border: 1px solid #ccc;
|
border: 1px solid #ccc;
|
||||||
}
|
}
|
||||||
|
nav.contents,
|
||||||
|
aside.topic,
|
||||||
|
|
||||||
div.topic {
|
div.topic {
|
||||||
background-color: #f8f8f8;
|
background-color: #f8f8f8;
|
||||||
|
|
|
@ -9,33 +9,22 @@
|
||||||
// :copyright: Copyright 2012-2014 by Sphinx team, see AUTHORS.
|
// :copyright: Copyright 2012-2014 by Sphinx team, see AUTHORS.
|
||||||
// :license: BSD, see LICENSE for details.
|
// :license: BSD, see LICENSE for details.
|
||||||
//
|
//
|
||||||
$(document).ready(function(){
|
const initialiseBizStyle = () => {
|
||||||
if (navigator.userAgent.indexOf('iPhone') > 0 ||
|
if (navigator.userAgent.indexOf("iPhone") > 0 || navigator.userAgent.indexOf("Android") > 0) {
|
||||||
navigator.userAgent.indexOf('Android') > 0) {
|
document.querySelector("li.nav-item-0 a").innerText = "Top"
|
||||||
$("li.nav-item-0 a").text("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);
|
||||||
|
}
|
||||||
|
|
||||||
$("div.related:first ul li:not(.right) a").slice(1).each(function(i, item){
|
window.addEventListener("resize",
|
||||||
if (item.text.length > 20) {
|
() => (document.querySelector("li.nav-item-0 a").innerText = (window.innerWidth <= 776) ? "Top" : "QuaPy 0.1.7 documentation")
|
||||||
var tmpstr = item.text
|
)
|
||||||
$(item).attr("title", tmpstr);
|
|
||||||
$(item).text(tmpstr.substr(0, 17) + "...");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$("div.related:last ul li:not(.right) a").slice(1).each(function(i, item){
|
|
||||||
if (item.text.length > 20) {
|
|
||||||
var tmpstr = item.text
|
|
||||||
$(item).attr("title", tmpstr);
|
|
||||||
$(item).text(tmpstr.substr(0, 17) + "...");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
$(window).resize(function(){
|
if (document.readyState !== "loading") initialiseBizStyle()
|
||||||
if ($(window).width() <= 776) {
|
else document.addEventListener("DOMContentLoaded", initialiseBizStyle)
|
||||||
$("li.nav-item-0 a").text("Top");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$("li.nav-item-0 a").text("QuaPy 0.1.6 documentation");
|
|
||||||
}
|
|
||||||
});
|
|
|
@ -1 +0,0 @@
|
||||||
/* This file intentionally left blank. */
|
|
|
@ -2,322 +2,155 @@
|
||||||
* doctools.js
|
* doctools.js
|
||||||
* ~~~~~~~~~~~
|
* ~~~~~~~~~~~
|
||||||
*
|
*
|
||||||
* Sphinx JavaScript utilities for all documentation.
|
* Base JavaScript utilities for all Sphinx HTML documentation.
|
||||||
*
|
*
|
||||||
* :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
|
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
|
||||||
* :license: BSD, see LICENSE for details.
|
* :license: BSD, see LICENSE for details.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
"use strict";
|
||||||
|
|
||||||
/**
|
const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([
|
||||||
* select a different prefix for underscore
|
"TEXTAREA",
|
||||||
*/
|
"INPUT",
|
||||||
$u = _.noConflict();
|
"SELECT",
|
||||||
|
"BUTTON",
|
||||||
|
]);
|
||||||
|
|
||||||
/**
|
const _ready = (callback) => {
|
||||||
* make the code below compatible with browsers without
|
if (document.readyState !== "loading") {
|
||||||
* an installed firebug like debugger
|
callback();
|
||||||
if (!window.console || !console.firebug) {
|
|
||||||
var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
|
|
||||||
"dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
|
|
||||||
"profile", "profileEnd"];
|
|
||||||
window.console = {};
|
|
||||||
for (var i = 0; i < names.length; ++i)
|
|
||||||
window.console[names[i]] = function() {};
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* small helper function to urldecode strings
|
|
||||||
*
|
|
||||||
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
|
|
||||||
*/
|
|
||||||
jQuery.urldecode = function(x) {
|
|
||||||
if (!x) {
|
|
||||||
return x
|
|
||||||
}
|
|
||||||
return decodeURIComponent(x.replace(/\+/g, ' '));
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* small helper function to urlencode strings
|
|
||||||
*/
|
|
||||||
jQuery.urlencode = encodeURIComponent;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This function returns the parsed url parameters of the
|
|
||||||
* current request. Multiple values per key are supported,
|
|
||||||
* it will always return arrays of strings for the value parts.
|
|
||||||
*/
|
|
||||||
jQuery.getQueryParameters = function(s) {
|
|
||||||
if (typeof s === 'undefined')
|
|
||||||
s = document.location.search;
|
|
||||||
var parts = s.substr(s.indexOf('?') + 1).split('&');
|
|
||||||
var result = {};
|
|
||||||
for (var i = 0; i < parts.length; i++) {
|
|
||||||
var tmp = parts[i].split('=', 2);
|
|
||||||
var key = jQuery.urldecode(tmp[0]);
|
|
||||||
var value = jQuery.urldecode(tmp[1]);
|
|
||||||
if (key in result)
|
|
||||||
result[key].push(value);
|
|
||||||
else
|
|
||||||
result[key] = [value];
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* highlight a given string on a jquery object by wrapping it in
|
|
||||||
* span elements with the given class name.
|
|
||||||
*/
|
|
||||||
jQuery.fn.highlightText = function(text, className) {
|
|
||||||
function highlight(node, addItems) {
|
|
||||||
if (node.nodeType === 3) {
|
|
||||||
var val = node.nodeValue;
|
|
||||||
var pos = val.toLowerCase().indexOf(text);
|
|
||||||
if (pos >= 0 &&
|
|
||||||
!jQuery(node.parentNode).hasClass(className) &&
|
|
||||||
!jQuery(node.parentNode).hasClass("nohighlight")) {
|
|
||||||
var span;
|
|
||||||
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
|
|
||||||
if (isInSVG) {
|
|
||||||
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
|
|
||||||
} else {
|
} else {
|
||||||
span = document.createElement("span");
|
document.addEventListener("DOMContentLoaded", callback);
|
||||||
span.className = className;
|
|
||||||
}
|
}
|
||||||
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
|
|
||||||
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
|
|
||||||
document.createTextNode(val.substr(pos + text.length)),
|
|
||||||
node.nextSibling));
|
|
||||||
node.nodeValue = val.substr(0, pos);
|
|
||||||
if (isInSVG) {
|
|
||||||
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
|
|
||||||
var bbox = node.parentElement.getBBox();
|
|
||||||
rect.x.baseVal.value = bbox.x;
|
|
||||||
rect.y.baseVal.value = bbox.y;
|
|
||||||
rect.width.baseVal.value = bbox.width;
|
|
||||||
rect.height.baseVal.value = bbox.height;
|
|
||||||
rect.setAttribute('class', className);
|
|
||||||
addItems.push({
|
|
||||||
"parent": node.parentNode,
|
|
||||||
"target": rect});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (!jQuery(node).is("button, select, textarea")) {
|
|
||||||
jQuery.each(node.childNodes, function() {
|
|
||||||
highlight(this, addItems);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var addItems = [];
|
|
||||||
var result = this.each(function() {
|
|
||||||
highlight(this, addItems);
|
|
||||||
});
|
|
||||||
for (var i = 0; i < addItems.length; ++i) {
|
|
||||||
jQuery(addItems[i].parent).before(addItems[i].target);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
|
||||||
* backward compatibility for jQuery.browser
|
|
||||||
* This will be supported until firefox bug is fixed.
|
|
||||||
*/
|
|
||||||
if (!jQuery.browser) {
|
|
||||||
jQuery.uaMatch = function(ua) {
|
|
||||||
ua = ua.toLowerCase();
|
|
||||||
|
|
||||||
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
|
|
||||||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
|
|
||||||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
|
|
||||||
/(msie) ([\w.]+)/.exec(ua) ||
|
|
||||||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
|
|
||||||
[];
|
|
||||||
|
|
||||||
return {
|
|
||||||
browser: match[ 1 ] || "",
|
|
||||||
version: match[ 2 ] || "0"
|
|
||||||
};
|
|
||||||
};
|
|
||||||
jQuery.browser = {};
|
|
||||||
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Small JavaScript module for the documentation.
|
* Small JavaScript module for the documentation.
|
||||||
*/
|
*/
|
||||||
var Documentation = {
|
const Documentation = {
|
||||||
|
init: () => {
|
||||||
init : function() {
|
Documentation.initDomainIndexTable();
|
||||||
this.fixFirefoxAnchorBug();
|
Documentation.initOnKeyListeners();
|
||||||
this.highlightSearchWords();
|
|
||||||
this.initIndexTable();
|
|
||||||
if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) {
|
|
||||||
this.initOnKeyListeners();
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* i18n support
|
* i18n support
|
||||||
*/
|
*/
|
||||||
TRANSLATIONS : {},
|
TRANSLATIONS: {},
|
||||||
PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; },
|
PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),
|
||||||
LOCALE : 'unknown',
|
LOCALE: "unknown",
|
||||||
|
|
||||||
// gettext and ngettext don't access this so that the functions
|
// gettext and ngettext don't access this so that the functions
|
||||||
// can safely bound to a different name (_ = Documentation.gettext)
|
// can safely bound to a different name (_ = Documentation.gettext)
|
||||||
gettext : function(string) {
|
gettext: (string) => {
|
||||||
var translated = Documentation.TRANSLATIONS[string];
|
const translated = Documentation.TRANSLATIONS[string];
|
||||||
if (typeof translated === 'undefined')
|
switch (typeof translated) {
|
||||||
return string;
|
case "undefined":
|
||||||
return (typeof translated === 'string') ? translated : translated[0];
|
return string; // no translation
|
||||||
},
|
case "string":
|
||||||
|
return translated; // translation exists
|
||||||
ngettext : function(singular, plural, n) {
|
default:
|
||||||
var translated = Documentation.TRANSLATIONS[singular];
|
return translated[0]; // (singular, plural) translation tuple exists
|
||||||
if (typeof translated === 'undefined')
|
|
||||||
return (n == 1) ? singular : plural;
|
|
||||||
return translated[Documentation.PLURALEXPR(n)];
|
|
||||||
},
|
|
||||||
|
|
||||||
addTranslations : function(catalog) {
|
|
||||||
for (var key in catalog.messages)
|
|
||||||
this.TRANSLATIONS[key] = catalog.messages[key];
|
|
||||||
this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
|
|
||||||
this.LOCALE = catalog.locale;
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* add context elements like header anchor links
|
|
||||||
*/
|
|
||||||
addContextElements : function() {
|
|
||||||
$('div[id] > :header:first').each(function() {
|
|
||||||
$('<a class="headerlink">\u00B6</a>').
|
|
||||||
attr('href', '#' + this.id).
|
|
||||||
attr('title', _('Permalink to this headline')).
|
|
||||||
appendTo(this);
|
|
||||||
});
|
|
||||||
$('dt[id]').each(function() {
|
|
||||||
$('<a class="headerlink">\u00B6</a>').
|
|
||||||
attr('href', '#' + this.id).
|
|
||||||
attr('title', _('Permalink to this definition')).
|
|
||||||
appendTo(this);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* workaround a firefox stupidity
|
|
||||||
* see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
|
|
||||||
*/
|
|
||||||
fixFirefoxAnchorBug : function() {
|
|
||||||
if (document.location.hash && $.browser.mozilla)
|
|
||||||
window.setTimeout(function() {
|
|
||||||
document.location.href += '';
|
|
||||||
}, 10);
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* highlight the search words provided in the url in the text
|
|
||||||
*/
|
|
||||||
highlightSearchWords : function() {
|
|
||||||
var params = $.getQueryParameters();
|
|
||||||
var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
|
|
||||||
if (terms.length) {
|
|
||||||
var body = $('div.body');
|
|
||||||
if (!body.length) {
|
|
||||||
body = $('body');
|
|
||||||
}
|
|
||||||
window.setTimeout(function() {
|
|
||||||
$.each(terms, function() {
|
|
||||||
body.highlightText(this.toLowerCase(), 'highlighted');
|
|
||||||
});
|
|
||||||
}, 10);
|
|
||||||
$('<p class="highlight-link"><a href="javascript:Documentation.' +
|
|
||||||
'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
|
|
||||||
.appendTo($('#searchbox'));
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
ngettext: (singular, plural, n) => {
|
||||||
|
const translated = Documentation.TRANSLATIONS[singular];
|
||||||
|
if (typeof translated !== "undefined")
|
||||||
|
return translated[Documentation.PLURAL_EXPR(n)];
|
||||||
|
return n === 1 ? singular : plural;
|
||||||
|
},
|
||||||
|
|
||||||
|
addTranslations: (catalog) => {
|
||||||
|
Object.assign(Documentation.TRANSLATIONS, catalog.messages);
|
||||||
|
Documentation.PLURAL_EXPR = new Function(
|
||||||
|
"n",
|
||||||
|
`return (${catalog.plural_expr})`
|
||||||
|
);
|
||||||
|
Documentation.LOCALE = catalog.locale;
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* init the domain index toggle buttons
|
* helper function to focus on search bar
|
||||||
*/
|
*/
|
||||||
initIndexTable : function() {
|
focusSearchBar: () => {
|
||||||
var togglers = $('img.toggler').click(function() {
|
document.querySelectorAll("input[name=q]")[0]?.focus();
|
||||||
var src = $(this).attr('src');
|
},
|
||||||
var idnum = $(this).attr('id').substr(7);
|
|
||||||
$('tr.cg-' + idnum).toggle();
|
/**
|
||||||
if (src.substr(-9) === 'minus.png')
|
* Initialise the domain index toggle buttons
|
||||||
$(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
|
*/
|
||||||
else
|
initDomainIndexTable: () => {
|
||||||
$(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
|
const toggler = (el) => {
|
||||||
}).css('display', '');
|
const idNumber = el.id.substr(7);
|
||||||
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
|
const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
|
||||||
togglers.click();
|
if (el.src.substr(-9) === "minus.png") {
|
||||||
|
el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
|
||||||
|
toggledRows.forEach((el) => (el.style.display = "none"));
|
||||||
|
} else {
|
||||||
|
el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
|
||||||
|
toggledRows.forEach((el) => (el.style.display = ""));
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const togglerElements = document.querySelectorAll("img.toggler");
|
||||||
|
togglerElements.forEach((el) =>
|
||||||
|
el.addEventListener("click", (event) => toggler(event.currentTarget))
|
||||||
|
);
|
||||||
|
togglerElements.forEach((el) => (el.style.display = ""));
|
||||||
|
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
initOnKeyListeners: () => {
|
||||||
* helper function to hide the search marks again
|
// only install a listener if it is really needed
|
||||||
*/
|
if (
|
||||||
hideSearchWords : function() {
|
!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
|
||||||
$('#searchbox .highlight-link').fadeOut(300);
|
!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
|
||||||
$('span.highlighted').removeClass('highlighted');
|
)
|
||||||
},
|
return;
|
||||||
|
|
||||||
/**
|
document.addEventListener("keydown", (event) => {
|
||||||
* make the url absolute
|
// bail for input elements
|
||||||
*/
|
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
|
||||||
makeURL : function(relativeURL) {
|
// bail with special keys
|
||||||
return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
|
if (event.altKey || event.ctrlKey || event.metaKey) return;
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
if (!event.shiftKey) {
|
||||||
* get the current relative url
|
switch (event.key) {
|
||||||
*/
|
case "ArrowLeft":
|
||||||
getCurrentURL : function() {
|
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
|
||||||
var path = document.location.pathname;
|
|
||||||
var parts = path.split(/\//);
|
|
||||||
$.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
|
|
||||||
if (this === '..')
|
|
||||||
parts.pop();
|
|
||||||
});
|
|
||||||
var url = parts.join('/');
|
|
||||||
return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
|
|
||||||
},
|
|
||||||
|
|
||||||
initOnKeyListeners: function() {
|
const prevLink = document.querySelector('link[rel="prev"]');
|
||||||
$(document).keydown(function(event) {
|
if (prevLink && prevLink.href) {
|
||||||
var activeElementType = document.activeElement.tagName;
|
window.location.href = prevLink.href;
|
||||||
// don't navigate when in search box, textarea, dropdown or button
|
event.preventDefault();
|
||||||
if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT'
|
|
||||||
&& activeElementType !== 'BUTTON' && !event.altKey && !event.ctrlKey && !event.metaKey
|
|
||||||
&& !event.shiftKey) {
|
|
||||||
switch (event.keyCode) {
|
|
||||||
case 37: // left
|
|
||||||
var prevHref = $('link[rel="prev"]').prop('href');
|
|
||||||
if (prevHref) {
|
|
||||||
window.location.href = prevHref;
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 39: // right
|
case "ArrowRight":
|
||||||
var nextHref = $('link[rel="next"]').prop('href');
|
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
|
||||||
if (nextHref) {
|
|
||||||
window.location.href = nextHref;
|
const nextLink = document.querySelector('link[rel="next"]');
|
||||||
return false;
|
if (nextLink && nextLink.href) {
|
||||||
|
window.location.href = nextLink.href;
|
||||||
|
event.preventDefault();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
// some keyboard layouts may need Shift to get /
|
||||||
|
switch (event.key) {
|
||||||
|
case "/":
|
||||||
|
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
|
||||||
|
Documentation.focusSearchBar();
|
||||||
|
event.preventDefault();
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
// quick alias for translations
|
// quick alias for translations
|
||||||
_ = Documentation.gettext;
|
const _ = Documentation.gettext;
|
||||||
|
|
||||||
$(document).ready(function() {
|
_ready(Documentation.init);
|
||||||
Documentation.init();
|
|
||||||
});
|
|
||||||
|
|
|
@ -1,12 +1,14 @@
|
||||||
var DOCUMENTATION_OPTIONS = {
|
var DOCUMENTATION_OPTIONS = {
|
||||||
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
|
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
|
||||||
VERSION: '0.1.6',
|
VERSION: '0.1.7',
|
||||||
LANGUAGE: 'None',
|
LANGUAGE: 'en',
|
||||||
COLLAPSE_INDEX: false,
|
COLLAPSE_INDEX: false,
|
||||||
BUILDER: 'html',
|
BUILDER: 'html',
|
||||||
FILE_SUFFIX: '.html',
|
FILE_SUFFIX: '.html',
|
||||||
LINK_SUFFIX: '.html',
|
LINK_SUFFIX: '.html',
|
||||||
HAS_SOURCE: true,
|
HAS_SOURCE: true,
|
||||||
SOURCELINK_SUFFIX: '.txt',
|
SOURCELINK_SUFFIX: '.txt',
|
||||||
NAVIGATION_WITH_KEYS: false
|
NAVIGATION_WITH_KEYS: false,
|
||||||
|
SHOW_SEARCH_SUMMARY: true,
|
||||||
|
ENABLE_SEARCH_SHORTCUTS: true,
|
||||||
};
|
};
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
|
@ -5,12 +5,12 @@
|
||||||
* This script contains the language-specific data used by searchtools.js,
|
* This script contains the language-specific data used by searchtools.js,
|
||||||
* namely the list of stopwords, stemmer, scorer and splitter.
|
* namely the list of stopwords, stemmer, scorer and splitter.
|
||||||
*
|
*
|
||||||
* :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
|
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
|
||||||
* :license: BSD, see LICENSE for details.
|
* :license: BSD, see LICENSE for details.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
|
var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"];
|
||||||
|
|
||||||
|
|
||||||
/* Non-minified version is copied as a separate JS file, is available */
|
/* Non-minified version is copied as a separate JS file, is available */
|
||||||
|
@ -197,101 +197,3 @@ var Stemmer = function() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var splitChars = (function() {
|
|
||||||
var result = {};
|
|
||||||
var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
|
|
||||||
1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
|
|
||||||
2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
|
|
||||||
2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
|
|
||||||
3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
|
|
||||||
3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
|
|
||||||
4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
|
|
||||||
8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
|
|
||||||
11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
|
|
||||||
43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
|
|
||||||
var i, j, start, end;
|
|
||||||
for (i = 0; i < singles.length; i++) {
|
|
||||||
result[singles[i]] = true;
|
|
||||||
}
|
|
||||||
var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
|
|
||||||
[722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
|
|
||||||
[1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
|
|
||||||
[1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
|
|
||||||
[1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
|
|
||||||
[2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
|
|
||||||
[2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
|
|
||||||
[2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
|
|
||||||
[2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
|
|
||||||
[2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
|
|
||||||
[2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
|
|
||||||
[2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
|
|
||||||
[3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
|
|
||||||
[3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
|
|
||||||
[3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
|
|
||||||
[3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
|
|
||||||
[3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
|
|
||||||
[3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
|
|
||||||
[4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
|
|
||||||
[4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
|
|
||||||
[4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
|
|
||||||
[4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
|
|
||||||
[5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
|
|
||||||
[6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
|
|
||||||
[6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
|
|
||||||
[6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
|
|
||||||
[6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
|
|
||||||
[7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
|
|
||||||
[7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
|
|
||||||
[8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
|
|
||||||
[8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
|
|
||||||
[8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
|
|
||||||
[10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
|
|
||||||
[11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
|
|
||||||
[12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
|
|
||||||
[12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
|
|
||||||
[12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
|
|
||||||
[19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
|
|
||||||
[42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
|
|
||||||
[42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
|
|
||||||
[43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
|
|
||||||
[43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
|
|
||||||
[43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
|
|
||||||
[43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
|
|
||||||
[44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
|
|
||||||
[57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
|
|
||||||
[64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
|
|
||||||
[65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
|
|
||||||
[65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
|
|
||||||
for (i = 0; i < ranges.length; i++) {
|
|
||||||
start = ranges[i][0];
|
|
||||||
end = ranges[i][1];
|
|
||||||
for (j = start; j <= end; j++) {
|
|
||||||
result[j] = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
})();
|
|
||||||
|
|
||||||
function splitQuery(query) {
|
|
||||||
var result = [];
|
|
||||||
var start = -1;
|
|
||||||
for (var i = 0; i < query.length; i++) {
|
|
||||||
if (splitChars[query.charCodeAt(i)]) {
|
|
||||||
if (start !== -1) {
|
|
||||||
result.push(query.slice(start, i));
|
|
||||||
start = -1;
|
|
||||||
}
|
|
||||||
} else if (start === -1) {
|
|
||||||
start = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (start !== -1) {
|
|
||||||
result.push(query.slice(start));
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,22 +4,24 @@
|
||||||
*
|
*
|
||||||
* Sphinx JavaScript utilities for the full-text search.
|
* Sphinx JavaScript utilities for the full-text search.
|
||||||
*
|
*
|
||||||
* :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
|
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
|
||||||
* :license: BSD, see LICENSE for details.
|
* :license: BSD, see LICENSE for details.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
"use strict";
|
||||||
|
|
||||||
if (!Scorer) {
|
/**
|
||||||
/**
|
|
||||||
* Simple result scoring code.
|
* Simple result scoring code.
|
||||||
*/
|
*/
|
||||||
|
if (typeof Scorer === "undefined") {
|
||||||
var Scorer = {
|
var Scorer = {
|
||||||
// Implement the following function to further tweak the score for each result
|
// Implement the following function to further tweak the score for each result
|
||||||
// The function takes a result array [filename, title, anchor, descr, score]
|
// The function takes a result array [docname, title, anchor, descr, score, filename]
|
||||||
// and returns the new score.
|
// and returns the new score.
|
||||||
/*
|
/*
|
||||||
score: function(result) {
|
score: result => {
|
||||||
return result[4];
|
const [docname, title, anchor, descr, score, filename] = result
|
||||||
|
return score
|
||||||
},
|
},
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -28,9 +30,11 @@ if (!Scorer) {
|
||||||
// or matches in the last dotted part of the object name
|
// or matches in the last dotted part of the object name
|
||||||
objPartialMatch: 6,
|
objPartialMatch: 6,
|
||||||
// Additive scores depending on the priority of the object
|
// Additive scores depending on the priority of the object
|
||||||
objPrio: {0: 15, // used to be importantResults
|
objPrio: {
|
||||||
|
0: 15, // used to be importantResults
|
||||||
1: 5, // used to be objectResults
|
1: 5, // used to be objectResults
|
||||||
2: -5}, // used to be unimportantResults
|
2: -5, // used to be unimportantResults
|
||||||
|
},
|
||||||
// Used when the priority is not in the mapping.
|
// Used when the priority is not in the mapping.
|
||||||
objPrioDefault: 0,
|
objPrioDefault: 0,
|
||||||
|
|
||||||
|
@ -39,455 +43,495 @@ if (!Scorer) {
|
||||||
partialTitle: 7,
|
partialTitle: 7,
|
||||||
// query found in terms
|
// query found in terms
|
||||||
term: 5,
|
term: 5,
|
||||||
partialTerm: 2
|
partialTerm: 2,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!splitQuery) {
|
const _removeChildren = (element) => {
|
||||||
function splitQuery(query) {
|
while (element && element.lastChild) element.removeChild(element.lastChild);
|
||||||
return query.split(/\s+/);
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
|
||||||
|
*/
|
||||||
|
const _escapeRegExp = (string) =>
|
||||||
|
string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
|
||||||
|
|
||||||
|
const _displayItem = (item, searchTerms) => {
|
||||||
|
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 [docName, title, anchor, descr, score, _filename] = item;
|
||||||
|
|
||||||
|
let listItem = document.createElement("li");
|
||||||
|
let requestUrl;
|
||||||
|
let linkUrl;
|
||||||
|
if (docBuilder === "dirhtml") {
|
||||||
|
// dirhtml builder
|
||||||
|
let dirname = docName + "/";
|
||||||
|
if (dirname.match(/\/index\/$/))
|
||||||
|
dirname = dirname.substring(0, dirname.length - 6);
|
||||||
|
else if (dirname === "index/") dirname = "";
|
||||||
|
requestUrl = docUrlRoot + dirname;
|
||||||
|
linkUrl = requestUrl;
|
||||||
|
} else {
|
||||||
|
// normal html builders
|
||||||
|
requestUrl = docUrlRoot + 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)
|
||||||
|
listItem.appendChild(document.createElement("span")).innerHTML =
|
||||||
|
" (" + descr + ")";
|
||||||
|
else if (showSearchSummary)
|
||||||
|
fetch(requestUrl)
|
||||||
|
.then((responseData) => responseData.text())
|
||||||
|
.then((data) => {
|
||||||
|
if (data)
|
||||||
|
listItem.appendChild(
|
||||||
|
Search.makeSearchSummary(data, searchTerms)
|
||||||
|
);
|
||||||
|
});
|
||||||
|
Search.output.appendChild(listItem);
|
||||||
|
};
|
||||||
|
const _finishSearch = (resultCount) => {
|
||||||
|
Search.stopPulse();
|
||||||
|
Search.title.innerText = _("Search Results");
|
||||||
|
if (!resultCount)
|
||||||
|
Search.status.innerText = Documentation.gettext(
|
||||||
|
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories."
|
||||||
|
);
|
||||||
|
else
|
||||||
|
Search.status.innerText = _(
|
||||||
|
`Search finished, found ${resultCount} page(s) matching the search query.`
|
||||||
|
);
|
||||||
|
};
|
||||||
|
const _displayNextItem = (
|
||||||
|
results,
|
||||||
|
resultCount,
|
||||||
|
searchTerms
|
||||||
|
) => {
|
||||||
|
// 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);
|
||||||
|
setTimeout(
|
||||||
|
() => _displayNextItem(results, resultCount, searchTerms),
|
||||||
|
5
|
||||||
|
);
|
||||||
|
}
|
||||||
|
// search finished, update title and status message
|
||||||
|
else _finishSearch(resultCount);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default splitQuery function. Can be overridden in ``sphinx.search`` with a
|
||||||
|
* custom function per language.
|
||||||
|
*
|
||||||
|
* The regular expression works by splitting the string on consecutive characters
|
||||||
|
* that are not Unicode letters, numbers, underscores, or emoji characters.
|
||||||
|
* This is the same as ``\W+`` in Python, preserving the surrogate pair area.
|
||||||
|
*/
|
||||||
|
if (typeof splitQuery === "undefined") {
|
||||||
|
var splitQuery = (query) => query
|
||||||
|
.split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu)
|
||||||
|
.filter(term => term) // remove remaining empty strings
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Search Module
|
* Search Module
|
||||||
*/
|
*/
|
||||||
var Search = {
|
const Search = {
|
||||||
|
_index: null,
|
||||||
|
_queued_query: null,
|
||||||
|
_pulse_status: -1,
|
||||||
|
|
||||||
_index : null,
|
htmlToText: (htmlString) => {
|
||||||
_queued_query : null,
|
const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
|
||||||
_pulse_status : -1,
|
htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() });
|
||||||
|
const docContent = htmlElement.querySelector('[role="main"]');
|
||||||
htmlToText : function(htmlString) {
|
if (docContent !== undefined) return docContent.textContent;
|
||||||
var virtualDocument = document.implementation.createHTMLDocument('virtual');
|
console.warn(
|
||||||
var htmlElement = $(htmlString, virtualDocument);
|
"Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template."
|
||||||
htmlElement.find('.headerlink').remove();
|
);
|
||||||
docContent = htmlElement.find('[role=main]')[0];
|
|
||||||
if(docContent === undefined) {
|
|
||||||
console.warn("Content block not found. Sphinx search tries to obtain it " +
|
|
||||||
"via '[role=main]'. Could you check your theme or template.");
|
|
||||||
return "";
|
return "";
|
||||||
}
|
|
||||||
return docContent.textContent || docContent.innerText;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
init : function() {
|
init: () => {
|
||||||
var params = $.getQueryParameters();
|
const query = new URLSearchParams(window.location.search).get("q");
|
||||||
if (params.q) {
|
document
|
||||||
var query = params.q[0];
|
.querySelectorAll('input[name="q"]')
|
||||||
$('input[name="q"]')[0].value = query;
|
.forEach((el) => (el.value = query));
|
||||||
this.performSearch(query);
|
if (query) Search.performSearch(query);
|
||||||
|
},
|
||||||
|
|
||||||
|
loadIndex: (url) =>
|
||||||
|
(document.body.appendChild(document.createElement("script")).src = url),
|
||||||
|
|
||||||
|
setIndex: (index) => {
|
||||||
|
Search._index = index;
|
||||||
|
if (Search._queued_query !== null) {
|
||||||
|
const query = Search._queued_query;
|
||||||
|
Search._queued_query = null;
|
||||||
|
Search.query(query);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
loadIndex : function(url) {
|
hasIndex: () => Search._index !== null,
|
||||||
$.ajax({type: "GET", url: url, data: null,
|
|
||||||
dataType: "script", cache: true,
|
|
||||||
complete: function(jqxhr, textstatus) {
|
|
||||||
if (textstatus != "success") {
|
|
||||||
document.getElementById("searchindexloader").src = url;
|
|
||||||
}
|
|
||||||
}});
|
|
||||||
},
|
|
||||||
|
|
||||||
setIndex : function(index) {
|
deferQuery: (query) => (Search._queued_query = query),
|
||||||
var q;
|
|
||||||
this._index = index;
|
|
||||||
if ((q = this._queued_query) !== null) {
|
|
||||||
this._queued_query = null;
|
|
||||||
Search.query(q);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
hasIndex : function() {
|
stopPulse: () => (Search._pulse_status = -1),
|
||||||
return this._index !== null;
|
|
||||||
},
|
|
||||||
|
|
||||||
deferQuery : function(query) {
|
startPulse: () => {
|
||||||
this._queued_query = query;
|
if (Search._pulse_status >= 0) return;
|
||||||
},
|
|
||||||
|
|
||||||
stopPulse : function() {
|
const pulse = () => {
|
||||||
this._pulse_status = 0;
|
|
||||||
},
|
|
||||||
|
|
||||||
startPulse : function() {
|
|
||||||
if (this._pulse_status >= 0)
|
|
||||||
return;
|
|
||||||
function pulse() {
|
|
||||||
var i;
|
|
||||||
Search._pulse_status = (Search._pulse_status + 1) % 4;
|
Search._pulse_status = (Search._pulse_status + 1) % 4;
|
||||||
var dotString = '';
|
Search.dots.innerText = ".".repeat(Search._pulse_status);
|
||||||
for (i = 0; i < Search._pulse_status; i++)
|
if (Search._pulse_status >= 0) window.setTimeout(pulse, 500);
|
||||||
dotString += '.';
|
};
|
||||||
Search.dots.text(dotString);
|
|
||||||
if (Search._pulse_status > -1)
|
|
||||||
window.setTimeout(pulse, 500);
|
|
||||||
}
|
|
||||||
pulse();
|
pulse();
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* perform a search for something (or wait until index is loaded)
|
* perform a search for something (or wait until index is loaded)
|
||||||
*/
|
*/
|
||||||
performSearch : function(query) {
|
performSearch: (query) => {
|
||||||
// create the required interface elements
|
// create the required interface elements
|
||||||
this.out = $('#search-results');
|
const searchText = document.createElement("h2");
|
||||||
this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
|
searchText.textContent = _("Searching");
|
||||||
this.dots = $('<span></span>').appendTo(this.title);
|
const searchSummary = document.createElement("p");
|
||||||
this.status = $('<p class="search-summary"> </p>').appendTo(this.out);
|
searchSummary.classList.add("search-summary");
|
||||||
this.output = $('<ul class="search"/>').appendTo(this.out);
|
searchSummary.innerText = "";
|
||||||
|
const searchList = document.createElement("ul");
|
||||||
|
searchList.classList.add("search");
|
||||||
|
|
||||||
$('#search-progress').text(_('Preparing search...'));
|
const out = document.getElementById("search-results");
|
||||||
this.startPulse();
|
Search.title = out.appendChild(searchText);
|
||||||
|
Search.dots = Search.title.appendChild(document.createElement("span"));
|
||||||
|
Search.status = out.appendChild(searchSummary);
|
||||||
|
Search.output = out.appendChild(searchList);
|
||||||
|
|
||||||
|
const searchProgress = document.getElementById("search-progress");
|
||||||
|
// Some themes don't use the search progress node
|
||||||
|
if (searchProgress) {
|
||||||
|
searchProgress.innerText = _("Preparing search...");
|
||||||
|
}
|
||||||
|
Search.startPulse();
|
||||||
|
|
||||||
// index already loaded, the browser was quick!
|
// index already loaded, the browser was quick!
|
||||||
if (this.hasIndex())
|
if (Search.hasIndex()) Search.query(query);
|
||||||
this.query(query);
|
else Search.deferQuery(query);
|
||||||
else
|
|
||||||
this.deferQuery(query);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* execute search (requires search index to be loaded)
|
* execute search (requires search index to be loaded)
|
||||||
*/
|
*/
|
||||||
query : function(query) {
|
query: (query) => {
|
||||||
var i;
|
const filenames = Search._index.filenames;
|
||||||
|
const docNames = Search._index.docnames;
|
||||||
|
const titles = Search._index.titles;
|
||||||
|
const allTitles = Search._index.alltitles;
|
||||||
|
const indexEntries = Search._index.indexentries;
|
||||||
|
|
||||||
// stem the searchterms and add them to the correct list
|
// stem the search terms and add them to the correct list
|
||||||
var stemmer = new Stemmer();
|
const stemmer = new Stemmer();
|
||||||
var searchterms = [];
|
const searchTerms = new Set();
|
||||||
var excluded = [];
|
const excludedTerms = new Set();
|
||||||
var hlterms = [];
|
const highlightTerms = new Set();
|
||||||
var tmp = splitQuery(query);
|
const objectTerms = new Set(splitQuery(query.toLowerCase().trim()));
|
||||||
var objectterms = [];
|
splitQuery(query.trim()).forEach((queryTerm) => {
|
||||||
for (i = 0; i < tmp.length; i++) {
|
const queryTermLower = queryTerm.toLowerCase();
|
||||||
if (tmp[i] !== "") {
|
|
||||||
objectterms.push(tmp[i].toLowerCase());
|
// maybe skip this "word"
|
||||||
}
|
// stopwords array is from language_data.js
|
||||||
|
if (
|
||||||
|
stopwords.indexOf(queryTermLower) !== -1 ||
|
||||||
|
queryTerm.match(/^\d+$/)
|
||||||
|
)
|
||||||
|
return;
|
||||||
|
|
||||||
if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i] === "") {
|
|
||||||
// skip this "word"
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
// stem the word
|
// stem the word
|
||||||
var word = stemmer.stemWord(tmp[i].toLowerCase());
|
let word = stemmer.stemWord(queryTermLower);
|
||||||
// prevent stemmer from cutting word smaller than two chars
|
|
||||||
if(word.length < 3 && tmp[i].length >= 3) {
|
|
||||||
word = tmp[i];
|
|
||||||
}
|
|
||||||
var toAppend;
|
|
||||||
// select the correct list
|
// select the correct list
|
||||||
if (word[0] == '-') {
|
if (word[0] === "-") excludedTerms.add(word.substr(1));
|
||||||
toAppend = excluded;
|
|
||||||
word = word.substr(1);
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
toAppend = searchterms;
|
searchTerms.add(word);
|
||||||
hlterms.push(tmp[i].toLowerCase());
|
highlightTerms.add(queryTermLower);
|
||||||
}
|
}
|
||||||
// only add if not already in the list
|
});
|
||||||
if (!$u.contains(toAppend, word))
|
|
||||||
toAppend.push(word);
|
if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js
|
||||||
|
localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" "))
|
||||||
}
|
}
|
||||||
var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
|
|
||||||
|
|
||||||
// console.debug('SEARCH: searching for:');
|
// console.debug("SEARCH: searching for:");
|
||||||
// console.info('required: ', searchterms);
|
// console.info("required: ", [...searchTerms]);
|
||||||
// console.info('excluded: ', excluded);
|
// console.info("excluded: ", [...excludedTerms]);
|
||||||
|
|
||||||
// prepare search
|
// array of [docname, title, anchor, descr, score, filename]
|
||||||
var terms = this._index.terms;
|
let results = [];
|
||||||
var titleterms = this._index.titleterms;
|
_removeChildren(document.getElementById("search-progress"));
|
||||||
|
|
||||||
// array of [filename, title, anchor, descr, score]
|
const queryLower = query.toLowerCase();
|
||||||
var results = [];
|
for (const [title, foundTitles] of Object.entries(allTitles)) {
|
||||||
$('#search-progress').empty();
|
if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) {
|
||||||
|
for (const [file, id] of foundTitles) {
|
||||||
|
let score = Math.round(100 * queryLower.length / title.length)
|
||||||
|
results.push([
|
||||||
|
docNames[file],
|
||||||
|
titles[file] !== title ? `${titles[file]} > ${title}` : title,
|
||||||
|
id !== null ? "#" + id : "",
|
||||||
|
null,
|
||||||
|
score,
|
||||||
|
filenames[file],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// search for explicit entries in index directives
|
||||||
|
for (const [entry, foundEntries] of Object.entries(indexEntries)) {
|
||||||
|
if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
|
||||||
|
for (const [file, id] of foundEntries) {
|
||||||
|
let score = Math.round(100 * queryLower.length / entry.length)
|
||||||
|
results.push([
|
||||||
|
docNames[file],
|
||||||
|
titles[file],
|
||||||
|
id ? "#" + id : "",
|
||||||
|
null,
|
||||||
|
score,
|
||||||
|
filenames[file],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// lookup as object
|
// lookup as object
|
||||||
for (i = 0; i < objectterms.length; i++) {
|
objectTerms.forEach((term) =>
|
||||||
var others = [].concat(objectterms.slice(0, i),
|
results.push(...Search.performObjectSearch(term, objectTerms))
|
||||||
objectterms.slice(i+1, objectterms.length));
|
);
|
||||||
results = results.concat(this.performObjectSearch(objectterms[i], others));
|
|
||||||
}
|
|
||||||
|
|
||||||
// lookup as search terms in fulltext
|
// lookup as search terms in fulltext
|
||||||
results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));
|
results.push(...Search.performTermsSearch(searchTerms, excludedTerms));
|
||||||
|
|
||||||
// let the scorer override scores with a custom scoring function
|
// let the scorer override scores with a custom scoring function
|
||||||
if (Scorer.score) {
|
if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item)));
|
||||||
for (i = 0; i < results.length; i++)
|
|
||||||
results[i][4] = Scorer.score(results[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// now sort the results by score (in opposite order of appearance, since the
|
// now sort the results by score (in opposite order of appearance, since the
|
||||||
// display function below uses pop() to retrieve items) and then
|
// display function below uses pop() to retrieve items) and then
|
||||||
// alphabetically
|
// alphabetically
|
||||||
results.sort(function(a, b) {
|
results.sort((a, b) => {
|
||||||
var left = a[4];
|
const leftScore = a[4];
|
||||||
var right = b[4];
|
const rightScore = b[4];
|
||||||
if (left > right) {
|
if (leftScore === rightScore) {
|
||||||
return 1;
|
|
||||||
} else if (left < right) {
|
|
||||||
return -1;
|
|
||||||
} else {
|
|
||||||
// same score: sort alphabetically
|
// same score: sort alphabetically
|
||||||
left = a[1].toLowerCase();
|
const leftTitle = a[1].toLowerCase();
|
||||||
right = b[1].toLowerCase();
|
const rightTitle = b[1].toLowerCase();
|
||||||
return (left > right) ? -1 : ((left < right) ? 1 : 0);
|
if (leftTitle === rightTitle) return 0;
|
||||||
|
return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
|
||||||
}
|
}
|
||||||
|
return leftScore > rightScore ? 1 : -1;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// remove duplicate search results
|
||||||
|
// note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
|
||||||
|
let seen = new Set();
|
||||||
|
results = results.reverse().reduce((acc, result) => {
|
||||||
|
let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(',');
|
||||||
|
if (!seen.has(resultStr)) {
|
||||||
|
acc.push(result);
|
||||||
|
seen.add(resultStr);
|
||||||
|
}
|
||||||
|
return acc;
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
results = results.reverse();
|
||||||
|
|
||||||
// for debugging
|
// for debugging
|
||||||
//Search.lastresults = results.slice(); // a copy
|
//Search.lastresults = results.slice(); // a copy
|
||||||
//console.info('search results:', Search.lastresults);
|
// console.info("search results:", Search.lastresults);
|
||||||
|
|
||||||
// print the results
|
// print the results
|
||||||
var resultCount = results.length;
|
_displayNextItem(results, results.length, searchTerms);
|
||||||
function displayNextItem() {
|
|
||||||
// results left, load the summary and display it
|
|
||||||
if (results.length) {
|
|
||||||
var item = results.pop();
|
|
||||||
var listItem = $('<li></li>');
|
|
||||||
var requestUrl = "";
|
|
||||||
var linkUrl = "";
|
|
||||||
if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') {
|
|
||||||
// dirhtml builder
|
|
||||||
var dirname = item[0] + '/';
|
|
||||||
if (dirname.match(/\/index\/$/)) {
|
|
||||||
dirname = dirname.substring(0, dirname.length-6);
|
|
||||||
} else if (dirname == 'index/') {
|
|
||||||
dirname = '';
|
|
||||||
}
|
|
||||||
requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + dirname;
|
|
||||||
linkUrl = requestUrl;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
// normal html builders
|
|
||||||
requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX;
|
|
||||||
linkUrl = item[0] + DOCUMENTATION_OPTIONS.LINK_SUFFIX;
|
|
||||||
}
|
|
||||||
listItem.append($('<a/>').attr('href',
|
|
||||||
linkUrl +
|
|
||||||
highlightstring + item[2]).html(item[1]));
|
|
||||||
if (item[3]) {
|
|
||||||
listItem.append($('<span> (' + item[3] + ')</span>'));
|
|
||||||
Search.output.append(listItem);
|
|
||||||
setTimeout(function() {
|
|
||||||
displayNextItem();
|
|
||||||
}, 5);
|
|
||||||
} else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
|
|
||||||
$.ajax({url: requestUrl,
|
|
||||||
dataType: "text",
|
|
||||||
complete: function(jqxhr, textstatus) {
|
|
||||||
var data = jqxhr.responseText;
|
|
||||||
if (data !== '' && data !== undefined) {
|
|
||||||
var summary = Search.makeSearchSummary(data, searchterms, hlterms);
|
|
||||||
if (summary) {
|
|
||||||
listItem.append(summary);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Search.output.append(listItem);
|
|
||||||
setTimeout(function() {
|
|
||||||
displayNextItem();
|
|
||||||
}, 5);
|
|
||||||
}});
|
|
||||||
} else {
|
|
||||||
// no source available, just display title
|
|
||||||
Search.output.append(listItem);
|
|
||||||
setTimeout(function() {
|
|
||||||
displayNextItem();
|
|
||||||
}, 5);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// search finished, update title and status message
|
|
||||||
else {
|
|
||||||
Search.stopPulse();
|
|
||||||
Search.title.text(_('Search Results'));
|
|
||||||
if (!resultCount)
|
|
||||||
Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
|
|
||||||
else
|
|
||||||
Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
|
|
||||||
Search.status.fadeIn(500);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
displayNextItem();
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* search for object names
|
* search for object names
|
||||||
*/
|
*/
|
||||||
performObjectSearch : function(object, otherterms) {
|
performObjectSearch: (object, objectTerms) => {
|
||||||
var filenames = this._index.filenames;
|
const filenames = Search._index.filenames;
|
||||||
var docnames = this._index.docnames;
|
const docNames = Search._index.docnames;
|
||||||
var objects = this._index.objects;
|
const objects = Search._index.objects;
|
||||||
var objnames = this._index.objnames;
|
const objNames = Search._index.objnames;
|
||||||
var titles = this._index.titles;
|
const titles = Search._index.titles;
|
||||||
|
|
||||||
var i;
|
const results = [];
|
||||||
var results = [];
|
|
||||||
|
const objectSearchCallback = (prefix, match) => {
|
||||||
|
const name = match[4]
|
||||||
|
const fullname = (prefix ? prefix + "." : "") + name;
|
||||||
|
const fullnameLower = fullname.toLowerCase();
|
||||||
|
if (fullnameLower.indexOf(object) < 0) return;
|
||||||
|
|
||||||
|
let score = 0;
|
||||||
|
const parts = fullnameLower.split(".");
|
||||||
|
|
||||||
for (var prefix in objects) {
|
|
||||||
for (var name in objects[prefix]) {
|
|
||||||
var fullname = (prefix ? prefix + '.' : '') + name;
|
|
||||||
var fullnameLower = fullname.toLowerCase()
|
|
||||||
if (fullnameLower.indexOf(object) > -1) {
|
|
||||||
var score = 0;
|
|
||||||
var parts = fullnameLower.split('.');
|
|
||||||
// check for different match types: exact matches of full name or
|
// check for different match types: exact matches of full name or
|
||||||
// "last name" (i.e. last dotted part)
|
// "last name" (i.e. last dotted part)
|
||||||
if (fullnameLower == object || parts[parts.length - 1] == object) {
|
if (fullnameLower === object || parts.slice(-1)[0] === object)
|
||||||
score += Scorer.objNameMatch;
|
score += Scorer.objNameMatch;
|
||||||
// matches in last name
|
else if (parts.slice(-1)[0].indexOf(object) > -1)
|
||||||
} else if (parts[parts.length - 1].indexOf(object) > -1) {
|
score += Scorer.objPartialMatch; // matches in last name
|
||||||
score += Scorer.objPartialMatch;
|
|
||||||
}
|
const objName = objNames[match[1]][2];
|
||||||
var match = objects[prefix][name];
|
const title = titles[match[0]];
|
||||||
var objname = objnames[match[1]][2];
|
|
||||||
var title = titles[match[0]];
|
|
||||||
// If more than one term searched for, we require other words to be
|
// If more than one term searched for, we require other words to be
|
||||||
// found in the name/title/description
|
// found in the name/title/description
|
||||||
if (otherterms.length > 0) {
|
const otherTerms = new Set(objectTerms);
|
||||||
var haystack = (prefix + ' ' + name + ' ' +
|
otherTerms.delete(object);
|
||||||
objname + ' ' + title).toLowerCase();
|
if (otherTerms.size > 0) {
|
||||||
var allfound = true;
|
const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase();
|
||||||
for (i = 0; i < otherterms.length; i++) {
|
if (
|
||||||
if (haystack.indexOf(otherterms[i]) == -1) {
|
[...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0)
|
||||||
allfound = false;
|
)
|
||||||
break;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (!allfound) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var descr = objname + _(', in ') + title;
|
|
||||||
|
|
||||||
var anchor = match[3];
|
let anchor = match[3];
|
||||||
if (anchor === '')
|
if (anchor === "") anchor = fullname;
|
||||||
anchor = fullname;
|
else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname;
|
||||||
else if (anchor == '-')
|
|
||||||
anchor = objnames[match[1]][1] + '-' + fullname;
|
const descr = objName + _(", in ") + title;
|
||||||
|
|
||||||
// add custom score for some objects according to scorer
|
// add custom score for some objects according to scorer
|
||||||
if (Scorer.objPrio.hasOwnProperty(match[2])) {
|
if (Scorer.objPrio.hasOwnProperty(match[2]))
|
||||||
score += Scorer.objPrio[match[2]];
|
score += Scorer.objPrio[match[2]];
|
||||||
} else {
|
else score += Scorer.objPrioDefault;
|
||||||
score += Scorer.objPrioDefault;
|
|
||||||
}
|
|
||||||
results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
results.push([
|
||||||
|
docNames[match[0]],
|
||||||
|
fullname,
|
||||||
|
"#" + anchor,
|
||||||
|
descr,
|
||||||
|
score,
|
||||||
|
filenames[match[0]],
|
||||||
|
]);
|
||||||
|
};
|
||||||
|
Object.keys(objects).forEach((prefix) =>
|
||||||
|
objects[prefix].forEach((array) =>
|
||||||
|
objectSearchCallback(prefix, array)
|
||||||
|
)
|
||||||
|
);
|
||||||
return results;
|
return results;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
|
||||||
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
|
|
||||||
*/
|
|
||||||
escapeRegExp : function(string) {
|
|
||||||
return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* search for full-text terms in the index
|
* search for full-text terms in the index
|
||||||
*/
|
*/
|
||||||
performTermsSearch : function(searchterms, excluded, terms, titleterms) {
|
performTermsSearch: (searchTerms, excludedTerms) => {
|
||||||
var docnames = this._index.docnames;
|
// prepare search
|
||||||
var filenames = this._index.filenames;
|
const terms = Search._index.terms;
|
||||||
var titles = this._index.titles;
|
const titleTerms = Search._index.titleterms;
|
||||||
|
const filenames = Search._index.filenames;
|
||||||
|
const docNames = Search._index.docnames;
|
||||||
|
const titles = Search._index.titles;
|
||||||
|
|
||||||
var i, j, file;
|
const scoreMap = new Map();
|
||||||
var fileMap = {};
|
const fileMap = new Map();
|
||||||
var scoreMap = {};
|
|
||||||
var results = [];
|
|
||||||
|
|
||||||
// perform the search on the required terms
|
// perform the search on the required terms
|
||||||
for (i = 0; i < searchterms.length; i++) {
|
searchTerms.forEach((word) => {
|
||||||
var word = searchterms[i];
|
const files = [];
|
||||||
var files = [];
|
const arr = [
|
||||||
var _o = [
|
{ files: terms[word], score: Scorer.term },
|
||||||
{files: terms[word], score: Scorer.term},
|
{ files: titleTerms[word], score: Scorer.title },
|
||||||
{files: titleterms[word], score: Scorer.title}
|
|
||||||
];
|
];
|
||||||
// add support for partial matches
|
// add support for partial matches
|
||||||
if (word.length > 2) {
|
if (word.length > 2) {
|
||||||
var word_regex = this.escapeRegExp(word);
|
const escapedWord = _escapeRegExp(word);
|
||||||
for (var w in terms) {
|
Object.keys(terms).forEach((term) => {
|
||||||
if (w.match(word_regex) && !terms[word]) {
|
if (term.match(escapedWord) && !terms[word])
|
||||||
_o.push({files: terms[w], score: Scorer.partialTerm})
|
arr.push({ files: terms[term], score: Scorer.partialTerm });
|
||||||
}
|
});
|
||||||
}
|
Object.keys(titleTerms).forEach((term) => {
|
||||||
for (var w in titleterms) {
|
if (term.match(escapedWord) && !titleTerms[word])
|
||||||
if (w.match(word_regex) && !titleterms[word]) {
|
arr.push({ files: titleTerms[word], score: Scorer.partialTitle });
|
||||||
_o.push({files: titleterms[w], score: Scorer.partialTitle})
|
});
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// no match but word was a required one
|
// no match but word was a required one
|
||||||
if ($u.every(_o, function(o){return o.files === undefined;})) {
|
if (arr.every((record) => record.files === undefined)) return;
|
||||||
break;
|
|
||||||
}
|
|
||||||
// found search word in contents
|
// found search word in contents
|
||||||
$u.each(_o, function(o) {
|
arr.forEach((record) => {
|
||||||
var _files = o.files;
|
if (record.files === undefined) return;
|
||||||
if (_files === undefined)
|
|
||||||
return
|
|
||||||
|
|
||||||
if (_files.length === undefined)
|
let recordFiles = record.files;
|
||||||
_files = [_files];
|
if (recordFiles.length === undefined) recordFiles = [recordFiles];
|
||||||
files = files.concat(_files);
|
files.push(...recordFiles);
|
||||||
|
|
||||||
// set score for the word in each file to Scorer.term
|
// set score for the word in each file
|
||||||
for (j = 0; j < _files.length; j++) {
|
recordFiles.forEach((file) => {
|
||||||
file = _files[j];
|
if (!scoreMap.has(file)) scoreMap.set(file, {});
|
||||||
if (!(file in scoreMap))
|
scoreMap.get(file)[word] = record.score;
|
||||||
scoreMap[file] = {};
|
});
|
||||||
scoreMap[file][word] = o.score;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// create the mapping
|
// create the mapping
|
||||||
for (j = 0; j < files.length; j++) {
|
files.forEach((file) => {
|
||||||
file = files[j];
|
if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1)
|
||||||
if (file in fileMap && fileMap[file].indexOf(word) === -1)
|
fileMap.get(file).push(word);
|
||||||
fileMap[file].push(word);
|
else fileMap.set(file, [word]);
|
||||||
else
|
});
|
||||||
fileMap[file] = [word];
|
});
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// now check if the files don't contain excluded terms
|
// now check if the files don't contain excluded terms
|
||||||
for (file in fileMap) {
|
const results = [];
|
||||||
var valid = true;
|
for (const [file, wordList] of fileMap) {
|
||||||
|
|
||||||
// check if all requirements are matched
|
// check if all requirements are matched
|
||||||
var filteredTermCount = // as search terms with length < 3 are discarded: ignore
|
|
||||||
searchterms.filter(function(term){return term.length > 2}).length
|
// as search terms with length < 3 are discarded
|
||||||
|
const filteredTermCount = [...searchTerms].filter(
|
||||||
|
(term) => term.length > 2
|
||||||
|
).length;
|
||||||
if (
|
if (
|
||||||
fileMap[file].length != searchterms.length &&
|
wordList.length !== searchTerms.size &&
|
||||||
fileMap[file].length != filteredTermCount
|
wordList.length !== filteredTermCount
|
||||||
) continue;
|
)
|
||||||
|
continue;
|
||||||
|
|
||||||
// ensure that none of the excluded terms is in the search result
|
// ensure that none of the excluded terms is in the search result
|
||||||
for (i = 0; i < excluded.length; i++) {
|
if (
|
||||||
if (terms[excluded[i]] == file ||
|
[...excludedTerms].some(
|
||||||
titleterms[excluded[i]] == file ||
|
(term) =>
|
||||||
$u.contains(terms[excluded[i]] || [], file) ||
|
terms[term] === file ||
|
||||||
$u.contains(titleterms[excluded[i]] || [], file)) {
|
titleTerms[term] === file ||
|
||||||
valid = false;
|
(terms[term] || []).includes(file) ||
|
||||||
|
(titleTerms[term] || []).includes(file)
|
||||||
|
)
|
||||||
|
)
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// if we have still a valid result we can add it to the result list
|
|
||||||
if (valid) {
|
|
||||||
// select one (max) score for the file.
|
// select one (max) score for the file.
|
||||||
// for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
|
const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w]));
|
||||||
var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
|
// add result to the result list
|
||||||
results.push([docnames[file], titles[file], '', null, score, filenames[file]]);
|
results.push([
|
||||||
}
|
docNames[file],
|
||||||
|
titles[file],
|
||||||
|
"",
|
||||||
|
null,
|
||||||
|
score,
|
||||||
|
filenames[file],
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
return results;
|
return results;
|
||||||
},
|
},
|
||||||
|
@ -495,34 +539,28 @@ var Search = {
|
||||||
/**
|
/**
|
||||||
* helper function to return a node containing the
|
* helper function to return a node containing the
|
||||||
* search summary for a given text. keywords is a list
|
* search summary for a given text. keywords is a list
|
||||||
* of stemmed words, hlwords is the list of normal, unstemmed
|
* of stemmed words.
|
||||||
* words. the first one is used to find the occurrence, the
|
|
||||||
* latter for highlighting it.
|
|
||||||
*/
|
*/
|
||||||
makeSearchSummary : function(htmlText, keywords, hlwords) {
|
makeSearchSummary: (htmlText, keywords) => {
|
||||||
var text = Search.htmlToText(htmlText);
|
const text = Search.htmlToText(htmlText);
|
||||||
if (text == "") {
|
if (text === "") return null;
|
||||||
return null;
|
|
||||||
}
|
const textLower = text.toLowerCase();
|
||||||
var textLower = text.toLowerCase();
|
const actualStartPosition = [...keywords]
|
||||||
var start = 0;
|
.map((k) => textLower.indexOf(k.toLowerCase()))
|
||||||
$.each(keywords, function() {
|
.filter((i) => i > -1)
|
||||||
var i = textLower.indexOf(this.toLowerCase());
|
.slice(-1)[0];
|
||||||
if (i > -1)
|
const startWithContext = Math.max(actualStartPosition - 120, 0);
|
||||||
start = i;
|
|
||||||
});
|
const top = startWithContext === 0 ? "" : "...";
|
||||||
start = Math.max(start - 120, 0);
|
const tail = startWithContext + 240 < text.length ? "..." : "";
|
||||||
var excerpt = ((start > 0) ? '...' : '') +
|
|
||||||
$.trim(text.substr(start, 240)) +
|
let summary = document.createElement("p");
|
||||||
((start + 240 - text.length) ? '...' : '');
|
summary.classList.add("context");
|
||||||
var rv = $('<p class="context"></p>').text(excerpt);
|
summary.textContent = top + text.substr(startWithContext, 240).trim() + tail;
|
||||||
$.each(hlwords, function() {
|
|
||||||
rv = rv.highlightText(this, 'highlighted');
|
return summary;
|
||||||
});
|
},
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
$(document).ready(function() {
|
_ready(Search.init);
|
||||||
Search.init();
|
|
||||||
});
|
|
||||||
|
|
|
@ -2,18 +2,20 @@
|
||||||
|
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
|
|
||||||
<html>
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Index — QuaPy 0.1.6 documentation</title>
|
<title>Index — QuaPy 0.1.7 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/bizstyle.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 data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
<script src="_static/jquery.js"></script>
|
<script src="_static/jquery.js"></script>
|
||||||
<script src="_static/underscore.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/doctools.js"></script>
|
||||||
|
<script src="_static/sphinx_highlight.js"></script>
|
||||||
<script src="_static/bizstyle.js"></script>
|
<script src="_static/bizstyle.js"></script>
|
||||||
<link rel="index" title="Index" href="#" />
|
<link rel="index" title="Index" href="#" />
|
||||||
<link rel="search" title="Search" href="search.html" />
|
<link rel="search" title="Search" href="search.html" />
|
||||||
|
@ -31,7 +33,7 @@
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="py-modindex.html" title="Python Module Index"
|
<a href="py-modindex.html" title="Python Module Index"
|
||||||
>modules</a> |</li>
|
>modules</a> |</li>
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.6 documentation</a> »</li>
|
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> »</li>
|
||||||
<li class="nav-item nav-item-this"><a href="">Index</a></li>
|
<li class="nav-item nav-item-this"><a href="">Index</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -68,12 +70,17 @@
|
||||||
| <a href="#V"><strong>V</strong></a>
|
| <a href="#V"><strong>V</strong></a>
|
||||||
| <a href="#W"><strong>W</strong></a>
|
| <a href="#W"><strong>W</strong></a>
|
||||||
| <a href="#X"><strong>X</strong></a>
|
| <a href="#X"><strong>X</strong></a>
|
||||||
|
| <a href="#Y"><strong>Y</strong></a>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<h2 id="A">A</h2>
|
<h2 id="A">A</h2>
|
||||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="quapy.html#quapy.error.absolute_error">absolute_error() (in module quapy.error)</a>
|
<li><a href="quapy.html#quapy.error.absolute_error">absolute_error() (in module quapy.error)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.html#quapy.protocol.AbstractProtocol">AbstractProtocol (class in quapy.protocol)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.html#quapy.protocol.AbstractStochasticSeededProtocol">AbstractStochasticSeededProtocol (class in quapy.protocol)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.ACC">ACC (class in quapy.method.aggregative)</a>
|
<li><a href="quapy.method.html#quapy.method.aggregative.ACC">ACC (class in quapy.method.aggregative)</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -95,6 +102,10 @@
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.aggregate">(quapy.method.aggregative.AggregativeQuantifier method)</a>
|
<li><a href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.aggregate">(quapy.method.aggregative.AggregativeQuantifier method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.CC.aggregate">(quapy.method.aggregative.CC method)</a>
|
<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>
|
||||||
|
<li><a href="quapy.method.html#quapy.method.aggregative.DyS.aggregate">(quapy.method.aggregative.DyS method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.ELM.aggregate">(quapy.method.aggregative.ELM method)</a>
|
<li><a href="quapy.method.html#quapy.method.aggregative.ELM.aggregate">(quapy.method.aggregative.ELM method)</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -107,35 +118,21 @@
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.PACC.aggregate">(quapy.method.aggregative.PACC method)</a>
|
<li><a href="quapy.method.html#quapy.method.aggregative.PACC.aggregate">(quapy.method.aggregative.PACC method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.PCC.aggregate">(quapy.method.aggregative.PCC method)</a>
|
<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>
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.ThresholdOptimization.aggregate">(quapy.method.aggregative.ThresholdOptimization method)</a>
|
<li><a href="quapy.method.html#quapy.method.aggregative.ThresholdOptimization.aggregate">(quapy.method.aggregative.ThresholdOptimization method)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.aggregative">aggregative (quapy.method.aggregative.AggregativeQuantifier property)</a>
|
<li><a href="quapy.method.html#quapy.method.meta.Ensemble.aggregative">aggregative (quapy.method.meta.Ensemble property)</a>
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li><a href="quapy.method.html#quapy.method.base.BaseQuantifier.aggregative">(quapy.method.base.BaseQuantifier property)</a>
|
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.meta.Ensemble.aggregative">(quapy.method.meta.Ensemble property)</a>
|
|
||||||
</li>
|
|
||||||
</ul></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.AggregativeProbabilisticQuantifier">AggregativeProbabilisticQuantifier (class in quapy.method.aggregative)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier">AggregativeQuantifier (class in quapy.method.aggregative)</a>
|
<li><a href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier">AggregativeQuantifier (class in quapy.method.aggregative)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.html#quapy.evaluation.artificial_prevalence_prediction">artificial_prevalence_prediction() (in module quapy.evaluation)</a>
|
<li><a href="quapy.html#quapy.protocol.APP">APP (class in quapy.protocol)</a>
|
||||||
</li>
|
|
||||||
<li><a href="quapy.html#quapy.evaluation.artificial_prevalence_protocol">artificial_prevalence_protocol() (in module quapy.evaluation)</a>
|
|
||||||
</li>
|
|
||||||
<li><a href="quapy.html#quapy.evaluation.artificial_prevalence_report">artificial_prevalence_report() (in module quapy.evaluation)</a>
|
|
||||||
</li>
|
|
||||||
<li><a href="quapy.html#quapy.functional.artificial_prevalence_sampling">artificial_prevalence_sampling() (in module quapy.functional)</a>
|
|
||||||
</li>
|
|
||||||
<li><a href="quapy.data.html#quapy.data.base.LabelledCollection.artificial_sampling_generator">artificial_sampling_generator() (quapy.data.base.LabelledCollection method)</a>
|
|
||||||
</li>
|
|
||||||
<li><a href="quapy.data.html#quapy.data.base.LabelledCollection.artificial_sampling_index_generator">artificial_sampling_index_generator() (quapy.data.base.LabelledCollection method)</a>
|
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.classification.html#quapy.classification.neural.TorchDataset.asDataloader">asDataloader() (quapy.classification.neural.TorchDataset method)</a>
|
<li><a href="quapy.classification.html#quapy.classification.neural.TorchDataset.asDataloader">asDataloader() (quapy.classification.neural.TorchDataset method)</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -146,6 +143,8 @@
|
||||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="quapy.method.html#quapy.method.base.BaseQuantifier">BaseQuantifier (class in quapy.method.base)</a>
|
<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>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.html#quapy.model_selection.GridSearchQ.best_model">best_model() (quapy.model_selection.GridSearchQ method)</a>
|
<li><a href="quapy.html#quapy.model_selection.GridSearchQ.best_model">best_model() (quapy.model_selection.GridSearchQ method)</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -155,14 +154,6 @@
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="quapy.data.html#quapy.data.base.LabelledCollection.binary">(quapy.data.base.LabelledCollection property)</a>
|
<li><a href="quapy.data.html#quapy.data.base.LabelledCollection.binary">(quapy.data.base.LabelledCollection property)</a>
|
||||||
</li>
|
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.OneVsAll.binary">(quapy.method.aggregative.OneVsAll property)</a>
|
|
||||||
</li>
|
|
||||||
<li><a href="quapy.method.html#quapy.method.base.BaseQuantifier.binary">(quapy.method.base.BaseQuantifier property)</a>
|
|
||||||
</li>
|
|
||||||
<li><a href="quapy.method.html#quapy.method.base.BinaryQuantifier.binary">(quapy.method.base.BinaryQuantifier property)</a>
|
|
||||||
</li>
|
|
||||||
<li><a href="quapy.method.html#quapy.method.meta.Ensemble.binary">(quapy.method.meta.Ensemble property)</a>
|
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
|
@ -185,27 +176,29 @@
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.CC">CC (class in quapy.method.aggregative)</a>
|
<li><a href="quapy.method.html#quapy.method.aggregative.CC">CC (class in quapy.method.aggregative)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.data.html#quapy.data.base.Dataset.classes_">classes_ (quapy.data.base.Dataset property)</a>
|
<li><a href="quapy.html#quapy.functional.check_prevalence_vector">check_prevalence_vector() (in module quapy.functional)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.method.html#quapy.method.base.OneVsAllGeneric.classes">classes (quapy.method.base.OneVsAllGeneric property)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.classification.html#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.classes_">classes_ (quapy.classification.calibration.RecalibratedProbabilisticClassifierBase property)</a>
|
||||||
|
|
||||||
<ul>
|
<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.aggregative.AggregativeQuantifier.classes_">(quapy.method.aggregative.AggregativeQuantifier property)</a>
|
<li><a href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.classes_">(quapy.method.aggregative.AggregativeQuantifier property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.OneVsAll.classes_">(quapy.method.aggregative.OneVsAll property)</a>
|
<li><a href="quapy.method.html#quapy.method.aggregative.OneVsAll.classes_">(quapy.method.aggregative.OneVsAll property)</a>
|
||||||
</li>
|
|
||||||
<li><a href="quapy.method.html#quapy.method.base.BaseQuantifier.classes_">(quapy.method.base.BaseQuantifier property)</a>
|
|
||||||
</li>
|
|
||||||
<li><a href="quapy.method.html#quapy.method.meta.Ensemble.classes_">(quapy.method.meta.Ensemble property)</a>
|
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.neural.QuaNetTrainer.classes_">(quapy.method.neural.QuaNetTrainer property)</a>
|
<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.non_aggregative.MaximumLikelihoodPrevalenceEstimation.classes_">(quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation property)</a>
|
|
||||||
</li>
|
|
||||||
<li><a href="quapy.html#quapy.model_selection.GridSearchQ.classes_">(quapy.model_selection.GridSearchQ property)</a>
|
|
||||||
</li>
|
</li>
|
||||||
</ul></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.ACC.classify">classify() (quapy.method.aggregative.ACC method)</a>
|
||||||
|
|
||||||
<ul>
|
<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.AggregativeQuantifier.classify">(quapy.method.aggregative.AggregativeQuantifier method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.ELM.classify">(quapy.method.aggregative.ELM method)</a>
|
<li><a href="quapy.method.html#quapy.method.aggregative.ELM.classify">(quapy.method.aggregative.ELM method)</a>
|
||||||
|
@ -224,12 +217,20 @@
|
||||||
<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>
|
||||||
<li><a href="quapy.classification.html#quapy.classification.neural.CNNnet">CNNnet (class in quapy.classification.neural)</a>
|
<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>
|
||||||
<li><a href="quapy.data.html#quapy.data.base.LabelledCollection.counts">counts() (quapy.data.base.LabelledCollection method)</a>
|
<li><a href="quapy.data.html#quapy.data.base.LabelledCollection.counts">counts() (quapy.data.base.LabelledCollection method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.html#quapy.util.create_if_not_exist">create_if_not_exist() (in module quapy.util)</a>
|
<li><a href="quapy.html#quapy.util.create_if_not_exist">create_if_not_exist() (in module quapy.util)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.html#quapy.util.create_parent_dir">create_parent_dir() (in module quapy.util)</a>
|
<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.method.html#quapy.method.aggregative.cross_generate_predictions_depr">cross_generate_predictions_depr() (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>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
|
@ -248,6 +249,8 @@
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
<li><a href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.dimensions">dimensions() (quapy.classification.neural.TextClassifierNet method)</a>
|
<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>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
|
@ -259,9 +262,13 @@
|
||||||
<li><a href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.document_embedding">(quapy.classification.neural.TextClassifierNet method)</a>
|
<li><a href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.document_embedding">(quapy.classification.neural.TextClassifierNet method)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
|
<li><a href="quapy.html#quapy.protocol.DomainMixer">DomainMixer (class in quapy.protocol)</a>
|
||||||
|
</li>
|
||||||
<li><a href="quapy.html#quapy.util.download_file">download_file() (in module quapy.util)</a>
|
<li><a href="quapy.html#quapy.util.download_file">download_file() (in module quapy.util)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.html#quapy.util.download_file_if_not_exists">download_file_if_not_exists() (in module quapy.util)</a>
|
<li><a href="quapy.html#quapy.util.download_file_if_not_exists">download_file_if_not_exists() (in module quapy.util)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.method.html#quapy.method.aggregative.DyS">DyS (class in quapy.method.aggregative)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
|
@ -298,6 +305,8 @@
|
||||||
<li><a href="quapy.html#quapy.plot.error_by_drift">error_by_drift() (in module quapy.plot)</a>
|
<li><a href="quapy.html#quapy.plot.error_by_drift">error_by_drift() (in module quapy.plot)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.html#quapy.evaluation.evaluate">evaluate() (in module quapy.evaluation)</a>
|
<li><a href="quapy.html#quapy.evaluation.evaluate">evaluate() (in module quapy.evaluation)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.html#quapy.evaluation.evaluation_report">evaluation_report() (in module quapy.evaluation)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.ExpectationMaximizationQuantifier">ExpectationMaximizationQuantifier (in module quapy.method.aggregative)</a>
|
<li><a href="quapy.method.html#quapy.method.aggregative.ExpectationMaximizationQuantifier">ExpectationMaximizationQuantifier (in module quapy.method.aggregative)</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -312,6 +321,8 @@
|
||||||
<li><a href="quapy.html#quapy.error.f1_error">f1_error() (in module quapy.error)</a>
|
<li><a href="quapy.html#quapy.error.f1_error">f1_error() (in module quapy.error)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.html#quapy.error.f1e">f1e() (in module quapy.error)</a>
|
<li><a href="quapy.html#quapy.error.f1e">f1e() (in module quapy.error)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.data.html#quapy.data.datasets.fetch_lequa2022">fetch_lequa2022() (in module quapy.data.datasets)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.data.html#quapy.data.datasets.fetch_reviews">fetch_reviews() (in module quapy.data.datasets)</a>
|
<li><a href="quapy.data.html#quapy.data.datasets.fetch_reviews">fetch_reviews() (in module quapy.data.datasets)</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -321,9 +332,11 @@
|
||||||
</li>
|
</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_UCILabelledCollection">fetch_UCILabelledCollection() (in module quapy.data.datasets)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.classification.html#quapy.classification.methods.LowRankLogisticRegression.fit">fit() (quapy.classification.methods.LowRankLogisticRegression method)</a>
|
<li><a href="quapy.classification.html#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.fit">fit() (quapy.classification.calibration.RecalibratedProbabilisticClassifierBase method)</a>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
|
<li><a href="quapy.classification.html#quapy.classification.methods.LowRankLogisticRegression.fit">(quapy.classification.methods.LowRankLogisticRegression method)</a>
|
||||||
|
</li>
|
||||||
<li><a href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.fit">(quapy.classification.neural.NeuralClassifierTrainer method)</a>
|
<li><a href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.fit">(quapy.classification.neural.NeuralClassifierTrainer method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.classification.html#quapy.classification.svmperf.SVMperf.fit">(quapy.classification.svmperf.SVMperf method)</a>
|
<li><a href="quapy.classification.html#quapy.classification.svmperf.SVMperf.fit">(quapy.classification.svmperf.SVMperf method)</a>
|
||||||
|
@ -335,6 +348,10 @@
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.fit">(quapy.method.aggregative.AggregativeQuantifier method)</a>
|
<li><a href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.fit">(quapy.method.aggregative.AggregativeQuantifier method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.CC.fit">(quapy.method.aggregative.CC method)</a>
|
<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>
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.ELM.fit">(quapy.method.aggregative.ELM method)</a>
|
<li><a href="quapy.method.html#quapy.method.aggregative.ELM.fit">(quapy.method.aggregative.ELM method)</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -347,10 +364,14 @@
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.PACC.fit">(quapy.method.aggregative.PACC method)</a>
|
<li><a href="quapy.method.html#quapy.method.aggregative.PACC.fit">(quapy.method.aggregative.PACC method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.PCC.fit">(quapy.method.aggregative.PCC method)</a>
|
<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>
|
||||||
<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.ThresholdOptimization.fit">(quapy.method.aggregative.ThresholdOptimization method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.base.BaseQuantifier.fit">(quapy.method.base.BaseQuantifier method)</a>
|
<li><a href="quapy.method.html#quapy.method.base.BaseQuantifier.fit">(quapy.method.base.BaseQuantifier method)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.method.html#quapy.method.base.OneVsAllGeneric.fit">(quapy.method.base.OneVsAllGeneric method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.meta.Ensemble.fit">(quapy.method.meta.Ensemble method)</a>
|
<li><a href="quapy.method.html#quapy.method.meta.Ensemble.fit">(quapy.method.meta.Ensemble method)</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -363,6 +384,10 @@
|
||||||
</ul></li>
|
</ul></li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
|
<li><a href="quapy.classification.html#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.fit_cv">fit_cv() (quapy.classification.calibration.RecalibratedProbabilisticClassifierBase method)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.classification.html#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.fit_tr_val">fit_tr_val() (quapy.classification.calibration.RecalibratedProbabilisticClassifierBase method)</a>
|
||||||
|
</li>
|
||||||
<li><a href="quapy.data.html#quapy.data.preprocessing.IndexTransformer.fit_transform">fit_transform() (quapy.data.preprocessing.IndexTransformer method)</a>
|
<li><a href="quapy.data.html#quapy.data.preprocessing.IndexTransformer.fit_transform">fit_transform() (quapy.data.preprocessing.IndexTransformer method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.forward">forward() (quapy.classification.neural.TextClassifierNet method)</a>
|
<li><a href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.forward">forward() (quapy.classification.neural.TextClassifierNet method)</a>
|
||||||
|
@ -385,9 +410,9 @@
|
||||||
<h2 id="G">G</h2>
|
<h2 id="G">G</h2>
|
||||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="quapy.html#quapy.evaluation.gen_prevalence_prediction">gen_prevalence_prediction() (in module quapy.evaluation)</a>
|
<li><a href="quapy.html#quapy.protocol.OnLabelledCollectionProtocol.get_collator">get_collator() (quapy.protocol.OnLabelledCollectionProtocol class method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.html#quapy.evaluation.gen_prevalence_report">gen_prevalence_report() (in module quapy.evaluation)</a>
|
<li><a href="quapy.html#quapy.protocol.OnLabelledCollectionProtocol.get_labelled_collection">get_labelled_collection() (quapy.protocol.OnLabelledCollectionProtocol method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.html#quapy.functional.get_nprevpoints_approximation">get_nprevpoints_approximation() (in module quapy.functional)</a>
|
<li><a href="quapy.html#quapy.functional.get_nprevpoints_approximation">get_nprevpoints_approximation() (in module quapy.functional)</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -401,18 +426,14 @@
|
||||||
<li><a href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.get_params">(quapy.classification.neural.NeuralClassifierTrainer method)</a>
|
<li><a href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.get_params">(quapy.classification.neural.NeuralClassifierTrainer method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.get_params">(quapy.classification.neural.TextClassifierNet method)</a>
|
<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.aggregative.AggregativeQuantifier.get_params">(quapy.method.aggregative.AggregativeQuantifier method)</a>
|
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.OneVsAll.get_params">(quapy.method.aggregative.OneVsAll method)</a>
|
<li><a href="quapy.method.html#quapy.method.aggregative.OneVsAll.get_params">(quapy.method.aggregative.OneVsAll method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.base.BaseQuantifier.get_params">(quapy.method.base.BaseQuantifier method)</a>
|
<li><a href="quapy.method.html#quapy.method.base.OneVsAllGeneric.get_params">(quapy.method.base.OneVsAllGeneric method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.meta.Ensemble.get_params">(quapy.method.meta.Ensemble method)</a>
|
<li><a href="quapy.method.html#quapy.method.meta.Ensemble.get_params">(quapy.method.meta.Ensemble method)</a>
|
||||||
</li>
|
</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.neural.QuaNetTrainer.get_params">(quapy.method.neural.QuaNetTrainer method)</a>
|
||||||
</li>
|
|
||||||
<li><a href="quapy.method.html#quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation.get_params">(quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation method)</a>
|
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.html#quapy.model_selection.GridSearchQ.get_params">(quapy.model_selection.GridSearchQ method)</a>
|
<li><a href="quapy.html#quapy.model_selection.GridSearchQ.get_params">(quapy.model_selection.GridSearchQ method)</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -423,6 +444,12 @@
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.html#quapy.util.get_quapy_home">get_quapy_home() (in module quapy.util)</a>
|
<li><a href="quapy.html#quapy.util.get_quapy_home">get_quapy_home() (in module quapy.util)</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li><a href="quapy.method.html#quapy.method.aggregative.ACC.getPteCondEstim">getPteCondEstim() (quapy.method.aggregative.ACC class method)</a>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<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.html#quapy.model_selection.GridSearchQ">GridSearchQ (class in quapy.model_selection)</a>
|
<li><a href="quapy.html#quapy.model_selection.GridSearchQ">GridSearchQ (class in quapy.model_selection)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
|
@ -446,22 +473,10 @@
|
||||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<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><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>
|
|
||||||
<li><a href="quapy.method.html#quapy.method.base.isaggregative">isaggregative() (in module quapy.method.base)</a>
|
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="quapy.html#quapy.isbinary">isbinary() (in module quapy)</a>
|
<li><a href="quapy.data.html#quapy.data.preprocessing.IndexTransformer">IndexTransformer (class in quapy.data.preprocessing)</a>
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li><a href="quapy.data.html#quapy.data.base.isbinary">(in module quapy.data.base)</a>
|
|
||||||
</li>
|
|
||||||
<li><a href="quapy.method.html#quapy.method.base.isbinary">(in module quapy.method.base)</a>
|
|
||||||
</li>
|
|
||||||
</ul></li>
|
|
||||||
<li><a href="quapy.method.html#quapy.method.base.isprobabilistic">isprobabilistic() (in module quapy.method.base)</a>
|
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
|
@ -486,8 +501,6 @@
|
||||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<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><a href="quapy.data.html#quapy.data.base.LabelledCollection">LabelledCollection (class in quapy.data.base)</a>
|
||||||
</li>
|
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.learner">learner (quapy.method.aggregative.AggregativeQuantifier property)</a>
|
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.data.html#quapy.data.base.Dataset.load">load() (quapy.data.base.Dataset class method)</a>
|
<li><a href="quapy.data.html#quapy.data.base.Dataset.load">load() (quapy.data.base.Dataset class method)</a>
|
||||||
|
|
||||||
|
@ -538,6 +551,8 @@
|
||||||
<li><a href="quapy.html#module-quapy">quapy</a>
|
<li><a href="quapy.html#module-quapy">quapy</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.classification.html#module-quapy.classification">quapy.classification</a>
|
<li><a href="quapy.classification.html#module-quapy.classification">quapy.classification</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.classification.html#module-quapy.classification.calibration">quapy.classification.calibration</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.classification.html#module-quapy.classification.methods">quapy.classification.methods</a>
|
<li><a href="quapy.classification.html#module-quapy.classification.methods">quapy.classification.methods</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -576,6 +591,8 @@
|
||||||
<li><a href="quapy.html#module-quapy.model_selection">quapy.model_selection</a>
|
<li><a href="quapy.html#module-quapy.model_selection">quapy.model_selection</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.html#module-quapy.plot">quapy.plot</a>
|
<li><a href="quapy.html#module-quapy.plot">quapy.plot</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.html#module-quapy.protocol">quapy.protocol</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.html#module-quapy.util">quapy.util</a>
|
<li><a href="quapy.html#module-quapy.util">quapy.util</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -600,27 +617,19 @@
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="quapy.data.html#quapy.data.base.LabelledCollection.n_classes">(quapy.data.base.LabelledCollection property)</a>
|
<li><a href="quapy.data.html#quapy.data.base.LabelledCollection.n_classes">(quapy.data.base.LabelledCollection property)</a>
|
||||||
</li>
|
|
||||||
<li><a href="quapy.method.html#quapy.method.base.BaseQuantifier.n_classes">(quapy.method.base.BaseQuantifier property)</a>
|
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
<li><a href="quapy.html#quapy.evaluation.natural_prevalence_prediction">natural_prevalence_prediction() (in module quapy.evaluation)</a>
|
<li><a href="quapy.classification.html#quapy.classification.calibration.NBVSCalibration">NBVSCalibration (class in quapy.classification.calibration)</a>
|
||||||
</li>
|
|
||||||
<li><a href="quapy.html#quapy.evaluation.natural_prevalence_protocol">natural_prevalence_protocol() (in module quapy.evaluation)</a>
|
|
||||||
</li>
|
|
||||||
<li><a href="quapy.html#quapy.evaluation.natural_prevalence_report">natural_prevalence_report() (in module quapy.evaluation)</a>
|
|
||||||
</li>
|
|
||||||
</ul></td>
|
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
|
||||||
<li><a href="quapy.data.html#quapy.data.base.LabelledCollection.natural_sampling_generator">natural_sampling_generator() (quapy.data.base.LabelledCollection method)</a>
|
|
||||||
</li>
|
|
||||||
<li><a href="quapy.data.html#quapy.data.base.LabelledCollection.natural_sampling_index_generator">natural_sampling_index_generator() (quapy.data.base.LabelledCollection method)</a>
|
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer">NeuralClassifierTrainer (class in quapy.classification.neural)</a>
|
<li><a href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer">NeuralClassifierTrainer (class in quapy.classification.neural)</a>
|
||||||
</li>
|
</li>
|
||||||
|
</ul></td>
|
||||||
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="quapy.html#quapy.error.nkld">nkld() (in module quapy.error)</a>
|
<li><a href="quapy.html#quapy.error.nkld">nkld() (in module quapy.error)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.html#quapy.functional.normalize_prevalence">normalize_prevalence() (in module quapy.functional)</a>
|
<li><a href="quapy.html#quapy.functional.normalize_prevalence">normalize_prevalence() (in module quapy.functional)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.html#quapy.protocol.NPP">NPP (class in quapy.protocol)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.html#quapy.functional.num_prevalence_combinations">num_prevalence_combinations() (in module quapy.functional)</a>
|
<li><a href="quapy.html#quapy.functional.num_prevalence_combinations">num_prevalence_combinations() (in module quapy.functional)</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -630,7 +639,15 @@
|
||||||
<h2 id="O">O</h2>
|
<h2 id="O">O</h2>
|
||||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
|
<li><a href="quapy.html#quapy.protocol.OnLabelledCollectionProtocol.on_preclassified_instances">on_preclassified_instances() (quapy.protocol.OnLabelledCollectionProtocol method)</a>
|
||||||
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.OneVsAll">OneVsAll (class in quapy.method.aggregative)</a>
|
<li><a href="quapy.method.html#quapy.method.aggregative.OneVsAll">OneVsAll (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>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
|
@ -638,6 +655,8 @@
|
||||||
<h2 id="P">P</h2>
|
<h2 id="P">P</h2>
|
||||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
|
<li><a href="quapy.data.html#quapy.data.base.LabelledCollection.p">p (quapy.data.base.LabelledCollection property)</a>
|
||||||
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.PACC">PACC (class in quapy.method.aggregative)</a>
|
<li><a href="quapy.method.html#quapy.method.aggregative.PACC">PACC (class in quapy.method.aggregative)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.html#quapy.util.parallel">parallel() (in module quapy.util)</a>
|
<li><a href="quapy.html#quapy.util.parallel">parallel() (in module quapy.util)</a>
|
||||||
|
@ -646,52 +665,44 @@
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.html#quapy.util.pickled_resource">pickled_resource() (in module quapy.util)</a>
|
<li><a href="quapy.html#quapy.util.pickled_resource">pickled_resource() (in module quapy.util)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.AggregativeProbabilisticQuantifier.posterior_probabilities">posterior_probabilities() (quapy.method.aggregative.AggregativeProbabilisticQuantifier method)</a>
|
<li><a href="quapy.classification.html#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.predict">predict() (quapy.classification.calibration.RecalibratedProbabilisticClassifierBase method)</a>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.OneVsAll.posterior_probabilities">(quapy.method.aggregative.OneVsAll method)</a>
|
<li><a href="quapy.classification.html#quapy.classification.methods.LowRankLogisticRegression.predict">(quapy.classification.methods.LowRankLogisticRegression method)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
|
||||||
<li><a href="quapy.classification.html#quapy.classification.methods.LowRankLogisticRegression.predict">predict() (quapy.classification.methods.LowRankLogisticRegression method)</a>
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li><a href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.predict">(quapy.classification.neural.NeuralClassifierTrainer method)</a>
|
<li><a href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.predict">(quapy.classification.neural.NeuralClassifierTrainer method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.classification.html#quapy.classification.svmperf.SVMperf.predict">(quapy.classification.svmperf.SVMperf method)</a>
|
<li><a href="quapy.classification.html#quapy.classification.svmperf.SVMperf.predict">(quapy.classification.svmperf.SVMperf method)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
<li><a href="quapy.classification.html#quapy.classification.methods.LowRankLogisticRegression.predict_proba">predict_proba() (quapy.classification.methods.LowRankLogisticRegression method)</a>
|
<li><a href="quapy.classification.html#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase.predict_proba">predict_proba() (quapy.classification.calibration.RecalibratedProbabilisticClassifierBase method)</a>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
|
<li><a href="quapy.classification.html#quapy.classification.methods.LowRankLogisticRegression.predict_proba">(quapy.classification.methods.LowRankLogisticRegression method)</a>
|
||||||
|
</li>
|
||||||
<li><a href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.predict_proba">(quapy.classification.neural.NeuralClassifierTrainer method)</a>
|
<li><a href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.predict_proba">(quapy.classification.neural.NeuralClassifierTrainer method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.predict_proba">(quapy.classification.neural.TextClassifierNet method)</a>
|
<li><a href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.predict_proba">(quapy.classification.neural.TextClassifierNet method)</a>
|
||||||
</li>
|
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.AggregativeProbabilisticQuantifier.predict_proba">(quapy.method.aggregative.AggregativeProbabilisticQuantifier method)</a>
|
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.EMQ.predict_proba">(quapy.method.aggregative.EMQ method)</a>
|
<li><a href="quapy.method.html#quapy.method.aggregative.EMQ.predict_proba">(quapy.method.aggregative.EMQ method)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
|
<li><a href="quapy.html#quapy.evaluation.prediction">prediction() (in module quapy.evaluation)</a>
|
||||||
|
</li>
|
||||||
<li><a href="quapy.data.html#quapy.data.base.LabelledCollection.prevalence">prevalence() (quapy.data.base.LabelledCollection method)</a>
|
<li><a href="quapy.data.html#quapy.data.base.LabelledCollection.prevalence">prevalence() (quapy.data.base.LabelledCollection method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.html#quapy.functional.prevalence_from_labels">prevalence_from_labels() (in module quapy.functional)</a>
|
<li><a href="quapy.html#quapy.functional.prevalence_from_labels">prevalence_from_labels() (in module quapy.functional)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.html#quapy.functional.prevalence_from_probabilities">prevalence_from_probabilities() (in module quapy.functional)</a>
|
<li><a href="quapy.html#quapy.functional.prevalence_from_probabilities">prevalence_from_probabilities() (in module quapy.functional)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.html#quapy.protocol.APP.prevalence_grid">prevalence_grid() (quapy.protocol.APP method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.html#quapy.functional.prevalence_linspace">prevalence_linspace() (in module quapy.functional)</a>
|
<li><a href="quapy.html#quapy.functional.prevalence_linspace">prevalence_linspace() (in module quapy.functional)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.AggregativeProbabilisticQuantifier.probabilistic">probabilistic (quapy.method.aggregative.AggregativeProbabilisticQuantifier property)</a>
|
<li><a href="quapy.method.html#quapy.method.meta.Ensemble.probabilistic">probabilistic (quapy.method.meta.Ensemble property)</a>
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.OneVsAll.probabilistic">(quapy.method.aggregative.OneVsAll property)</a>
|
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.base.BaseQuantifier.probabilistic">(quapy.method.base.BaseQuantifier property)</a>
|
|
||||||
</li>
|
|
||||||
<li><a href="quapy.method.html#quapy.method.meta.Ensemble.probabilistic">(quapy.method.meta.Ensemble property)</a>
|
|
||||||
</li>
|
|
||||||
</ul></li>
|
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.ProbabilisticAdjustedClassifyAndCount">ProbabilisticAdjustedClassifyAndCount (in module quapy.method.aggregative)</a>
|
<li><a href="quapy.method.html#quapy.method.aggregative.ProbabilisticAdjustedClassifyAndCount">ProbabilisticAdjustedClassifyAndCount (in module quapy.method.aggregative)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.ProbabilisticClassifyAndCount">ProbabilisticClassifyAndCount (in module quapy.method.aggregative)</a>
|
<li><a href="quapy.method.html#quapy.method.aggregative.ProbabilisticClassifyAndCount">ProbabilisticClassifyAndCount (in module quapy.method.aggregative)</a>
|
||||||
|
@ -706,14 +717,12 @@
|
||||||
</li>
|
</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>
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.AggregativeProbabilisticQuantifier.quantify">quantify() (quapy.method.aggregative.AggregativeProbabilisticQuantifier method)</a>
|
<li><a href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.quantify">quantify() (quapy.method.aggregative.AggregativeQuantifier method)</a>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<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.aggregative.OneVsAll.quantify">(quapy.method.aggregative.OneVsAll method)</a>
|
|
||||||
</li>
|
|
||||||
<li><a href="quapy.method.html#quapy.method.base.BaseQuantifier.quantify">(quapy.method.base.BaseQuantifier method)</a>
|
<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>
|
||||||
<li><a href="quapy.method.html#quapy.method.meta.Ensemble.quantify">(quapy.method.meta.Ensemble method)</a>
|
<li><a href="quapy.method.html#quapy.method.meta.Ensemble.quantify">(quapy.method.meta.Ensemble method)</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -736,6 +745,13 @@
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="quapy.classification.html#module-quapy.classification">module</a>
|
<li><a href="quapy.classification.html#module-quapy.classification">module</a>
|
||||||
|
</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>
|
||||||
|
quapy.classification.calibration
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><a href="quapy.classification.html#module-quapy.classification.calibration">module</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
<li>
|
<li>
|
||||||
|
@ -871,6 +887,13 @@
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="quapy.html#module-quapy.plot">module</a>
|
<li><a href="quapy.html#module-quapy.plot">module</a>
|
||||||
|
</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>
|
||||||
|
quapy.protocol
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><a href="quapy.html#module-quapy.protocol">module</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
<li>
|
<li>
|
||||||
|
@ -888,15 +911,23 @@
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="quapy.html#quapy.error.rae">rae() (in module quapy.error)</a>
|
<li><a href="quapy.html#quapy.error.rae">rae() (in module quapy.error)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.data.html#quapy.data.preprocessing.reduce_columns">reduce_columns() (in module quapy.data.preprocessing)</a>
|
<li><a href="quapy.html#quapy.protocol.AbstractStochasticSeededProtocol.random_state">random_state (quapy.protocol.AbstractStochasticSeededProtocol property)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.classification.html#quapy.classification.calibration.RecalibratedProbabilisticClassifier">RecalibratedProbabilisticClassifier (class in quapy.classification.calibration)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.classification.html#quapy.classification.calibration.RecalibratedProbabilisticClassifierBase">RecalibratedProbabilisticClassifierBase (class in quapy.classification.calibration)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
|
<li><a href="quapy.data.html#quapy.data.preprocessing.reduce_columns">reduce_columns() (in module quapy.data.preprocessing)</a>
|
||||||
|
</li>
|
||||||
<li><a href="quapy.data.html#quapy.data.reader.reindex_labels">reindex_labels() (in module quapy.data.reader)</a>
|
<li><a href="quapy.data.html#quapy.data.reader.reindex_labels">reindex_labels() (in module quapy.data.reader)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.html#quapy.error.relative_absolute_error">relative_absolute_error() (in module quapy.error)</a>
|
<li><a href="quapy.html#quapy.error.relative_absolute_error">relative_absolute_error() (in module quapy.error)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.reset_net_params">reset_net_params() (quapy.classification.neural.NeuralClassifierTrainer method)</a>
|
<li><a href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.reset_net_params">reset_net_params() (quapy.classification.neural.NeuralClassifierTrainer method)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.html#quapy.protocol.OnLabelledCollectionProtocol.RETURN_TYPES">RETURN_TYPES (quapy.protocol.OnLabelledCollectionProtocol attribute)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
|
@ -904,6 +935,30 @@
|
||||||
<h2 id="S">S</h2>
|
<h2 id="S">S</h2>
|
||||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
|
<li><a href="quapy.html#quapy.protocol.AbstractStochasticSeededProtocol.sample">sample() (quapy.protocol.AbstractStochasticSeededProtocol method)</a>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><a href="quapy.html#quapy.protocol.APP.sample">(quapy.protocol.APP method)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.html#quapy.protocol.DomainMixer.sample">(quapy.protocol.DomainMixer method)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.html#quapy.protocol.NPP.sample">(quapy.protocol.NPP method)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.html#quapy.protocol.USimplexPP.sample">(quapy.protocol.USimplexPP method)</a>
|
||||||
|
</li>
|
||||||
|
</ul></li>
|
||||||
|
<li><a href="quapy.html#quapy.protocol.AbstractStochasticSeededProtocol.samples_parameters">samples_parameters() (quapy.protocol.AbstractStochasticSeededProtocol method)</a>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><a href="quapy.html#quapy.protocol.APP.samples_parameters">(quapy.protocol.APP method)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.html#quapy.protocol.DomainMixer.samples_parameters">(quapy.protocol.DomainMixer method)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.html#quapy.protocol.NPP.samples_parameters">(quapy.protocol.NPP method)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.html#quapy.protocol.USimplexPP.samples_parameters">(quapy.protocol.USimplexPP method)</a>
|
||||||
|
</li>
|
||||||
|
</ul></li>
|
||||||
<li><a href="quapy.data.html#quapy.data.base.LabelledCollection.sampling">sampling() (quapy.data.base.LabelledCollection method)</a>
|
<li><a href="quapy.data.html#quapy.data.base.LabelledCollection.sampling">sampling() (quapy.data.base.LabelledCollection method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.data.html#quapy.data.base.LabelledCollection.sampling_from_index">sampling_from_index() (quapy.data.base.LabelledCollection method)</a>
|
<li><a href="quapy.data.html#quapy.data.base.LabelledCollection.sampling_from_index">sampling_from_index() (quapy.data.base.LabelledCollection method)</a>
|
||||||
|
@ -920,20 +975,14 @@
|
||||||
<li><a href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.set_params">(quapy.classification.neural.NeuralClassifierTrainer method)</a>
|
<li><a href="quapy.classification.html#quapy.classification.neural.NeuralClassifierTrainer.set_params">(quapy.classification.neural.NeuralClassifierTrainer method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.classification.html#quapy.classification.svmperf.SVMperf.set_params">(quapy.classification.svmperf.SVMperf method)</a>
|
<li><a href="quapy.classification.html#quapy.classification.svmperf.SVMperf.set_params">(quapy.classification.svmperf.SVMperf method)</a>
|
||||||
</li>
|
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.AggregativeProbabilisticQuantifier.set_params">(quapy.method.aggregative.AggregativeProbabilisticQuantifier method)</a>
|
|
||||||
</li>
|
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.AggregativeQuantifier.set_params">(quapy.method.aggregative.AggregativeQuantifier method)</a>
|
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.OneVsAll.set_params">(quapy.method.aggregative.OneVsAll method)</a>
|
<li><a href="quapy.method.html#quapy.method.aggregative.OneVsAll.set_params">(quapy.method.aggregative.OneVsAll method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.base.BaseQuantifier.set_params">(quapy.method.base.BaseQuantifier method)</a>
|
<li><a href="quapy.method.html#quapy.method.base.OneVsAllGeneric.set_params">(quapy.method.base.OneVsAllGeneric method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.meta.Ensemble.set_params">(quapy.method.meta.Ensemble method)</a>
|
<li><a href="quapy.method.html#quapy.method.meta.Ensemble.set_params">(quapy.method.meta.Ensemble method)</a>
|
||||||
</li>
|
</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.neural.QuaNetTrainer.set_params">(quapy.method.neural.QuaNetTrainer method)</a>
|
||||||
</li>
|
|
||||||
<li><a href="quapy.method.html#quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation.set_params">(quapy.method.non_aggregative.MaximumLikelihoodPrevalenceEstimation method)</a>
|
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.html#quapy.model_selection.GridSearchQ.set_params">(quapy.model_selection.GridSearchQ method)</a>
|
<li><a href="quapy.html#quapy.model_selection.GridSearchQ.set_params">(quapy.model_selection.GridSearchQ method)</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -941,10 +990,14 @@
|
||||||
</ul></td>
|
</ul></td>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.SLD">SLD (in module quapy.method.aggregative)</a>
|
<li><a href="quapy.method.html#quapy.method.aggregative.SLD">SLD (in module quapy.method.aggregative)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.method.html#quapy.method.aggregative.SMM">SMM (class in quapy.method.aggregative)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.html#quapy.error.smooth">smooth() (in module quapy.error)</a>
|
<li><a href="quapy.html#quapy.error.smooth">smooth() (in module quapy.error)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.method.html#quapy.method.aggregative.ACC.solve_adjustment">solve_adjustment() (quapy.method.aggregative.ACC class method)</a>
|
<li><a href="quapy.method.html#quapy.method.aggregative.ACC.solve_adjustment">solve_adjustment() (quapy.method.aggregative.ACC class method)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.data.html#quapy.data.base.LabelledCollection.split_random">split_random() (quapy.data.base.LabelledCollection method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.data.html#quapy.data.base.LabelledCollection.split_stratified">split_stratified() (quapy.data.base.LabelledCollection method)</a>
|
<li><a href="quapy.data.html#quapy.data.base.LabelledCollection.split_stratified">split_stratified() (quapy.data.base.LabelledCollection method)</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -986,12 +1039,38 @@
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.classification.html#quapy.classification.neural.TextClassifierNet">TextClassifierNet (class in quapy.classification.neural)</a>
|
<li><a href="quapy.classification.html#quapy.classification.neural.TextClassifierNet">TextClassifierNet (class in quapy.classification.neural)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
|
||||||
<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.aggregative.ThresholdOptimization">ThresholdOptimization (class in quapy.method.aggregative)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.html#quapy.functional.TopsoeDistance">TopsoeDistance() (in module quapy.functional)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.classification.html#quapy.classification.neural.TorchDataset">TorchDataset (class in quapy.classification.neural)</a>
|
<li><a href="quapy.classification.html#quapy.classification.neural.TorchDataset">TorchDataset (class in quapy.classification.neural)</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li><a href="quapy.html#quapy.protocol.AbstractProtocol.total">total() (quapy.protocol.AbstractProtocol method)</a>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><a href="quapy.html#quapy.protocol.APP.total">(quapy.protocol.APP method)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.html#quapy.protocol.DomainMixer.total">(quapy.protocol.DomainMixer method)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.html#quapy.protocol.NPP.total">(quapy.protocol.NPP method)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.html#quapy.protocol.USimplexPP.total">(quapy.protocol.USimplexPP method)</a>
|
||||||
|
</li>
|
||||||
|
</ul></li>
|
||||||
|
</ul></td>
|
||||||
|
<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>
|
<li><a href="quapy.classification.html#quapy.classification.methods.LowRankLogisticRegression.transform">transform() (quapy.classification.methods.LowRankLogisticRegression method)</a>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
|
@ -1000,6 +1079,8 @@
|
||||||
<li><a href="quapy.data.html#quapy.data.preprocessing.IndexTransformer.transform">(quapy.data.preprocessing.IndexTransformer method)</a>
|
<li><a href="quapy.data.html#quapy.data.preprocessing.IndexTransformer.transform">(quapy.data.preprocessing.IndexTransformer method)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
|
<li><a href="quapy.classification.html#quapy.classification.calibration.TSCalibration">TSCalibration (class in quapy.classification.calibration)</a>
|
||||||
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
|
|
||||||
|
@ -1015,6 +1096,8 @@
|
||||||
<li><a href="quapy.data.html#quapy.data.base.LabelledCollection.uniform_sampling_index">uniform_sampling_index() (quapy.data.base.LabelledCollection method)</a>
|
<li><a href="quapy.data.html#quapy.data.base.LabelledCollection.uniform_sampling_index">uniform_sampling_index() (quapy.data.base.LabelledCollection method)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.html#quapy.functional.uniform_simplex_sampling">uniform_simplex_sampling() (in module quapy.functional)</a>
|
<li><a href="quapy.html#quapy.functional.uniform_simplex_sampling">uniform_simplex_sampling() (in module quapy.functional)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.html#quapy.protocol.USimplexPP">USimplexPP (class in quapy.protocol)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
|
@ -1039,6 +1122,8 @@
|
||||||
</ul></td>
|
</ul></td>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="quapy.data.html#quapy.data.preprocessing.IndexTransformer.vocabulary_size">vocabulary_size() (quapy.data.preprocessing.IndexTransformer method)</a>
|
<li><a href="quapy.data.html#quapy.data.preprocessing.IndexTransformer.vocabulary_size">vocabulary_size() (quapy.data.preprocessing.IndexTransformer method)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.classification.html#quapy.classification.calibration.VSCalibration">VSCalibration (class in quapy.classification.calibration)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
|
@ -1055,16 +1140,30 @@
|
||||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<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.aggregative.X">X (class in quapy.method.aggregative)</a>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><a href="quapy.data.html#quapy.data.base.LabelledCollection.X">(quapy.data.base.LabelledCollection property)</a>
|
||||||
</li>
|
</li>
|
||||||
|
</ul></li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
<td style="width: 33%; vertical-align: top;"><ul>
|
<td style="width: 33%; vertical-align: top;"><ul>
|
||||||
<li><a href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.xavier_uniform">xavier_uniform() (quapy.classification.neural.TextClassifierNet method)</a>
|
<li><a href="quapy.classification.html#quapy.classification.neural.TextClassifierNet.xavier_uniform">xavier_uniform() (quapy.classification.neural.TextClassifierNet method)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="quapy.data.html#quapy.data.base.LabelledCollection.Xp">Xp (quapy.data.base.LabelledCollection property)</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="quapy.data.html#quapy.data.base.LabelledCollection.Xy">Xy (quapy.data.base.LabelledCollection property)</a>
|
<li><a href="quapy.data.html#quapy.data.base.LabelledCollection.Xy">Xy (quapy.data.base.LabelledCollection property)</a>
|
||||||
</li>
|
</li>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
|
|
||||||
|
<h2 id="Y">Y</h2>
|
||||||
|
<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.y">y (quapy.data.base.LabelledCollection property)</a>
|
||||||
|
</li>
|
||||||
|
</ul></td>
|
||||||
|
</tr></table>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="clearer"></div>
|
<div class="clearer"></div>
|
||||||
|
@ -1082,7 +1181,7 @@
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>$('#searchbox').show(0);</script>
|
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="clearer"></div>
|
<div class="clearer"></div>
|
||||||
|
@ -1096,13 +1195,13 @@
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="py-modindex.html" title="Python Module Index"
|
<a href="py-modindex.html" title="Python Module Index"
|
||||||
>modules</a> |</li>
|
>modules</a> |</li>
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.6 documentation</a> »</li>
|
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> »</li>
|
||||||
<li class="nav-item nav-item-this"><a href="">Index</a></li>
|
<li class="nav-item nav-item-this"><a href="">Index</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer" role="contentinfo">
|
<div class="footer" role="contentinfo">
|
||||||
© Copyright 2021, Alejandro Moreo.
|
© Copyright 2021, Alejandro Moreo.
|
||||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.2.0.
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -2,19 +2,21 @@
|
||||||
|
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
|
|
||||||
<html>
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
|
<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! — QuaPy 0.1.6 documentation</title>
|
<title>Welcome to QuaPy’s documentation! — QuaPy 0.1.7 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/bizstyle.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 data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
<script src="_static/jquery.js"></script>
|
<script src="_static/jquery.js"></script>
|
||||||
<script src="_static/underscore.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/doctools.js"></script>
|
||||||
|
<script src="_static/sphinx_highlight.js"></script>
|
||||||
<script src="_static/bizstyle.js"></script>
|
<script src="_static/bizstyle.js"></script>
|
||||||
<link rel="index" title="Index" href="genindex.html" />
|
<link rel="index" title="Index" href="genindex.html" />
|
||||||
<link rel="search" title="Search" href="search.html" />
|
<link rel="search" title="Search" href="search.html" />
|
||||||
|
@ -36,7 +38,7 @@
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="Installation.html" title="Installation"
|
<a href="Installation.html" title="Installation"
|
||||||
accesskey="N">next</a> |</li>
|
accesskey="N">next</a> |</li>
|
||||||
<li class="nav-item nav-item-0"><a href="#">QuaPy 0.1.6 documentation</a> »</li>
|
<li class="nav-item nav-item-0"><a href="#">QuaPy 0.1.7 documentation</a> »</li>
|
||||||
<li class="nav-item nav-item-this"><a href="">Welcome to QuaPy’s documentation!</a></li>
|
<li class="nav-item nav-item-this"><a href="">Welcome to QuaPy’s documentation!</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -47,11 +49,11 @@
|
||||||
<div class="body" role="main">
|
<div class="body" role="main">
|
||||||
|
|
||||||
<section id="welcome-to-quapy-s-documentation">
|
<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 headline">¶</a></h1>
|
<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)
|
<p>QuaPy is an open source framework for Quantification (a.k.a. Supervised Prevalence Estimation)
|
||||||
written in Python.</p>
|
written in Python.</p>
|
||||||
<section id="introduction">
|
<section id="introduction">
|
||||||
<h2>Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline">¶</a></h2>
|
<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
|
<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
|
in quantification literature, such as the most important quantification baselines, many advanced
|
||||||
quantification methods, quantification-oriented model selection, many evaluation measures and protocols
|
quantification methods, quantification-oriented model selection, many evaluation measures and protocols
|
||||||
|
@ -59,7 +61,7 @@ used for evaluating quantification methods.
|
||||||
QuaPy also integrates commonly used datasets and offers visualization tools for facilitating the analysis and
|
QuaPy also integrates commonly used datasets and offers visualization tools for facilitating the analysis and
|
||||||
interpretation of results.</p>
|
interpretation of results.</p>
|
||||||
<section id="a-quick-example">
|
<section id="a-quick-example">
|
||||||
<h3>A quick example:<a class="headerlink" href="#a-quick-example" title="Permalink to this headline">¶</a></h3>
|
<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
|
<p>The following script fetchs a Twitter dataset, trains and evaluates an
|
||||||
<cite>Adjusted Classify & Count</cite> model in terms of the <cite>Mean Absolute Error</cite> (MAE)
|
<cite>Adjusted Classify & 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
|
between the class prevalences estimated for the test set and the true prevalences
|
||||||
|
@ -90,7 +92,7 @@ QuaPy implements sampling procedures and evaluation protocols that automates thi
|
||||||
See the <a class="reference internal" href="Evaluation.html"><span class="doc">Evaluation</span></a> for detailed examples.</p>
|
See the <a class="reference internal" href="Evaluation.html"><span class="doc">Evaluation</span></a> for detailed examples.</p>
|
||||||
</section>
|
</section>
|
||||||
<section id="features">
|
<section id="features">
|
||||||
<h3>Features<a class="headerlink" href="#features" title="Permalink to this headline">¶</a></h3>
|
<h3>Features<a class="headerlink" href="#features" title="Permalink to this heading">¶</a></h3>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><p>Implementation of most popular quantification methods (Classify-&-Count variants, Expectation-Maximization, SVM-based variants for quantification, HDy, QuaNet, and Ensembles).</p></li>
|
<li><p>Implementation of most popular quantification methods (Classify-&-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>Versatile functionality for performing evaluation based on artificial sampling protocols.</p></li>
|
||||||
|
@ -133,6 +135,11 @@ See the <a class="reference internal" href="Evaluation.html"><span class="doc">E
|
||||||
<li class="toctree-l2"><a class="reference internal" href="Methods.html#meta-models">Meta Models</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="Methods.html#meta-models">Meta Models</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</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>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="Plotting.html">Plotting</a><ul>
|
<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#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#quantification-bias">Quantification bias</a></li>
|
||||||
|
@ -149,7 +156,7 @@ See the <a class="reference internal" href="Evaluation.html"><span class="doc">E
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
<section id="indices-and-tables">
|
<section id="indices-and-tables">
|
||||||
<h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline">¶</a></h1>
|
<h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this heading">¶</a></h1>
|
||||||
<ul class="simple">
|
<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="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>
|
<li><p><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></p></li>
|
||||||
|
@ -164,6 +171,7 @@ See the <a class="reference internal" href="Evaluation.html"><span class="doc">E
|
||||||
</div>
|
</div>
|
||||||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||||||
<div class="sphinxsidebarwrapper">
|
<div class="sphinxsidebarwrapper">
|
||||||
|
<div>
|
||||||
<h3><a href="#">Table of Contents</a></h3>
|
<h3><a href="#">Table of Contents</a></h3>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a class="reference internal" href="#">Welcome to QuaPy’s documentation!</a><ul>
|
<li><a class="reference internal" href="#">Welcome to QuaPy’s documentation!</a><ul>
|
||||||
|
@ -177,9 +185,12 @@ See the <a class="reference internal" href="Evaluation.html"><span class="doc">E
|
||||||
<li><a class="reference internal" href="#indices-and-tables">Indices and tables</a></li>
|
<li><a class="reference internal" href="#indices-and-tables">Indices and tables</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
<h4>Next topic</h4>
|
<h4>Next topic</h4>
|
||||||
<p class="topless"><a href="Installation.html"
|
<p class="topless"><a href="Installation.html"
|
||||||
title="next chapter">Installation</a></p>
|
title="next chapter">Installation</a></p>
|
||||||
|
</div>
|
||||||
<div role="note" aria-label="source link">
|
<div role="note" aria-label="source link">
|
||||||
<h3>This Page</h3>
|
<h3>This Page</h3>
|
||||||
<ul class="this-page-menu">
|
<ul class="this-page-menu">
|
||||||
|
@ -196,7 +207,7 @@ See the <a class="reference internal" href="Evaluation.html"><span class="doc">E
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>$('#searchbox').show(0);</script>
|
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="clearer"></div>
|
<div class="clearer"></div>
|
||||||
|
@ -213,13 +224,13 @@ See the <a class="reference internal" href="Evaluation.html"><span class="doc">E
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="Installation.html" title="Installation"
|
<a href="Installation.html" title="Installation"
|
||||||
>next</a> |</li>
|
>next</a> |</li>
|
||||||
<li class="nav-item nav-item-0"><a href="#">QuaPy 0.1.6 documentation</a> »</li>
|
<li class="nav-item nav-item-0"><a href="#">QuaPy 0.1.7 documentation</a> »</li>
|
||||||
<li class="nav-item nav-item-this"><a href="">Welcome to QuaPy’s documentation!</a></li>
|
<li class="nav-item nav-item-this"><a href="">Welcome to QuaPy’s documentation!</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer" role="contentinfo">
|
<div class="footer" role="contentinfo">
|
||||||
© Copyright 2021, Alejandro Moreo.
|
© Copyright 2021, Alejandro Moreo.
|
||||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.2.0.
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -2,19 +2,21 @@
|
||||||
|
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
|
|
||||||
<html>
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||||
|
|
||||||
<title>quapy — QuaPy 0.1.6 documentation</title>
|
<title>quapy — QuaPy 0.1.7 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/bizstyle.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 data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
<script src="_static/jquery.js"></script>
|
<script src="_static/jquery.js"></script>
|
||||||
<script src="_static/underscore.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/doctools.js"></script>
|
||||||
|
<script src="_static/sphinx_highlight.js"></script>
|
||||||
<script src="_static/bizstyle.js"></script>
|
<script src="_static/bizstyle.js"></script>
|
||||||
<link rel="index" title="Index" href="genindex.html" />
|
<link rel="index" title="Index" href="genindex.html" />
|
||||||
<link rel="search" title="Search" href="search.html" />
|
<link rel="search" title="Search" href="search.html" />
|
||||||
|
@ -40,7 +42,7 @@
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="Plotting.html" title="Plotting"
|
<a href="Plotting.html" title="Plotting"
|
||||||
accesskey="P">previous</a> |</li>
|
accesskey="P">previous</a> |</li>
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.6 documentation</a> »</li>
|
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> »</li>
|
||||||
<li class="nav-item nav-item-this"><a href="">quapy</a></li>
|
<li class="nav-item nav-item-this"><a href="">quapy</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -51,47 +53,19 @@
|
||||||
<div class="body" role="main">
|
<div class="body" role="main">
|
||||||
|
|
||||||
<section id="quapy">
|
<section id="quapy">
|
||||||
<h1>quapy<a class="headerlink" href="#quapy" title="Permalink to this headline">¶</a></h1>
|
<h1>quapy<a class="headerlink" href="#quapy" title="Permalink to this heading">¶</a></h1>
|
||||||
<div class="toctree-wrapper compound">
|
<div class="toctree-wrapper compound">
|
||||||
<ul>
|
<ul>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="quapy.html">quapy package</a><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.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.neural">quapy.method.neural 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#submodules">Submodules</a></li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="quapy.html#module-quapy.error">quapy.error module</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 module</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#module-quapy.functional">quapy.functional module</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.model_selection">quapy.model_selection module</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.plot">quapy.plot module</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.util">quapy.util module</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">Module contents</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="quapy.html#module-quapy">Module contents</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
@ -106,12 +80,16 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||||||
<div class="sphinxsidebarwrapper">
|
<div class="sphinxsidebarwrapper">
|
||||||
|
<div>
|
||||||
<h4>Previous topic</h4>
|
<h4>Previous topic</h4>
|
||||||
<p class="topless"><a href="Plotting.html"
|
<p class="topless"><a href="Plotting.html"
|
||||||
title="previous chapter">Plotting</a></p>
|
title="previous chapter">Plotting</a></p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
<h4>Next topic</h4>
|
<h4>Next topic</h4>
|
||||||
<p class="topless"><a href="quapy.html"
|
<p class="topless"><a href="quapy.html"
|
||||||
title="next chapter">quapy package</a></p>
|
title="next chapter">quapy package</a></p>
|
||||||
|
</div>
|
||||||
<div role="note" aria-label="source link">
|
<div role="note" aria-label="source link">
|
||||||
<h3>This Page</h3>
|
<h3>This Page</h3>
|
||||||
<ul class="this-page-menu">
|
<ul class="this-page-menu">
|
||||||
|
@ -128,7 +106,7 @@
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>$('#searchbox').show(0);</script>
|
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="clearer"></div>
|
<div class="clearer"></div>
|
||||||
|
@ -148,13 +126,13 @@
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="Plotting.html" title="Plotting"
|
<a href="Plotting.html" title="Plotting"
|
||||||
>previous</a> |</li>
|
>previous</a> |</li>
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.6 documentation</a> »</li>
|
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> »</li>
|
||||||
<li class="nav-item nav-item-this"><a href="">quapy</a></li>
|
<li class="nav-item nav-item-this"><a href="">quapy</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer" role="contentinfo">
|
<div class="footer" role="contentinfo">
|
||||||
© Copyright 2021, Alejandro Moreo.
|
© Copyright 2021, Alejandro Moreo.
|
||||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.2.0.
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
Binary file not shown.
|
@ -2,18 +2,20 @@
|
||||||
|
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
|
|
||||||
<html>
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Python Module Index — QuaPy 0.1.6 documentation</title>
|
<title>Python Module Index — QuaPy 0.1.7 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/bizstyle.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 data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
<script src="_static/jquery.js"></script>
|
<script src="_static/jquery.js"></script>
|
||||||
<script src="_static/underscore.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/doctools.js"></script>
|
||||||
|
<script src="_static/sphinx_highlight.js"></script>
|
||||||
<script src="_static/bizstyle.js"></script>
|
<script src="_static/bizstyle.js"></script>
|
||||||
<link rel="index" title="Index" href="genindex.html" />
|
<link rel="index" title="Index" href="genindex.html" />
|
||||||
<link rel="search" title="Search" href="search.html" />
|
<link rel="search" title="Search" href="search.html" />
|
||||||
|
@ -34,7 +36,7 @@
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="#" title="Python Module Index"
|
<a href="#" title="Python Module Index"
|
||||||
>modules</a> |</li>
|
>modules</a> |</li>
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.6 documentation</a> »</li>
|
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> »</li>
|
||||||
<li class="nav-item nav-item-this"><a href="">Python Module Index</a></li>
|
<li class="nav-item nav-item-this"><a href="">Python Module Index</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -66,6 +68,11 @@
|
||||||
<td>   
|
<td>   
|
||||||
<a href="quapy.classification.html#module-quapy.classification"><code class="xref">quapy.classification</code></a></td><td>
|
<a href="quapy.classification.html#module-quapy.classification"><code class="xref">quapy.classification</code></a></td><td>
|
||||||
<em></em></td></tr>
|
<em></em></td></tr>
|
||||||
|
<tr class="cg-1">
|
||||||
|
<td></td>
|
||||||
|
<td>   
|
||||||
|
<a href="quapy.classification.html#module-quapy.classification.calibration"><code class="xref">quapy.classification.calibration</code></a></td><td>
|
||||||
|
<em></em></td></tr>
|
||||||
<tr class="cg-1">
|
<tr class="cg-1">
|
||||||
<td></td>
|
<td></td>
|
||||||
<td>   
|
<td>   
|
||||||
|
@ -161,6 +168,11 @@
|
||||||
<td>   
|
<td>   
|
||||||
<a href="quapy.html#module-quapy.plot"><code class="xref">quapy.plot</code></a></td><td>
|
<a href="quapy.html#module-quapy.plot"><code class="xref">quapy.plot</code></a></td><td>
|
||||||
<em></em></td></tr>
|
<em></em></td></tr>
|
||||||
|
<tr class="cg-1">
|
||||||
|
<td></td>
|
||||||
|
<td>   
|
||||||
|
<a href="quapy.html#module-quapy.protocol"><code class="xref">quapy.protocol</code></a></td><td>
|
||||||
|
<em></em></td></tr>
|
||||||
<tr class="cg-1">
|
<tr class="cg-1">
|
||||||
<td></td>
|
<td></td>
|
||||||
<td>   
|
<td>   
|
||||||
|
@ -184,7 +196,7 @@
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>$('#searchbox').show(0);</script>
|
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="clearer"></div>
|
<div class="clearer"></div>
|
||||||
|
@ -198,13 +210,13 @@
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="#" title="Python Module Index"
|
<a href="#" title="Python Module Index"
|
||||||
>modules</a> |</li>
|
>modules</a> |</li>
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.6 documentation</a> »</li>
|
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> »</li>
|
||||||
<li class="nav-item nav-item-this"><a href="">Python Module Index</a></li>
|
<li class="nav-item nav-item-this"><a href="">Python Module Index</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer" role="contentinfo">
|
<div class="footer" role="contentinfo">
|
||||||
© Copyright 2021, Alejandro Moreo.
|
© Copyright 2021, Alejandro Moreo.
|
||||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.2.0.
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -2,19 +2,21 @@
|
||||||
|
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
|
|
||||||
<html>
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
|
<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 — QuaPy 0.1.6 documentation</title>
|
<title>quapy.classification package — QuaPy 0.1.7 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/bizstyle.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 data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
<script src="_static/jquery.js"></script>
|
<script src="_static/jquery.js"></script>
|
||||||
<script src="_static/underscore.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/doctools.js"></script>
|
||||||
|
<script src="_static/sphinx_highlight.js"></script>
|
||||||
<script src="_static/bizstyle.js"></script>
|
<script src="_static/bizstyle.js"></script>
|
||||||
<link rel="index" title="Index" href="genindex.html" />
|
<link rel="index" title="Index" href="genindex.html" />
|
||||||
<link rel="search" title="Search" href="search.html" />
|
<link rel="search" title="Search" href="search.html" />
|
||||||
|
@ -40,7 +42,7 @@
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="quapy.html" title="quapy package"
|
<a href="quapy.html" title="quapy package"
|
||||||
accesskey="P">previous</a> |</li>
|
accesskey="P">previous</a> |</li>
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.6 documentation</a> »</li>
|
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> »</li>
|
||||||
<li class="nav-item nav-item-1"><a href="modules.html" >quapy</a> »</li>
|
<li class="nav-item nav-item-1"><a href="modules.html" >quapy</a> »</li>
|
||||||
<li class="nav-item nav-item-2"><a href="quapy.html" accesskey="U">quapy package</a> »</li>
|
<li class="nav-item nav-item-2"><a href="quapy.html" accesskey="U">quapy package</a> »</li>
|
||||||
<li class="nav-item nav-item-this"><a href="">quapy.classification package</a></li>
|
<li class="nav-item nav-item-this"><a href="">quapy.classification package</a></li>
|
||||||
|
@ -53,16 +55,232 @@
|
||||||
<div class="body" role="main">
|
<div class="body" role="main">
|
||||||
|
|
||||||
<section id="quapy-classification-package">
|
<section id="quapy-classification-package">
|
||||||
<h1>quapy.classification package<a class="headerlink" href="#quapy-classification-package" title="Permalink to this headline">¶</a></h1>
|
<h1>quapy.classification package<a class="headerlink" href="#quapy-classification-package" title="Permalink to this heading">¶</a></h1>
|
||||||
<section id="submodules">
|
<section id="submodules">
|
||||||
<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
|
<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>
|
||||||
|
</div>
|
||||||
|
<span class="target" id="module-quapy.classification.calibration"></span><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>
|
||||||
|
<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>
|
||||||
|
<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 scikit-learn probabilistic classifier</p></li>
|
||||||
|
<li><p><strong>val_split</strong> – indicate an integer k for performing kFCV to obtain the posterior prevalences, or a float p
|
||||||
|
in (0,1) to indicate that the posteriors are obtained in a stratified validation split containing p% of the
|
||||||
|
training instances (the rest is used for training). In any case, the classifier is retrained in the whole
|
||||||
|
training set afterwards. Default value is 5.</p></li>
|
||||||
|
<li><p><strong>n_jobs</strong> – indicate the number of parallel workers (only when val_split is an integer)</p></li>
|
||||||
|
<li><p><strong>verbose</strong> – whether or not to display information in the standard output</p></li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</dd></dl>
|
||||||
|
|
||||||
|
<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>
|
||||||
|
<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>
|
||||||
|
<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 scikit-learn probabilistic classifier</p></li>
|
||||||
|
<li><p><strong>val_split</strong> – indicate an integer k for performing kFCV to obtain the posterior prevalences, or a float p
|
||||||
|
in (0,1) to indicate that the posteriors are obtained in a stratified validation split containing p% of the
|
||||||
|
training instances (the rest is used for training). In any case, the classifier is retrained in the whole
|
||||||
|
training set afterwards. Default value is 5.</p></li>
|
||||||
|
<li><p><strong>n_jobs</strong> – indicate the number of parallel workers (only when val_split is an integer)</p></li>
|
||||||
|
<li><p><strong>verbose</strong> – whether or not to display information in the standard output</p></li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</dd></dl>
|
||||||
|
|
||||||
|
<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>
|
||||||
|
<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., & Shrikumar, A. (2020, November). Maximum likelihood with bias-corrected calibration
|
||||||
|
is hard-to-beat at label shift adaptation. In International Conference on Machine Learning (pp. 222-232). PMLR.</a>:</p>
|
||||||
|
</dd></dl>
|
||||||
|
|
||||||
|
<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>
|
||||||
|
<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>
|
||||||
|
<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 scikit-learn probabilistic classifier</p></li>
|
||||||
|
<li><p><strong>calibrator</strong> – the calibration object (an instance of abstention.calibration.CalibratorFactory)</p></li>
|
||||||
|
<li><p><strong>val_split</strong> – indicate an integer k for performing kFCV to obtain the posterior probabilities, or a float p
|
||||||
|
in (0,1) to indicate that the posteriors are obtained in a stratified validation split containing p% of the
|
||||||
|
training instances (the rest is used for training). In any case, the classifier is retrained in the whole
|
||||||
|
training set afterwards. Default value is 5.</p></li>
|
||||||
|
<li><p><strong>n_jobs</strong> – indicate the number of parallel workers (only when val_split is an integer); default=None</p></li>
|
||||||
|
<li><p><strong>verbose</strong> – whether or not to display information in the standard output</p></li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</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>
|
||||||
|
<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>
|
||||||
|
<dd class="field-odd"><p>array-like of shape <cite>(n_classes)</cite></p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</dd></dl>
|
||||||
|
|
||||||
|
<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>
|
||||||
|
<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>
|
||||||
|
<dd class="field-odd"><ul class="simple">
|
||||||
|
<li><p><strong>X</strong> – array-like of shape <cite>(n_samples, n_features)</cite> with the data instances</p></li>
|
||||||
|
<li><p><strong>y</strong> – array-like of shape <cite>(n_samples,)</cite> with the class labels</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.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>
|
||||||
|
<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 outpus 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>X</strong> – array-like of shape <cite>(n_samples, n_features)</cite> with the data instances</p></li>
|
||||||
|
<li><p><strong>y</strong> – array-like of shape <cite>(n_samples,)</cite> with the class labels</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.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>
|
||||||
|
<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
|
||||||
|
the classifier. The classifier is not retrained on the whole dataset.</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> – array-like of shape <cite>(n_samples, n_features)</cite> with the data instances</p></li>
|
||||||
|
<li><p><strong>y</strong> – array-like of shape <cite>(n_samples,)</cite> with the class labels</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.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>
|
||||||
|
<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>
|
||||||
|
<dd class="field-odd"><p><strong>X</strong> – array-like of shape <cite>(n_samples, n_features)</cite> with the data instances</p>
|
||||||
|
</dd>
|
||||||
|
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
||||||
|
<dd class="field-even"><p>array-like of shape <cite>(n_samples,)</cite> with the class label predictions</p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</dd></dl>
|
||||||
|
|
||||||
|
<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>
|
||||||
|
<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>
|
||||||
|
<dd class="field-odd"><p><strong>X</strong> – array-like of shape <cite>(n_samples, n_features)</cite> with the data instances</p>
|
||||||
|
</dd>
|
||||||
|
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
||||||
|
<dd class="field-even"><p>array-like of shape <cite>(n_samples, n_classes)</cite> with posterior probabilities</p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</dd></dl>
|
||||||
|
|
||||||
|
</dd></dl>
|
||||||
|
|
||||||
|
<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>
|
||||||
|
<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>
|
||||||
|
<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 scikit-learn probabilistic classifier</p></li>
|
||||||
|
<li><p><strong>val_split</strong> – indicate an integer k for performing kFCV to obtain the posterior prevalences, or a float p
|
||||||
|
in (0,1) to indicate that the posteriors are obtained in a stratified validation split containing p% of the
|
||||||
|
training instances (the rest is used for training). In any case, the classifier is retrained in the whole
|
||||||
|
training set afterwards. Default value is 5.</p></li>
|
||||||
|
<li><p><strong>n_jobs</strong> – indicate the number of parallel workers (only when val_split is an integer)</p></li>
|
||||||
|
<li><p><strong>verbose</strong> – whether or not to display information in the standard output</p></li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</dd></dl>
|
||||||
|
|
||||||
|
<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>
|
||||||
|
<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>
|
||||||
|
<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 scikit-learn probabilistic classifier</p></li>
|
||||||
|
<li><p><strong>val_split</strong> – indicate an integer k for performing kFCV to obtain the posterior prevalences, or a float p
|
||||||
|
in (0,1) to indicate that the posteriors are obtained in a stratified validation split containing p% of the
|
||||||
|
training instances (the rest is used for training). In any case, the classifier is retrained in the whole
|
||||||
|
training set afterwards. Default value is 5.</p></li>
|
||||||
|
<li><p><strong>n_jobs</strong> – indicate the number of parallel workers (only when val_split is an integer)</p></li>
|
||||||
|
<li><p><strong>verbose</strong> – whether or not to display information in the standard output</p></li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</dd></dl>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
<section id="module-quapy.classification.methods">
|
<section id="module-quapy.classification.methods">
|
||||||
<span id="quapy-classification-methods-module"></span><h2>quapy.classification.methods module<a class="headerlink" href="#module-quapy.classification.methods" title="Permalink to this headline">¶</a></h2>
|
<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>
|
||||||
<dl class="py class">
|
<dl class="py class">
|
||||||
<dt class="sig sig-object py" id="quapy.classification.methods.LowRankLogisticRegression">
|
<dt class="sig sig-object py" id="quapy.classification.methods.LowRankLogisticRegression">
|
||||||
<em class="property"><span class="pre">class</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="headerlink" href="#quapy.classification.methods.LowRankLogisticRegression" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">sklearn.base.BaseEstimator</span></code></p>
|
<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>)
|
<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
|
that also generates embedded inputs (i.e., that implements <cite>transform</cite>), as those required for
|
||||||
<code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.method.neural.QuaNet</span></code>. This is a mock method to allow for easily instantiating
|
<code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.method.neural.QuaNet</span></code>. This is a mock method to allow for easily instantiating
|
||||||
|
@ -70,7 +288,7 @@ that also generates embedded inputs (i.e., that implements <cite>transform</cite
|
||||||
The transformation consists of applying <code class="xref py py-class docutils literal notranslate"><span class="pre">sklearn.decomposition.TruncatedSVD</span></code>
|
The transformation consists of applying <code class="xref py py-class docutils literal notranslate"><span class="pre">sklearn.decomposition.TruncatedSVD</span></code>
|
||||||
while classification is performed using <code class="xref py py-class docutils literal notranslate"><span class="pre">sklearn.linear_model.LogisticRegression</span></code> on the low-rank space.</p>
|
while classification is performed using <code class="xref py py-class docutils literal notranslate"><span class="pre">sklearn.linear_model.LogisticRegression</span></code> on the low-rank space.</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><ul class="simple">
|
<dd class="field-odd"><ul class="simple">
|
||||||
<li><p><strong>n_components</strong> – the number of principal components to retain</p></li>
|
<li><p><strong>n_components</strong> – the number of principal components to retain</p></li>
|
||||||
<li><p><strong>kwargs</strong> – parameters for the
|
<li><p><strong>kwargs</strong> – parameters for the
|
||||||
|
@ -84,13 +302,13 @@ while classification is performed using <code class="xref py py-class docutils l
|
||||||
<dd><p>Fit the model according to the given training data. The fit consists of
|
<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>
|
fitting <cite>TruncatedSVD</cite> and then <cite>LogisticRegression</cite> on the low-rank representation.</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><ul class="simple">
|
<dd class="field-odd"><ul class="simple">
|
||||||
<li><p><strong>X</strong> – array-like of shape <cite>(n_samples, n_features)</cite> with the instances</p></li>
|
<li><p><strong>X</strong> – array-like of shape <cite>(n_samples, n_features)</cite> with the instances</p></li>
|
||||||
<li><p><strong>y</strong> – array-like of shape <cite>(n_samples, n_classes)</cite> with the class labels</p></li>
|
<li><p><strong>y</strong> – array-like of shape <cite>(n_samples, n_classes)</cite> with the class labels</p></li>
|
||||||
</ul>
|
</ul>
|
||||||
</dd>
|
</dd>
|
||||||
<dt class="field-even">Returns</dt>
|
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
||||||
<dd class="field-even"><p><cite>self</cite></p>
|
<dd class="field-even"><p><cite>self</cite></p>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
@ -101,7 +319,7 @@ fitting <cite>TruncatedSVD</cite> and then <cite>LogisticRegression</cite> on th
|
||||||
<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.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="headerlink" href="#quapy.classification.methods.LowRankLogisticRegression.get_params" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Get hyper-parameters for this estimator.</p>
|
<dd><p>Get hyper-parameters for this estimator.</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Returns</dt>
|
<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 class="field-odd"><p>a dictionary with parameter names mapped to their values</p>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
@ -112,10 +330,10 @@ fitting <cite>TruncatedSVD</cite> and then <cite>LogisticRegression</cite> on th
|
||||||
<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="headerlink" href="#quapy.classification.methods.LowRankLogisticRegression.predict" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Predicts labels for the instances <cite>X</cite> embedded into the low-rank space.</p>
|
<dd><p>Predicts labels for the instances <cite>X</cite> embedded into the low-rank space.</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><p><strong>X</strong> – array-like of shape <cite>(n_samples, n_features)</cite> instances to classify</p>
|
<dd class="field-odd"><p><strong>X</strong> – array-like of shape <cite>(n_samples, n_features)</cite> instances to classify</p>
|
||||||
</dd>
|
</dd>
|
||||||
<dt class="field-even">Returns</dt>
|
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
||||||
<dd class="field-even"><p>a <cite>numpy</cite> array of length <cite>n</cite> containing the label predictions, where <cite>n</cite> is the number of
|
<dd class="field-even"><p>a <cite>numpy</cite> array of length <cite>n</cite> containing the label predictions, where <cite>n</cite> is the number of
|
||||||
instances in <cite>X</cite></p>
|
instances in <cite>X</cite></p>
|
||||||
</dd>
|
</dd>
|
||||||
|
@ -127,10 +345,10 @@ instances in <cite>X</cite></p>
|
||||||
<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="headerlink" href="#quapy.classification.methods.LowRankLogisticRegression.predict_proba" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Predicts posterior probabilities for the instances <cite>X</cite> embedded into the low-rank space.</p>
|
<dd><p>Predicts posterior probabilities for the instances <cite>X</cite> embedded into the low-rank space.</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><p><strong>X</strong> – array-like of shape <cite>(n_samples, n_features)</cite> instances to classify</p>
|
<dd class="field-odd"><p><strong>X</strong> – array-like of shape <cite>(n_samples, n_features)</cite> instances to classify</p>
|
||||||
</dd>
|
</dd>
|
||||||
<dt class="field-even">Returns</dt>
|
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
||||||
<dd class="field-even"><p>array-like of shape <cite>(n_samples, n_classes)</cite> with the posterior probabilities</p>
|
<dd class="field-even"><p>array-like of shape <cite>(n_samples, n_classes)</cite> with the posterior probabilities</p>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
@ -141,7 +359,7 @@ instances in <cite>X</cite></p>
|
||||||
<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="headerlink" href="#quapy.classification.methods.LowRankLogisticRegression.set_params" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Set the parameters of this estimator.</p>
|
<dd><p>Set the parameters of this estimator.</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><p><strong>parameters</strong> – a <cite>**kwargs</cite> dictionary with the estimator parameters for
|
<dd class="field-odd"><p><strong>parameters</strong> – a <cite>**kwargs</cite> dictionary with the estimator parameters for
|
||||||
<a class="reference external" href="https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html">Logistic Regression</a>
|
<a class="reference external" href="https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html">Logistic Regression</a>
|
||||||
and eventually also <cite>n_components</cite> for <cite>TruncatedSVD</cite></p>
|
and eventually also <cite>n_components</cite> for <cite>TruncatedSVD</cite></p>
|
||||||
|
@ -155,10 +373,10 @@ and eventually also <cite>n_components</cite> for <cite>TruncatedSVD</cite></p>
|
||||||
<dd><p>Returns the low-rank approximation of <cite>X</cite> with <cite>n_components</cite> dimensions, or <cite>X</cite> unaltered if
|
<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> >= <cite>X.shape[1]</cite>.</p>
|
<cite>n_components</cite> >= <cite>X.shape[1]</cite>.</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><p><strong>X</strong> – array-like of shape <cite>(n_samples, n_features)</cite> instances to embed</p>
|
<dd class="field-odd"><p><strong>X</strong> – array-like of shape <cite>(n_samples, n_features)</cite> instances to embed</p>
|
||||||
</dd>
|
</dd>
|
||||||
<dt class="field-even">Returns</dt>
|
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
||||||
<dd class="field-even"><p>array-like of shape <cite>(n_samples, n_components)</cite> with the embedded instances</p>
|
<dd class="field-even"><p>array-like of shape <cite>(n_samples, n_components)</cite> with the embedded instances</p>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
@ -168,15 +386,15 @@ and eventually also <cite>n_components</cite> for <cite>TruncatedSVD</cite></p>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
<section id="module-quapy.classification.neural">
|
<section id="module-quapy.classification.neural">
|
||||||
<span id="quapy-classification-neural-module"></span><h2>quapy.classification.neural module<a class="headerlink" href="#module-quapy.classification.neural" title="Permalink to this headline">¶</a></h2>
|
<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>
|
||||||
<dl class="py class">
|
<dl class="py class">
|
||||||
<dt class="sig sig-object py" id="quapy.classification.neural.CNNnet">
|
<dt class="sig sig-object py" id="quapy.classification.neural.CNNnet">
|
||||||
<em class="property"><span class="pre">class</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="headerlink" href="#quapy.classification.neural.CNNnet" title="Permalink 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">quapy.classification.neural.TextClassifierNet</span></code></a></p>
|
<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
|
<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>
|
Convolutional Neural Networks.</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><ul class="simple">
|
<dd class="field-odd"><ul class="simple">
|
||||||
<li><p><strong>vocabulary_size</strong> – the size of the vocabulary</p></li>
|
<li><p><strong>vocabulary_size</strong> – the size of the vocabulary</p></li>
|
||||||
<li><p><strong>n_classes</strong> – number of target classes</p></li>
|
<li><p><strong>n_classes</strong> – number of target classes</p></li>
|
||||||
|
@ -197,11 +415,11 @@ consecutive tokens that each kernel covers</p></li>
|
||||||
<dd><p>Embeds documents (i.e., performs the forward pass up to the
|
<dd><p>Embeds documents (i.e., performs the forward pass up to the
|
||||||
next-to-last layer).</p>
|
next-to-last layer).</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><p><strong>input</strong> – a batch of instances, typically generated by a torch’s <cite>DataLoader</cite>
|
<dd class="field-odd"><p><strong>input</strong> – a batch of instances, typically generated by a torch’s <cite>DataLoader</cite>
|
||||||
instance (see <a class="reference internal" href="#quapy.classification.neural.TorchDataset" title="quapy.classification.neural.TorchDataset"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.classification.neural.TorchDataset</span></code></a>)</p>
|
instance (see <a class="reference internal" href="#quapy.classification.neural.TorchDataset" title="quapy.classification.neural.TorchDataset"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.classification.neural.TorchDataset</span></code></a>)</p>
|
||||||
</dd>
|
</dd>
|
||||||
<dt class="field-even">Returns</dt>
|
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
||||||
<dd class="field-even"><p>a torch tensor of shape <cite>(n_samples, n_dimensions)</cite>, where
|
<dd class="field-even"><p>a torch tensor of shape <cite>(n_samples, n_dimensions)</cite>, where
|
||||||
<cite>n_samples</cite> is the number of documents, and <cite>n_dimensions</cite> is the
|
<cite>n_samples</cite> is the number of documents, and <cite>n_dimensions</cite> is the
|
||||||
dimensionality of the embedding</p>
|
dimensionality of the embedding</p>
|
||||||
|
@ -214,18 +432,23 @@ dimensionality of the embedding</p>
|
||||||
<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="headerlink" href="#quapy.classification.neural.CNNnet.get_params" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Get hyper-parameters for this estimator</p>
|
<dd><p>Get hyper-parameters for this estimator</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Returns</dt>
|
<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 class="field-odd"><p>a dictionary with parameter names mapped to their values</p>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</dd></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">
|
<dl class="py property">
|
||||||
<dt class="sig sig-object py" id="quapy.classification.neural.CNNnet.vocabulary_size">
|
<dt class="sig sig-object py" id="quapy.classification.neural.CNNnet.vocabulary_size">
|
||||||
<em class="property"><span class="pre">property</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="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Return the size of the vocabulary</p>
|
<dd><p>Return the size of the vocabulary</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Returns</dt>
|
<dt class="field-odd">Returns<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><p>integer</p>
|
<dd class="field-odd"><p>integer</p>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
@ -235,12 +458,12 @@ dimensionality of the embedding</p>
|
||||||
|
|
||||||
<dl class="py class">
|
<dl class="py class">
|
||||||
<dt class="sig sig-object py" id="quapy.classification.neural.LSTMnet">
|
<dt class="sig sig-object py" id="quapy.classification.neural.LSTMnet">
|
||||||
<em class="property"><span class="pre">class</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="headerlink" href="#quapy.classification.neural.LSTMnet" title="Permalink 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">quapy.classification.neural.TextClassifierNet</span></code></a></p>
|
<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
|
<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>
|
Long Short Term Memory networks.</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><ul class="simple">
|
<dd class="field-odd"><ul class="simple">
|
||||||
<li><p><strong>vocabulary_size</strong> – the size of the vocabulary</p></li>
|
<li><p><strong>vocabulary_size</strong> – the size of the vocabulary</p></li>
|
||||||
<li><p><strong>n_classes</strong> – number of target classes</p></li>
|
<li><p><strong>n_classes</strong> – number of target classes</p></li>
|
||||||
|
@ -258,11 +481,11 @@ Long Short Term Memory networks.</p>
|
||||||
<dd><p>Embeds documents (i.e., performs the forward pass up to the
|
<dd><p>Embeds documents (i.e., performs the forward pass up to the
|
||||||
next-to-last layer).</p>
|
next-to-last layer).</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><p><strong>x</strong> – a batch of instances, typically generated by a torch’s <cite>DataLoader</cite>
|
<dd class="field-odd"><p><strong>x</strong> – a batch of instances, typically generated by a torch’s <cite>DataLoader</cite>
|
||||||
instance (see <a class="reference internal" href="#quapy.classification.neural.TorchDataset" title="quapy.classification.neural.TorchDataset"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.classification.neural.TorchDataset</span></code></a>)</p>
|
instance (see <a class="reference internal" href="#quapy.classification.neural.TorchDataset" title="quapy.classification.neural.TorchDataset"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.classification.neural.TorchDataset</span></code></a>)</p>
|
||||||
</dd>
|
</dd>
|
||||||
<dt class="field-even">Returns</dt>
|
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
||||||
<dd class="field-even"><p>a torch tensor of shape <cite>(n_samples, n_dimensions)</cite>, where
|
<dd class="field-even"><p>a torch tensor of shape <cite>(n_samples, n_dimensions)</cite>, where
|
||||||
<cite>n_samples</cite> is the number of documents, and <cite>n_dimensions</cite> is the
|
<cite>n_samples</cite> is the number of documents, and <cite>n_dimensions</cite> is the
|
||||||
dimensionality of the embedding</p>
|
dimensionality of the embedding</p>
|
||||||
|
@ -275,18 +498,23 @@ dimensionality of the embedding</p>
|
||||||
<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="headerlink" href="#quapy.classification.neural.LSTMnet.get_params" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Get hyper-parameters for this estimator</p>
|
<dd><p>Get hyper-parameters for this estimator</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Returns</dt>
|
<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 class="field-odd"><p>a dictionary with parameter names mapped to their values</p>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</dd></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">
|
<dl class="py property">
|
||||||
<dt class="sig sig-object py" id="quapy.classification.neural.LSTMnet.vocabulary_size">
|
<dt class="sig sig-object py" id="quapy.classification.neural.LSTMnet.vocabulary_size">
|
||||||
<em class="property"><span class="pre">property</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="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Return the size of the vocabulary</p>
|
<dd><p>Return the size of the vocabulary</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Returns</dt>
|
<dt class="field-odd">Returns<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><p>integer</p>
|
<dd class="field-odd"><p>integer</p>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
@ -296,11 +524,11 @@ dimensionality of the embedding</p>
|
||||||
|
|
||||||
<dl class="py class">
|
<dl class="py class">
|
||||||
<dt class="sig sig-object py" id="quapy.classification.neural.NeuralClassifierTrainer">
|
<dt class="sig sig-object py" id="quapy.classification.neural.NeuralClassifierTrainer">
|
||||||
<em class="property"><span class="pre">class</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="n"><a class="reference internal" href="#quapy.classification.neural.TextClassifierNet" title="quapy.classification.neural.TextClassifierNet"><span class="pre">quapy.classification.neural.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">'cpu'</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">'cpu'</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>
|
||||||
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
|
<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>
|
<p>Trains a neural network for text classification.</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><ul class="simple">
|
<dd class="field-odd"><ul class="simple">
|
||||||
<li><p><strong>net</strong> – an instance of <cite>TextClassifierNet</cite> implementing the forward pass</p></li>
|
<li><p><strong>net</strong> – an instance of <cite>TextClassifierNet</cite> implementing the forward pass</p></li>
|
||||||
<li><p><strong>lr</strong> – learning rate (default 1e-3)</p></li>
|
<li><p><strong>lr</strong> – learning rate (default 1e-3)</p></li>
|
||||||
|
@ -319,10 +547,10 @@ according to the evaluation in the held-out validation split (default ‘../chec
|
||||||
</dl>
|
</dl>
|
||||||
<dl class="py property">
|
<dl class="py property">
|
||||||
<dt class="sig sig-object py" id="quapy.classification.neural.NeuralClassifierTrainer.device">
|
<dt class="sig sig-object py" id="quapy.classification.neural.NeuralClassifierTrainer.device">
|
||||||
<em class="property"><span class="pre">property</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="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Gets the device in which the network is allocated</p>
|
<dd><p>Gets the device in which the network is allocated</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Returns</dt>
|
<dt class="field-odd">Returns<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><p>device</p>
|
<dd class="field-odd"><p>device</p>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
@ -333,14 +561,14 @@ according to the evaluation in the held-out validation split (default ‘../chec
|
||||||
<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="headerlink" href="#quapy.classification.neural.NeuralClassifierTrainer.fit" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Fits the model according to the given training data.</p>
|
<dd><p>Fits the model according to the given training data.</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><ul class="simple">
|
<dd class="field-odd"><ul class="simple">
|
||||||
<li><p><strong>instances</strong> – list of lists of indexed tokens</p></li>
|
<li><p><strong>instances</strong> – list of lists of indexed tokens</p></li>
|
||||||
<li><p><strong>labels</strong> – array-like of shape <cite>(n_samples, n_classes)</cite> with the class labels</p></li>
|
<li><p><strong>labels</strong> – array-like of shape <cite>(n_samples, n_classes)</cite> with the class labels</p></li>
|
||||||
<li><p><strong>val_split</strong> – proportion of training documents to be taken as the validation set (default 0.3)</p></li>
|
<li><p><strong>val_split</strong> – proportion of training documents to be taken as the validation set (default 0.3)</p></li>
|
||||||
</ul>
|
</ul>
|
||||||
</dd>
|
</dd>
|
||||||
<dt class="field-even">Returns</dt>
|
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
||||||
<dd class="field-even"><p></p>
|
<dd class="field-even"><p></p>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
@ -351,7 +579,7 @@ according to the evaluation in the held-out validation split (default ‘../chec
|
||||||
<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="headerlink" href="#quapy.classification.neural.NeuralClassifierTrainer.get_params" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Get hyper-parameters for this estimator</p>
|
<dd><p>Get hyper-parameters for this estimator</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Returns</dt>
|
<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 class="field-odd"><p>a dictionary with parameter names mapped to their values</p>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
@ -362,10 +590,10 @@ according to the evaluation in the held-out validation split (default ‘../chec
|
||||||
<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="headerlink" href="#quapy.classification.neural.NeuralClassifierTrainer.predict" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Predicts labels for the instances</p>
|
<dd><p>Predicts labels for the instances</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><p><strong>instances</strong> – list of lists of indexed tokens</p>
|
<dd class="field-odd"><p><strong>instances</strong> – list of lists of indexed tokens</p>
|
||||||
</dd>
|
</dd>
|
||||||
<dt class="field-even">Returns</dt>
|
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
||||||
<dd class="field-even"><p>a <cite>numpy</cite> array of length <cite>n</cite> containing the label predictions, where <cite>n</cite> is the number of
|
<dd class="field-even"><p>a <cite>numpy</cite> array of length <cite>n</cite> containing the label predictions, where <cite>n</cite> is the number of
|
||||||
instances in <cite>X</cite></p>
|
instances in <cite>X</cite></p>
|
||||||
</dd>
|
</dd>
|
||||||
|
@ -377,10 +605,10 @@ instances in <cite>X</cite></p>
|
||||||
<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="headerlink" href="#quapy.classification.neural.NeuralClassifierTrainer.predict_proba" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Predicts posterior probabilities for the instances</p>
|
<dd><p>Predicts posterior probabilities for the instances</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><p><strong>X</strong> – array-like of shape <cite>(n_samples, n_features)</cite> instances to classify</p>
|
<dd class="field-odd"><p><strong>X</strong> – array-like of shape <cite>(n_samples, n_features)</cite> instances to classify</p>
|
||||||
</dd>
|
</dd>
|
||||||
<dt class="field-even">Returns</dt>
|
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
||||||
<dd class="field-even"><p>array-like of shape <cite>(n_samples, n_classes)</cite> with the posterior probabilities</p>
|
<dd class="field-even"><p>array-like of shape <cite>(n_samples, n_classes)</cite> with the posterior probabilities</p>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
@ -391,7 +619,7 @@ instances in <cite>X</cite></p>
|
||||||
<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="headerlink" href="#quapy.classification.neural.NeuralClassifierTrainer.reset_net_params" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Reinitialize the network parameters</p>
|
<dd><p>Reinitialize the network parameters</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><ul class="simple">
|
<dd class="field-odd"><ul class="simple">
|
||||||
<li><p><strong>vocab_size</strong> – the size of the vocabulary</p></li>
|
<li><p><strong>vocab_size</strong> – the size of the vocabulary</p></li>
|
||||||
<li><p><strong>n_classes</strong> – the number of target classes</p></li>
|
<li><p><strong>n_classes</strong> – the number of target classes</p></li>
|
||||||
|
@ -407,7 +635,7 @@ instances in <cite>X</cite></p>
|
||||||
In this current version, parameter names for the trainer and learner should
|
In this current version, parameter names for the trainer and learner should
|
||||||
be disjoint.</p>
|
be disjoint.</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><p><strong>params</strong> – a <cite>**kwargs</cite> dictionary with the parameters</p>
|
<dd class="field-odd"><p><strong>params</strong> – a <cite>**kwargs</cite> dictionary with the parameters</p>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
@ -418,10 +646,10 @@ be disjoint.</p>
|
||||||
<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="headerlink" href="#quapy.classification.neural.NeuralClassifierTrainer.transform" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Returns the embeddings of the instances</p>
|
<dd><p>Returns the embeddings of the instances</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><p><strong>instances</strong> – list of lists of indexed tokens</p>
|
<dd class="field-odd"><p><strong>instances</strong> – list of lists of indexed tokens</p>
|
||||||
</dd>
|
</dd>
|
||||||
<dt class="field-even">Returns</dt>
|
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
||||||
<dd class="field-even"><p>array-like of shape <cite>(n_samples, embed_size)</cite> with the embedded instances,
|
<dd class="field-even"><p>array-like of shape <cite>(n_samples, embed_size)</cite> with the embedded instances,
|
||||||
where <cite>embed_size</cite> is defined by the classification network</p>
|
where <cite>embed_size</cite> is defined by the classification network</p>
|
||||||
</dd>
|
</dd>
|
||||||
|
@ -432,15 +660,15 @@ where <cite>embed_size</cite> is defined by the classification network</p>
|
||||||
|
|
||||||
<dl class="py class">
|
<dl class="py class">
|
||||||
<dt class="sig sig-object py" id="quapy.classification.neural.TextClassifierNet">
|
<dt class="sig sig-object py" id="quapy.classification.neural.TextClassifierNet">
|
||||||
<em class="property"><span class="pre">class</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><a class="headerlink" href="#quapy.classification.neural.TextClassifierNet" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">torch.nn.modules.module.Module</span></code></p>
|
<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>
|
<p>Abstract Text classifier (<cite>torch.nn.Module</cite>)</p>
|
||||||
<dl class="py method">
|
<dl class="py method">
|
||||||
<dt class="sig sig-object py" id="quapy.classification.neural.TextClassifierNet.dimensions">
|
<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="headerlink" href="#quapy.classification.neural.TextClassifierNet.dimensions" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Gets the number of dimensions of the embedding space</p>
|
<dd><p>Gets the number of dimensions of the embedding space</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Returns</dt>
|
<dt class="field-odd">Returns<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><p>integer</p>
|
<dd class="field-odd"><p>integer</p>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
@ -448,15 +676,15 @@ where <cite>embed_size</cite> is defined by the classification network</p>
|
||||||
|
|
||||||
<dl class="py method">
|
<dl class="py method">
|
||||||
<dt class="sig sig-object py" id="quapy.classification.neural.TextClassifierNet.document_embedding">
|
<dt class="sig sig-object py" id="quapy.classification.neural.TextClassifierNet.document_embedding">
|
||||||
<em class="property"><span class="pre">abstract</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="headerlink" href="#quapy.classification.neural.TextClassifierNet.document_embedding" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Embeds documents (i.e., performs the forward pass up to the
|
<dd><p>Embeds documents (i.e., performs the forward pass up to the
|
||||||
next-to-last layer).</p>
|
next-to-last layer).</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><p><strong>x</strong> – a batch of instances, typically generated by a torch’s <cite>DataLoader</cite>
|
<dd class="field-odd"><p><strong>x</strong> – a batch of instances, typically generated by a torch’s <cite>DataLoader</cite>
|
||||||
instance (see <a class="reference internal" href="#quapy.classification.neural.TorchDataset" title="quapy.classification.neural.TorchDataset"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.classification.neural.TorchDataset</span></code></a>)</p>
|
instance (see <a class="reference internal" href="#quapy.classification.neural.TorchDataset" title="quapy.classification.neural.TorchDataset"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.classification.neural.TorchDataset</span></code></a>)</p>
|
||||||
</dd>
|
</dd>
|
||||||
<dt class="field-even">Returns</dt>
|
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
||||||
<dd class="field-even"><p>a torch tensor of shape <cite>(n_samples, n_dimensions)</cite>, where
|
<dd class="field-even"><p>a torch tensor of shape <cite>(n_samples, n_dimensions)</cite>, where
|
||||||
<cite>n_samples</cite> is the number of documents, and <cite>n_dimensions</cite> is the
|
<cite>n_samples</cite> is the number of documents, and <cite>n_dimensions</cite> is the
|
||||||
dimensionality of the embedding</p>
|
dimensionality of the embedding</p>
|
||||||
|
@ -469,11 +697,11 @@ dimensionality of the embedding</p>
|
||||||
<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="headerlink" href="#quapy.classification.neural.TextClassifierNet.forward" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Performs the forward pass.</p>
|
<dd><p>Performs the forward pass.</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><p><strong>x</strong> – a batch of instances, typically generated by a torch’s <cite>DataLoader</cite>
|
<dd class="field-odd"><p><strong>x</strong> – a batch of instances, typically generated by a torch’s <cite>DataLoader</cite>
|
||||||
instance (see <a class="reference internal" href="#quapy.classification.neural.TorchDataset" title="quapy.classification.neural.TorchDataset"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.classification.neural.TorchDataset</span></code></a>)</p>
|
instance (see <a class="reference internal" href="#quapy.classification.neural.TorchDataset" title="quapy.classification.neural.TorchDataset"><code class="xref py py-class docutils literal notranslate"><span class="pre">quapy.classification.neural.TorchDataset</span></code></a>)</p>
|
||||||
</dd>
|
</dd>
|
||||||
<dt class="field-even">Returns</dt>
|
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
||||||
<dd class="field-even"><p>a tensor of shape <cite>(n_instances, n_classes)</cite> with the decision scores
|
<dd class="field-even"><p>a tensor of shape <cite>(n_instances, n_classes)</cite> with the decision scores
|
||||||
for each of the instances and classes</p>
|
for each of the instances and classes</p>
|
||||||
</dd>
|
</dd>
|
||||||
|
@ -482,10 +710,10 @@ for each of the instances and classes</p>
|
||||||
|
|
||||||
<dl class="py method">
|
<dl class="py method">
|
||||||
<dt class="sig sig-object py" id="quapy.classification.neural.TextClassifierNet.get_params">
|
<dt class="sig sig-object py" id="quapy.classification.neural.TextClassifierNet.get_params">
|
||||||
<em class="property"><span class="pre">abstract</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="headerlink" href="#quapy.classification.neural.TextClassifierNet.get_params" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Get hyper-parameters for this estimator</p>
|
<dd><p>Get hyper-parameters for this estimator</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Returns</dt>
|
<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 class="field-odd"><p>a dictionary with parameter names mapped to their values</p>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
@ -496,23 +724,28 @@ for each of the instances and classes</p>
|
||||||
<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="headerlink" href="#quapy.classification.neural.TextClassifierNet.predict_proba" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Predicts posterior probabilities for the instances in <cite>x</cite></p>
|
<dd><p>Predicts posterior probabilities for the instances in <cite>x</cite></p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><p><strong>x</strong> – a torch tensor of indexed tokens with shape <cite>(n_instances, pad_length)</cite>
|
<dd class="field-odd"><p><strong>x</strong> – a torch tensor of indexed tokens with shape <cite>(n_instances, pad_length)</cite>
|
||||||
where <cite>n_instances</cite> is the number of instances in the batch, and <cite>pad_length</cite>
|
where <cite>n_instances</cite> is the number of instances in the batch, and <cite>pad_length</cite>
|
||||||
is length of the pad in the batch</p>
|
is length of the pad in the batch</p>
|
||||||
</dd>
|
</dd>
|
||||||
<dt class="field-even">Returns</dt>
|
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
||||||
<dd class="field-even"><p>array-like of shape <cite>(n_samples, n_classes)</cite> with the posterior probabilities</p>
|
<dd class="field-even"><p>array-like of shape <cite>(n_samples, n_classes)</cite> with the posterior probabilities</p>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</dd></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">
|
<dl class="py property">
|
||||||
<dt class="sig sig-object py" id="quapy.classification.neural.TextClassifierNet.vocabulary_size">
|
<dt class="sig sig-object py" id="quapy.classification.neural.TextClassifierNet.vocabulary_size">
|
||||||
<em class="property"><span class="pre">property</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="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Return the size of the vocabulary</p>
|
<dd><p>Return the size of the vocabulary</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Returns</dt>
|
<dt class="field-odd">Returns<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><p>integer</p>
|
<dd class="field-odd"><p>integer</p>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
@ -528,11 +761,11 @@ is length of the pad in the batch</p>
|
||||||
|
|
||||||
<dl class="py class">
|
<dl class="py class">
|
||||||
<dt class="sig sig-object py" id="quapy.classification.neural.TorchDataset">
|
<dt class="sig sig-object py" id="quapy.classification.neural.TorchDataset">
|
||||||
<em class="property"><span class="pre">class</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="headerlink" href="#quapy.classification.neural.TorchDataset" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">torch.utils.data.dataset.Dataset</span></code></p>
|
<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>
|
<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">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><ul class="simple">
|
<dd class="field-odd"><ul class="simple">
|
||||||
<li><p><strong>instances</strong> – list of lists of indexed tokens</p></li>
|
<li><p><strong>instances</strong> – list of lists of indexed tokens</p></li>
|
||||||
<li><p><strong>labels</strong> – array-like of shape <cite>(n_samples, n_classes)</cite> with the class labels</p></li>
|
<li><p><strong>labels</strong> – array-like of shape <cite>(n_samples, n_classes)</cite> with the class labels</p></li>
|
||||||
|
@ -545,7 +778,7 @@ is length of the pad in the batch</p>
|
||||||
<dd><p>Converts the labelled collection into a Torch DataLoader with dynamic padding for
|
<dd><p>Converts the labelled collection into a Torch DataLoader with dynamic padding for
|
||||||
the batch</p>
|
the batch</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><ul class="simple">
|
<dd class="field-odd"><ul class="simple">
|
||||||
<li><p><strong>batch_size</strong> – batch size</p></li>
|
<li><p><strong>batch_size</strong> – batch size</p></li>
|
||||||
<li><p><strong>shuffle</strong> – whether or not to shuffle instances</p></li>
|
<li><p><strong>shuffle</strong> – whether or not to shuffle instances</p></li>
|
||||||
|
@ -555,7 +788,7 @@ applied, meaning that if the longest document in the batch is shorter than
|
||||||
<li><p><strong>device</strong> – whether to allocate tensors in cpu or in cuda</p></li>
|
<li><p><strong>device</strong> – whether to allocate tensors in cpu or in cuda</p></li>
|
||||||
</ul>
|
</ul>
|
||||||
</dd>
|
</dd>
|
||||||
<dt class="field-even">Returns</dt>
|
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
||||||
<dd class="field-even"><p>a <code class="xref py py-class docutils literal notranslate"><span class="pre">torch.utils.data.DataLoader</span></code> object</p>
|
<dd class="field-even"><p>a <code class="xref py py-class docutils literal notranslate"><span class="pre">torch.utils.data.DataLoader</span></code> object</p>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
@ -565,11 +798,11 @@ applied, meaning that if the longest document in the batch is shorter than
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
<section id="module-quapy.classification.svmperf">
|
<section id="module-quapy.classification.svmperf">
|
||||||
<span id="quapy-classification-svmperf-module"></span><h2>quapy.classification.svmperf module<a class="headerlink" href="#module-quapy.classification.svmperf" title="Permalink to this headline">¶</a></h2>
|
<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>
|
||||||
<dl class="py class">
|
<dl class="py class">
|
||||||
<dt class="sig sig-object py" id="quapy.classification.svmperf.SVMperf">
|
<dt class="sig sig-object py" id="quapy.classification.svmperf.SVMperf">
|
||||||
<em class="property"><span class="pre">class</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><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><span class="sig-paren">)</span><a class="headerlink" href="#quapy.classification.svmperf.SVMperf" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">sklearn.base.BaseEstimator</span></code>, <code class="xref py py-class docutils literal notranslate"><span class="pre">sklearn.base.ClassifierMixin</span></code></p>
|
<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.
|
<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
|
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>
|
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>
|
||||||
|
@ -582,7 +815,7 @@ for further details.</p>
|
||||||
</ul>
|
</ul>
|
||||||
</div></blockquote>
|
</div></blockquote>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><ul class="simple">
|
<dd class="field-odd"><ul class="simple">
|
||||||
<li><p><strong>svmperf_base</strong> – path to directory containing the binary files <cite>svm_perf_learn</cite> and <cite>svm_perf_classify</cite></p></li>
|
<li><p><strong>svmperf_base</strong> – path to directory containing the binary files <cite>svm_perf_learn</cite> and <cite>svm_perf_classify</cite></p></li>
|
||||||
<li><p><strong>C</strong> – trade-off between training error and margin (default 0.01)</p></li>
|
<li><p><strong>C</strong> – trade-off between training error and margin (default 0.01)</p></li>
|
||||||
|
@ -596,13 +829,13 @@ for further details.</p>
|
||||||
<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="headerlink" href="#quapy.classification.svmperf.SVMperf.decision_function" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Evaluate the decision function for the samples in <cite>X</cite>.</p>
|
<dd><p>Evaluate the decision function for the samples in <cite>X</cite>.</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><ul class="simple">
|
<dd class="field-odd"><ul class="simple">
|
||||||
<li><p><strong>X</strong> – array-like of shape <cite>(n_samples, n_features)</cite> containing the instances to classify</p></li>
|
<li><p><strong>X</strong> – array-like of shape <cite>(n_samples, n_features)</cite> containing the instances to classify</p></li>
|
||||||
<li><p><strong>y</strong> – unused</p></li>
|
<li><p><strong>y</strong> – unused</p></li>
|
||||||
</ul>
|
</ul>
|
||||||
</dd>
|
</dd>
|
||||||
<dt class="field-even">Returns</dt>
|
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
||||||
<dd class="field-even"><p>array-like of shape <cite>(n_samples,)</cite> containing the decision scores of the instances</p>
|
<dd class="field-even"><p>array-like of shape <cite>(n_samples,)</cite> containing the decision scores of the instances</p>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
@ -613,13 +846,13 @@ for further details.</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">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="headerlink" href="#quapy.classification.svmperf.SVMperf.fit" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Trains the SVM for the multivariate performance loss</p>
|
<dd><p>Trains the SVM for the multivariate performance loss</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><ul class="simple">
|
<dd class="field-odd"><ul class="simple">
|
||||||
<li><p><strong>X</strong> – training instances</p></li>
|
<li><p><strong>X</strong> – training instances</p></li>
|
||||||
<li><p><strong>y</strong> – a binary vector of labels</p></li>
|
<li><p><strong>y</strong> – a binary vector of labels</p></li>
|
||||||
</ul>
|
</ul>
|
||||||
</dd>
|
</dd>
|
||||||
<dt class="field-even">Returns</dt>
|
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
||||||
<dd class="field-even"><p><cite>self</cite></p>
|
<dd class="field-even"><p><cite>self</cite></p>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
@ -628,12 +861,16 @@ for further details.</p>
|
||||||
<dl class="py method">
|
<dl class="py method">
|
||||||
<dt class="sig sig-object py" id="quapy.classification.svmperf.SVMperf.predict">
|
<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="headerlink" href="#quapy.classification.svmperf.SVMperf.predict" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Predicts labels for the instances <cite>X</cite>
|
<dd><p>Predicts labels for the instances <cite>X</cite></p>
|
||||||
:param X: array-like of shape <cite>(n_samples, n_features)</cite> instances to classify
|
<dl class="field-list simple">
|
||||||
:return: a <cite>numpy</cite> array of length <cite>n</cite> containing the label predictions, where <cite>n</cite> is the number of</p>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<blockquote>
|
<dd class="field-odd"><p><strong>X</strong> – array-like of shape <cite>(n_samples, n_features)</cite> instances to classify</p>
|
||||||
<div><p>instances in <cite>X</cite></p>
|
</dd>
|
||||||
</div></blockquote>
|
<dt class="field-even">Returns<span class="colon">:</span></dt>
|
||||||
|
<dd class="field-even"><p>a <cite>numpy</cite> array of length <cite>n</cite> containing the label predictions, where <cite>n</cite> is the number of
|
||||||
|
instances in <cite>X</cite></p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
</dd></dl>
|
</dd></dl>
|
||||||
|
|
||||||
<dl class="py method">
|
<dl class="py method">
|
||||||
|
@ -641,7 +878,7 @@ for further details.</p>
|
||||||
<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.classification.svmperf.SVMperf.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="headerlink" href="#quapy.classification.svmperf.SVMperf.set_params" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Set the hyper-parameters for svm-perf. Currently, only the <cite>C</cite> parameter is supported</p>
|
<dd><p>Set the hyper-parameters for svm-perf. Currently, only the <cite>C</cite> parameter is supported</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><p><strong>parameters</strong> – a <cite>**kwargs</cite> dictionary <cite>{‘C’: <float>}</cite></p>
|
<dd class="field-odd"><p><strong>parameters</strong> – a <cite>**kwargs</cite> dictionary <cite>{‘C’: <float>}</cite></p>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
@ -649,14 +886,14 @@ for further details.</p>
|
||||||
|
|
||||||
<dl class="py attribute">
|
<dl class="py attribute">
|
||||||
<dt class="sig sig-object py" id="quapy.classification.svmperf.SVMperf.valid_losses">
|
<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="pre">=</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="Permalink to this definition">¶</a></dt>
|
||||||
<dd></dd></dl>
|
<dd></dd></dl>
|
||||||
|
|
||||||
</dd></dl>
|
</dd></dl>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
<section id="module-quapy.classification">
|
<section id="module-quapy.classification">
|
||||||
<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-quapy.classification" title="Permalink to this headline">¶</a></h2>
|
<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-quapy.classification" title="Permalink to this heading">¶</a></h2>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
@ -667,24 +904,31 @@ for further details.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||||||
<div class="sphinxsidebarwrapper">
|
<div class="sphinxsidebarwrapper">
|
||||||
|
<div>
|
||||||
<h3><a href="index.html">Table of Contents</a></h3>
|
<h3><a href="index.html">Table of Contents</a></h3>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a class="reference internal" href="#">quapy.classification package</a><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="#submodules">Submodules</a></li>
|
||||||
<li><a class="reference internal" href="#module-quapy.classification.methods">quapy.classification.methods module</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.neural">quapy.classification.neural module</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.svmperf">quapy.classification.svmperf module</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>
|
<li><a class="reference internal" href="#module-quapy.classification">Module contents</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
<h4>Previous topic</h4>
|
<h4>Previous topic</h4>
|
||||||
<p class="topless"><a href="quapy.html"
|
<p class="topless"><a href="quapy.html"
|
||||||
title="previous chapter">quapy package</a></p>
|
title="previous chapter">quapy package</a></p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
<h4>Next topic</h4>
|
<h4>Next topic</h4>
|
||||||
<p class="topless"><a href="quapy.data.html"
|
<p class="topless"><a href="quapy.data.html"
|
||||||
title="next chapter">quapy.data package</a></p>
|
title="next chapter">quapy.data package</a></p>
|
||||||
|
</div>
|
||||||
<div role="note" aria-label="source link">
|
<div role="note" aria-label="source link">
|
||||||
<h3>This Page</h3>
|
<h3>This Page</h3>
|
||||||
<ul class="this-page-menu">
|
<ul class="this-page-menu">
|
||||||
|
@ -701,7 +945,7 @@ for further details.</p>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>$('#searchbox').show(0);</script>
|
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="clearer"></div>
|
<div class="clearer"></div>
|
||||||
|
@ -721,7 +965,7 @@ for further details.</p>
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="quapy.html" title="quapy package"
|
<a href="quapy.html" title="quapy package"
|
||||||
>previous</a> |</li>
|
>previous</a> |</li>
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.6 documentation</a> »</li>
|
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> »</li>
|
||||||
<li class="nav-item nav-item-1"><a href="modules.html" >quapy</a> »</li>
|
<li class="nav-item nav-item-1"><a href="modules.html" >quapy</a> »</li>
|
||||||
<li class="nav-item nav-item-2"><a href="quapy.html" >quapy package</a> »</li>
|
<li class="nav-item nav-item-2"><a href="quapy.html" >quapy package</a> »</li>
|
||||||
<li class="nav-item nav-item-this"><a href="">quapy.classification package</a></li>
|
<li class="nav-item nav-item-this"><a href="">quapy.classification package</a></li>
|
||||||
|
@ -729,7 +973,7 @@ for further details.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer" role="contentinfo">
|
<div class="footer" role="contentinfo">
|
||||||
© Copyright 2021, Alejandro Moreo.
|
© Copyright 2021, Alejandro Moreo.
|
||||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.2.0.
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,135 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
<!doctype html>
|
|
||||||
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>quapy.tests package — QuaPy 0.1.6 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/doctools.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="prev" title="quapy.method package" href="quapy.method.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="P">previous</a> |</li>
|
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.6 documentation</a> »</li>
|
|
||||||
<li class="nav-item nav-item-1"><a href="modules.html" >quapy</a> »</li>
|
|
||||||
<li class="nav-item nav-item-2"><a href="quapy.html" accesskey="U">quapy package</a> »</li>
|
|
||||||
<li class="nav-item nav-item-this"><a href="">quapy.tests package</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="document">
|
|
||||||
<div class="documentwrapper">
|
|
||||||
<div class="bodywrapper">
|
|
||||||
<div class="body" role="main">
|
|
||||||
|
|
||||||
<div class="section" id="quapy-tests-package">
|
|
||||||
<h1>quapy.tests package<a class="headerlink" href="#quapy-tests-package" title="Permalink to this headline">¶</a></h1>
|
|
||||||
<div class="section" id="submodules">
|
|
||||||
<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="quapy-tests-test-base-module">
|
|
||||||
<h2>quapy.tests.test_base module<a class="headerlink" href="#quapy-tests-test-base-module" title="Permalink to this headline">¶</a></h2>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="quapy-tests-test-datasets-module">
|
|
||||||
<h2>quapy.tests.test_datasets module<a class="headerlink" href="#quapy-tests-test-datasets-module" title="Permalink to this headline">¶</a></h2>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="quapy-tests-test-methods-module">
|
|
||||||
<h2>quapy.tests.test_methods module<a class="headerlink" href="#quapy-tests-test-methods-module" title="Permalink to this headline">¶</a></h2>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="module-quapy.tests">
|
|
||||||
<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-quapy.tests" title="Permalink to this headline">¶</a></h2>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="clearer"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
|
||||||
<div class="sphinxsidebarwrapper">
|
|
||||||
<h3><a href="index.html">Table of Contents</a></h3>
|
|
||||||
<ul>
|
|
||||||
<li><a class="reference internal" href="#">quapy.tests package</a><ul>
|
|
||||||
<li><a class="reference internal" href="#submodules">Submodules</a></li>
|
|
||||||
<li><a class="reference internal" href="#quapy-tests-test-base-module">quapy.tests.test_base module</a></li>
|
|
||||||
<li><a class="reference internal" href="#quapy-tests-test-datasets-module">quapy.tests.test_datasets module</a></li>
|
|
||||||
<li><a class="reference internal" href="#quapy-tests-test-methods-module">quapy.tests.test_methods module</a></li>
|
|
||||||
<li><a class="reference internal" href="#module-quapy.tests">Module contents</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h4>Previous topic</h4>
|
|
||||||
<p class="topless"><a href="quapy.method.html"
|
|
||||||
title="previous chapter">quapy.method package</a></p>
|
|
||||||
<div role="note" aria-label="source link">
|
|
||||||
<h3>This Page</h3>
|
|
||||||
<ul class="this-page-menu">
|
|
||||||
<li><a href="_sources/quapy.tests.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>$('#searchbox').show(0);</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.method.html" title="quapy.method package"
|
|
||||||
>previous</a> |</li>
|
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.6 documentation</a> »</li>
|
|
||||||
<li class="nav-item nav-item-1"><a href="modules.html" >quapy</a> »</li>
|
|
||||||
<li class="nav-item nav-item-2"><a href="quapy.html" >quapy package</a> »</li>
|
|
||||||
<li class="nav-item nav-item-this"><a href="">quapy.tests package</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer" role="contentinfo">
|
|
||||||
© Copyright 2021, Alejandro Moreo.
|
|
||||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.2.0.
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,129 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
<!doctype html>
|
|
||||||
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>Getting Started — QuaPy 0.1.6 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/doctools.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="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="modules.html" title="quapy"
|
|
||||||
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.6 documentation</a> »</li>
|
|
||||||
<li class="nav-item nav-item-this"><a href="">Getting Started</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="document">
|
|
||||||
<div class="documentwrapper">
|
|
||||||
<div class="bodywrapper">
|
|
||||||
<div class="body" role="main">
|
|
||||||
|
|
||||||
<div class="section" id="getting-started">
|
|
||||||
<h1>Getting Started<a class="headerlink" href="#getting-started" title="Permalink to this headline">¶</a></h1>
|
|
||||||
<p>QuaPy is an open source framework for Quantification (a.k.a. Supervised Prevalence Estimation) written in Python.</p>
|
|
||||||
<div class="section" id="installation">
|
|
||||||
<h2>Installation<a class="headerlink" href="#installation" title="Permalink to this headline">¶</a></h2>
|
|
||||||
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">pip</span> <span class="n">install</span> <span class="n">quapy</span>
|
|
||||||
</pre></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="clearer"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
|
||||||
<div class="sphinxsidebarwrapper">
|
|
||||||
<h3><a href="index.html">Table of Contents</a></h3>
|
|
||||||
<ul>
|
|
||||||
<li><a class="reference internal" href="#">Getting Started</a><ul>
|
|
||||||
<li><a class="reference internal" href="#installation">Installation</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h4>Previous topic</h4>
|
|
||||||
<p class="topless"><a href="index.html"
|
|
||||||
title="previous chapter">Welcome to QuaPy’s documentation!</a></p>
|
|
||||||
<h4>Next topic</h4>
|
|
||||||
<p class="topless"><a href="modules.html"
|
|
||||||
title="next chapter">quapy</a></p>
|
|
||||||
<div role="note" aria-label="source link">
|
|
||||||
<h3>This Page</h3>
|
|
||||||
<ul class="this-page-menu">
|
|
||||||
<li><a href="_sources/readme.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>$('#searchbox').show(0);</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="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.6 documentation</a> »</li>
|
|
||||||
<li class="nav-item nav-item-this"><a href="">Getting Started</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer" role="contentinfo">
|
|
||||||
© Copyright 2021, Alejandro Moreo.
|
|
||||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.2.0.
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,92 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
<!doctype html>
|
|
||||||
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title><no title> — QuaPy 0.1.6 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/doctools.js"></script>
|
|
||||||
<script src="_static/bizstyle.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="py-modindex.html" title="Python Module Index"
|
|
||||||
>modules</a> |</li>
|
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.6 documentation</a> »</li>
|
|
||||||
<li class="nav-item nav-item-this"><a href=""><no title></a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="document">
|
|
||||||
<div class="documentwrapper">
|
|
||||||
<div class="bodywrapper">
|
|
||||||
<div class="body" role="main">
|
|
||||||
|
|
||||||
<p>.. include:: ../../README.md</p>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="clearer"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
|
||||||
<div class="sphinxsidebarwrapper">
|
|
||||||
<div role="note" aria-label="source link">
|
|
||||||
<h3>This Page</h3>
|
|
||||||
<ul class="this-page-menu">
|
|
||||||
<li><a href="_sources/readme2.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>$('#searchbox').show(0);</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="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.6 documentation</a> »</li>
|
|
||||||
<li class="nav-item nav-item-this"><a href=""><no title></a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="footer" role="contentinfo">
|
|
||||||
© Copyright 2021, Alejandro Moreo.
|
|
||||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.2.0.
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -2,11 +2,11 @@
|
||||||
|
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
|
|
||||||
<html>
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Search — QuaPy 0.1.6 documentation</title>
|
<title>Search — QuaPy 0.1.7 documentation</title>
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="_static/bizstyle.css" />
|
<link rel="stylesheet" type="text/css" href="_static/bizstyle.css" />
|
||||||
|
|
||||||
|
@ -14,7 +14,9 @@
|
||||||
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
<script src="_static/jquery.js"></script>
|
<script src="_static/jquery.js"></script>
|
||||||
<script src="_static/underscore.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/doctools.js"></script>
|
||||||
|
<script src="_static/sphinx_highlight.js"></script>
|
||||||
<script src="_static/bizstyle.js"></script>
|
<script src="_static/bizstyle.js"></script>
|
||||||
<script src="_static/searchtools.js"></script>
|
<script src="_static/searchtools.js"></script>
|
||||||
<script src="_static/language_data.js"></script>
|
<script src="_static/language_data.js"></script>
|
||||||
|
@ -37,7 +39,7 @@
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="py-modindex.html" title="Python Module Index"
|
<a href="py-modindex.html" title="Python Module Index"
|
||||||
>modules</a> |</li>
|
>modules</a> |</li>
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.6 documentation</a> »</li>
|
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> »</li>
|
||||||
<li class="nav-item nav-item-this"><a href="">Search</a></li>
|
<li class="nav-item nav-item-this"><a href="">Search</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -97,13 +99,13 @@
|
||||||
<li class="right" >
|
<li class="right" >
|
||||||
<a href="py-modindex.html" title="Python Module Index"
|
<a href="py-modindex.html" title="Python Module Index"
|
||||||
>modules</a> |</li>
|
>modules</a> |</li>
|
||||||
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.6 documentation</a> »</li>
|
<li class="nav-item nav-item-0"><a href="index.html">QuaPy 0.1.7 documentation</a> »</li>
|
||||||
<li class="nav-item nav-item-this"><a href="">Search</a></li>
|
<li class="nav-item nav-item-this"><a href="">Search</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer" role="contentinfo">
|
<div class="footer" role="contentinfo">
|
||||||
© Copyright 2021, Alejandro Moreo.
|
© Copyright 2021, Alejandro Moreo.
|
||||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.2.0.
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,69 @@
|
||||||
|
import quapy as qp
|
||||||
|
from data import LabelledCollection
|
||||||
|
from method.base import BaseQuantifier, BinaryQuantifier
|
||||||
|
from model_selection import GridSearchQ
|
||||||
|
from quapy.method.aggregative import PACC, AggregativeProbabilisticQuantifier
|
||||||
|
from quapy.protocol import APP
|
||||||
|
import numpy as np
|
||||||
|
from sklearn.linear_model import LogisticRegression
|
||||||
|
|
||||||
|
|
||||||
|
# Define a custom quantifier: for this example, we will consider a new quantification algorithm that uses a
|
||||||
|
# logistic regressor for generating posterior probabilities, and then applies a custom threshold value to the
|
||||||
|
# posteriors. Since the quantifier internally uses a classifier, it is an aggregative quantifier; and since it
|
||||||
|
# relies on posterior probabilities, then it is a probabilistic aggregative quantifier. Note also it has an
|
||||||
|
# internal hyperparameter (let say, alpha) which is the decision threshold. Let's also assume the quantifier
|
||||||
|
# is binary, for simplicity.
|
||||||
|
|
||||||
|
class MyQuantifier(AggregativeProbabilisticQuantifier, BinaryQuantifier):
|
||||||
|
def __init__(self, classifier, alpha=0.5):
|
||||||
|
self.alpha = alpha
|
||||||
|
# aggregative quantifiers have an internal self.classifier attribute
|
||||||
|
self.classifier = classifier
|
||||||
|
|
||||||
|
def fit(self, data: LabelledCollection, fit_classifier=True):
|
||||||
|
assert fit_classifier, 'this quantifier needs to fit the classifier!'
|
||||||
|
self.classifier.fit(*data.Xy)
|
||||||
|
return self
|
||||||
|
|
||||||
|
# in general, we would need to implement the method quantify(self, instances) but, since this method is of
|
||||||
|
# type aggregative, we can simply implement the method aggregate, which has the following interface
|
||||||
|
def aggregate(self, classif_predictions: np.ndarray):
|
||||||
|
# the posterior probabilities have already been generated by the quantify method; we only need to
|
||||||
|
# specify what to do with them
|
||||||
|
positive_probabilities = classif_predictions[:, 1]
|
||||||
|
crisp_decisions = positive_probabilities > self.alpha
|
||||||
|
pos_prev = crisp_decisions.mean()
|
||||||
|
neg_prev = 1-pos_prev
|
||||||
|
return np.asarray([neg_prev, pos_prev])
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
|
||||||
|
qp.environ['SAMPLE_SIZE'] = 100
|
||||||
|
|
||||||
|
# define an instance of our custom quantifier
|
||||||
|
quantifier = MyQuantifier(LogisticRegression(), alpha=0.5)
|
||||||
|
|
||||||
|
# load the IMDb dataset
|
||||||
|
train, test = qp.datasets.fetch_reviews('imdb', tfidf=True, min_df=5).train_test
|
||||||
|
train, val = train.split_stratified(train_prop=0.75)
|
||||||
|
|
||||||
|
# model selection
|
||||||
|
# let us assume we want to explore our hyperparameter alpha along with one hyperparameter of the classifier
|
||||||
|
param_grid = {
|
||||||
|
'alpha': np.linspace(0,1,11), # quantifier-dependent hyperparameter
|
||||||
|
'classifier__C': np.logspace(-2,2,5) # classifier-dependent hyperparameter
|
||||||
|
}
|
||||||
|
quantifier = GridSearchQ(quantifier, param_grid, protocol=APP(val), n_jobs=-1, verbose=True).fit(train)
|
||||||
|
|
||||||
|
# evaluation
|
||||||
|
mae = qp.evaluation.evaluate(quantifier, protocol=APP(test), error_metric='mae')
|
||||||
|
|
||||||
|
print(f'MAE = {mae:.4f}')
|
||||||
|
|
||||||
|
# final remarks: this method is only for demonstration purposes and makes little sense in general. The method relies
|
||||||
|
# on an hyperparameter alpha for binarizing the posterior probabilities. A much better way for fulfilling this
|
||||||
|
# goal would be to calibrate the classifier (LogisticRegression is already reasonably well calibrated) and then
|
||||||
|
# simply cut at 0.5.
|
||||||
|
|
|
@ -1,11 +1,19 @@
|
||||||
# main changes in 0.1.7
|
Change Log 0.1.7
|
||||||
|
---------------------
|
||||||
|
|
||||||
- Protocols are now abstracted as AbstractProtocol. There is a new class extending AbstractProtocol called
|
- Protocols are now abstracted as instances of AbstractProtocol. There is a new class extending AbstractProtocol called
|
||||||
AbstractStochasticSeededProtocol, which implements a seeding policy to allow replicate the series of samplings.
|
AbstractStochasticSeededProtocol, which implements a seeding policy to allow replicate the series of samplings.
|
||||||
There are some examples of protocols, APP, NPP, USimplexPP, CovariateShiftPP (experimental).
|
There are some examples of protocols, APP, NPP, USimplexPP, DomainMixer (experimental).
|
||||||
The idea is to start the sampling by simply calling the __call__ method.
|
The idea is to start the sampling by simply calling the __call__ method.
|
||||||
This change has a great impact in the framework, since many functions in qp.evaluation, qp.model_selection,
|
This change has a great impact in the framework, since many functions in qp.evaluation, qp.model_selection,
|
||||||
and sampling functions in LabelledCollection make use of the old functions.
|
and sampling functions in LabelledCollection relied of the old functions. E.g., the functionality of
|
||||||
|
qp.evaluation.artificial_prevalence_report or qp.evaluation.natural_prevalence_report is now obtained by means of
|
||||||
|
qp.evaluation.report which takes a protocol as an argument. I have not maintained compatibility with the old
|
||||||
|
interfaces because I did not really like them. Check the wiki guide and the examples for more details.
|
||||||
|
|
||||||
|
check guides
|
||||||
|
|
||||||
|
check examples
|
||||||
|
|
||||||
- ACC, PACC, Forman's threshold variants have been parallelized.
|
- ACC, PACC, Forman's threshold variants have been parallelized.
|
||||||
|
|
||||||
|
@ -51,47 +59,31 @@
|
||||||
multiclass quantification. That is to say, one could get a multiclass variant of the (originally binary) HDy
|
multiclass quantification. That is to say, one could get a multiclass variant of the (originally binary) HDy
|
||||||
method aligned with the Firat's formulation.
|
method aligned with the Firat's formulation.
|
||||||
|
|
||||||
|
- internal method properties "binary", "aggregative", and "probabilistic" have been removed; these conditions are
|
||||||
|
checked via isinstance
|
||||||
|
|
||||||
|
- quantifiers (i.e., classes that inherit from BaseQuantifier) are not forced to implement classes_ or n_classes;
|
||||||
|
these can be used anyway internally, but the framework will not suppose (nor impose) that a quantifier implements
|
||||||
|
them
|
||||||
|
|
||||||
|
- qp.evaluation.prediction has been optimized so that, if a quantifier is of type aggregative, and if the evaluation
|
||||||
|
protocol is of type OnLabelledCollection, then the computation is faster. In this specific case, the predictions
|
||||||
|
are issued only once and for all, and not for each sample. An exception to this (which is implement also), is
|
||||||
|
when the number of instances across all samples is anyway smaller than the number of instances in the original
|
||||||
|
labelled collection; in this case the heuristic is of no help, and is therefore not applied.
|
||||||
|
|
||||||
|
- the distinction between "classify" and "posterior_probabilities" has been removed in Aggregative quantifiers,
|
||||||
|
so that probabilistic classifiers return posterior probabilities, while non-probabilistic quantifiers
|
||||||
|
return crisp decisions.
|
||||||
|
|
||||||
Things to fix:
|
Things to fix:
|
||||||
- calibration with recalibration methods has to be fixed for exact_train_prev in EMQ (conflicts with clone, deepcopy, etc.)
|
--------------
|
||||||
- clean functions like binary, aggregative, probabilistic, etc; those should be resolved via isinstance():
|
- OneVsAll is duplicated (in aggregative and in general), and is not well documented. It is not working either.
|
||||||
this is not working; I don't know how to make the isinstance work. Looks like there is some problem with the
|
Check method def __parallel(self, func, *args, **kwargs) in aggregative.OneVsAll
|
||||||
path of the imported class wrt the path of the class that arrives from another module...
|
|
||||||
- clean classes_ and n_classes from methods (maybe not from aggregative ones, but those have to be used only
|
|
||||||
internally and not imposed in any abstract class)
|
|
||||||
- optimize "qp.evaluation.prediction" for aggregative methods (pre-classification)
|
|
||||||
- update unit tests
|
- update unit tests
|
||||||
- Policies should be able to set their output to "labelled_collection" or "instances_prevalence" or something similar.
|
- update Wikis...
|
||||||
- Policies should implement the "gen()" one, taking a reader function as an input, and a folder path maybe
|
|
||||||
- Review all documentation, redo the Sphinx doc, update Wikis...
|
|
||||||
- Resolve the OneVsAll thing (it is in base.py and in aggregative.py)
|
- Resolve the OneVsAll thing (it is in base.py and in aggregative.py)
|
||||||
- Better handle the environment (e.g., with n_jobs)
|
|
||||||
- test cross_generate_predictions and cancel cross_generate_predictions_depr
|
|
||||||
- Add a proper log?
|
- Add a proper log?
|
||||||
- test LoadSamplesFromDirectory (in protocols.py)
|
- improve plots
|
||||||
- improve plots?
|
- documentation of protocols is incomplete
|
||||||
- I have removed the distinction between "classify" and "posterior_probabilities" in the Aggregative quantifiers,
|
|
||||||
so that probabilistic classifiers actually return posterior probabilities, while non-probabilistic quantifiers
|
|
||||||
return instead crisp decisions. The idea was to unify the quantification function (i.e., now it is always
|
|
||||||
classify & aggregate, irrespective of the class). However, this has caused a problem with OneVsAll. This has to
|
|
||||||
be checked, since it is now innecessarily complicated (it also has old references to .probabilistic, and all this
|
|
||||||
stuff).
|
|
||||||
- Check method def __parallel(self, func, *args, **kwargs) in aggregative.OneVsAll
|
|
||||||
|
|
||||||
New features:
|
|
||||||
- Add LeQua2022 to datasets (everything automatic, and with proper protocols "gen")
|
|
||||||
- Add an "experimental room", with scripts to quickly test new ideas and see results.
|
|
||||||
|
|
||||||
# 0.1.7
|
|
||||||
# change the LabelledCollection API (removing protocol-related samplings)
|
|
||||||
# need to change the two references to the above in the wiki / doc, and code examples...
|
|
||||||
# removed artificial_prevalence_sampling from functional
|
|
||||||
|
|
||||||
# also: some parameters in the init could be used to indicate that the method should return a tuple with
|
|
||||||
# unlabelled instances and the vector of prevalence values (and not a LabelledCollection).
|
|
||||||
# Or: this can be done in a different function; i.e., we use one function (now __call__) to return
|
|
||||||
# LabelledCollections, and another new one for returning the other output, which is more general for
|
|
||||||
# evaluation purposes.
|
|
||||||
|
|
||||||
# the so-called "gen" function has to be implemented as a protocol. The problem here is that this function
|
|
||||||
# should be able to return only unlabelled instances plus a vector of prevalences (and not LabelledCollections).
|
|
||||||
# This was coded as different functions in 0.1.6
|
|
||||||
|
|
|
@ -23,9 +23,28 @@ environ = {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def get_njobs(n_jobs):
|
def _get_njobs(n_jobs):
|
||||||
|
"""
|
||||||
|
If `n_jobs` is None, then it returns `environ['N_JOBS']`; if otherwise, returns `n_jobs`.
|
||||||
|
|
||||||
|
:param n_jobs: the number of `n_jobs` or None if not specified
|
||||||
|
:return: int
|
||||||
|
"""
|
||||||
return environ['N_JOBS'] if n_jobs is None else n_jobs
|
return environ['N_JOBS'] if n_jobs is None else n_jobs
|
||||||
|
|
||||||
|
|
||||||
|
def _get_sample_size(sample_size):
|
||||||
|
"""
|
||||||
|
If `sample_size` is None, then it returns `environ['SAMPLE_SIZE']`; if otherwise, returns `sample_size`.
|
||||||
|
If none of these are set, then a ValueError exception is raised.
|
||||||
|
|
||||||
|
:param sample_size: integer or None
|
||||||
|
:return: int
|
||||||
|
"""
|
||||||
|
sample_size = environ['SAMPLE_SIZE'] if sample_size is None else sample_size
|
||||||
|
if sample_size is None:
|
||||||
|
raise ValueError('neither sample_size nor qp.environ["SAMPLE_SIZE"] have been specified')
|
||||||
|
return sample_size
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -12,12 +12,18 @@ import numpy as np
|
||||||
|
|
||||||
|
|
||||||
class RecalibratedProbabilisticClassifier:
|
class RecalibratedProbabilisticClassifier:
|
||||||
|
"""
|
||||||
|
Abstract class for (re)calibration method from `abstention.calibration`, as defined in
|
||||||
|
`Alexandari, A., Kundaje, A., & Shrikumar, A. (2020, November). Maximum likelihood with bias-corrected calibration
|
||||||
|
is hard-to-beat at label shift adaptation. In International Conference on Machine Learning (pp. 222-232). PMLR.
|
||||||
|
<http://proceedings.mlr.press/v119/alexandari20a.html>`_:
|
||||||
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class RecalibratedProbabilisticClassifierBase(BaseEstimator, RecalibratedProbabilisticClassifier):
|
class RecalibratedProbabilisticClassifierBase(BaseEstimator, RecalibratedProbabilisticClassifier):
|
||||||
"""
|
"""
|
||||||
Applies a (re)calibration method from abstention.calibration, as defined in
|
Applies a (re)calibration method from `abstention.calibration`, as defined in
|
||||||
`Alexandari et al. paper <http://proceedings.mlr.press/v119/alexandari20a.html>`_:
|
`Alexandari et al. paper <http://proceedings.mlr.press/v119/alexandari20a.html>`_:
|
||||||
|
|
||||||
:param classifier: a scikit-learn probabilistic classifier
|
:param classifier: a scikit-learn probabilistic classifier
|
||||||
|
@ -25,7 +31,7 @@ class RecalibratedProbabilisticClassifierBase(BaseEstimator, RecalibratedProbabi
|
||||||
:param val_split: indicate an integer k for performing kFCV to obtain the posterior probabilities, or a float p
|
:param val_split: indicate an integer k for performing kFCV to obtain the posterior probabilities, or a float p
|
||||||
in (0,1) to indicate that the posteriors are obtained in a stratified validation split containing p% of the
|
in (0,1) to indicate that the posteriors are obtained in a stratified validation split containing p% of the
|
||||||
training instances (the rest is used for training). In any case, the classifier is retrained in the whole
|
training instances (the rest is used for training). In any case, the classifier is retrained in the whole
|
||||||
training set afterwards.
|
training set afterwards. Default value is 5.
|
||||||
:param n_jobs: indicate the number of parallel workers (only when val_split is an integer); default=None
|
:param n_jobs: indicate the number of parallel workers (only when val_split is an integer); default=None
|
||||||
:param verbose: whether or not to display information in the standard output
|
:param verbose: whether or not to display information in the standard output
|
||||||
"""
|
"""
|
||||||
|
@ -38,6 +44,13 @@ class RecalibratedProbabilisticClassifierBase(BaseEstimator, RecalibratedProbabi
|
||||||
self.verbose = verbose
|
self.verbose = verbose
|
||||||
|
|
||||||
def fit(self, X, y):
|
def fit(self, X, y):
|
||||||
|
"""
|
||||||
|
Fits the calibration for the probabilistic classifier.
|
||||||
|
|
||||||
|
:param X: array-like of shape `(n_samples, n_features)` with the data instances
|
||||||
|
:param y: array-like of shape `(n_samples,)` with the class labels
|
||||||
|
:return: self
|
||||||
|
"""
|
||||||
k = self.val_split
|
k = self.val_split
|
||||||
if isinstance(k, int):
|
if isinstance(k, int):
|
||||||
if k < 2:
|
if k < 2:
|
||||||
|
@ -49,6 +62,15 @@ class RecalibratedProbabilisticClassifierBase(BaseEstimator, RecalibratedProbabi
|
||||||
return self.fit_cv(X, y)
|
return self.fit_cv(X, y)
|
||||||
|
|
||||||
def fit_cv(self, X, y):
|
def fit_cv(self, X, y):
|
||||||
|
"""
|
||||||
|
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 outpus of the classifier.
|
||||||
|
|
||||||
|
:param X: array-like of shape `(n_samples, n_features)` with the data instances
|
||||||
|
:param y: array-like of shape `(n_samples,)` with the class labels
|
||||||
|
:return: self
|
||||||
|
"""
|
||||||
posteriors = cross_val_predict(
|
posteriors = cross_val_predict(
|
||||||
self.classifier, X, y, cv=self.val_split, n_jobs=self.n_jobs, verbose=self.verbose, method='predict_proba'
|
self.classifier, X, y, cv=self.val_split, n_jobs=self.n_jobs, verbose=self.verbose, method='predict_proba'
|
||||||
)
|
)
|
||||||
|
@ -58,6 +80,16 @@ class RecalibratedProbabilisticClassifierBase(BaseEstimator, RecalibratedProbabi
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def fit_tr_val(self, X, y):
|
def fit_tr_val(self, X, y):
|
||||||
|
"""
|
||||||
|
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
|
||||||
|
the classifier. The classifier is not retrained on the whole dataset.
|
||||||
|
|
||||||
|
:param X: array-like of shape `(n_samples, n_features)` with the data instances
|
||||||
|
:param y: array-like of shape `(n_samples,)` with the class labels
|
||||||
|
:return: self
|
||||||
|
"""
|
||||||
Xtr, Xva, ytr, yva = train_test_split(X, y, test_size=self.val_split, stratify=y)
|
Xtr, Xva, ytr, yva = train_test_split(X, y, test_size=self.val_split, stratify=y)
|
||||||
self.classifier.fit(Xtr, ytr)
|
self.classifier.fit(Xtr, ytr)
|
||||||
posteriors = self.classifier.predict_proba(Xva)
|
posteriors = self.classifier.predict_proba(Xva)
|
||||||
|
@ -66,32 +98,49 @@ class RecalibratedProbabilisticClassifierBase(BaseEstimator, RecalibratedProbabi
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def predict(self, X):
|
def predict(self, X):
|
||||||
|
"""
|
||||||
|
Predicts class labels for the data instances in `X`
|
||||||
|
|
||||||
|
:param X: array-like of shape `(n_samples, n_features)` with the data instances
|
||||||
|
:return: array-like of shape `(n_samples,)` with the class label predictions
|
||||||
|
"""
|
||||||
return self.classifier.predict(X)
|
return self.classifier.predict(X)
|
||||||
|
|
||||||
def predict_proba(self, X):
|
def predict_proba(self, X):
|
||||||
|
"""
|
||||||
|
Generates posterior probabilities for the data instances in `X`
|
||||||
|
|
||||||
|
:param X: array-like of shape `(n_samples, n_features)` with the data instances
|
||||||
|
:return: array-like of shape `(n_samples, n_classes)` with posterior probabilities
|
||||||
|
"""
|
||||||
posteriors = self.classifier.predict_proba(X)
|
posteriors = self.classifier.predict_proba(X)
|
||||||
return self.calibration_function(posteriors)
|
return self.calibration_function(posteriors)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def classes_(self):
|
def classes_(self):
|
||||||
|
"""
|
||||||
|
Returns the classes on which the classifier has been trained on
|
||||||
|
|
||||||
|
:return: array-like of shape `(n_classes)`
|
||||||
|
"""
|
||||||
return self.classifier.classes_
|
return self.classifier.classes_
|
||||||
|
|
||||||
|
|
||||||
class NBVSCalibration(RecalibratedProbabilisticClassifierBase):
|
class NBVSCalibration(RecalibratedProbabilisticClassifierBase):
|
||||||
"""
|
"""
|
||||||
Applies the No-Bias Vector Scaling (NBVS) calibration method from abstention.calibration, as defined in
|
Applies the No-Bias Vector Scaling (NBVS) calibration method from `abstention.calibration`, as defined in
|
||||||
`Alexandari et al. paper <http://proceedings.mlr.press/v119/alexandari20a.html>`_:
|
`Alexandari et al. paper <http://proceedings.mlr.press/v119/alexandari20a.html>`_:
|
||||||
|
|
||||||
:param classifier: a scikit-learn probabilistic classifier
|
:param classifier: a scikit-learn probabilistic classifier
|
||||||
:param val_split: indicate an integer k for performing kFCV to obtain the posterior prevalences, or a float p
|
:param val_split: indicate an integer k for performing kFCV to obtain the posterior prevalences, or a float p
|
||||||
in (0,1) to indicate that the posteriors are obtained in a stratified validation split containing p% of the
|
in (0,1) to indicate that the posteriors are obtained in a stratified validation split containing p% of the
|
||||||
training instances (the rest is used for training). In any case, the classifier is retrained in the whole
|
training instances (the rest is used for training). In any case, the classifier is retrained in the whole
|
||||||
training set afterwards.
|
training set afterwards. Default value is 5.
|
||||||
:param n_jobs: indicate the number of parallel workers (only when val_split is an integer)
|
:param n_jobs: indicate the number of parallel workers (only when val_split is an integer)
|
||||||
:param verbose: whether or not to display information in the standard output
|
:param verbose: whether or not to display information in the standard output
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, classifier, val_split=5, n_jobs=1, verbose=False):
|
def __init__(self, classifier, val_split=5, n_jobs=None, verbose=False):
|
||||||
self.classifier = classifier
|
self.classifier = classifier
|
||||||
self.calibrator = NoBiasVectorScaling(verbose=verbose)
|
self.calibrator = NoBiasVectorScaling(verbose=verbose)
|
||||||
self.val_split = val_split
|
self.val_split = val_split
|
||||||
|
@ -101,19 +150,19 @@ class NBVSCalibration(RecalibratedProbabilisticClassifierBase):
|
||||||
|
|
||||||
class BCTSCalibration(RecalibratedProbabilisticClassifierBase):
|
class BCTSCalibration(RecalibratedProbabilisticClassifierBase):
|
||||||
"""
|
"""
|
||||||
Applies the Bias-Corrected Temperature Scaling (BCTS) calibration method from abstention.calibration, as defined in
|
Applies the Bias-Corrected Temperature Scaling (BCTS) calibration method from `abstention.calibration`, as defined in
|
||||||
`Alexandari et al. paper <http://proceedings.mlr.press/v119/alexandari20a.html>`_:
|
`Alexandari et al. paper <http://proceedings.mlr.press/v119/alexandari20a.html>`_:
|
||||||
|
|
||||||
:param classifier: a scikit-learn probabilistic classifier
|
:param classifier: a scikit-learn probabilistic classifier
|
||||||
:param val_split: indicate an integer k for performing kFCV to obtain the posterior prevalences, or a float p
|
:param val_split: indicate an integer k for performing kFCV to obtain the posterior prevalences, or a float p
|
||||||
in (0,1) to indicate that the posteriors are obtained in a stratified validation split containing p% of the
|
in (0,1) to indicate that the posteriors are obtained in a stratified validation split containing p% of the
|
||||||
training instances (the rest is used for training). In any case, the classifier is retrained in the whole
|
training instances (the rest is used for training). In any case, the classifier is retrained in the whole
|
||||||
training set afterwards.
|
training set afterwards. Default value is 5.
|
||||||
:param n_jobs: indicate the number of parallel workers (only when val_split is an integer)
|
:param n_jobs: indicate the number of parallel workers (only when val_split is an integer)
|
||||||
:param verbose: whether or not to display information in the standard output
|
:param verbose: whether or not to display information in the standard output
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, classifier, val_split=5, n_jobs=1, verbose=False):
|
def __init__(self, classifier, val_split=5, n_jobs=None, verbose=False):
|
||||||
self.classifier = classifier
|
self.classifier = classifier
|
||||||
self.calibrator = TempScaling(verbose=verbose, bias_positions='all')
|
self.calibrator = TempScaling(verbose=verbose, bias_positions='all')
|
||||||
self.val_split = val_split
|
self.val_split = val_split
|
||||||
|
@ -123,19 +172,19 @@ class BCTSCalibration(RecalibratedProbabilisticClassifierBase):
|
||||||
|
|
||||||
class TSCalibration(RecalibratedProbabilisticClassifierBase):
|
class TSCalibration(RecalibratedProbabilisticClassifierBase):
|
||||||
"""
|
"""
|
||||||
Applies the Temperature Scaling (TS) calibration method from abstention.calibration, as defined in
|
Applies the Temperature Scaling (TS) calibration method from `abstention.calibration`, as defined in
|
||||||
`Alexandari et al. paper <http://proceedings.mlr.press/v119/alexandari20a.html>`_:
|
`Alexandari et al. paper <http://proceedings.mlr.press/v119/alexandari20a.html>`_:
|
||||||
|
|
||||||
:param classifier: a scikit-learn probabilistic classifier
|
:param classifier: a scikit-learn probabilistic classifier
|
||||||
:param val_split: indicate an integer k for performing kFCV to obtain the posterior prevalences, or a float p
|
:param val_split: indicate an integer k for performing kFCV to obtain the posterior prevalences, or a float p
|
||||||
in (0,1) to indicate that the posteriors are obtained in a stratified validation split containing p% of the
|
in (0,1) to indicate that the posteriors are obtained in a stratified validation split containing p% of the
|
||||||
training instances (the rest is used for training). In any case, the classifier is retrained in the whole
|
training instances (the rest is used for training). In any case, the classifier is retrained in the whole
|
||||||
training set afterwards.
|
training set afterwards. Default value is 5.
|
||||||
:param n_jobs: indicate the number of parallel workers (only when val_split is an integer)
|
:param n_jobs: indicate the number of parallel workers (only when val_split is an integer)
|
||||||
:param verbose: whether or not to display information in the standard output
|
:param verbose: whether or not to display information in the standard output
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, classifier, val_split=5, n_jobs=1, verbose=False):
|
def __init__(self, classifier, val_split=5, n_jobs=None, verbose=False):
|
||||||
self.classifier = classifier
|
self.classifier = classifier
|
||||||
self.calibrator = TempScaling(verbose=verbose)
|
self.calibrator = TempScaling(verbose=verbose)
|
||||||
self.val_split = val_split
|
self.val_split = val_split
|
||||||
|
@ -145,19 +194,19 @@ class TSCalibration(RecalibratedProbabilisticClassifierBase):
|
||||||
|
|
||||||
class VSCalibration(RecalibratedProbabilisticClassifierBase):
|
class VSCalibration(RecalibratedProbabilisticClassifierBase):
|
||||||
"""
|
"""
|
||||||
Applies the Vector Scaling (VS) calibration method from abstention.calibration, as defined in
|
Applies the Vector Scaling (VS) calibration method from `abstention.calibration`, as defined in
|
||||||
`Alexandari et al. paper <http://proceedings.mlr.press/v119/alexandari20a.html>`_:
|
`Alexandari et al. paper <http://proceedings.mlr.press/v119/alexandari20a.html>`_:
|
||||||
|
|
||||||
:param classifier: a scikit-learn probabilistic classifier
|
:param classifier: a scikit-learn probabilistic classifier
|
||||||
:param val_split: indicate an integer k for performing kFCV to obtain the posterior prevalences, or a float p
|
:param val_split: indicate an integer k for performing kFCV to obtain the posterior prevalences, or a float p
|
||||||
in (0,1) to indicate that the posteriors are obtained in a stratified validation split containing p% of the
|
in (0,1) to indicate that the posteriors are obtained in a stratified validation split containing p% of the
|
||||||
training instances (the rest is used for training). In any case, the classifier is retrained in the whole
|
training instances (the rest is used for training). In any case, the classifier is retrained in the whole
|
||||||
training set afterwards.
|
training set afterwards. Default value is 5.
|
||||||
:param n_jobs: indicate the number of parallel workers (only when val_split is an integer)
|
:param n_jobs: indicate the number of parallel workers (only when val_split is an integer)
|
||||||
:param verbose: whether or not to display information in the standard output
|
:param verbose: whether or not to display information in the standard output
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, classifier, val_split=5, n_jobs=1, verbose=False):
|
def __init__(self, classifier, val_split=5, n_jobs=None, verbose=False):
|
||||||
self.classifier = classifier
|
self.classifier = classifier
|
||||||
self.calibrator = VectorScaling(verbose=verbose)
|
self.calibrator = VectorScaling(verbose=verbose)
|
||||||
self.val_split = val_split
|
self.val_split = val_split
|
||||||
|
|
|
@ -94,6 +94,7 @@ class SVMperf(BaseEstimator, ClassifierMixin):
|
||||||
def predict(self, X):
|
def predict(self, X):
|
||||||
"""
|
"""
|
||||||
Predicts labels for the instances `X`
|
Predicts labels for the instances `X`
|
||||||
|
|
||||||
:param X: array-like of shape `(n_samples, n_features)` instances to classify
|
:param X: array-like of shape `(n_samples, n_features)` instances to classify
|
||||||
:return: a `numpy` array of length `n` containing the label predictions, where `n` is the number of
|
:return: a `numpy` array of length `n` containing the label predictions, where `n` is the number of
|
||||||
instances in `X`
|
instances in `X`
|
||||||
|
|
|
@ -554,7 +554,31 @@ def _df_replace(df, col, repl={'yes': 1, 'no':0}, astype=float):
|
||||||
|
|
||||||
def fetch_lequa2022(task, data_home=None):
|
def fetch_lequa2022(task, data_home=None):
|
||||||
"""
|
"""
|
||||||
|
Loads the official datasets provided for the `LeQua <https://lequa2022.github.io/index>`_ 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.
|
||||||
|
We refer to the `Esuli, A., Moreo, A., Sebastiani, F., & Sperduti, G. (2022).
|
||||||
|
A Detailed Overview of LeQua@ CLEF 2022: Learning to Quantify.
|
||||||
|
<https://ceur-ws.org/Vol-3180/paper-146.pdf>`_ for a detailed description
|
||||||
|
on the tasks and datasets.
|
||||||
|
|
||||||
|
The datasets are downloaded only once, and stored for fast reuse.
|
||||||
|
|
||||||
|
See `lequa2022_experiments.py` provided in the example folder, that can serve as a guide on how to use these
|
||||||
|
datasets.
|
||||||
|
|
||||||
|
|
||||||
|
:param task: a string representing the task name; valid ones are T1A, T1B, T2A, and T2B
|
||||||
|
:param data_home: specify the quapy home directory where collections will be dumped (leave empty to use the default
|
||||||
|
~/quay_data/ directory)
|
||||||
|
:return: a tuple `(train, val_gen, test_gen)` where `train` is an instance of
|
||||||
|
:class:`quapy.data.base.LabelledCollection`, `val_gen` and `test_gen` are instances of
|
||||||
|
:class:`quapy.protocol.SamplesFromDir`, i.e., are sampling protocols that return a series of samples
|
||||||
|
labelled by prevalence.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from quapy.data._lequa2022 import load_raw_documents, load_vector_documents, SamplesFromDir
|
from quapy.data._lequa2022 import load_raw_documents, load_vector_documents, SamplesFromDir
|
||||||
|
|
||||||
assert task in LEQUA2022_TASKS, \
|
assert task in LEQUA2022_TASKS, \
|
||||||
|
|
|
@ -88,7 +88,7 @@ def standardize(dataset: Dataset, inplace=False):
|
||||||
:param dataset: a :class:`quapy.data.base.Dataset` object
|
:param dataset: a :class:`quapy.data.base.Dataset` object
|
||||||
:param inplace: set to True if the transformation is to be applied inplace, or to False (default) if a new
|
:param inplace: set to True if the transformation is to be applied inplace, or to False (default) if a new
|
||||||
:class:`quapy.data.base.Dataset` is to be returned
|
:class:`quapy.data.base.Dataset` is to be returned
|
||||||
:return:
|
:return: an instance of :class:`quapy.data.base.Dataset`
|
||||||
"""
|
"""
|
||||||
s = StandardScaler(copy=not inplace)
|
s = StandardScaler(copy=not inplace)
|
||||||
training = s.fit_transform(dataset.training.instances)
|
training = s.fit_transform(dataset.training.instances)
|
||||||
|
@ -147,7 +147,8 @@ class IndexTransformer:
|
||||||
contains, and that would be generated by sklearn's
|
contains, and that would be generated by sklearn's
|
||||||
`CountVectorizer <https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html>`_
|
`CountVectorizer <https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html>`_
|
||||||
|
|
||||||
:param kwargs: keyworded arguments from `CountVectorizer <https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html>`_
|
:param kwargs: keyworded arguments from
|
||||||
|
`CountVectorizer <https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html>`_
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
|
@ -179,7 +180,7 @@ class IndexTransformer:
|
||||||
"""
|
"""
|
||||||
# given the number of tasks and the number of jobs, generates the slices for the parallel processes
|
# given the number of tasks and the number of jobs, generates the slices for the parallel processes
|
||||||
assert self.unk != -1, 'transform called before fit'
|
assert self.unk != -1, 'transform called before fit'
|
||||||
n_jobs = qp.get_njobs(n_jobs)
|
n_jobs = qp._get_njobs(n_jobs)
|
||||||
indexed = map_parallel(func=self._index, args=X, n_jobs=n_jobs)
|
indexed = map_parallel(func=self._index, args=X, n_jobs=n_jobs)
|
||||||
return np.asarray(indexed)
|
return np.asarray(indexed)
|
||||||
|
|
||||||
|
|
|
@ -1,439 +0,0 @@
|
||||||
from typing import Union, Callable, Iterable
|
|
||||||
import numpy as np
|
|
||||||
from tqdm import tqdm
|
|
||||||
import inspect
|
|
||||||
|
|
||||||
import quapy as qp
|
|
||||||
from quapy.data import LabelledCollection
|
|
||||||
from quapy.method.base import BaseQuantifier
|
|
||||||
from quapy.util import temp_seed
|
|
||||||
import quapy.functional as F
|
|
||||||
import pandas as pd
|
|
||||||
|
|
||||||
|
|
||||||
def artificial_prevalence_prediction(
|
|
||||||
model: BaseQuantifier,
|
|
||||||
test: LabelledCollection,
|
|
||||||
sample_size,
|
|
||||||
n_prevpoints=101,
|
|
||||||
repeats=1,
|
|
||||||
eval_budget: int = None,
|
|
||||||
n_jobs=1,
|
|
||||||
random_seed=42,
|
|
||||||
verbose=False):
|
|
||||||
"""
|
|
||||||
Performs the predictions for all samples generated according to the Artificial Prevalence Protocol (APP).
|
|
||||||
The APP consists of exploring a grid of prevalence values containing `n_prevalences` points (e.g.,
|
|
||||||
[0, 0.05, 0.1, 0.15, ..., 1], if `n_prevalences=21`), 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 `sample_size` will be considered). The number of samples for each valid
|
|
||||||
combination of prevalence values is indicated by `repeats`.
|
|
||||||
|
|
||||||
:param model: the model in charge of generating the class prevalence estimations
|
|
||||||
:param test: the test set on which to perform APP
|
|
||||||
:param sample_size: integer, the size of the samples
|
|
||||||
:param n_prevpoints: integer, the number of different prevalences to sample (or set to None if eval_budget
|
|
||||||
is specified; default 101, i.e., steps of 1%)
|
|
||||||
:param repeats: integer, the number of repetitions for each prevalence (default 1)
|
|
||||||
:param eval_budget: integer, if specified, sets a ceil on the number of evaluations to perform. For example, if
|
|
||||||
there are 3 classes, `repeats=1`, and `eval_budget=20`, then `n_prevpoints` will be set to 5, since this
|
|
||||||
will generate 15 different prevalence vectors ([0, 0, 1], [0, 0.25, 0.75], [0, 0.5, 0.5] ... [1, 0, 0]) and
|
|
||||||
since setting `n_prevpoints=6` would produce more than 20 evaluations.
|
|
||||||
:param n_jobs: integer, number of jobs to be run in parallel (default 1)
|
|
||||||
:param random_seed: integer, allows to replicate the samplings. The seed is local to the method and does not affect
|
|
||||||
any other random process (default 42)
|
|
||||||
:param verbose: if True, shows a progress bar
|
|
||||||
:return: a tuple containing two `np.ndarrays` of shape `(m,n,)` with `m` the number of samples
|
|
||||||
`(n_prevpoints*repeats)` and `n` the number of classes. The first one contains the true prevalence values
|
|
||||||
for the samples generated while the second one contains the prevalence estimations
|
|
||||||
"""
|
|
||||||
|
|
||||||
n_prevpoints, _ = qp.evaluation._check_num_evals(test.n_classes, n_prevpoints, eval_budget, repeats, verbose)
|
|
||||||
|
|
||||||
with temp_seed(random_seed):
|
|
||||||
indexes = list(test.artificial_sampling_index_generator(sample_size, n_prevpoints, repeats))
|
|
||||||
|
|
||||||
return _predict_from_indexes(indexes, model, test, n_jobs, verbose)
|
|
||||||
|
|
||||||
|
|
||||||
def natural_prevalence_prediction(
|
|
||||||
model: BaseQuantifier,
|
|
||||||
test: LabelledCollection,
|
|
||||||
sample_size,
|
|
||||||
repeats,
|
|
||||||
n_jobs=1,
|
|
||||||
random_seed=42,
|
|
||||||
verbose=False):
|
|
||||||
"""
|
|
||||||
Performs the predictions for all samples generated according to the Natural Prevalence Protocol (NPP).
|
|
||||||
The NPP consists of drawing samples uniformly at random, therefore approximately preserving the natural
|
|
||||||
prevalence of the collection.
|
|
||||||
|
|
||||||
:param model: the model in charge of generating the class prevalence estimations
|
|
||||||
:param test: the test set on which to perform NPP
|
|
||||||
:param sample_size: integer, the size of the samples
|
|
||||||
:param repeats: integer, the number of samples to generate
|
|
||||||
:param n_jobs: integer, number of jobs to be run in parallel (default 1)
|
|
||||||
:param random_seed: allows to replicate the samplings. The seed is local to the method and does not affect
|
|
||||||
any other random process (default 42)
|
|
||||||
:param verbose: if True, shows a progress bar
|
|
||||||
:return: a tuple containing two `np.ndarrays` of shape `(m,n,)` with `m` the number of samples
|
|
||||||
`(repeats)` and `n` the number of classes. The first one contains the true prevalence values
|
|
||||||
for the samples generated while the second one contains the prevalence estimations
|
|
||||||
"""
|
|
||||||
|
|
||||||
with temp_seed(random_seed):
|
|
||||||
indexes = list(test.natural_sampling_index_generator(sample_size, repeats))
|
|
||||||
|
|
||||||
return _predict_from_indexes(indexes, model, test, n_jobs, verbose)
|
|
||||||
|
|
||||||
|
|
||||||
def gen_prevalence_prediction(model: BaseQuantifier, gen_fn: Callable, eval_budget=None):
|
|
||||||
"""
|
|
||||||
Generates prevalence predictions for a custom protocol defined as a generator function that yields
|
|
||||||
samples at each iteration. The sequence of samples is processed exhaustively if `eval_budget=None`
|
|
||||||
or up to the `eval_budget` iterations if specified.
|
|
||||||
|
|
||||||
:param model: the model in charge of generating the class prevalence estimations
|
|
||||||
:param gen_fn: a generator function yielding one sample at each iteration
|
|
||||||
:param eval_budget: a maximum number of evaluations to run. Set to None (default) for exploring the
|
|
||||||
entire sequence
|
|
||||||
:return: a tuple containing two `np.ndarrays` of shape `(m,n,)` with `m` the number of samples
|
|
||||||
generated and `n` the number of classes. The first one contains the true prevalence values
|
|
||||||
for the samples generated while the second one contains the prevalence estimations
|
|
||||||
"""
|
|
||||||
if not inspect.isgenerator(gen_fn()):
|
|
||||||
raise ValueError('param "gen_fun" is not a callable returning a generator')
|
|
||||||
|
|
||||||
if not isinstance(eval_budget, int):
|
|
||||||
eval_budget = -1
|
|
||||||
|
|
||||||
true_prevalences, estim_prevalences = [], []
|
|
||||||
for sample_instances, true_prev in gen_fn():
|
|
||||||
true_prevalences.append(true_prev)
|
|
||||||
estim_prevalences.append(model.quantify(sample_instances))
|
|
||||||
eval_budget -= 1
|
|
||||||
if eval_budget == 0:
|
|
||||||
break
|
|
||||||
|
|
||||||
true_prevalences = np.asarray(true_prevalences)
|
|
||||||
estim_prevalences = np.asarray(estim_prevalences)
|
|
||||||
|
|
||||||
return true_prevalences, estim_prevalences
|
|
||||||
|
|
||||||
|
|
||||||
def _predict_from_indexes(
|
|
||||||
indexes,
|
|
||||||
model: BaseQuantifier,
|
|
||||||
test: LabelledCollection,
|
|
||||||
n_jobs=1,
|
|
||||||
verbose=False):
|
|
||||||
|
|
||||||
if model.aggregative: #isinstance(model, qp.method.aggregative.AggregativeQuantifier):
|
|
||||||
# print('\tinstance of aggregative-quantifier')
|
|
||||||
quantification_func = model.aggregate
|
|
||||||
if model.probabilistic: # isinstance(model, qp.method.aggregative.AggregativeProbabilisticQuantifier):
|
|
||||||
# print('\t\tinstance of probabilitstic-aggregative-quantifier')
|
|
||||||
preclassified_instances = model.posterior_probabilities(test.instances)
|
|
||||||
else:
|
|
||||||
# print('\t\tinstance of hard-aggregative-quantifier')
|
|
||||||
preclassified_instances = model.classify(test.instances)
|
|
||||||
test = LabelledCollection(preclassified_instances, test.labels)
|
|
||||||
else:
|
|
||||||
# print('\t\tinstance of base-quantifier')
|
|
||||||
quantification_func = model.quantify
|
|
||||||
|
|
||||||
def _predict_prevalences(index):
|
|
||||||
sample = test.sampling_from_index(index)
|
|
||||||
true_prevalence = sample.prevalence()
|
|
||||||
estim_prevalence = quantification_func(sample.instances)
|
|
||||||
return true_prevalence, estim_prevalence
|
|
||||||
|
|
||||||
pbar = tqdm(indexes, desc='[artificial sampling protocol] generating predictions') if verbose else indexes
|
|
||||||
results = qp.util.parallel(_predict_prevalences, pbar, n_jobs=n_jobs)
|
|
||||||
|
|
||||||
true_prevalences, estim_prevalences = zip(*results)
|
|
||||||
true_prevalences = np.asarray(true_prevalences)
|
|
||||||
estim_prevalences = np.asarray(estim_prevalences)
|
|
||||||
|
|
||||||
return true_prevalences, estim_prevalences
|
|
||||||
|
|
||||||
|
|
||||||
def artificial_prevalence_report(
|
|
||||||
model: BaseQuantifier,
|
|
||||||
test: LabelledCollection,
|
|
||||||
sample_size,
|
|
||||||
n_prevpoints=101,
|
|
||||||
repeats=1,
|
|
||||||
eval_budget: int = None,
|
|
||||||
n_jobs=1,
|
|
||||||
random_seed=42,
|
|
||||||
error_metrics:Iterable[Union[str,Callable]]='mae',
|
|
||||||
verbose=False):
|
|
||||||
"""
|
|
||||||
Generates an evaluation report for all samples generated according to the Artificial Prevalence Protocol (APP).
|
|
||||||
The APP consists of exploring a grid of prevalence values containing `n_prevalences` points (e.g.,
|
|
||||||
[0, 0.05, 0.1, 0.15, ..., 1], if `n_prevalences=21`), 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 `sample_size` will be considered). The number of samples for each valid
|
|
||||||
combination of prevalence values is indicated by `repeats`.
|
|
||||||
Te report takes the form of a
|
|
||||||
pandas' `dataframe <https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html>`_
|
|
||||||
in which the rows correspond to different samples, and the columns inform of the true prevalence values,
|
|
||||||
the estimated prevalence values, and the score obtained by each of the evaluation measures indicated.
|
|
||||||
|
|
||||||
:param model: the model in charge of generating the class prevalence estimations
|
|
||||||
:param test: the test set on which to perform APP
|
|
||||||
:param sample_size: integer, the size of the samples
|
|
||||||
:param n_prevpoints: integer, the number of different prevalences to sample (or set to None if eval_budget
|
|
||||||
is specified; default 101, i.e., steps of 1%)
|
|
||||||
:param repeats: integer, the number of repetitions for each prevalence (default 1)
|
|
||||||
:param eval_budget: integer, if specified, sets a ceil on the number of evaluations to perform. For example, if
|
|
||||||
there are 3 classes, `repeats=1`, and `eval_budget=20`, then `n_prevpoints` will be set to 5, since this
|
|
||||||
will generate 15 different prevalence vectors ([0, 0, 1], [0, 0.25, 0.75], [0, 0.5, 0.5] ... [1, 0, 0]) and
|
|
||||||
since setting `n_prevpoints=6` would produce more than 20 evaluations.
|
|
||||||
:param n_jobs: integer, number of jobs to be run in parallel (default 1)
|
|
||||||
:param random_seed: integer, allows to replicate the samplings. The seed is local to the method and does not affect
|
|
||||||
any other random process (default 42)
|
|
||||||
:param error_metrics: a string indicating the name of the error (as defined in :mod:`quapy.error`) or a
|
|
||||||
callable error function; optionally, a list of strings or callables can be indicated, if the results
|
|
||||||
are to be evaluated with more than one error metric. Default is "mae"
|
|
||||||
:param verbose: if True, shows a progress bar
|
|
||||||
:return: pandas' dataframe with rows corresponding to different samples, and with columns informing of the
|
|
||||||
true prevalence values, the estimated prevalence values, and the score obtained by each of the evaluation
|
|
||||||
measures indicated.
|
|
||||||
"""
|
|
||||||
|
|
||||||
true_prevs, estim_prevs = artificial_prevalence_prediction(
|
|
||||||
model, test, sample_size, n_prevpoints, repeats, eval_budget, n_jobs, random_seed, verbose
|
|
||||||
)
|
|
||||||
return _prevalence_report(true_prevs, estim_prevs, error_metrics)
|
|
||||||
|
|
||||||
|
|
||||||
def natural_prevalence_report(
|
|
||||||
model: BaseQuantifier,
|
|
||||||
test: LabelledCollection,
|
|
||||||
sample_size,
|
|
||||||
repeats=1,
|
|
||||||
n_jobs=1,
|
|
||||||
random_seed=42,
|
|
||||||
error_metrics:Iterable[Union[str,Callable]]='mae',
|
|
||||||
verbose=False):
|
|
||||||
"""
|
|
||||||
Generates an evaluation report for all samples generated according to the Natural Prevalence Protocol (NPP).
|
|
||||||
The NPP consists of drawing samples uniformly at random, therefore approximately preserving the natural
|
|
||||||
prevalence of the collection.
|
|
||||||
Te report takes the form of a
|
|
||||||
pandas' `dataframe <https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html>`_
|
|
||||||
in which the rows correspond to different samples, and the columns inform of the true prevalence values,
|
|
||||||
the estimated prevalence values, and the score obtained by each of the evaluation measures indicated.
|
|
||||||
|
|
||||||
:param model: the model in charge of generating the class prevalence estimations
|
|
||||||
:param test: the test set on which to perform NPP
|
|
||||||
:param sample_size: integer, the size of the samples
|
|
||||||
:param repeats: integer, the number of samples to generate
|
|
||||||
:param n_jobs: integer, number of jobs to be run in parallel (default 1)
|
|
||||||
:param random_seed: allows to replicate the samplings. The seed is local to the method and does not affect
|
|
||||||
any other random process (default 42)
|
|
||||||
:param error_metrics: a string indicating the name of the error (as defined in :mod:`quapy.error`) or a
|
|
||||||
callable error function; optionally, a list of strings or callables can be indicated, if the results
|
|
||||||
are to be evaluated with more than one error metric. Default is "mae"
|
|
||||||
:param verbose: if True, shows a progress bar
|
|
||||||
:return: a tuple containing two `np.ndarrays` of shape `(m,n,)` with `m` the number of samples
|
|
||||||
`(repeats)` and `n` the number of classes. The first one contains the true prevalence values
|
|
||||||
for the samples generated while the second one contains the prevalence estimations
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
true_prevs, estim_prevs = natural_prevalence_prediction(
|
|
||||||
model, test, sample_size, repeats, n_jobs, random_seed, verbose
|
|
||||||
)
|
|
||||||
return _prevalence_report(true_prevs, estim_prevs, error_metrics)
|
|
||||||
|
|
||||||
|
|
||||||
def gen_prevalence_report(model: BaseQuantifier, gen_fn: Callable, eval_budget=None,
|
|
||||||
error_metrics:Iterable[Union[str,Callable]]='mae'):
|
|
||||||
"""
|
|
||||||
GGenerates an evaluation report for a custom protocol defined as a generator function that yields
|
|
||||||
samples at each iteration. The sequence of samples is processed exhaustively if `eval_budget=None`
|
|
||||||
or up to the `eval_budget` iterations if specified.
|
|
||||||
Te report takes the form of a
|
|
||||||
pandas' `dataframe <https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html>`_
|
|
||||||
in which the rows correspond to different samples, and the columns inform of the true prevalence values,
|
|
||||||
the estimated prevalence values, and the score obtained by each of the evaluation measures indicated.
|
|
||||||
|
|
||||||
:param model: the model in charge of generating the class prevalence estimations
|
|
||||||
:param gen_fn: a generator function yielding one sample at each iteration
|
|
||||||
:param eval_budget: a maximum number of evaluations to run. Set to None (default) for exploring the
|
|
||||||
entire sequence
|
|
||||||
:return: a tuple containing two `np.ndarrays` of shape `(m,n,)` with `m` the number of samples
|
|
||||||
generated. The first one contains the true prevalence values
|
|
||||||
for the samples generated while the second one contains the prevalence estimations
|
|
||||||
"""
|
|
||||||
true_prevs, estim_prevs = gen_prevalence_prediction(model, gen_fn, eval_budget)
|
|
||||||
return _prevalence_report(true_prevs, estim_prevs, error_metrics)
|
|
||||||
|
|
||||||
|
|
||||||
def _prevalence_report(
|
|
||||||
true_prevs,
|
|
||||||
estim_prevs,
|
|
||||||
error_metrics: Iterable[Union[str, Callable]] = 'mae'):
|
|
||||||
|
|
||||||
if isinstance(error_metrics, str):
|
|
||||||
error_metrics = [error_metrics]
|
|
||||||
|
|
||||||
error_names = [e if isinstance(e, str) else e.__name__ for e in error_metrics]
|
|
||||||
error_funcs = [qp.error.from_name(e) if isinstance(e, str) else e for e in error_metrics]
|
|
||||||
assert all(hasattr(e, '__call__') for e in error_funcs), 'invalid error functions'
|
|
||||||
|
|
||||||
df = pd.DataFrame(columns=['true-prev', 'estim-prev'] + error_names)
|
|
||||||
for true_prev, estim_prev in zip(true_prevs, estim_prevs):
|
|
||||||
series = {'true-prev': true_prev, 'estim-prev': estim_prev}
|
|
||||||
for error_name, error_metric in zip(error_names, error_funcs):
|
|
||||||
score = error_metric(true_prev, estim_prev)
|
|
||||||
series[error_name] = score
|
|
||||||
df = df.append(series, ignore_index=True)
|
|
||||||
|
|
||||||
return df
|
|
||||||
|
|
||||||
|
|
||||||
def artificial_prevalence_protocol(
|
|
||||||
model: BaseQuantifier,
|
|
||||||
test: LabelledCollection,
|
|
||||||
sample_size,
|
|
||||||
n_prevpoints=101,
|
|
||||||
repeats=1,
|
|
||||||
eval_budget: int = None,
|
|
||||||
n_jobs=1,
|
|
||||||
random_seed=42,
|
|
||||||
error_metric:Union[str,Callable]='mae',
|
|
||||||
verbose=False):
|
|
||||||
"""
|
|
||||||
Generates samples according to the Artificial Prevalence Protocol (APP).
|
|
||||||
The APP consists of exploring a grid of prevalence values containing `n_prevalences` points (e.g.,
|
|
||||||
[0, 0.05, 0.1, 0.15, ..., 1], if `n_prevalences=21`), 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 `sample_size` will be considered). The number of samples for each valid
|
|
||||||
combination of prevalence values is indicated by `repeats`.
|
|
||||||
|
|
||||||
:param model: the model in charge of generating the class prevalence estimations
|
|
||||||
:param test: the test set on which to perform APP
|
|
||||||
:param sample_size: integer, the size of the samples
|
|
||||||
:param n_prevpoints: integer, the number of different prevalences to sample (or set to None if eval_budget
|
|
||||||
is specified; default 101, i.e., steps of 1%)
|
|
||||||
:param repeats: integer, the number of repetitions for each prevalence (default 1)
|
|
||||||
:param eval_budget: integer, if specified, sets a ceil on the number of evaluations to perform. For example, if
|
|
||||||
there are 3 classes, `repeats=1`, and `eval_budget=20`, then `n_prevpoints` will be set to 5, since this
|
|
||||||
will generate 15 different prevalence vectors ([0, 0, 1], [0, 0.25, 0.75], [0, 0.5, 0.5] ... [1, 0, 0]) and
|
|
||||||
since setting `n_prevpoints=6` would produce more than 20 evaluations.
|
|
||||||
:param n_jobs: integer, number of jobs to be run in parallel (default 1)
|
|
||||||
:param random_seed: integer, allows to replicate the samplings. The seed is local to the method and does not affect
|
|
||||||
any other random process (default 42)
|
|
||||||
:param error_metric: a string indicating the name of the error (as defined in :mod:`quapy.error`) or a
|
|
||||||
callable error function
|
|
||||||
:param verbose: set to True (default False) for displaying some information on standard output
|
|
||||||
:return: yields one sample at a time
|
|
||||||
"""
|
|
||||||
|
|
||||||
if isinstance(error_metric, str):
|
|
||||||
error_metric = qp.error.from_name(error_metric)
|
|
||||||
|
|
||||||
assert hasattr(error_metric, '__call__'), 'invalid error function'
|
|
||||||
|
|
||||||
true_prevs, estim_prevs = artificial_prevalence_prediction(
|
|
||||||
model, test, sample_size, n_prevpoints, repeats, eval_budget, n_jobs, random_seed, verbose
|
|
||||||
)
|
|
||||||
|
|
||||||
return error_metric(true_prevs, estim_prevs)
|
|
||||||
|
|
||||||
|
|
||||||
def natural_prevalence_protocol(
|
|
||||||
model: BaseQuantifier,
|
|
||||||
test: LabelledCollection,
|
|
||||||
sample_size,
|
|
||||||
repeats=1,
|
|
||||||
n_jobs=1,
|
|
||||||
random_seed=42,
|
|
||||||
error_metric:Union[str,Callable]='mae',
|
|
||||||
verbose=False):
|
|
||||||
"""
|
|
||||||
Generates samples according to the Natural Prevalence Protocol (NPP).
|
|
||||||
The NPP consists of drawing samples uniformly at random, therefore approximately preserving the natural
|
|
||||||
prevalence of the collection.
|
|
||||||
|
|
||||||
:param model: the model in charge of generating the class prevalence estimations
|
|
||||||
:param test: the test set on which to perform NPP
|
|
||||||
:param sample_size: integer, the size of the samples
|
|
||||||
:param repeats: integer, the number of samples to generate
|
|
||||||
:param n_jobs: integer, number of jobs to be run in parallel (default 1)
|
|
||||||
:param random_seed: allows to replicate the samplings. The seed is local to the method and does not affect
|
|
||||||
any other random process (default 42)
|
|
||||||
:param error_metric: a string indicating the name of the error (as defined in :mod:`quapy.error`) or a
|
|
||||||
callable error function
|
|
||||||
:param verbose: if True, shows a progress bar
|
|
||||||
:return: yields one sample at a time
|
|
||||||
"""
|
|
||||||
|
|
||||||
if isinstance(error_metric, str):
|
|
||||||
error_metric = qp.error.from_name(error_metric)
|
|
||||||
|
|
||||||
assert hasattr(error_metric, '__call__'), 'invalid error function'
|
|
||||||
|
|
||||||
true_prevs, estim_prevs = natural_prevalence_prediction(
|
|
||||||
model, test, sample_size, repeats, n_jobs, random_seed, verbose
|
|
||||||
)
|
|
||||||
|
|
||||||
return error_metric(true_prevs, estim_prevs)
|
|
||||||
|
|
||||||
|
|
||||||
def evaluate(model: BaseQuantifier, test_samples:Iterable[LabelledCollection], error_metric:Union[str, Callable], n_jobs:int=-1):
|
|
||||||
"""
|
|
||||||
Evaluates a model on a sequence of test samples in terms of a given error metric.
|
|
||||||
|
|
||||||
:param model: the model in charge of generating the class prevalence estimations
|
|
||||||
:param test_samples: an iterable yielding one sample at a time
|
|
||||||
:param error_metric: a string indicating the name of the error (as defined in :mod:`quapy.error`) or a
|
|
||||||
callable error function
|
|
||||||
:param n_jobs: integer, number of jobs to be run in parallel (default 1)
|
|
||||||
:return: the score obtained using `error_metric`
|
|
||||||
"""
|
|
||||||
if isinstance(error_metric, str):
|
|
||||||
error_metric = qp.error.from_name(error_metric)
|
|
||||||
scores = qp.util.parallel(_delayed_eval, ((model, Ti, error_metric) for Ti in test_samples), n_jobs=n_jobs)
|
|
||||||
return np.mean(scores)
|
|
||||||
|
|
||||||
|
|
||||||
def _delayed_eval(args):
|
|
||||||
model, test, error = args
|
|
||||||
prev_estim = model.quantify(test.instances)
|
|
||||||
prev_true = test.prevalence()
|
|
||||||
return error(prev_true, prev_estim)
|
|
||||||
|
|
||||||
|
|
||||||
def _check_num_evals(n_classes, n_prevpoints=None, eval_budget=None, repeats=1, verbose=False):
|
|
||||||
if n_prevpoints is None and eval_budget is None:
|
|
||||||
raise ValueError('either n_prevpoints or eval_budget has to be specified')
|
|
||||||
elif n_prevpoints is None:
|
|
||||||
assert eval_budget > 0, 'eval_budget must be a positive integer'
|
|
||||||
n_prevpoints = F.get_nprevpoints_approximation(eval_budget, n_classes, repeats)
|
|
||||||
eval_computations = F.num_prevalence_combinations(n_prevpoints, n_classes, repeats)
|
|
||||||
if verbose:
|
|
||||||
print(f'setting n_prevpoints={n_prevpoints} so that the number of '
|
|
||||||
f'evaluations ({eval_computations}) does not exceed the evaluation '
|
|
||||||
f'budget ({eval_budget})')
|
|
||||||
elif eval_budget is None:
|
|
||||||
eval_computations = F.num_prevalence_combinations(n_prevpoints, n_classes, repeats)
|
|
||||||
if verbose:
|
|
||||||
print(f'{eval_computations} evaluations will be performed for each '
|
|
||||||
f'combination of hyper-parameters')
|
|
||||||
else:
|
|
||||||
eval_computations = F.num_prevalence_combinations(n_prevpoints, n_classes, repeats)
|
|
||||||
if eval_computations > eval_budget:
|
|
||||||
n_prevpoints = F.get_nprevpoints_approximation(eval_budget, n_classes, repeats)
|
|
||||||
new_eval_computations = F.num_prevalence_combinations(n_prevpoints, n_classes, repeats)
|
|
||||||
if verbose:
|
|
||||||
print(f'the budget of evaluations would be exceeded with '
|
|
||||||
f'n_prevpoints={n_prevpoints}. Chaning to n_prevpoints={n_prevpoints}. This will produce '
|
|
||||||
f'{new_eval_computations} evaluation computations for each hyper-parameter combination.')
|
|
||||||
return n_prevpoints, eval_computations
|
|
||||||
|
|
|
@ -11,11 +11,6 @@ def from_name(err_name):
|
||||||
"""
|
"""
|
||||||
assert err_name in ERROR_NAMES, f'unknown error {err_name}'
|
assert err_name in ERROR_NAMES, f'unknown error {err_name}'
|
||||||
callable_error = globals()[err_name]
|
callable_error = globals()[err_name]
|
||||||
# if err_name in QUANTIFICATION_ERROR_SMOOTH_NAMES:
|
|
||||||
# eps = __check_eps()
|
|
||||||
# def bound_callable_error(y_true, y_pred):
|
|
||||||
# return callable_error(y_true, y_pred, eps)
|
|
||||||
# return bound_callable_error
|
|
||||||
return callable_error
|
return callable_error
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,7 @@ def HellingerDistance(P, Q):
|
||||||
The HD for two discrete distributions of `k` bins is defined as:
|
The HD for two discrete distributions of `k` bins is defined as:
|
||||||
|
|
||||||
.. math::
|
.. math::
|
||||||
HD(P,Q) = \\frac{ 1 }{ \\sqrt{ 2 } } \\sqrt{ \sum_{i=1}^k ( \\sqrt{p_i} - \\sqrt{q_i} )^2 }
|
HD(P,Q) = \\frac{ 1 }{ \\sqrt{ 2 } } \\sqrt{ \\sum_{i=1}^k ( \\sqrt{p_i} - \\sqrt{q_i} )^2 }
|
||||||
|
|
||||||
:param P: real-valued array-like of shape `(k,)` representing a discrete distribution
|
:param P: real-valued array-like of shape `(k,)` representing a discrete distribution
|
||||||
:param Q: real-valued array-like of shape `(k,)` representing a discrete distribution
|
:param Q: real-valued array-like of shape `(k,)` representing a discrete distribution
|
||||||
|
@ -78,11 +78,21 @@ def HellingerDistance(P, Q):
|
||||||
"""
|
"""
|
||||||
return np.sqrt(np.sum((np.sqrt(P) - np.sqrt(Q))**2))
|
return np.sqrt(np.sum((np.sqrt(P) - np.sqrt(Q))**2))
|
||||||
|
|
||||||
|
|
||||||
def TopsoeDistance(P, Q, epsilon=1e-20):
|
def TopsoeDistance(P, Q, epsilon=1e-20):
|
||||||
""" Topsoe
|
|
||||||
"""
|
"""
|
||||||
return np.sum(P*np.log((2*P+epsilon)/(P+Q+epsilon)) +
|
Topsoe distance between two (discretized) distributions `P` and `Q`.
|
||||||
Q*np.log((2*Q+epsilon)/(P+Q+epsilon)))
|
The Topsoe distance for two discrete distributions of `k` bins is defined as:
|
||||||
|
|
||||||
|
.. math::
|
||||||
|
Topsoe(P,Q) = \\sum_{i=1}^k \\left( p_i \\log\\left(\\frac{ 2 p_i + \\epsilon }{ p_i+q_i+\\epsilon }\\right) +
|
||||||
|
q_i \\log\\left(\\frac{ 2 q_i + \\epsilon }{ p_i+q_i+\\epsilon }\\right) \\right)
|
||||||
|
|
||||||
|
:param P: real-valued array-like of shape `(k,)` representing a discrete distribution
|
||||||
|
:param Q: real-valued array-like of shape `(k,)` representing a discrete distribution
|
||||||
|
:return: float
|
||||||
|
"""
|
||||||
|
return np.sum(P*np.log((2*P+epsilon)/(P+Q+epsilon)) + Q*np.log((2*Q+epsilon)/(P+Q+epsilon)))
|
||||||
|
|
||||||
|
|
||||||
def uniform_prevalence_sampling(n_classes, size=1):
|
def uniform_prevalence_sampling(n_classes, size=1):
|
||||||
|
@ -136,7 +146,6 @@ def adjusted_quantification(prevalence_estim, tpr, fpr, clip=True):
|
||||||
.. math::
|
.. math::
|
||||||
ACC(p) = \\frac{ p - fpr }{ tpr - fpr }
|
ACC(p) = \\frac{ p - fpr }{ tpr - fpr }
|
||||||
|
|
||||||
|
|
||||||
:param prevalence_estim: float, the estimated value for the positive class
|
:param prevalence_estim: float, the estimated value for the positive class
|
||||||
:param tpr: float, the true positive rate of the classifier
|
:param tpr: float, the true positive rate of the classifier
|
||||||
:param fpr: float, the false positive rate of the classifier
|
:param fpr: float, the false positive rate of the classifier
|
||||||
|
@ -230,7 +239,7 @@ def get_nprevpoints_approximation(combinations_budget:int, n_classes:int, n_repe
|
||||||
that the number of valid prevalence values generated as combinations of prevalence points (points in a
|
that the number of valid prevalence values generated as combinations of prevalence points (points in a
|
||||||
`n_classes`-dimensional simplex) do not exceed combinations_budget.
|
`n_classes`-dimensional simplex) do not exceed combinations_budget.
|
||||||
|
|
||||||
:param combinations_budget: integer, maximum number of combinatios allowed
|
:param combinations_budget: integer, maximum number of combinations allowed
|
||||||
:param n_classes: integer, number of classes
|
:param n_classes: integer, number of classes
|
||||||
:param n_repeats: integer, number of repetitions for each prevalence combination
|
:param n_repeats: integer, number of repetitions for each prevalence combination
|
||||||
:return: the largest number of prevalence points that generate less than combinations_budget valid prevalences
|
:return: the largest number of prevalence points that generate less than combinations_budget valid prevalences
|
||||||
|
@ -248,6 +257,7 @@ def get_nprevpoints_approximation(combinations_budget:int, n_classes:int, n_repe
|
||||||
def check_prevalence_vector(p, raise_exception=False, toleranze=1e-08):
|
def check_prevalence_vector(p, raise_exception=False, toleranze=1e-08):
|
||||||
"""
|
"""
|
||||||
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.
|
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.
|
||||||
|
|
||||||
:param p: the prevalence vector to check
|
:param p: the prevalence vector to check
|
||||||
:return: True if `p` is valid, False otherwise
|
:return: True if `p` is valid, False otherwise
|
||||||
"""
|
"""
|
||||||
|
@ -265,3 +275,4 @@ def check_prevalence_vector(p, raise_exception=False, toleranze=1e-08):
|
||||||
raise ValueError('the prevalence vector does not sum up to 1')
|
raise ValueError('the prevalence vector does not sum up to 1')
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
|
@ -76,7 +76,7 @@ class AggregativeQuantifier(BaseQuantifier):
|
||||||
by the classifier.
|
by the classifier.
|
||||||
|
|
||||||
:param instances: array-like
|
:param instances: array-like
|
||||||
:return: `np.ndarray` of shape `(self.n_classes_,)` with class prevalence estimates.
|
:return: `np.ndarray` of shape `(n_classes)` with class prevalence estimates.
|
||||||
"""
|
"""
|
||||||
classif_predictions = self.classify(instances)
|
classif_predictions = self.classify(instances)
|
||||||
return self.aggregate(classif_predictions)
|
return self.aggregate(classif_predictions)
|
||||||
|
@ -87,7 +87,7 @@ class AggregativeQuantifier(BaseQuantifier):
|
||||||
Implements the aggregation of label predictions.
|
Implements the aggregation of label predictions.
|
||||||
|
|
||||||
:param classif_predictions: `np.ndarray` of label predictions
|
:param classif_predictions: `np.ndarray` of label predictions
|
||||||
:return: `np.ndarray` of shape `(self.n_classes_,)` with class prevalence estimates.
|
:return: `np.ndarray` of shape `(n_classes,)` with class prevalence estimates.
|
||||||
"""
|
"""
|
||||||
...
|
...
|
||||||
|
|
||||||
|
@ -113,19 +113,6 @@ class AggregativeProbabilisticQuantifier(AggregativeQuantifier):
|
||||||
def classify(self, instances):
|
def classify(self, instances):
|
||||||
return self.classifier.predict_proba(instances)
|
return self.classifier.predict_proba(instances)
|
||||||
|
|
||||||
# def set_params(self, **parameters):
|
|
||||||
# if isinstance(self.classifier, CalibratedClassifierCV):
|
|
||||||
# if self.classifier.get_params().get('base_estimator') == 'deprecated':
|
|
||||||
# key_prefix = 'estimator__' # this has changed in the newer versions of sklearn
|
|
||||||
# else:
|
|
||||||
# key_prefix = 'base_estimator__'
|
|
||||||
# parameters = {key_prefix + k: v for k, v in parameters.items()}
|
|
||||||
# elif isinstance(self.classifier, RecalibratedClassifier):
|
|
||||||
# parameters = {'estimator__' + k: v for k, v in parameters.items()}
|
|
||||||
#
|
|
||||||
# self.classifier.set_params(**parameters)
|
|
||||||
# return self
|
|
||||||
|
|
||||||
|
|
||||||
# Helper
|
# Helper
|
||||||
# ------------------------------------
|
# ------------------------------------
|
||||||
|
@ -198,7 +185,7 @@ def cross_generate_predictions(
|
||||||
n_jobs
|
n_jobs
|
||||||
):
|
):
|
||||||
|
|
||||||
n_jobs = qp.get_njobs(n_jobs)
|
n_jobs = qp._get_njobs(n_jobs)
|
||||||
|
|
||||||
if isinstance(val_split, int):
|
if isinstance(val_split, int):
|
||||||
assert fit_classifier == True, \
|
assert fit_classifier == True, \
|
||||||
|
@ -305,7 +292,7 @@ class CC(AggregativeQuantifier):
|
||||||
Computes class prevalence estimates by counting the prevalence of each of the predicted labels.
|
Computes class prevalence estimates by counting the prevalence of each of the predicted labels.
|
||||||
|
|
||||||
:param classif_predictions: array-like with label predictions
|
:param classif_predictions: array-like with label predictions
|
||||||
:return: `np.ndarray` of shape `(self.n_classes_,)` with class prevalence estimates.
|
:return: `np.ndarray` of shape `(n_classes,)` with class prevalence estimates.
|
||||||
"""
|
"""
|
||||||
return F.prevalence_from_labels(classif_predictions, self.classes_)
|
return F.prevalence_from_labels(classif_predictions, self.classes_)
|
||||||
|
|
||||||
|
@ -328,7 +315,7 @@ class ACC(AggregativeQuantifier):
|
||||||
def __init__(self, classifier: BaseEstimator, val_split=0.4, n_jobs=None):
|
def __init__(self, classifier: BaseEstimator, val_split=0.4, n_jobs=None):
|
||||||
self.classifier = classifier
|
self.classifier = classifier
|
||||||
self.val_split = val_split
|
self.val_split = val_split
|
||||||
self.n_jobs = qp.get_njobs(n_jobs)
|
self.n_jobs = qp._get_njobs(n_jobs)
|
||||||
|
|
||||||
def fit(self, data: LabelledCollection, fit_classifier=True, val_split: Union[float, int, LabelledCollection] = None):
|
def fit(self, data: LabelledCollection, fit_classifier=True, val_split: Union[float, int, LabelledCollection] = None):
|
||||||
"""
|
"""
|
||||||
|
@ -435,7 +422,7 @@ class PACC(AggregativeProbabilisticQuantifier):
|
||||||
def __init__(self, classifier: BaseEstimator, val_split=0.4, n_jobs=None):
|
def __init__(self, classifier: BaseEstimator, val_split=0.4, n_jobs=None):
|
||||||
self.classifier = classifier
|
self.classifier = classifier
|
||||||
self.val_split = val_split
|
self.val_split = val_split
|
||||||
self.n_jobs = qp.get_njobs(n_jobs)
|
self.n_jobs = qp._get_njobs(n_jobs)
|
||||||
|
|
||||||
def fit(self, data: LabelledCollection, fit_classifier=True, val_split: Union[float, int, LabelledCollection] = None):
|
def fit(self, data: LabelledCollection, fit_classifier=True, val_split: Union[float, int, LabelledCollection] = None):
|
||||||
"""
|
"""
|
||||||
|
@ -660,6 +647,20 @@ class HDy(AggregativeProbabilisticQuantifier, BinaryQuantifier):
|
||||||
return np.asarray([1 - class1_prev, class1_prev])
|
return np.asarray([1 - class1_prev, class1_prev])
|
||||||
|
|
||||||
|
|
||||||
|
def _get_divergence(divergence: Union[str, Callable]):
|
||||||
|
if isinstance(divergence, str):
|
||||||
|
if divergence=='HD':
|
||||||
|
return F.HellingerDistance
|
||||||
|
elif divergence=='topsoe':
|
||||||
|
return F.TopsoeDistance
|
||||||
|
else:
|
||||||
|
raise ValueError(f'unknown divergence {divergence}')
|
||||||
|
elif callable(divergence):
|
||||||
|
return divergence
|
||||||
|
else:
|
||||||
|
raise ValueError(f'argument "divergence" not understood; use a str or a callable function')
|
||||||
|
|
||||||
|
|
||||||
class DyS(AggregativeProbabilisticQuantifier, BinaryQuantifier):
|
class DyS(AggregativeProbabilisticQuantifier, BinaryQuantifier):
|
||||||
"""
|
"""
|
||||||
`DyS framework <https://ojs.aaai.org/index.php/AAAI/article/view/4376>`_ (DyS).
|
`DyS framework <https://ojs.aaai.org/index.php/AAAI/article/view/4376>`_ (DyS).
|
||||||
|
@ -765,25 +766,13 @@ class SMM(AggregativeProbabilisticQuantifier, BinaryQuantifier):
|
||||||
|
|
||||||
return np.asarray([1 - class1_prev, class1_prev])
|
return np.asarray([1 - class1_prev, class1_prev])
|
||||||
|
|
||||||
def _get_divergence(divergence: Union[str, Callable]):
|
|
||||||
if isinstance(divergence, str):
|
|
||||||
if divergence=='HD':
|
|
||||||
return F.HellingerDistance
|
|
||||||
elif divergence=='topsoe':
|
|
||||||
return F.TopsoeDistance
|
|
||||||
else:
|
|
||||||
raise ValueError(f'unknown divergence {divergence}')
|
|
||||||
elif callable(divergence):
|
|
||||||
return divergence
|
|
||||||
else:
|
|
||||||
raise ValueError(f'argument "divergence" not understood; use a str or a callable function')
|
|
||||||
|
|
||||||
class DistributionMatching(AggregativeProbabilisticQuantifier):
|
class DistributionMatching(AggregativeProbabilisticQuantifier):
|
||||||
"""
|
"""
|
||||||
Generic Distribution Matching quantifier for binary or multiclass quantification.
|
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.
|
This implementation takes the number of bins, the divergence, and the possibility to work on CDF as hyperparameters.
|
||||||
|
|
||||||
:param classifier: a sklearn's Estimator that generates a probabilistic classifier
|
:param classifier: a `sklearn`'s Estimator that generates a probabilistic classifier
|
||||||
:param val_split: indicates the proportion of data to be used as a stratified held-out validation set to model the
|
:param val_split: indicates the proportion of data to be used as a stratified held-out validation set to model the
|
||||||
validation distribution.
|
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, default 0.4), representing a proportion of
|
||||||
|
@ -799,7 +788,6 @@ class DistributionMatching(AggregativeProbabilisticQuantifier):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, classifier, val_split=0.4, nbins=8, divergence: Union[str, Callable]='HD', cdf=False, n_jobs=None):
|
def __init__(self, classifier, val_split=0.4, nbins=8, divergence: Union[str, Callable]='HD', cdf=False, n_jobs=None):
|
||||||
|
|
||||||
self.classifier = classifier
|
self.classifier = classifier
|
||||||
self.val_split = val_split
|
self.val_split = val_split
|
||||||
self.nbins = nbins
|
self.nbins = nbins
|
||||||
|
@ -1020,7 +1008,7 @@ class ThresholdOptimization(AggregativeQuantifier, BinaryQuantifier):
|
||||||
def __init__(self, classifier: BaseEstimator, val_split=0.4, n_jobs=None):
|
def __init__(self, classifier: BaseEstimator, val_split=0.4, n_jobs=None):
|
||||||
self.classifier = classifier
|
self.classifier = classifier
|
||||||
self.val_split = val_split
|
self.val_split = val_split
|
||||||
self.n_jobs = qp.get_njobs(n_jobs)
|
self.n_jobs = qp._get_njobs(n_jobs)
|
||||||
|
|
||||||
def fit(self, data: LabelledCollection, fit_classifier=True, val_split: Union[float, int, LabelledCollection] = None):
|
def fit(self, data: LabelledCollection, fit_classifier=True, val_split: Union[float, int, LabelledCollection] = None):
|
||||||
self._check_binary(data, "Threshold Optimization")
|
self._check_binary(data, "Threshold Optimization")
|
||||||
|
@ -1277,7 +1265,7 @@ class OneVsAll(AggregativeQuantifier):
|
||||||
assert isinstance(self.binary_quantifier, AggregativeQuantifier), \
|
assert isinstance(self.binary_quantifier, AggregativeQuantifier), \
|
||||||
f'{self.binary_quantifier} does not seem to be of type Aggregative'
|
f'{self.binary_quantifier} does not seem to be of type Aggregative'
|
||||||
self.binary_quantifier = binary_quantifier
|
self.binary_quantifier = binary_quantifier
|
||||||
self.n_jobs = qp.get_njobs(n_jobs)
|
self.n_jobs = qp._get_njobs(n_jobs)
|
||||||
|
|
||||||
def fit(self, data: LabelledCollection, fit_classifier=True):
|
def fit(self, data: LabelledCollection, fit_classifier=True):
|
||||||
assert not data.binary, \
|
assert not data.binary, \
|
||||||
|
|
|
@ -32,29 +32,10 @@ class BaseQuantifier(BaseEstimator):
|
||||||
Generate class prevalence estimates for the sample's instances
|
Generate class prevalence estimates for the sample's instances
|
||||||
|
|
||||||
:param instances: array-like
|
:param instances: array-like
|
||||||
:return: `np.ndarray` of shape `(self.n_classes_,)` with class prevalence estimates.
|
:return: `np.ndarray` of shape `(n_classes,)` with class prevalence estimates.
|
||||||
"""
|
"""
|
||||||
...
|
...
|
||||||
|
|
||||||
# @abstractmethod
|
|
||||||
# def set_params(self, **parameters):
|
|
||||||
# """
|
|
||||||
# Set the parameters of the quantifier.
|
|
||||||
#
|
|
||||||
# :param parameters: dictionary of param-value pairs
|
|
||||||
# """
|
|
||||||
# ...
|
|
||||||
#
|
|
||||||
# @abstractmethod
|
|
||||||
# def get_params(self, deep=True):
|
|
||||||
# """
|
|
||||||
# Return the current parameters of the quantifier.
|
|
||||||
#
|
|
||||||
# :param deep: for compatibility with sklearn
|
|
||||||
# :return: a dictionary of param-value pairs
|
|
||||||
# """
|
|
||||||
# ...
|
|
||||||
|
|
||||||
|
|
||||||
class BinaryQuantifier(BaseQuantifier):
|
class BinaryQuantifier(BaseQuantifier):
|
||||||
"""
|
"""
|
||||||
|
@ -77,7 +58,7 @@ class OneVsAllGeneric:
|
||||||
assert isinstance(binary_quantifier, BaseQuantifier), \
|
assert isinstance(binary_quantifier, BaseQuantifier), \
|
||||||
f'{binary_quantifier} does not seem to be a Quantifier'
|
f'{binary_quantifier} does not seem to be a Quantifier'
|
||||||
self.binary_quantifier = binary_quantifier
|
self.binary_quantifier = binary_quantifier
|
||||||
self.n_jobs = qp.get_njobs(n_jobs)
|
self.n_jobs = qp._get_njobs(n_jobs)
|
||||||
|
|
||||||
def fit(self, data: LabelledCollection, **kwargs):
|
def fit(self, data: LabelledCollection, **kwargs):
|
||||||
assert not data.binary, \
|
assert not data.binary, \
|
||||||
|
|
|
@ -84,7 +84,7 @@ class Ensemble(BaseQuantifier):
|
||||||
self.red_size = red_size
|
self.red_size = red_size
|
||||||
self.policy = policy
|
self.policy = policy
|
||||||
self.val_split = val_split
|
self.val_split = val_split
|
||||||
self.n_jobs = qp.get_njobs(n_jobs)
|
self.n_jobs = qp._get_njobs(n_jobs)
|
||||||
self.post_proba_fn = None
|
self.post_proba_fn = None
|
||||||
self.verbose = verbose
|
self.verbose = verbose
|
||||||
self.max_sample_size = max_sample_size
|
self.max_sample_size = max_sample_size
|
||||||
|
@ -165,8 +165,10 @@ class Ensemble(BaseQuantifier):
|
||||||
`Ensemble(Q(GridSearchCV(l)))` with `Q` a quantifier class that has a classifier `l` optimized for
|
`Ensemble(Q(GridSearchCV(l)))` with `Q` a quantifier class that has a classifier `l` optimized for
|
||||||
classification (not recommended).
|
classification (not recommended).
|
||||||
|
|
||||||
|
:param deep: for compatibility with scikit-learn
|
||||||
:return: raises an Exception
|
:return: raises an Exception
|
||||||
"""
|
"""
|
||||||
|
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
def _accuracy_policy(self, error_name):
|
def _accuracy_policy(self, error_name):
|
||||||
|
|
|
@ -21,7 +21,6 @@ class MaximumLikelihoodPrevalenceEstimation(BaseQuantifier):
|
||||||
:param data: the training sample
|
:param data: the training sample
|
||||||
:return: self
|
:return: self
|
||||||
"""
|
"""
|
||||||
self._classes_ = data.classes_
|
|
||||||
self.estimated_prevalence = data.prevalence()
|
self.estimated_prevalence = data.prevalence()
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
@ -34,29 +33,3 @@ class MaximumLikelihoodPrevalenceEstimation(BaseQuantifier):
|
||||||
"""
|
"""
|
||||||
return self.estimated_prevalence
|
return self.estimated_prevalence
|
||||||
|
|
||||||
@property
|
|
||||||
def classes_(self):
|
|
||||||
"""
|
|
||||||
Number of classes
|
|
||||||
|
|
||||||
:return: integer
|
|
||||||
"""
|
|
||||||
|
|
||||||
return self._classes_
|
|
||||||
|
|
||||||
def get_params(self, deep=True):
|
|
||||||
"""
|
|
||||||
Does nothing, since this learner has no parameters.
|
|
||||||
|
|
||||||
:param deep: for compatibility with sklearn
|
|
||||||
:return: `None`
|
|
||||||
"""
|
|
||||||
return None
|
|
||||||
|
|
||||||
def set_params(self, **parameters):
|
|
||||||
"""
|
|
||||||
Does nothing, since this learner has no parameters.
|
|
||||||
|
|
||||||
:param parameters: dictionary of param-value pairs (ignored)
|
|
||||||
"""
|
|
||||||
pass
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ class GridSearchQ(BaseQuantifier):
|
||||||
self.protocol = protocol
|
self.protocol = protocol
|
||||||
self.refit = refit
|
self.refit = refit
|
||||||
self.timeout = timeout
|
self.timeout = timeout
|
||||||
self.n_jobs = qp.get_njobs(n_jobs)
|
self.n_jobs = qp._get_njobs(n_jobs)
|
||||||
self.verbose = verbose
|
self.verbose = verbose
|
||||||
self.__check_error(error)
|
self.__check_error(error)
|
||||||
assert isinstance(protocol, AbstractProtocol), 'unknown protocol'
|
assert isinstance(protocol, AbstractProtocol), 'unknown protocol'
|
||||||
|
|
|
@ -11,13 +11,17 @@ from glob import glob
|
||||||
|
|
||||||
|
|
||||||
class AbstractProtocol(metaclass=ABCMeta):
|
class AbstractProtocol(metaclass=ABCMeta):
|
||||||
|
"""
|
||||||
|
Abstract parent class for sample generation protocols.
|
||||||
|
"""
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def __call__(self):
|
def __call__(self):
|
||||||
"""
|
"""
|
||||||
Implements the protocol. Yields one sample at a time
|
Implements the protocol. Yields one sample at a time along with its prevalence
|
||||||
|
|
||||||
:return: yields one sample at a time
|
:return: yields a tuple `(sample, prev) at a time, where `sample` is a set of instances
|
||||||
|
and in which `prev` is an `nd.array` with the class prevalence values
|
||||||
"""
|
"""
|
||||||
...
|
...
|
||||||
|
|
||||||
|
@ -32,9 +36,10 @@ class AbstractProtocol(metaclass=ABCMeta):
|
||||||
|
|
||||||
class AbstractStochasticSeededProtocol(AbstractProtocol):
|
class AbstractStochasticSeededProtocol(AbstractProtocol):
|
||||||
"""
|
"""
|
||||||
An AbstractStochasticSeededProtocol is a protocol that generates, via any random procedure (e.g.,
|
An `AbstractStochasticSeededProtocol` is a protocol that generates, via any random procedure (e.g.,
|
||||||
via random sapling), sequences of `LabelledCollection` samples. The protocol abstraction enforces
|
via random sampling), sequences of :class:`quapy.data.base.LabelledCollection` samples.
|
||||||
the object to be instantiated using a seed, so that the sequence can be completely replicated.
|
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
|
In order to make this functionality possible, the classes extending this abstraction need to
|
||||||
implement only two functions, :meth:`samples_parameters` which generates all the parameters
|
implement only two functions, :meth:`samples_parameters` which generates all the parameters
|
||||||
needed for extracting the samples, and :meth:`sample` that, given some parameters as input,
|
needed for extracting the samples, and :meth:`sample` that, given some parameters as input,
|
||||||
|
@ -128,7 +133,8 @@ class APP(AbstractStochasticSeededProtocol, OnLabelledCollectionProtocol):
|
||||||
combination of prevalence values is indicated by `repeats`.
|
combination of prevalence values is indicated by `repeats`.
|
||||||
|
|
||||||
:param data: a `LabelledCollection` from which the samples will be drawn
|
:param data: a `LabelledCollection` from which the samples will be drawn
|
||||||
:param sample_size: integer, number of instances in each sample
|
:param sample_size: 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.
|
||||||
:param n_prevalences: the number of equidistant prevalence points to extract from the [0,1] interval for the
|
:param n_prevalences: the number of equidistant prevalence points to extract from the [0,1] interval for the
|
||||||
grid (default is 21)
|
grid (default is 21)
|
||||||
:param repeats: number of copies for each valid prevalence vector (default is 10)
|
:param repeats: number of copies for each valid prevalence vector (default is 10)
|
||||||
|
@ -138,10 +144,11 @@ class APP(AbstractStochasticSeededProtocol, OnLabelledCollectionProtocol):
|
||||||
to "labelled_collection" to get instead instances of LabelledCollection
|
to "labelled_collection" to get instead instances of LabelledCollection
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, data:LabelledCollection, sample_size, n_prevalences=21, repeats=10, smooth_limits_epsilon=0, random_state=None, return_type='sample_prev'):
|
def __init__(self, data:LabelledCollection, sample_size=None, n_prevalences=21, repeats=10,
|
||||||
|
smooth_limits_epsilon=0, random_state=None, return_type='sample_prev'):
|
||||||
super(APP, self).__init__(random_state)
|
super(APP, self).__init__(random_state)
|
||||||
self.data = data
|
self.data = data
|
||||||
self.sample_size = sample_size
|
self.sample_size = qp._get_sample_size(sample_size)
|
||||||
self.n_prevalences = n_prevalences
|
self.n_prevalences = n_prevalences
|
||||||
self.repeats = repeats
|
self.repeats = repeats
|
||||||
self.smooth_limits_epsilon = smooth_limits_epsilon
|
self.smooth_limits_epsilon = smooth_limits_epsilon
|
||||||
|
@ -191,17 +198,18 @@ class NPP(AbstractStochasticSeededProtocol, OnLabelledCollectionProtocol):
|
||||||
samples uniformly at random, therefore approximately preserving the natural prevalence of the collection.
|
samples uniformly at random, therefore approximately preserving the natural prevalence of the collection.
|
||||||
|
|
||||||
:param data: a `LabelledCollection` from which the samples will be drawn
|
:param data: a `LabelledCollection` from which the samples will be drawn
|
||||||
:param sample_size: integer, the number of instances in each sample
|
:param sample_size: 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.
|
||||||
:param repeats: the number of samples to generate. Default is 100.
|
:param repeats: the number of samples to generate. Default is 100.
|
||||||
:param random_state: allows replicating samples across runs (default None)
|
:param random_state: allows replicating samples across runs (default None)
|
||||||
:param return_type: set to "sample_prev" (default) to get the pairs of (sample, prevalence) at each iteration, or
|
:param return_type: 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
|
to "labelled_collection" to get instead instances of LabelledCollection
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, data:LabelledCollection, sample_size, repeats=100, random_state=None, return_type='sample_prev'):
|
def __init__(self, data:LabelledCollection, sample_size=None, repeats=100, random_state=None, return_type='sample_prev'):
|
||||||
super(NPP, self).__init__(random_state)
|
super(NPP, self).__init__(random_state)
|
||||||
self.data = data
|
self.data = data
|
||||||
self.sample_size = sample_size
|
self.sample_size = qp._get_sample_size(sample_size)
|
||||||
self.repeats = repeats
|
self.repeats = repeats
|
||||||
self.random_state = random_state
|
self.random_state = random_state
|
||||||
self.collator = OnLabelledCollectionProtocol.get_collator(return_type)
|
self.collator = OnLabelledCollectionProtocol.get_collator(return_type)
|
||||||
|
@ -230,17 +238,19 @@ class USimplexPP(AbstractStochasticSeededProtocol, OnLabelledCollectionProtocol)
|
||||||
combinations of the grid values of APP makes this endeavour intractable.
|
combinations of the grid values of APP makes this endeavour intractable.
|
||||||
|
|
||||||
:param data: a `LabelledCollection` from which the samples will be drawn
|
:param data: a `LabelledCollection` from which the samples will be drawn
|
||||||
:param sample_size: integer, the number of instances in each sample
|
:param sample_size: 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.
|
||||||
:param repeats: the number of samples to generate. Default is 100.
|
:param repeats: the number of samples to generate. Default is 100.
|
||||||
:param random_state: allows replicating samples across runs (default None)
|
:param random_state: allows replicating samples across runs (default None)
|
||||||
:param return_type: set to "sample_prev" (default) to get the pairs of (sample, prevalence) at each iteration, or
|
:param return_type: 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
|
to "labelled_collection" to get instead instances of LabelledCollection
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, data: LabelledCollection, sample_size, repeats=100, random_state=None, return_type='sample_prev'):
|
def __init__(self, data: LabelledCollection, sample_size=None, repeats=100, random_state=None,
|
||||||
|
return_type='sample_prev'):
|
||||||
super(USimplexPP, self).__init__(random_state)
|
super(USimplexPP, self).__init__(random_state)
|
||||||
self.data = data
|
self.data = data
|
||||||
self.sample_size = sample_size
|
self.sample_size = qp._get_sample_size(sample_size)
|
||||||
self.repeats = repeats
|
self.repeats = repeats
|
||||||
self.random_state = random_state
|
self.random_state = random_state
|
||||||
self.collator = OnLabelledCollectionProtocol.get_collator(return_type)
|
self.collator = OnLabelledCollectionProtocol.get_collator(return_type)
|
||||||
|
@ -259,32 +269,7 @@ class USimplexPP(AbstractStochasticSeededProtocol, OnLabelledCollectionProtocol)
|
||||||
return self.repeats
|
return self.repeats
|
||||||
|
|
||||||
|
|
||||||
# class LoadSamplesFromDirectory(AbstractProtocol):
|
class DomainMixer(AbstractStochasticSeededProtocol):
|
||||||
#
|
|
||||||
# def __init__(self, folder_path, loader_fn, classes=None, **loader_kwargs):
|
|
||||||
# assert exists(folder_path), f'folder {folder_path} does not exist'
|
|
||||||
# assert callable(loader_fn), f'the passed load_fn does not seem to be callable'
|
|
||||||
# self.folder_path = folder_path
|
|
||||||
# self.loader_fn = loader_fn
|
|
||||||
# self.classes = classes
|
|
||||||
# self.loader_kwargs = loader_kwargs
|
|
||||||
# self._list_files = None
|
|
||||||
#
|
|
||||||
# def __call__(self):
|
|
||||||
# for file in self.list_files:
|
|
||||||
# yield LabelledCollection.load(file, loader_func=self.loader_fn, classes=self.classes, **self.loader_kwargs)
|
|
||||||
#
|
|
||||||
# @property
|
|
||||||
# def list_files(self):
|
|
||||||
# if self._list_files is None:
|
|
||||||
# self._list_files = sorted(glob(self.folder_path, '*'))
|
|
||||||
# return self._list_files
|
|
||||||
#
|
|
||||||
# def total(self):
|
|
||||||
# return len(self.list_files)
|
|
||||||
|
|
||||||
|
|
||||||
class CovariateShiftPP(AbstractStochasticSeededProtocol):
|
|
||||||
"""
|
"""
|
||||||
Generates mixtures of two domains (A and B) at controlled rates, but preserving the original class prevalence.
|
Generates mixtures of two domains (A and B) at controlled rates, but preserving the original class prevalence.
|
||||||
|
|
||||||
|
@ -311,10 +296,10 @@ class CovariateShiftPP(AbstractStochasticSeededProtocol):
|
||||||
mixture_points=11,
|
mixture_points=11,
|
||||||
random_state=None,
|
random_state=None,
|
||||||
return_type='sample_prev'):
|
return_type='sample_prev'):
|
||||||
super(CovariateShiftPP, self).__init__(random_state)
|
super(DomainMixer, self).__init__(random_state)
|
||||||
self.A = domainA
|
self.A = domainA
|
||||||
self.B = domainB
|
self.B = domainB
|
||||||
self.sample_size = sample_size
|
self.sample_size = qp._get_sample_size(sample_size)
|
||||||
self.repeats = repeats
|
self.repeats = repeats
|
||||||
if prevalence is None:
|
if prevalence is None:
|
||||||
self.prevalence = domainA.prevalence()
|
self.prevalence = domainA.prevalence()
|
||||||
|
|
|
@ -4,6 +4,7 @@ from sklearn.linear_model import LogisticRegression
|
||||||
from sklearn.svm import LinearSVC
|
from sklearn.svm import LinearSVC
|
||||||
|
|
||||||
import quapy as qp
|
import quapy as qp
|
||||||
|
from quapy.method.base import BinaryQuantifier
|
||||||
from quapy.data import Dataset, LabelledCollection
|
from quapy.data import Dataset, LabelledCollection
|
||||||
from quapy.method import AGGREGATIVE_METHODS, NON_AGGREGATIVE_METHODS, EXPLICIT_LOSS_MINIMIZATION_METHODS
|
from quapy.method import AGGREGATIVE_METHODS, NON_AGGREGATIVE_METHODS, EXPLICIT_LOSS_MINIMIZATION_METHODS
|
||||||
from quapy.method.aggregative import ACC, PACC, HDy
|
from quapy.method.aggregative import ACC, PACC, HDy
|
||||||
|
@ -21,7 +22,7 @@ learners = [LogisticRegression, LinearSVC]
|
||||||
def test_aggregative_methods(dataset: Dataset, aggregative_method, learner):
|
def test_aggregative_methods(dataset: Dataset, aggregative_method, learner):
|
||||||
model = aggregative_method(learner())
|
model = aggregative_method(learner())
|
||||||
|
|
||||||
if model.binary and not dataset.binary:
|
if isinstance(model, BinaryQuantifier) and not dataset.binary:
|
||||||
print(f'skipping the test of binary model {type(model)} on non-binary dataset {dataset}')
|
print(f'skipping the test of binary model {type(model)} on non-binary dataset {dataset}')
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -45,7 +46,7 @@ def test_elm_methods(dataset: Dataset, elm_method):
|
||||||
print('Missing SVMperf binary program, skipping test')
|
print('Missing SVMperf binary program, skipping test')
|
||||||
return
|
return
|
||||||
|
|
||||||
if model.binary and not dataset.binary:
|
if isinstance(model, BinaryQuantifier) and not dataset.binary:
|
||||||
print(f'skipping the test of binary model {model} on non-binary dataset {dataset}')
|
print(f'skipping the test of binary model {model} on non-binary dataset {dataset}')
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -64,7 +65,7 @@ def test_elm_methods(dataset: Dataset, elm_method):
|
||||||
def test_non_aggregative_methods(dataset: Dataset, non_aggregative_method):
|
def test_non_aggregative_methods(dataset: Dataset, non_aggregative_method):
|
||||||
model = non_aggregative_method()
|
model = non_aggregative_method()
|
||||||
|
|
||||||
if model.binary and not dataset.binary:
|
if isinstance(model, BinaryQuantifier) and not dataset.binary:
|
||||||
print(f'skipping the test of binary model {model} on non-binary dataset {dataset}')
|
print(f'skipping the test of binary model {model} on non-binary dataset {dataset}')
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -85,7 +86,7 @@ def test_non_aggregative_methods(dataset: Dataset, non_aggregative_method):
|
||||||
def test_ensemble_method(base_method, learner, dataset: Dataset, policy):
|
def test_ensemble_method(base_method, learner, dataset: Dataset, policy):
|
||||||
qp.environ['SAMPLE_SIZE'] = len(dataset.training)
|
qp.environ['SAMPLE_SIZE'] = len(dataset.training)
|
||||||
model = Ensemble(quantifier=base_method(learner()), size=5, policy=policy, n_jobs=-1)
|
model = Ensemble(quantifier=base_method(learner()), size=5, policy=policy, n_jobs=-1)
|
||||||
if model.binary and not dataset.binary:
|
if isinstance(model, BinaryQuantifier) and not dataset.binary:
|
||||||
print(f'skipping the test of binary model {model} on non-binary dataset {dataset}')
|
print(f'skipping the test of binary model {model} on non-binary dataset {dataset}')
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -120,7 +121,7 @@ def test_quanet_method():
|
||||||
from quapy.method.meta import QuaNet
|
from quapy.method.meta import QuaNet
|
||||||
model = QuaNet(learner, sample_size=len(dataset.training), device='cuda')
|
model = QuaNet(learner, sample_size=len(dataset.training), device='cuda')
|
||||||
|
|
||||||
if model.binary and not dataset.binary:
|
if isinstance(model, BinaryQuantifier) and not dataset.binary:
|
||||||
print(f'skipping the test of binary model {model} on non-binary dataset {dataset}')
|
print(f'skipping the test of binary model {model} on non-binary dataset {dataset}')
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -138,7 +139,7 @@ def models_to_test_for_str_label_names():
|
||||||
models = list()
|
models = list()
|
||||||
learner = LogisticRegression
|
learner = LogisticRegression
|
||||||
for method in AGGREGATIVE_METHODS.difference(EXPLICIT_LOSS_MINIMIZATION_METHODS):
|
for method in AGGREGATIVE_METHODS.difference(EXPLICIT_LOSS_MINIMIZATION_METHODS):
|
||||||
models.append(method(learner()))
|
models.append(method(learner(random_state=0)))
|
||||||
for method in NON_AGGREGATIVE_METHODS:
|
for method in NON_AGGREGATIVE_METHODS:
|
||||||
models.append(method())
|
models.append(method())
|
||||||
return models
|
return models
|
||||||
|
@ -156,6 +157,7 @@ def test_str_label_names(model):
|
||||||
dataset.test.sampling(1000, *dataset.test.prevalence()))
|
dataset.test.sampling(1000, *dataset.test.prevalence()))
|
||||||
qp.data.preprocessing.text2tfidf(dataset, min_df=5, inplace=True)
|
qp.data.preprocessing.text2tfidf(dataset, min_df=5, inplace=True)
|
||||||
|
|
||||||
|
numpy.random.seed(0)
|
||||||
model.fit(dataset.training)
|
model.fit(dataset.training)
|
||||||
|
|
||||||
int_estim_prevalences = model.quantify(dataset.test.instances)
|
int_estim_prevalences = model.quantify(dataset.test.instances)
|
||||||
|
@ -168,7 +170,8 @@ def test_str_label_names(model):
|
||||||
['one' if label == 1 else 'zero' for label in dataset.training.labels]),
|
['one' if label == 1 else 'zero' for label in dataset.training.labels]),
|
||||||
LabelledCollection(dataset.test.instances,
|
LabelledCollection(dataset.test.instances,
|
||||||
['one' if label == 1 else 'zero' for label in dataset.test.labels]))
|
['one' if label == 1 else 'zero' for label in dataset.test.labels]))
|
||||||
|
assert all(dataset_str.training.classes_ == dataset_str.test.classes_), 'wrong indexation'
|
||||||
|
numpy.random.seed(0)
|
||||||
model.fit(dataset_str.training)
|
model.fit(dataset_str.training)
|
||||||
|
|
||||||
str_estim_prevalences = model.quantify(dataset_str.test.instances)
|
str_estim_prevalences = model.quantify(dataset_str.test.instances)
|
||||||
|
|
|
@ -5,9 +5,9 @@ from sklearn.linear_model import LogisticRegression
|
||||||
from sklearn.svm import SVC
|
from sklearn.svm import SVC
|
||||||
|
|
||||||
import quapy as qp
|
import quapy as qp
|
||||||
from method.aggregative import PACC
|
from quapy.method.aggregative import PACC
|
||||||
from model_selection import GridSearchQ
|
from quapy.model_selection import GridSearchQ
|
||||||
from protocol import APP
|
from quapy.protocol import APP
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ class ModselTestCase(unittest.TestCase):
|
||||||
data = qp.datasets.fetch_reviews('imdb', tfidf=True, min_df=10)
|
data = qp.datasets.fetch_reviews('imdb', tfidf=True, min_df=10)
|
||||||
training, validation = data.training.split_stratified(0.7, random_state=1)
|
training, validation = data.training.split_stratified(0.7, random_state=1)
|
||||||
|
|
||||||
param_grid = {'C': np.logspace(-3,3,7)}
|
param_grid = {'classifier__C': np.logspace(-3,3,7)}
|
||||||
app = APP(validation, sample_size=100, random_state=1)
|
app = APP(validation, sample_size=100, random_state=1)
|
||||||
q = GridSearchQ(
|
q = GridSearchQ(
|
||||||
q, param_grid, protocol=app, error='mae', refit=True, timeout=-1, verbose=True
|
q, param_grid, protocol=app, error='mae', refit=True, timeout=-1, verbose=True
|
||||||
|
@ -28,8 +28,8 @@ class ModselTestCase(unittest.TestCase):
|
||||||
print('best params', q.best_params_)
|
print('best params', q.best_params_)
|
||||||
print('best score', q.best_score_)
|
print('best score', q.best_score_)
|
||||||
|
|
||||||
self.assertEqual(q.best_params_['C'], 10.0)
|
self.assertEqual(q.best_params_['classifier__C'], 10.0)
|
||||||
self.assertEqual(q.best_model().get_params()['C'], 10.0)
|
self.assertEqual(q.best_model().get_params()['classifier__C'], 10.0)
|
||||||
|
|
||||||
def test_modsel_parallel(self):
|
def test_modsel_parallel(self):
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ class ModselTestCase(unittest.TestCase):
|
||||||
training, validation = data.training.split_stratified(0.7, random_state=1)
|
training, validation = data.training.split_stratified(0.7, random_state=1)
|
||||||
# test = data.test
|
# test = data.test
|
||||||
|
|
||||||
param_grid = {'C': np.logspace(-3,3,7)}
|
param_grid = {'classifier__C': np.logspace(-3,3,7)}
|
||||||
app = APP(validation, sample_size=100, random_state=1)
|
app = APP(validation, sample_size=100, random_state=1)
|
||||||
q = GridSearchQ(
|
q = GridSearchQ(
|
||||||
q, param_grid, protocol=app, error='mae', refit=True, timeout=-1, n_jobs=-1, verbose=True
|
q, param_grid, protocol=app, error='mae', refit=True, timeout=-1, n_jobs=-1, verbose=True
|
||||||
|
@ -47,8 +47,8 @@ class ModselTestCase(unittest.TestCase):
|
||||||
print('best params', q.best_params_)
|
print('best params', q.best_params_)
|
||||||
print('best score', q.best_score_)
|
print('best score', q.best_score_)
|
||||||
|
|
||||||
self.assertEqual(q.best_params_['C'], 10.0)
|
self.assertEqual(q.best_params_['classifier__C'], 10.0)
|
||||||
self.assertEqual(q.best_model().get_params()['C'], 10.0)
|
self.assertEqual(q.best_model().get_params()['classifier__C'], 10.0)
|
||||||
|
|
||||||
def test_modsel_parallel_speedup(self):
|
def test_modsel_parallel_speedup(self):
|
||||||
class SlowLR(LogisticRegression):
|
class SlowLR(LogisticRegression):
|
||||||
|
@ -61,7 +61,7 @@ class ModselTestCase(unittest.TestCase):
|
||||||
data = qp.datasets.fetch_reviews('imdb', tfidf=True, min_df=10)
|
data = qp.datasets.fetch_reviews('imdb', tfidf=True, min_df=10)
|
||||||
training, validation = data.training.split_stratified(0.7, random_state=1)
|
training, validation = data.training.split_stratified(0.7, random_state=1)
|
||||||
|
|
||||||
param_grid = {'C': np.logspace(-3, 3, 7)}
|
param_grid = {'classifier__C': np.logspace(-3, 3, 7)}
|
||||||
app = APP(validation, sample_size=100, random_state=1)
|
app = APP(validation, sample_size=100, random_state=1)
|
||||||
|
|
||||||
tinit = time.time()
|
tinit = time.time()
|
||||||
|
@ -95,7 +95,7 @@ class ModselTestCase(unittest.TestCase):
|
||||||
training, validation = data.training.split_stratified(0.7, random_state=1)
|
training, validation = data.training.split_stratified(0.7, random_state=1)
|
||||||
# test = data.test
|
# test = data.test
|
||||||
|
|
||||||
param_grid = {'C': np.logspace(-3,3,7)}
|
param_grid = {'classifier__C': np.logspace(-3,3,7)}
|
||||||
app = APP(validation, sample_size=100, random_state=1)
|
app = APP(validation, sample_size=100, random_state=1)
|
||||||
q = GridSearchQ(
|
q = GridSearchQ(
|
||||||
q, param_grid, protocol=app, error='mae', refit=True, timeout=3, n_jobs=-1, verbose=True
|
q, param_grid, protocol=app, error='mae', refit=True, timeout=3, n_jobs=-1, verbose=True
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import unittest
|
import unittest
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from quapy.data import LabelledCollection
|
from quapy.data import LabelledCollection
|
||||||
from quapy.protocol import APP, NPP, USimplexPP, CovariateShiftPP, AbstractStochasticSeededProtocol
|
from quapy.protocol import APP, NPP, USimplexPP, DomainMixer, AbstractStochasticSeededProtocol
|
||||||
|
|
||||||
|
|
||||||
def mock_labelled_collection(prefix=''):
|
def mock_labelled_collection(prefix=''):
|
||||||
|
@ -94,7 +94,7 @@ class TestProtocols(unittest.TestCase):
|
||||||
def test_covariate_shift_replicate(self):
|
def test_covariate_shift_replicate(self):
|
||||||
dataA = mock_labelled_collection('domA')
|
dataA = mock_labelled_collection('domA')
|
||||||
dataB = mock_labelled_collection('domB')
|
dataB = mock_labelled_collection('domB')
|
||||||
p = CovariateShiftPP(dataA, dataB, sample_size=10, mixture_points=11, random_state=1)
|
p = DomainMixer(dataA, dataB, sample_size=10, mixture_points=11, random_state=1)
|
||||||
|
|
||||||
samples1 = samples_to_str(p)
|
samples1 = samples_to_str(p)
|
||||||
samples2 = samples_to_str(p)
|
samples2 = samples_to_str(p)
|
||||||
|
@ -104,7 +104,7 @@ class TestProtocols(unittest.TestCase):
|
||||||
def test_covariate_shift_not_replicate(self):
|
def test_covariate_shift_not_replicate(self):
|
||||||
dataA = mock_labelled_collection('domA')
|
dataA = mock_labelled_collection('domA')
|
||||||
dataB = mock_labelled_collection('domB')
|
dataB = mock_labelled_collection('domB')
|
||||||
p = CovariateShiftPP(dataA, dataB, sample_size=10, mixture_points=11)
|
p = DomainMixer(dataA, dataB, sample_size=10, mixture_points=11)
|
||||||
|
|
||||||
samples1 = samples_to_str(p)
|
samples1 = samples_to_str(p)
|
||||||
samples2 = samples_to_str(p)
|
samples2 = samples_to_str(p)
|
||||||
|
|
|
@ -22,7 +22,7 @@ def _get_parallel_slices(n_tasks, n_jobs):
|
||||||
|
|
||||||
def map_parallel(func, args, 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
|
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.
|
that already works with a list of arguments.
|
||||||
|
|
||||||
|
@ -128,6 +128,7 @@ def create_if_not_exist(path):
|
||||||
def get_quapy_home():
|
def get_quapy_home():
|
||||||
"""
|
"""
|
||||||
Gets the home directory of QuaPy, i.e., the directory where QuaPy saves permanent data, such as dowloaded datasets.
|
Gets the home directory of QuaPy, i.e., the directory where QuaPy saves permanent data, such as dowloaded datasets.
|
||||||
|
This directory is `~/quapy_data`
|
||||||
|
|
||||||
:return: a string representing the path
|
:return: a string representing the path
|
||||||
"""
|
"""
|
||||||
|
@ -162,7 +163,7 @@ def save_text_file(path, text):
|
||||||
|
|
||||||
def pickled_resource(pickle_path:str, generation_func:callable, *args):
|
def pickled_resource(pickle_path:str, generation_func:callable, *args):
|
||||||
"""
|
"""
|
||||||
Allows for fast reuse of resources that are generated only once by calling generation_func(*args). The next times
|
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:
|
this function is invoked, it loads the pickled resource. Example:
|
||||||
|
|
||||||
>>> def some_array(n): # a mock resource created with one parameter (`n`)
|
>>> def some_array(n): # a mock resource created with one parameter (`n`)
|
||||||
|
@ -191,10 +192,6 @@ class EarlyStop:
|
||||||
"""
|
"""
|
||||||
A class implementing the early-stopping condition typically used for training neural networks.
|
A class implementing the early-stopping condition typically used for training neural networks.
|
||||||
|
|
||||||
:param patience: the number of (consecutive) times that a monitored evaluation metric (typically obtaind in a
|
|
||||||
held-out validation split) can be found to be worse than the best one obtained so far, before flagging the
|
|
||||||
stopping condition. An instance of this class is `callable`, and is to be used as follows:
|
|
||||||
|
|
||||||
>>> earlystop = EarlyStop(patience=2, lower_is_better=True)
|
>>> earlystop = EarlyStop(patience=2, lower_is_better=True)
|
||||||
>>> earlystop(0.9, epoch=0)
|
>>> earlystop(0.9, epoch=0)
|
||||||
>>> earlystop(0.7, epoch=1)
|
>>> earlystop(0.7, epoch=1)
|
||||||
|
@ -206,14 +203,14 @@ class EarlyStop:
|
||||||
>>> earlystop.best_epoch # is 1
|
>>> earlystop.best_epoch # is 1
|
||||||
>>> earlystop.best_score # is 0.7
|
>>> earlystop.best_score # is 0.7
|
||||||
|
|
||||||
|
:param patience: the number of (consecutive) times that a monitored evaluation metric (typically obtaind in a
|
||||||
|
held-out validation split) can be found to be worse than the best one obtained so far, before flagging the
|
||||||
|
stopping condition. An instance of this class is `callable`, and is to be used as follows:
|
||||||
:param lower_is_better: if True (default) the metric is to be minimized.
|
:param lower_is_better: if True (default) the metric is to be minimized.
|
||||||
|
|
||||||
:ivar best_score: keeps track of the best value seen so far
|
:ivar best_score: keeps track of the best value seen so far
|
||||||
:ivar best_epoch: keeps track of the epoch in which the best score was set
|
:ivar best_epoch: keeps track of the epoch in which the best score was set
|
||||||
:ivar STOP: flag (boolean) indicating the stopping condition
|
:ivar STOP: flag (boolean) indicating the stopping condition
|
||||||
:ivar IMPROVED: flag (boolean) indicating whether there was an improvement in the last call
|
:ivar IMPROVED: flag (boolean) indicating whether there was an improvement in the last call
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, patience, lower_is_better=True):
|
def __init__(self, patience, lower_is_better=True):
|
||||||
|
@ -244,3 +241,4 @@ class EarlyStop:
|
||||||
self.patience -= 1
|
self.patience -= 1
|
||||||
if self.patience <= 0:
|
if self.patience <= 0:
|
||||||
self.STOP = True
|
self.STOP = True
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue