Skip to content

Commit df51b75

Browse files
Deployed 930191f with MkDocs version: 1.6.0
1 parent f80a66e commit df51b75

3 files changed

Lines changed: 116 additions & 36 deletions

File tree

reference/spotpython/light/trainmodel/index.html

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6774,9 +6774,7 @@ <h2 id="spotpython.light.trainmodel.train_model_xai" class="doc doc-heading">
67746774
<span class="normal">728</span>
67756775
<span class="normal">729</span>
67766776
<span class="normal">730</span>
6777-
<span class="normal">731</span>
6778-
<span class="normal">732</span>
6779-
<span class="normal">733</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">train_model_xai</span><span class="p">(</span><span class="n">config</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span> <span class="n">fun_control</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span> <span class="n">timestamp</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">float</span><span class="p">:</span>
6777+
<span class="normal">731</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">train_model_xai</span><span class="p">(</span><span class="n">config</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span> <span class="n">fun_control</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span> <span class="n">timestamp</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">float</span><span class="p">:</span>
67806778
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
67816779
<span class="sd"> Trains a model using the given configuration and function control parameters. Performs feature attribution analysis and calculates consistency of these methods.</span>
67826780

@@ -7120,8 +7118,6 @@ <h2 id="spotpython.light.trainmodel.train_model_xai" class="doc doc-heading">
71207118

71217119
<span class="n">result_xai</span> <span class="o">=</span> <span class="n">calculate_xai_consistency</span><span class="p">(</span><span class="n">attributions</span><span class="p">)</span>
71227120

7123-
7124-
71257121
<span class="c1"># -------------------------------------------------------------------------------------------------------------------</span>
71267122

71277123
<span class="k">return</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;val_loss&quot;</span><span class="p">],</span> <span class="n">result_xai</span>

reference/spotpython/utils/metrics/index.html

Lines changed: 114 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -5458,8 +5458,10 @@ <h2 id="spotpython.utils.metrics.calculate_xai_consistency" class="doc doc-headi
54585458

54595459
<div class="doc doc-contents ">
54605460

5461-
<p>Calculates the consistency of XAI methods by computing the mean of the upper triangle
5462-
of the correlation matrix of the provided attributions.</p>
5461+
<p>Calculate the consistency between different XAI methods.
5462+
Computes the pairwise correlation between different XAI methods&rsquo; attributions
5463+
and returns their mean correlation as a measure of consistency. A higher value
5464+
indicates greater agreement between different XAI methods.</p>
54635465

54645466

54655467
<p><span class="doc-section-title">Parameters:</span></p>
@@ -5480,8 +5482,9 @@ <h2 id="spotpython.utils.metrics.calculate_xai_consistency" class="doc doc-headi
54805482
</td>
54815483
<td>
54825484
<div class="doc-md-description">
5483-
<p>Array of shape (n_methods, n_features) containing
5484-
the attributions from different XAI methods.</p>
5485+
<p>Array of shape (n_methods, n_features) containing
5486+
feature importance scores from different XAI methods. Each row represents
5487+
a different XAI method&rsquo;s attributions, and each column represents a feature.</p>
54855488
</div>
54865489
</td>
54875490
<td>
@@ -5503,19 +5506,49 @@ <h2 id="spotpython.utils.metrics.calculate_xai_consistency" class="doc doc-headi
55035506
<tbody>
55045507
<tr class="doc-section-item">
55055508
<td><code>float</code></td> <td>
5509+
<code>float</code>
55065510
</td>
55075511
<td>
55085512
<div class="doc-md-description">
5509-
<p>Mean value of the upper triangle of the correlation matrix.</p>
5513+
<p>Mean correlation between XAI methods, ranging from -1 to 1.
5514+
- 1: Perfect consistency between methods
5515+
- 0: No consistency between methods
5516+
- -1: Perfect negative consistency between methods</p>
55105517
</div>
55115518
</td>
55125519
</tr>
55135520
</tbody>
55145521
</table>
55155522

