Skip to content

Commit

Permalink
minor update to ICI
Browse files Browse the repository at this point in the history
jasonfan1997 committed Nov 8, 2024
1 parent 68f3826 commit 86c1802
Showing 19 changed files with 279 additions and 186 deletions.
44 changes: 31 additions & 13 deletions calzone/metrics.py
Original file line number Diff line number Diff line change
@@ -336,37 +336,55 @@ def lowess_regression_analysis(
return ICI, lowess_fit[:, 0], lowess_fit[:, 1]


def cal_ICI(func, y_proba, points=1000, class_to_calculate=1):
def cal_ICI_func(func, y_proba, class_to_calculate=1):
"""
Calculate the Integrated Calibration Index (ICI) for a given calibration function.
Args:
func (callable): The calibration function to evaluate.
y_proba (array-like): Predicted probabilities for each class. Shape (n_samples, n_classes).
points (int, optional): Number of points to use for numerical integration. Defaults to 1000.
class_to_calculate (int, optional): The class index to calculate the ICI for. Defaults to 1.
Returns:
float: The Integrated Calibration Index (ICI) value.
Note:
The ICI is calculated by integrating the absolute difference between
the calibration function and the identity function, weighted by the
density of the predicted probabilities.
"""
# Generate evenly spaced points for integration
x = np.linspace(0, 1, points)
xcenter = (x[:-1] + x[1:]) / 2
# Calculate the density of predicted probabilities
density = np.histogram(y_proba[:, class_to_calculate], bins=x, density=True)[0]
The ICI is calculated by calculating the mean absolute difference between
predicted probabilities and the calibration function evaluated at predicted probabilities.
"""
# Apply the calibration function
y = func(xcenter)

y_adjust = func(y_proba[:, class_to_calculate])

# Calculate and return the ICI

return np.mean(np.abs(y_adjust - y_proba[:, class_to_calculate]))


def cal_ICI(y_adjust, y_proba):
"""
Calculate the Integrated Calibration Index (ICI) for given adjusted probabilities.
Args:
y_adjust (array-like): Adjusted probabilities. Shape (n_samples,).
y_proba (array-like): Original predicted probabilities. Shape (n_samples,).
Returns:
float: The Integrated Calibration Index (ICI) value.
Note:
The ICI is calculated by calculating the mean absolute difference between
predicted probabilities and the adjusted probabilities.
"""
# Calculate and return the ICI
return np.trapz(np.abs(y - xcenter) * density, xcenter)

return np.mean(np.abs(y_adjust - y_proba))

def logit_func(coef, intercept):
"""
Binary file modified docs/build/doctrees/calzone.doctree
Binary file not shown.
Binary file modified docs/build/doctrees/environment.pickle
Binary file not shown.
51 changes: 36 additions & 15 deletions docs/build/html/_modules/calzone/metrics.html
Original file line number Diff line number Diff line change
@@ -442,39 +442,60 @@ <h1>Source code for calzone.metrics</h1><div class="highlight"><pre>



<div class="viewcode-block" id="cal_ICI">
<a class="viewcode-back" href="../../calzone.html#calzone.metrics.cal_ICI">[docs]</a>
<span class="k">def</span> <span class="nf">cal_ICI</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">y_proba</span><span class="p">,</span> <span class="n">points</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span> <span class="n">class_to_calculate</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
<div class="viewcode-block" id="cal_ICI_func">
<a class="viewcode-back" href="../../calzone.html#calzone.metrics.cal_ICI_func">[docs]</a>
<span class="k">def</span> <span class="nf">cal_ICI_func</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">y_proba</span><span class="p">,</span> <span class="n">class_to_calculate</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Calculate the Integrated Calibration Index (ICI) for a given calibration function.</span>

<span class="sd"> Args:</span>
<span class="sd"> func (callable): The calibration function to evaluate.</span>
<span class="sd"> y_proba (array-like): Predicted probabilities for each class. Shape (n_samples, n_classes).</span>
<span class="sd"> points (int, optional): Number of points to use for numerical integration. Defaults to 1000.</span>
<span class="sd"> class_to_calculate (int, optional): The class index to calculate the ICI for. Defaults to 1.</span>

<span class="sd"> Returns:</span>
<span class="sd"> float: The Integrated Calibration Index (ICI) value.</span>

<span class="sd"> Note:</span>
<span class="sd"> The ICI is calculated by integrating the absolute difference between</span>
<span class="sd"> the calibration function and the identity function, weighted by the</span>
<span class="sd"> density of the predicted probabilities.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Generate evenly spaced points for integration</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">points</span><span class="p">)</span>
<span class="n">xcenter</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span> <span class="o">/</span> <span class="mi">2</span>

<span class="c1"># Calculate the density of predicted probabilities</span>
<span class="n">density</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">histogram</span><span class="p">(</span><span class="n">y_proba</span><span class="p">[:,</span> <span class="n">class_to_calculate</span><span class="p">],</span> <span class="n">bins</span><span class="o">=</span><span class="n">x</span><span class="p">,</span> <span class="n">density</span><span class="o">=</span><span class="kc">True</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>

<span class="sd"> The ICI is calculated by calculating the mean absolute difference between</span>
<span class="sd"> predicted probabilities and the calibration function evaluated at predicted probabilities.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Apply the calibration function</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">xcenter</span><span class="p">)</span>

<span class="n">y_adjust</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">y_proba</span><span class="p">[:,</span> <span class="n">class_to_calculate</span><span class="p">])</span>

<span class="c1"># Calculate and return the ICI</span>

<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">y_adjust</span> <span class="o">-</span> <span class="n">y_proba</span><span class="p">[:,</span> <span class="n">class_to_calculate</span><span class="p">]))</span></div>



<div class="viewcode-block" id="cal_ICI">
<a class="viewcode-back" href="../../calzone.html#calzone.metrics.cal_ICI">[docs]</a>
<span class="k">def</span> <span class="nf">cal_ICI</span><span class="p">(</span><span class="n">y_adjust</span><span class="p">,</span> <span class="n">y_proba</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>

<span class="sd"> Calculate the Integrated Calibration Index (ICI) for given adjusted probabilities.</span>

<span class="sd"> Args:</span>


<span class="sd"> y_adjust (array-like): Adjusted probabilities. Shape (n_samples,).</span>
<span class="sd"> y_proba (array-like): Original predicted probabilities. Shape (n_samples,).</span>

<span class="sd"> Returns:</span>
<span class="sd"> float: The Integrated Calibration Index (ICI) value.</span>

<span class="sd"> Note:</span>

<span class="sd"> The ICI is calculated by calculating the mean absolute difference between</span>
<span class="sd"> predicted probabilities and the adjusted probabilities.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Calculate and return the ICI</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">trapz</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">y</span> <span class="o">-</span> <span class="n">xcenter</span><span class="p">)</span> <span class="o">*</span> <span class="n">density</span><span class="p">,</span> <span class="n">xcenter</span><span class="p">)</span></div>

