|
|
|
|
|
<!DOCTYPE html>
|
|
|
|
|
|
<html>
|
|
|
<head>
|
|
|
<meta charset="utf-8" />
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
|
<title>3. Customization — UnitCommitment.jl<br/><small>0.2</small></title>
|
|
|
|
|
|
<link href="../_static/css/theme.css" rel="stylesheet" />
|
|
|
<link href="../_static/css/index.c5995385ac14fb8791e8eb36b4908be2.css" rel="stylesheet" />
|
|
|
|
|
|
|
|
|
<link rel="stylesheet"
|
|
|
href="../_static/vendor/fontawesome/5.13.0/css/all.min.css">
|
|
|
<link rel="preload" as="font" type="font/woff2" crossorigin
|
|
|
href="../_static/vendor/fontawesome/5.13.0/webfonts/fa-solid-900.woff2">
|
|
|
<link rel="preload" as="font" type="font/woff2" crossorigin
|
|
|
href="../_static/vendor/fontawesome/5.13.0/webfonts/fa-brands-400.woff2">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
|
|
<link rel="stylesheet" href="../_static/sphinx-book-theme.acff12b8f9c144ce68a297486a2fa670.css" type="text/css" />
|
|
|
<link rel="stylesheet" type="text/css" href="../_static/custom.css" />
|
|
|
|
|
|
<link rel="preload" as="script" href="../_static/js/index.1c5a1a01449ed65a7b51.js">
|
|
|
|
|
|
<script id="documentation_options" data-url_root="../" 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/sphinx-book-theme.12a9622fbb08dcb3a2a40b2c02b83a57.js"></script>
|
|
|
<link rel="index" title="Index" href="../genindex/" />
|
|
|
<link rel="search" title="Search" href="../search/" />
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
|
<meta name="docsearch:language" content="en" />
|
|
|
|
|
|
</head>
|
|
|
<body data-spy="scroll" data-target="#bd-toc-nav" data-offset="80">
|
|
|
|
|
|
<div class="container-fluid" id="banner"></div>
|
|
|
|
|
|
|
|
|
|
|
|
<div class="container-xl">
|
|
|
<div class="row">
|
|
|
|
|
|
<div class="col-12 col-md-3 bd-sidebar site-navigation show" id="site-navigation">
|
|
|
|
|
|
<div class="navbar-brand-box">
|
|
|
<a class="navbar-brand text-wrap" href="../">
|
|
|
|
|
|
|
|
|
<h1 class="site-logo" id="site-title">UnitCommitment.jl<br/><small>0.2</small></h1>
|
|
|
|
|
|
</a>
|
|
|
</div><form class="bd-search d-flex align-items-center" action="../search/" method="get">
|
|
|
<i class="icon fas fa-search"></i>
|
|
|
<input type="search" class="form-control" name="q" id="search-input" placeholder="Search the docs ..." aria-label="Search the docs ..." autocomplete="off" >
|
|
|
</form><nav class="bd-links" id="bd-docs-nav" aria-label="Main navigation">
|
|
|
<div class="bd-toc-item active">
|
|
|
<ul class="nav bd-sidenav">
|
|
|
<li class="toctree-l1">
|
|
|
<a class="reference internal" href="../usage/">
|
|
|
<span class="sectnum">
|
|
|
1.
|
|
|
</span>
|
|
|
Usage
|
|
|
</a>
|
|
|
</li>
|
|
|
<li class="toctree-l1">
|
|
|
<a class="reference internal" href="../format/">
|
|
|
<span class="sectnum">
|
|
|
2.
|
|
|
</span>
|
|
|
Data Format
|
|
|
</a>
|
|
|
</li>
|
|
|
<li class="toctree-l1">
|
|
|
<a class="reference internal" href="../instances/">
|
|
|
<span class="sectnum">
|
|
|
3.
|
|
|
</span>
|
|
|
Instances
|
|
|
</a>
|
|
|
</li>
|
|
|
<li class="toctree-l1">
|
|
|
<a class="reference internal" href="../model/">
|
|
|
<span class="sectnum">
|
|
|
4.
|
|
|
</span>
|
|
|
JuMP Model
|
|
|
</a>
|
|
|
</li>
|
|
|
</ul>
|
|
|
|
|
|
</div>
|
|
|
</nav> <!-- To handle the deprecated key -->
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<main class="col py-md-3 pl-md-4 bd-content overflow-auto" role="main">
|
|
|
|
|
|
<div class="topbar container-xl fixed-top">
|
|
|
<div class="topbar-contents row">
|
|
|
<div class="col-12 col-md-3 bd-topbar-whitespace site-navigation show"></div>
|
|
|
<div class="col pl-md-4 topbar-main">
|
|
|
|
|
|
<button id="navbar-toggler" class="navbar-toggler ml-0" type="button" data-toggle="collapse"
|
|
|
data-toggle="tooltip" data-placement="bottom" data-target=".site-navigation" aria-controls="navbar-menu"
|
|
|
aria-expanded="true" aria-label="Toggle navigation" aria-controls="site-navigation"
|
|
|
title="Toggle navigation" data-toggle="tooltip" data-placement="left">
|
|
|
<i class="fas fa-bars"></i>
|
|
|
<i class="fas fa-arrow-left"></i>
|
|
|
<i class="fas fa-arrow-up"></i>
|
|
|
</button>
|
|
|
|
|
|
|
|
|
<div class="dropdown-buttons-trigger">
|
|
|
<button id="dropdown-buttons-trigger" class="btn btn-secondary topbarbtn" aria-label="Download this page"><i
|
|
|
class="fas fa-download"></i></button>
|
|
|
|
|
|
<div class="dropdown-buttons">
|
|
|
<!-- ipynb file if we had a myst markdown file -->
|
|
|
|
|
|
<!-- Download raw file -->
|
|
|
<a class="dropdown-buttons" href="../_sources/customization.md.txt"><button type="button"
|
|
|
class="btn btn-secondary topbarbtn" title="Download source file" data-toggle="tooltip"
|
|
|
data-placement="left">.md</button></a>
|
|
|
<!-- Download PDF via print -->
|
|
|
<button type="button" id="download-print" class="btn btn-secondary topbarbtn" title="Print to PDF"
|
|
|
onClick="window.print()" data-toggle="tooltip" data-placement="left">.pdf</button>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
<!-- Source interaction buttons -->
|
|
|
|
|
|
<div class="dropdown-buttons-trigger">
|
|
|
<button id="dropdown-buttons-trigger" class="btn btn-secondary topbarbtn"
|
|
|
aria-label="Connect with source repository"><i class="fab fa-github"></i></button>
|
|
|
<div class="dropdown-buttons sourcebuttons">
|
|
|
<a class="repository-button"
|
|
|
href="https://github.com/ANL-CEEESA/UnitCommitment.jl/"><button type="button" class="btn btn-secondary topbarbtn"
|
|
|
data-toggle="tooltip" data-placement="left" title="Source repository"><i
|
|
|
class="fab fa-github"></i>repository</button></a>
|
|
|
|
|
|
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
<!-- Full screen (wrap in <a> to have style consistency -->
|
|
|
|
|
|
<a class="full-screen-button"><button type="button" class="btn btn-secondary topbarbtn" data-toggle="tooltip"
|
|
|
data-placement="bottom" onclick="toggleFullScreen()" aria-label="Fullscreen mode"
|
|
|
title="Fullscreen mode"><i
|
|
|
class="fas fa-expand"></i></button></a>
|
|
|
|
|
|
<!-- Launch buttons -->
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<!-- Table of contents -->
|
|
|
<div class="d-none d-md-block col-md-2 bd-toc show">
|
|
|
|
|
|
<div class="tocsection onthispage pt-5 pb-3">
|
|
|
<i class="fas fa-list"></i> Contents
|
|
|
</div>
|
|
|
<nav id="bd-toc-nav">
|
|
|
<ul class="visible nav section-nav flex-column">
|
|
|
<li class="toc-h2 nav-item toc-entry">
|
|
|
<a class="reference internal nav-link" href="#customizing-solver-parameters">
|
|
|
<span class="sectnum">
|
|
|
3.1.
|
|
|
</span>
|
|
|
Customizing solver parameters
|
|
|
</a>
|
|
|
<ul class="nav section-nav flex-column">
|
|
|
<li class="toc-h3 nav-item toc-entry">
|
|
|
<a class="reference internal nav-link" href="#selecting-the-internal-mip-solver">
|
|
|
Selecting the internal MIP solver
|
|
|
</a>
|
|
|
</li>
|
|
|
</ul>
|
|
|
</li>
|
|
|
<li class="toc-h2 nav-item toc-entry">
|
|
|
<a class="reference internal nav-link" href="#customizing-solver-components">
|
|
|
<span class="sectnum">
|
|
|
3.2.
|
|
|
</span>
|
|
|
Customizing solver components
|
|
|
</a>
|
|
|
<ul class="nav section-nav flex-column">
|
|
|
<li class="toc-h3 nav-item toc-entry">
|
|
|
<a class="reference internal nav-link" href="#selecting-components">
|
|
|
Selecting components
|
|
|
</a>
|
|
|
</li>
|
|
|
<li class="toc-h3 nav-item toc-entry">
|
|
|
<a class="reference internal nav-link" href="#adjusting-component-aggressiveness">
|
|
|
Adjusting component aggressiveness
|
|
|
</a>
|
|
|
</li>
|
|
|
<li class="toc-h3 nav-item toc-entry">
|
|
|
<a class="reference internal nav-link" href="#evaluating-component-performance">
|
|
|
Evaluating component performance
|
|
|
</a>
|
|
|
</li>
|
|
|
<li class="toc-h3 nav-item toc-entry">
|
|
|
<a class="reference internal nav-link" href="#using-customized-ml-classifiers-and-regressors">
|
|
|
Using customized ML classifiers and regressors
|
|
|
</a>
|
|
|
</li>
|
|
|
</ul>
|
|
|
</li>
|
|
|
</ul>
|
|
|
|
|
|
</nav>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div id="main-content" class="row">
|
|
|
<div class="col-12 col-md-9 pl-md-3 pr-md-0">
|
|
|
|
|
|
<div>
|
|
|
|
|
|
<div class="section" id="customization">
|
|
|
<h1><span class="sectnum">3.</span> Customization<a class="headerlink" href="#customization" title="Permalink to this headline">¶</a></h1>
|
|
|
<div class="section" id="customizing-solver-parameters">
|
|
|
<h2><span class="sectnum">3.1.</span> Customizing solver parameters<a class="headerlink" href="#customizing-solver-parameters" title="Permalink to this headline">¶</a></h2>
|
|
|
<div class="section" id="selecting-the-internal-mip-solver">
|
|
|
<h3>Selecting the internal MIP solver<a class="headerlink" href="#selecting-the-internal-mip-solver" title="Permalink to this headline">¶</a></h3>
|
|
|
<p>By default, <code class="docutils literal notranslate"><span class="pre">LearningSolver</span></code> uses <a class="reference external" href="https://www.gurobi.com/">Gurobi</a> as its internal MIP solver, and expects models to be provided using the Pyomo modeling language. Supported solvers and modeling languages include:</p>
|
|
|
<ul class="simple">
|
|
|
<li><p><code class="docutils literal notranslate"><span class="pre">GurobiPyomoSolver</span></code>: Gurobi with Pyomo (default).</p></li>
|
|
|
<li><p><code class="docutils literal notranslate"><span class="pre">CplexPyomoSolver</span></code>: <a class="reference external" href="https://www.ibm.com/products/ilog-cplex-optimization-studio">IBM ILOG CPLEX</a> with Pyomo.</p></li>
|
|
|
<li><p><code class="docutils literal notranslate"><span class="pre">XpressPyomoSolver</span></code>: <a class="reference external" href="https://www.fico.com/en/products/fico-xpress-solver">FICO XPRESS Solver</a> with Pyomo.</p></li>
|
|
|
<li><p><code class="docutils literal notranslate"><span class="pre">GurobiSolver</span></code>: Gurobi without any modeling language.</p></li>
|
|
|
</ul>
|
|
|
<p>To switch between solvers, provide the desired class using the <code class="docutils literal notranslate"><span class="pre">solver</span></code> argument:</p>
|
|
|
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">miplearn</span> <span class="kn">import</span> <span class="n">LearningSolver</span><span class="p">,</span> <span class="n">CplexPyomoSolver</span>
|
|
|
<span class="n">solver</span> <span class="o">=</span> <span class="n">LearningSolver</span><span class="p">(</span><span class="n">solver</span><span class="o">=</span><span class="n">CplexPyomoSolver</span><span class="p">)</span>
|
|
|
</pre></div>
|
|
|
</div>
|
|
|
<p>To configure a particular solver, use the <code class="docutils literal notranslate"><span class="pre">params</span></code> constructor argument, as shown below.</p>
|
|
|
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">miplearn</span> <span class="kn">import</span> <span class="n">LearningSolver</span><span class="p">,</span> <span class="n">GurobiPyomoSolver</span>
|
|
|
<span class="n">solver</span> <span class="o">=</span> <span class="n">LearningSolver</span><span class="p">(</span>
|
|
|
<span class="n">solver</span><span class="o">=</span><span class="k">lambda</span><span class="p">:</span> <span class="n">GurobiPyomoSolver</span><span class="p">(</span>
|
|
|
<span class="n">params</span><span class="o">=</span><span class="p">{</span>
|
|
|
<span class="s2">"TimeLimit"</span><span class="p">:</span> <span class="mi">900</span><span class="p">,</span>
|
|
|
<span class="s2">"MIPGap"</span><span class="p">:</span> <span class="mf">1e-3</span><span class="p">,</span>
|
|
|
<span class="s2">"NodeLimit"</span><span class="p">:</span> <span class="mi">1000</span><span class="p">,</span>
|
|
|
<span class="p">}</span>
|
|
|
<span class="p">),</span>
|
|
|
<span class="p">)</span>
|
|
|
</pre></div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="section" id="customizing-solver-components">
|
|
|
<h2><span class="sectnum">3.2.</span> Customizing solver components<a class="headerlink" href="#customizing-solver-components" title="Permalink to this headline">¶</a></h2>
|
|
|
<p><code class="docutils literal notranslate"><span class="pre">LearningSolver</span></code> is composed by a number of individual machine-learning components, each targeting a different part of the solution process. Each component can be individually enabled, disabled or customized. The following components are enabled by default:</p>
|
|
|
<ul class="simple">
|
|
|
<li><p><code class="docutils literal notranslate"><span class="pre">LazyConstraintComponent</span></code>: Predicts which lazy constraint to initially enforce.</p></li>
|
|
|
<li><p><code class="docutils literal notranslate"><span class="pre">ObjectiveValueComponent</span></code>: Predicts the optimal value of the optimization problem, given the optimal solution to the LP relaxation.</p></li>
|
|
|
<li><p><code class="docutils literal notranslate"><span class="pre">PrimalSolutionComponent</span></code>: Predicts optimal values for binary decision variables. In heuristic mode, this component fixes the variables to their predicted values. In exact mode, the predicted values are provided to the solver as a (partial) MIP start.</p></li>
|
|
|
</ul>
|
|
|
<p>The following components are also available, but not enabled by default:</p>
|
|
|
<ul class="simple">
|
|
|
<li><p><code class="docutils literal notranslate"><span class="pre">BranchPriorityComponent</span></code>: Predicts good branch priorities for decision variables.</p></li>
|
|
|
</ul>
|
|
|
<div class="section" id="selecting-components">
|
|
|
<h3>Selecting components<a class="headerlink" href="#selecting-components" title="Permalink to this headline">¶</a></h3>
|
|
|
<p>To create a <code class="docutils literal notranslate"><span class="pre">LearningSolver</span></code> with a specific set of components, the <code class="docutils literal notranslate"><span class="pre">components</span></code> constructor argument may be used, as the next example shows:</p>
|
|
|
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># Create a solver without any components</span>
|
|
|
<span class="n">solver1</span> <span class="o">=</span> <span class="n">LearningSolver</span><span class="p">(</span><span class="n">components</span><span class="o">=</span><span class="p">[])</span>
|
|
|
|
|
|
<span class="c1"># Create a solver with only two components</span>
|
|
|
<span class="n">solver2</span> <span class="o">=</span> <span class="n">LearningSolver</span><span class="p">(</span><span class="n">components</span><span class="o">=</span><span class="p">[</span>
|
|
|
<span class="n">LazyConstraintComponent</span><span class="p">(</span><span class="o">...</span><span class="p">),</span>
|
|
|
<span class="n">PrimalSolutionComponent</span><span class="p">(</span><span class="o">...</span><span class="p">),</span>
|
|
|
<span class="p">])</span>
|
|
|
</pre></div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="section" id="adjusting-component-aggressiveness">
|
|
|
<h3>Adjusting component aggressiveness<a class="headerlink" href="#adjusting-component-aggressiveness" title="Permalink to this headline">¶</a></h3>
|
|
|
<p>The aggressiveness of classification components, such as <code class="docutils literal notranslate"><span class="pre">PrimalSolutionComponent</span></code> and <code class="docutils literal notranslate"><span class="pre">LazyConstraintComponent</span></code>, can be adjusted through the <code class="docutils literal notranslate"><span class="pre">threshold</span></code> constructor argument. Internally, these components ask the machine learning models how confident are they on each prediction they make, then automatically discard all predictions that have low confidence. The <code class="docutils literal notranslate"><span class="pre">threshold</span></code> argument specifies how confident should the ML models be for a prediction to be considered trustworthy. Lowering a component’s threshold increases its aggressiveness, while raising a component’s threshold makes it more conservative.</p>
|
|
|
<p>For example, if the ML model predicts that a certain binary variable will assume value <code class="docutils literal notranslate"><span class="pre">1.0</span></code> in the optimal solution with 75% confidence, and if the <code class="docutils literal notranslate"><span class="pre">PrimalSolutionComponent</span></code> is configured to discard all predictions with less than 90% confidence, then this variable will not be included in the predicted MIP start.</p>
|
|
|
<p>MIPLearn currently provides two types of thresholds:</p>
|
|
|
<ul class="simple">
|
|
|
<li><p><code class="docutils literal notranslate"><span class="pre">MinProbabilityThreshold(p:</span> <span class="pre">List[float])</span></code> A threshold which indicates that a prediction is trustworthy if its probability of being correct, as computed by the machine learning model, is above a fixed value.</p></li>
|
|
|
<li><p><code class="docutils literal notranslate"><span class="pre">MinPrecisionThreshold(p:</span> <span class="pre">List[float])</span></code> A dynamic threshold which automatically adjusts itself during training to ensure that the component achieves at least a given precision on the training data set. Note that increasing a component’s precision may reduce its recall.</p></li>
|
|
|
</ul>
|
|
|
<p>The example below shows how to build a <code class="docutils literal notranslate"><span class="pre">PrimalSolutionComponent</span></code> which fixes variables to zero with at least 80% precision, and to one with at least 95% precision. Other components are configured similarly.</p>
|
|
|
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">miplearn</span> <span class="kn">import</span> <span class="n">PrimalSolutionComponent</span><span class="p">,</span> <span class="n">MinPrecisionThreshold</span>
|
|
|
|
|
|
<span class="n">PrimalSolutionComponent</span><span class="p">(</span>
|
|
|
<span class="n">mode</span><span class="o">=</span><span class="s2">"heuristic"</span><span class="p">,</span>
|
|
|
<span class="n">threshold</span><span class="o">=</span><span class="n">MinPrecisionThreshold</span><span class="p">([</span><span class="mf">0.80</span><span class="p">,</span> <span class="mf">0.95</span><span class="p">]),</span>
|
|
|
<span class="p">)</span>
|
|
|
</pre></div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="section" id="evaluating-component-performance">
|
|
|
<h3>Evaluating component performance<a class="headerlink" href="#evaluating-component-performance" title="Permalink to this headline">¶</a></h3>
|
|
|
<p>MIPLearn allows solver components to be modified, trained and evaluated in isolation. In the following example, we build and
|
|
|
fit <code class="docutils literal notranslate"><span class="pre">PrimalSolutionComponent</span></code> outside the solver, then evaluate its performance.</p>
|
|
|
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">miplearn</span> <span class="kn">import</span> <span class="n">PrimalSolutionComponent</span>
|
|
|
|
|
|
<span class="c1"># User-provided set of previously-solved instances</span>
|
|
|
<span class="n">train_instances</span> <span class="o">=</span> <span class="p">[</span><span class="o">...</span><span class="p">]</span>
|
|
|
|
|
|
<span class="c1"># Construct and fit component on a subset of training instances</span>
|
|
|
<span class="n">comp</span> <span class="o">=</span> <span class="n">PrimalSolutionComponent</span><span class="p">()</span>
|
|
|
<span class="n">comp</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">train_instances</span><span class="p">[:</span><span class="mi">100</span><span class="p">])</span>
|
|
|
|
|
|
<span class="c1"># Evaluate performance on an additional set of training instances</span>
|
|
|
<span class="n">ev</span> <span class="o">=</span> <span class="n">comp</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="n">train_instances</span><span class="p">[</span><span class="mi">100</span><span class="p">:</span><span class="mi">150</span><span class="p">])</span>
|
|
|
</pre></div>
|
|
|
</div>
|
|
|
<p>The method <code class="docutils literal notranslate"><span class="pre">evaluate</span></code> returns a dictionary with performance evaluation statistics for each training instance provided,
|
|
|
and for each type of prediction the component makes. To obtain a summary across all instances, pandas may be used, as below:</p>
|
|
|
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span>
|
|
|
<span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">ev</span><span class="p">[</span><span class="s2">"Fix one"</span><span class="p">])</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
|
|
</pre></div>
|
|
|
</div>
|
|
|
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>Predicted positive 3.120000
|
|
|
Predicted negative 196.880000
|
|
|
Condition positive 62.500000
|
|
|
Condition negative 137.500000
|
|
|
True positive 3.060000
|
|
|
True negative 137.440000
|
|
|
False positive 0.060000
|
|
|
False negative 59.440000
|
|
|
Accuracy 0.702500
|
|
|
F1 score 0.093050
|
|
|
Recall 0.048921
|
|
|
Precision 0.981667
|
|
|
Predicted positive (%) 1.560000
|
|
|
Predicted negative (%) 98.440000
|
|
|
Condition positive (%) 31.250000
|
|
|
Condition negative (%) 68.750000
|
|
|
True positive (%) 1.530000
|
|
|
True negative (%) 68.720000
|
|
|
False positive (%) 0.030000
|
|
|
False negative (%) 29.720000
|
|
|
dtype: float64
|
|
|
</pre></div>
|
|
|
</div>
|
|
|
<p>Regression components (such as <code class="docutils literal notranslate"><span class="pre">ObjectiveValueComponent</span></code>) can also be trained and evaluated similarly,
|
|
|
as the next example shows:</p>
|
|
|
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">miplearn</span> <span class="kn">import</span> <span class="n">ObjectiveValueComponent</span>
|
|
|
<span class="n">comp</span> <span class="o">=</span> <span class="n">ObjectiveValueComponent</span><span class="p">()</span>
|
|
|
<span class="n">comp</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">train_instances</span><span class="p">[:</span><span class="mi">100</span><span class="p">])</span>
|
|
|
<span class="n">ev</span> <span class="o">=</span> <span class="n">comp</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="n">train_instances</span><span class="p">[</span><span class="mi">100</span><span class="p">:</span><span class="mi">150</span><span class="p">])</span>
|
|
|
|
|
|
<span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span>
|
|
|
<span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
|
|
</pre></div>
|
|
|
</div>
|
|
|
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>Mean squared error 7001.977827
|
|
|
Explained variance 0.519790
|
|
|
Max error 242.375804
|
|
|
Mean absolute error 65.843924
|
|
|
R2 0.517612
|
|
|
Median absolute error 65.843924
|
|
|
dtype: float64
|
|
|
</pre></div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="section" id="using-customized-ml-classifiers-and-regressors">
|
|
|
<h3>Using customized ML classifiers and regressors<a class="headerlink" href="#using-customized-ml-classifiers-and-regressors" title="Permalink to this headline">¶</a></h3>
|
|
|
<p>By default, given a training set of instantes, MIPLearn trains a fixed set of ML classifiers and regressors, then selects the best one based on cross-validation performance. Alternatively, the user may specify which ML model a component should use through the <code class="docutils literal notranslate"><span class="pre">classifier</span></code> or <code class="docutils literal notranslate"><span class="pre">regressor</span></code> contructor parameters. Scikit-learn classifiers and regressors are currently supported. A future version of the package will add compatibility with Keras models.</p>
|
|
|
<p>The example below shows how to construct a <code class="docutils literal notranslate"><span class="pre">PrimalSolutionComponent</span></code> which internally uses scikit-learn’s <code class="docutils literal notranslate"><span class="pre">KNeighborsClassifiers</span></code>. Any other scikit-learn classifier or pipeline can be used. It needs to be wrapped in <code class="docutils literal notranslate"><span class="pre">ScikitLearnClassifier</span></code> to ensure that all the proper data transformations are applied.</p>
|
|
|
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">miplearn</span> <span class="kn">import</span> <span class="n">PrimalSolutionComponent</span><span class="p">,</span> <span class="n">ScikitLearnClassifier</span>
|
|
|
<span class="kn">from</span> <span class="nn">sklearn.neighbors</span> <span class="kn">import</span> <span class="n">KNeighborsClassifier</span>
|
|
|
|
|
|
<span class="n">comp</span> <span class="o">=</span> <span class="n">PrimalSolutionComponent</span><span class="p">(</span>
|
|
|
<span class="n">classifier</span><span class="o">=</span><span class="n">ScikitLearnClassifier</span><span class="p">(</span>
|
|
|
<span class="n">KNeighborsClassifier</span><span class="p">(</span><span class="n">n_neighbors</span><span class="o">=</span><span class="mi">5</span><span class="p">),</span>
|
|
|
<span class="p">),</span>
|
|
|
<span class="p">)</span>
|
|
|
<span class="n">comp</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">train_instances</span><span class="p">)</span>
|
|
|
</pre></div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
<div class='prev-next-bottom'>
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
</div>
|
|
|
<footer class="footer mt-5 mt-md-0">
|
|
|
<div class="container">
|
|
|
<p>
|
|
|
|
|
|
© Copyright 2020-2021, UChicago Argonne, LLC.<br/>
|
|
|
</p>
|
|
|
</div>
|
|
|
</footer>
|
|
|
</main>
|
|
|
|
|
|
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
<script src="../_static/js/index.1c5a1a01449ed65a7b51.js"></script>
|
|
|
|
|
|
|
|
|
</body>
|
|
|
</html> |