5523+
5524+
<p><span class="doc-section-title">Examples:</span></p>
5525+
<div class="highlight"><pre><span></span><code><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
5526+
<span class="gp">&gt;&gt;&gt; </span><span class="c1"># Three XAI methods&#39; attributions for four features</span>
5527+
<span class="gp">&gt;&gt;&gt; </span><span class="n">attributions</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span>
5528+
<span class="gp">... </span> <span class="p">[</span><span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.2</span><span class="p">,</span> <span class="mf">0.3</span><span class="p">,</span> <span class="mf">0.4</span><span class="p">],</span> <span class="c1"># Method 1</span>
5529+
<span class="gp">... </span> <span class="p">[</span><span class="mf">0.2</span><span class="p">,</span> <span class="mf">0.3</span><span class="p">,</span> <span class="mf">0.4</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">],</span> <span class="c1"># Method 2</span>
5530+
<span class="gp">... </span> <span class="p">[</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.2</span><span class="p">,</span> <span class="mf">0.3</span><span class="p">]</span> <span class="c1"># Method 3</span>
5531+
<span class="gp">... </span><span class="p">])</span>
5532+
<span class="gp">&gt;&gt;&gt; </span><span class="n">consistency</span> <span class="o">=</span> <span class="n">calculate_xai_consistency</span><span class="p">(</span><span class="n">attributions</span><span class="p">)</span>
5533+
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;XAI Consistency: </span><span class="si">{</span><span class="n">consistency</span><span class="si">:</span><span class="s2">.2f</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
5534+
<span class="go">Attribution Correlation Matrix:</span>
5535+
<span class="go">[[ 1. 0.97 0.98]</span>
5536+
<span class="go"> [ 0.97 1. 0.99]</span>
5537+
<span class="go"> [ 0.98 0.99 1. ]]</span>
5538+
<span class="go">XAI Consistency: 0.98</span>
5539+
</code></pre></div>
5540+
5541+
5542+
<details class="note" open>
5543+
<summary>Note</summary>
5544+
<p>The correlation matrix is computed using numpy&rsquo;s corrcoef function, which
5545+
calculates Pearson correlation coefficients. Only the upper triangle of
5546+
the correlation matrix is used to avoid counting correlations twice.</p>
5547+
</details>
55165548
<details class="quote">
55175549
<summary>Source code in <code>spotpython/utils/metrics.py</code></summary>
5518-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">202</span>
5550+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">201</span>
5551+
<span class="normal">202</span>
55195552
<span class="normal">203</span>
55205553
<span class="normal">204</span>
55215554
<span class="normal">205</span>
@@ -5538,30 +5571,81 @@ <h2 id="spotpython.utils.metrics.calculate_xai_consistency" class="doc doc-headi
55385571
<span class="normal">222</span>
55395572
<span class="normal">223</span>
55405573
<span class="normal">224</span>
5541-
<span class="normal">225</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">calculate_xai_consistency</span><span class="p">(</span><span class="n">attributions</span><span class="p">):</span>
5542-
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
5543-
<span class="sd"> Calculates the consistency of XAI methods by computing the mean of the upper triangle</span>
5544-
<span class="sd"> of the correlation matrix of the provided attributions.</span>
5545-
5546-
<span class="sd"> Args:</span>
5547-
<span class="sd"> attributions (np.ndarray): Array of shape (n_methods, n_features) containing </span>
5548-
<span class="sd"> the attributions from different XAI methods.</span>
5549-
5550-
<span class="sd"> Returns:</span>
5551-
<span class="sd"> float: Mean value of the upper triangle of the correlation matrix.</span>
5552-
<span class="sd"> &quot;&quot;&quot;</span>
5553-
<span class="n">global_attr_np</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">attributions</span><span class="p">)</span>
5554-
<span class="n">corr_matrix</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">corrcoef</span><span class="p">(</span><span class="n">global_attr_np</span><span class="p">)</span>
5555-
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Attribution Correlation Matrix:&quot;</span><span class="p">)</span>
5556-
<span class="nb">print</span><span class="p">(</span><span class="n">corr_matrix</span><span class="p">)</span>
5557-
5558-
<span class="c1"># Calculate the mean of the upper triangle of the correlation matrix</span>
5559-
<span class="n">upper_triangle_indices</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">triu_indices_from</span><span class="p">(</span><span class="n">corr_matrix</span><span class="p">,</span> <span class="n">k</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
5560-
<span class="n">upper_triangle_values</span> <span class="o">=</span> <span class="n">corr_matrix</span><span class="p">[</span><span class="n">upper_triangle_indices</span><span class="p">]</span>
5561-
<span class="n">result_xai</span> <span class="o">=</span> <span class="n">upper_triangle_values</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span>
5562-
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;XAI Consistency (mean of upper triangle of correlation matrix):&quot;</span><span class="p">)</span>
5563-
<span class="nb">print</span><span class="p">(</span><span class="n">result_xai</span><span class="p">)</span>
5564-
<span class="k">return</span> <span class="n">result_xai</span>
5574+
<span class="normal">225</span>
5575+
<span class="normal">226</span>
5576+
<span class="normal">227</span>
5577+
<span class="normal">228</span>
5578+
<span class="normal">229</span>
5579+
<span class="normal">230</span>
5580+
<span class="normal">231</span>
5581+
<span class="normal">232</span>
5582+
<span class="normal">233</span>
5583+
<span class="normal">234</span>
5584+
<span class="normal">235</span>
5585+
<span class="normal">236</span>
5586+
<span class="normal">237</span>
5587+
<span class="normal">238</span>
5588+
<span class="normal">239</span>
5589+
<span class="normal">240</span>
5590+
<span class="normal">241</span>
5591+
<span class="normal">242</span>
5592+
<span class="normal">243</span>
5593+
<span class="normal">244</span>
5594+
<span class="normal">245</span>
5595+
<span class="normal">246</span>
5596+
<span class="normal">247</span>
5597+
<span class="normal">248</span>
5598+
<span class="normal">249</span>
5599+
<span class="normal">250</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">calculate_xai_consistency</span><span class="p">(</span><span class="n">attributions</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">float</span><span class="p">:</span>
5600+
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Calculate the consistency between different XAI methods.</span>
5601+
<span class="sd"> Computes the pairwise correlation between different XAI methods&#39; attributions</span>
5602+
<span class="sd"> and returns their mean correlation as a measure of consistency. A higher value</span>
5603+
<span class="sd"> indicates greater agreement between different XAI methods.</span>
5604+
5605+
<span class="sd"> Args:</span>
5606+
<span class="sd"> attributions (np.ndarray): Array of shape (n_methods, n_features) containing</span>
5607+
<span class="sd"> feature importance scores from different XAI methods. Each row represents</span>
5608+
<span class="sd"> a different XAI method&#39;s attributions, and each column represents a feature.</span>
5609+
5610+
<span class="sd"> Returns:</span>
5611+
<span class="sd"> float: Mean correlation between XAI methods, ranging from -1 to 1.</span>
5612+
<span class="sd"> - 1: Perfect consistency between methods</span>
5613+
<span class="sd"> - 0: No consistency between methods</span>
5614+
<span class="sd"> - -1: Perfect negative consistency between methods</span>
5615+
5616+
<span class="sd"> Examples:</span>
5617+
<span class="sd"> &gt;&gt;&gt; import numpy as np</span>
5618+
<span class="sd"> &gt;&gt;&gt; # Three XAI methods&#39; attributions for four features</span>
5619+
<span class="sd"> &gt;&gt;&gt; attributions = np.array([</span>
5620+
<span class="sd"> ... [0.1, 0.2, 0.3, 0.4], # Method 1</span>
5621+
<span class="sd"> ... [0.2, 0.3, 0.4, 0.5], # Method 2</span>
5622+
<span class="sd"> ... [0.0, 0.1, 0.2, 0.3] # Method 3</span>
5623+
<span class="sd"> ... ])</span>
5624+
<span class="sd"> &gt;&gt;&gt; consistency = calculate_xai_consistency(attributions)</span>
5625+
<span class="sd"> &gt;&gt;&gt; print(f&quot;XAI Consistency: {consistency:.2f}&quot;)</span>
5626+
<span class="sd"> Attribution Correlation Matrix:</span>
5627+
<span class="sd"> [[ 1. 0.97 0.98]</span>
5628+
<span class="sd"> [ 0.97 1. 0.99]</span>
5629+
<span class="sd"> [ 0.98 0.99 1. ]]</span>
5630+
<span class="sd"> XAI Consistency: 0.98</span>
5631+
5632+
<span class="sd"> Note:</span>
5633+
<span class="sd"> The correlation matrix is computed using numpy&#39;s corrcoef function, which</span>
5634+
<span class="sd"> calculates Pearson correlation coefficients. Only the upper triangle of</span>
5635+
<span class="sd"> the correlation matrix is used to avoid counting correlations twice.</span>
5636+
<span class="sd"> &quot;&quot;&quot;</span>
5637+
<span class="n">global_attr_np</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">attributions</span><span class="p">)</span>
5638+
<span class="n">corr_matrix</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">corrcoef</span><span class="p">(</span><span class="n">global_attr_np</span><span class="p">)</span>
5639+
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Attribution Correlation Matrix:&quot;</span><span class="p">)</span>
5640+
<span class="nb">print</span><span class="p">(</span><span class="n">corr_matrix</span><span class="p">)</span>
5641+
5642+
<span class="c1"># Calculate the mean of the upper triangle of the correlation matrix</span>
5643+
<span class="n">upper_triangle_indices</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">triu_indices_from</span><span class="p">(</span><span class="n">corr_matrix</span><span class="p">,</span> <span class="n">k</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
5644+
<span class="n">upper_triangle_values</span> <span class="o">=</span> <span class="n">corr_matrix</span><span class="p">[</span><span class="n">upper_triangle_indices</span><span class="p">]</span>
5645+
<span class="n">result_xai</span> <span class="o">=</span> <span class="n">upper_triangle_values</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span>
5646+
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;XAI Consistency (mean of upper triangle of correlation matrix):&quot;</span><span class="p">)</span>
5647+
<span class="nb">print</span><span class="p">(</span><span class="n">result_xai</span><span class="p">)</span>
5648+
<span class="k">return</span> <span class="n">result_xai</span>
55655649
</code></pre></div></td></tr></table></div>
55665650
</details>
55675651
</div>

search/search_index.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)