<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">y_adjust</span> <span class="o">-</span> <span class="n">y_proba</span><span class="p">))</span></div>


<div class="viewcode-block" id="logit_func">
39 changes: 30 additions & 9 deletions docs/build/html/calzone.html
Original file line number Diff line number Diff line change
@@ -67,6 +67,7 @@
<li class="toctree-l4"><a class="reference internal" href="#calzone.metrics.CalibrationMetrics"><code class="docutils literal notranslate"><span class="pre">CalibrationMetrics</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="#calzone.metrics.cal_ICI"><code class="docutils literal notranslate"><span class="pre">cal_ICI()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="#calzone.metrics.cal_ICI_cox"><code class="docutils literal notranslate"><span class="pre">cal_ICI_cox()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="#calzone.metrics.cal_ICI_func"><code class="docutils literal notranslate"><span class="pre">cal_ICI_func()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="#calzone.metrics.calculate_ece_mce"><code class="docutils literal notranslate"><span class="pre">calculate_ece_mce()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="#calzone.metrics.cox_regression_analysis"><code class="docutils literal notranslate"><span class="pre">cox_regression_analysis()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="#calzone.metrics.get_CI"><code class="docutils literal notranslate"><span class="pre">get_CI()</span></code></a></li>
@@ -240,15 +241,13 @@ <h2>Submodules<a class="headerlink" href="#submodules" title="Link to this headi

<dl class="py function">
<dt class="sig sig-object py" id="calzone.metrics.cal_ICI">
<span class="sig-prename descclassname"><span class="pre">calzone.metrics.</span></span><span class="sig-name descname"><span class="pre">cal_ICI</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y_proba</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">points</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1000</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">class_to_calculate</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/calzone/metrics.html#cal_ICI"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#calzone.metrics.cal_ICI" title="Link to this definition"></a></dt>
<dd><p>Calculate the Integrated Calibration Index (ICI) for a given calibration function.</p>
<span class="sig-prename descclassname"><span class="pre">calzone.metrics.</span></span><span class="sig-name descname"><span class="pre">cal_ICI</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">y_adjust</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y_proba</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/calzone/metrics.html#cal_ICI"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#calzone.metrics.cal_ICI" title="Link to this definition"></a></dt>
<dd><p>Calculate the Integrated Calibration Index (ICI) for given adjusted probabilities.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>func</strong> (<em>callable</em>) – The calibration function to evaluate.</p></li>
<li><p><strong>y_proba</strong> (<em>array-like</em>) – Predicted probabilities for each class. Shape (n_samples, n_classes).</p></li>
<li><p><strong>points</strong> (<em>int</em><em>, </em><em>optional</em>) – Number of points to use for numerical integration. Defaults to 1000.</p></li>
<li><p><strong>class_to_calculate</strong> (<em>int</em><em>, </em><em>optional</em>) – The class index to calculate the ICI for. Defaults to 1.</p></li>
<li><p><strong>y_adjust</strong> (<em>array-like</em>) – Adjusted probabilities. Shape (n_samples,).</p></li>
<li><p><strong>y_proba</strong> (<em>array-like</em>) – Original predicted probabilities. Shape (n_samples,).</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
@@ -257,9 +256,8 @@ <h2>Submodules<a class="headerlink" href="#submodules" title="Link to this headi
</dl>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The ICI is calculated by integrating the absolute difference between
the calibration function and the identity function, weighted by the
density of the predicted probabilities.</p>
<p>The ICI is calculated by calculating the mean absolute difference between
predicted probabilities and the adjusted probabilities.</p>
</div>
</dd></dl>

@@ -293,6 +291,29 @@ <h2>Submodules<a class="headerlink" href="#submodules" title="Link to this headi
</div>
</dd></dl>

<dl class="py function">
<dt class="sig sig-object py" id="calzone.metrics.cal_ICI_func">
<span class="sig-prename descclassname"><span class="pre">calzone.metrics.</span></span><span class="sig-name descname"><span class="pre">cal_ICI_func</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y_proba</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">class_to_calculate</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/calzone/metrics.html#cal_ICI_func"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#calzone.metrics.cal_ICI_func" title="Link to this definition"></a></dt>
<dd><p>Calculate the Integrated Calibration Index (ICI) for a given calibration function.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>func</strong> (<em>callable</em>) – The calibration function to evaluate.</p></li>
<li><p><strong>y_proba</strong> (<em>array-like</em>) – Predicted probabilities for each class. Shape (n_samples, n_classes).</p></li>
<li><p><strong>class_to_calculate</strong> (<em>int</em><em>, </em><em>optional</em>) – The class index to calculate the ICI for. Defaults to 1.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><strong>float</strong> – The Integrated Calibration Index (ICI) value.</p>
</dd>
</dl>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The ICI is calculated by calculating the mean absolute difference between
predicted probabilities and the calibration function evaluated at predicted probabilities.</p>
</div>
</dd></dl>

<dl class="py function">
<dt class="sig sig-object py" id="calzone.metrics.calculate_ece_mce">
<span class="sig-prename descclassname"><span class="pre">calzone.metrics.</span></span><span class="sig-name descname"><span class="pre">calculate_ece_mce</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">reliability</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">confindence</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bin_counts</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/calzone/metrics.html#calculate_ece_mce"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#calzone.metrics.calculate_ece_mce" title="Link to this definition"></a></dt>
2 changes: 2 additions & 0 deletions docs/build/html/genindex.html
Original file line number Diff line number Diff line change
@@ -151,6 +151,8 @@ <h2 id="C">C</h2>
<li><a href="calzone.html#calzone.metrics.cal_ICI">cal_ICI() (in module calzone.metrics)</a>
</li>
<li><a href="calzone.html#calzone.metrics.cal_ICI_cox">cal_ICI_cox() (in module calzone.metrics)</a>
</li>
<li><a href="calzone.html#calzone.metrics.cal_ICI_func">cal_ICI_func() (in module calzone.metrics)</a>
</li>
<li><a href="calzone.html#calzone.metrics.calculate_ece_mce">calculate_ece_mce() (in module calzone.metrics)</a>
</li>
1 change: 1 addition & 0 deletions docs/build/html/modules.html
Original file line number Diff line number Diff line change
@@ -107,6 +107,7 @@ <h1>calzone<a class="headerlink" href="#calzone" title="Link to this heading">
</li>
<li class="toctree-l3"><a class="reference internal" href="calzone.html#calzone.metrics.cal_ICI"><code class="docutils literal notranslate"><span class="pre">cal_ICI()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="calzone.html#calzone.metrics.cal_ICI_cox"><code class="docutils literal notranslate"><span class="pre">cal_ICI_cox()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="calzone.html#calzone.metrics.cal_ICI_func"><code class="docutils literal notranslate"><span class="pre">cal_ICI_func()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="calzone.html#calzone.metrics.calculate_ece_mce"><code class="docutils literal notranslate"><span class="pre">calculate_ece_mce()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="calzone.html#calzone.metrics.cox_regression_analysis"><code class="docutils literal notranslate"><span class="pre">cox_regression_analysis()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="calzone.html#calzone.metrics.get_CI"><code class="docutils literal notranslate"><span class="pre">get_CI()</span></code></a></li>
Binary file modified docs/build/html/objects.inv
Binary file not shown.
2 changes: 1 addition & 1 deletion docs/build/html/searchindex.js

Large diffs are not rendered by default.

Loading

0 comments on commit 86c1802

Please sign in to comment.