Mercurial > repos > goeckslab > image_learner
annotate plotly_plots.py @ 18:bbf30253c99f draft default tip
planemo upload for repository https://github.com/goeckslab/gleam.git commit c155acd3616dfac920b17653179d7bc38ba48e39
| author | goeckslab |
|---|---|
| date | Sun, 14 Dec 2025 03:27:12 +0000 |
| parents | db9be962dc13 |
| children |
| rev | line source |
|---|---|
|
8
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
1 import json |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
2 from pathlib import Path |
|
8
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
3 from typing import Dict, List, Optional |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
4 |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
5 import numpy as np |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
6 import pandas as pd |
|
8
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
7 import plotly.graph_objects as go |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
8 import plotly.io as pio |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
9 from constants import LABEL_COLUMN_NAME, SPLIT_COLUMN_NAME |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
10 from sklearn.metrics import ( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
11 accuracy_score, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
12 auc, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
13 average_precision_score, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
14 f1_score, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
15 precision_recall_curve, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
16 precision_score, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
17 recall_score, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
18 roc_curve, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
19 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
20 from sklearn.preprocessing import label_binarize |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
21 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
22 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
23 def _style_fig(fig: go.Figure, font_size: int = 12) -> go.Figure: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
24 """Apply consistent styling across Plotly figures.""" |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
25 fig.update_layout( |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
26 font=dict(size=font_size), |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
27 plot_bgcolor="#ffffff", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
28 paper_bgcolor="#ffffff", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
29 ) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
30 fig.update_xaxes(gridcolor="#e8e8e8") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
31 fig.update_yaxes(gridcolor="#e8e8e8") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
32 return fig |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
33 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
34 |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
35 def _fig_to_html( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
36 fig: go.Figure, *, include_js: bool = False, config: Optional[dict] = None |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
37 ) -> str: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
38 """Render a Plotly figure to a lightweight HTML fragment.""" |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
39 include_plotlyjs = "cdn" if include_js else False |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
40 return pio.to_html( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
41 fig, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
42 full_html=False, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
43 include_plotlyjs=include_plotlyjs, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
44 config=config, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
45 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
46 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
47 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
48 def _wrap_plot( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
49 title: str, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
50 fig: go.Figure, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
51 *, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
52 include_js: bool = False, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
53 config: Optional[dict] = None, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
54 ) -> Dict[str, str]: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
55 """Package a figure with its title for downstream HTML rendering.""" |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
56 return {"title": title, "html": _fig_to_html(fig, include_js=include_js, config=config)} |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
57 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
58 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
59 def _line_chart( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
60 traces: List[tuple], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
61 *, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
62 title: str, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
63 yaxis_title: str, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
64 ) -> go.Figure: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
65 """Build a basic epoch-indexed line chart for train/val/test curves.""" |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
66 fig = go.Figure() |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
67 for name, series in traces: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
68 if not series: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
69 continue |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
70 epochs = list(range(1, len(series) + 1)) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
71 fig.add_trace( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
72 go.Scatter( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
73 x=epochs, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
74 y=series, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
75 mode="lines+markers", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
76 name=name, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
77 line=dict(width=4), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
78 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
79 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
80 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
81 fig.update_layout( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
82 title=dict(text=title, x=0.5), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
83 xaxis_title="Epoch", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
84 yaxis_title=yaxis_title, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
85 width=760, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
86 height=520, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
87 hovermode="x unified", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
88 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
89 _style_fig(fig) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
90 return fig |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
91 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
92 |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
93 def _labels_from_metadata_dict(meta_dict: dict) -> List[str]: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
94 """Extract ordered label names from Ludwig train_set_metadata.""" |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
95 if not isinstance(meta_dict, dict): |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
96 return [] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
97 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
98 for key in ("idx2str", "idx2label", "vocab"): |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
99 seq = meta_dict.get(key) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
100 if isinstance(seq, list) and seq: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
101 return [str(v) for v in seq] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
102 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
103 str2idx = meta_dict.get("str2idx") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
104 if isinstance(str2idx, dict) and str2idx: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
105 int_indices = [v for v in str2idx.values() if isinstance(v, int)] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
106 if int_indices: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
107 max_idx = max(int_indices) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
108 ordered = [None] * (max_idx + 1) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
109 for name, idx in str2idx.items(): |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
110 if isinstance(idx, int) and 0 <= idx < len(ordered): |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
111 ordered[idx] = name |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
112 return [str(v) for v in ordered if v is not None] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
113 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
114 return [] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
115 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
116 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
117 def _resolve_confusion_labels( |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
118 label_stats: dict, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
119 n_classes: int, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
120 metadata_csv_path: Optional[str], |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
121 train_set_metadata_path: Optional[str], |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
122 ) -> List[str]: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
123 """Prefer original labels from metadata; fall back to stats if unavailable.""" |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
124 if train_set_metadata_path: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
125 try: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
126 meta_path = Path(train_set_metadata_path) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
127 if meta_path.exists(): |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
128 with open(meta_path, "r") as f: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
129 meta_json = json.load(f) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
130 label_meta = meta_json.get(LABEL_COLUMN_NAME) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
131 if not isinstance(label_meta, dict): |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
132 label_meta = next( |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
133 ( |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
134 v |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
135 for v in meta_json.values() |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
136 if isinstance(v, dict) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
137 and any(k in v for k in ("idx2str", "str2idx", "idx2label", "vocab")) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
138 ), |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
139 None, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
140 ) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
141 labels_from_meta = _labels_from_metadata_dict(label_meta) if label_meta else [] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
142 if labels_from_meta and len(labels_from_meta) >= n_classes: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
143 return [str(label) for label in labels_from_meta[:n_classes]] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
144 except Exception as exc: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
145 print(f"Warning: Unable to read labels from train_set_metadata: {exc}") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
146 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
147 if metadata_csv_path: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
148 try: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
149 csv_path = Path(metadata_csv_path) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
150 if csv_path.exists(): |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
151 df_meta = pd.read_csv(csv_path) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
152 if LABEL_COLUMN_NAME in df_meta.columns: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
153 uniques = df_meta[LABEL_COLUMN_NAME].dropna().unique().tolist() |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
154 if uniques and len(uniques) >= n_classes: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
155 return [str(u) for u in uniques[:n_classes]] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
156 except Exception as exc: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
157 print(f"Warning: Unable to read labels from metadata CSV: {exc}") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
158 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
159 pcs = label_stats.get("per_class_stats", {}) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
160 if pcs: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
161 pcs_labels = [str(k) for k in pcs.keys()] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
162 if len(pcs_labels) >= n_classes: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
163 return pcs_labels[:n_classes] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
164 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
165 labels = label_stats.get("labels") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
166 if not labels: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
167 labels = [str(i) for i in range(n_classes)] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
168 if len(labels) < n_classes: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
169 labels = labels + [str(i) for i in range(len(labels), n_classes)] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
170 return [str(label) for label in labels[:n_classes]] |
|
8
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
171 |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
172 |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
173 def build_classification_plots( |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
174 test_stats_path: str, |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
175 training_stats_path: Optional[str] = None, |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
176 metadata_csv_path: Optional[str] = None, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
177 train_set_metadata_path: Optional[str] = None, |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
178 threshold: Optional[float] = None, |
|
8
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
179 ) -> List[Dict[str, str]]: |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
180 """ |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
181 Read Ludwig’s test_statistics.json and build three interactive Plotly panels: |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
182 - Confusion Matrix |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
183 - ROC-AUC |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
184 - Classification Report Heatmap |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
185 |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
186 If metadata paths are provided, the confusion matrix axes will use the original |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
187 label values from the training metadata rather than integer-encoded labels. |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
188 |
|
8
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
189 Returns a list of dicts, each with: |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
190 { |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
191 "title": <plot title>, |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
192 "html": <HTML fragment for embedding> |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
193 } |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
194 """ |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
195 # --- Load test stats --- |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
196 with open(test_stats_path, "r") as f: |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
197 test_stats = json.load(f) |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
198 label_stats = test_stats["label"] |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
199 |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
200 # common sizing |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
201 cell = 40 |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
202 n_classes = len(label_stats["confusion_matrix"]) |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
203 side_px = max(cell * n_classes + 200, 600) |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
204 common_cfg = {"displayModeBar": True, "scrollZoom": True} |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
205 |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
206 plots: List[Dict[str, str]] = [] |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
207 |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
208 # 0) Confusion Matrix |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
209 cm = np.array(label_stats["confusion_matrix"], dtype=int) |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
210 labels = _resolve_confusion_labels( |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
211 label_stats, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
212 n_classes, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
213 metadata_csv_path=metadata_csv_path, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
214 train_set_metadata_path=train_set_metadata_path, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
215 ) |
|
8
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
216 total = cm.sum() |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
217 |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
218 fig_cm = go.Figure( |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
219 go.Heatmap( |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
220 z=cm, |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
221 x=labels, |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
222 y=labels, |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
223 colorscale="Blues", |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
224 showscale=True, |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
225 colorbar=dict(title="Count"), |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
226 ) |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
227 ) |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
228 fig_cm.update_traces(xgap=2, ygap=2) |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
229 cm_title = "Confusion Matrix" |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
230 if threshold is not None: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
231 cm_title = f"Confusion Matrix (Threshold: {threshold})" |
|
8
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
232 fig_cm.update_layout( |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
233 title=dict(text=cm_title, x=0.5), |
|
8
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
234 xaxis_title="Predicted", |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
235 yaxis_title="Observed", |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
236 yaxis_autorange="reversed", |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
237 width=side_px, |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
238 height=side_px, |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
239 margin=dict(t=100, l=80, r=80, b=80), |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
240 ) |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
241 _style_fig(fig_cm) |
|
8
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
242 |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
243 # annotate counts and percentages |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
244 mval = cm.max() if cm.size else 0 |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
245 thresh = mval / 2 |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
246 for i in range(cm.shape[0]): |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
247 for j in range(cm.shape[1]): |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
248 v = cm[i, j] |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
249 pct = (v / total * 100) if total > 0 else 0 |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
250 color = "white" if v > thresh else "black" |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
251 fig_cm.add_annotation( |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
252 x=labels[j], |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
253 y=labels[i], |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
254 text=f"<b>{v}</b>", |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
255 showarrow=False, |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
256 font=dict(color=color, size=14), |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
257 xanchor="center", |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
258 yanchor="bottom", |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
259 yshift=2, |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
260 ) |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
261 fig_cm.add_annotation( |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
262 x=labels[j], |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
263 y=labels[i], |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
264 text=f"{pct:.1f}%", |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
265 showarrow=False, |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
266 font=dict(color=color, size=13), |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
267 xanchor="center", |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
268 yanchor="top", |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
269 yshift=-2, |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
270 ) |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
271 |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
272 plots.append( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
273 _wrap_plot("Confusion Matrix", fig_cm, include_js=True, config=common_cfg) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
274 ) |
|
8
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
275 |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
276 # 1) ROC / PR curves only for binary tasks |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
277 if n_classes == 2: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
278 roc_plot = _build_static_roc_plot(label_stats, common_cfg, friendly_labels=labels) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
279 if roc_plot: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
280 plots.append(roc_plot) |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
281 |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
282 pr_plot = _build_precision_recall_plot(label_stats, common_cfg) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
283 if pr_plot: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
284 plots.append(pr_plot) |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
285 |
|
8
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
286 # 2) Classification Report Heatmap |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
287 pcs = label_stats.get("per_class_stats", {}) |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
288 if pcs: |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
289 classes = list(pcs.keys()) |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
290 metrics = [ |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
291 "precision", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
292 "recall", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
293 "f1_score", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
294 "accuracy", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
295 "matthews_correlation_coefficient", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
296 "specificity", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
297 ] |
|
8
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
298 z, txt = [], [] |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
299 for c in classes: |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
300 row, trow = [], [] |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
301 for m in metrics: |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
302 val = pcs[c].get(m, 0) |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
303 row.append(val) |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
304 trow.append(f"{val:.2f}") |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
305 z.append(row) |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
306 txt.append(trow) |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
307 |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
308 fig_cr = go.Figure( |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
309 go.Heatmap( |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
310 z=z, |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
311 x=[m.replace("_", " ") for m in metrics], |
|
8
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
312 y=[str(c) for c in classes], |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
313 text=txt, |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
314 texttemplate="%{text}", |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
315 colorscale="Reds", |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
316 showscale=True, |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
317 colorbar=dict(title="Value"), |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
318 ) |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
319 ) |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
320 fig_cr.update_layout( |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
321 title="Per-Class metrics", |
|
8
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
322 xaxis_title="", |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
323 yaxis_title="Class", |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
324 width=side_px, |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
325 height=side_px, |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
326 margin=dict(t=80, l=80, r=80, b=80), |
|
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
327 ) |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
328 _style_fig(fig_cr) |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
329 plots.append( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
330 _wrap_plot("Per-Class metrics", fig_cr, config=common_cfg) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
331 ) |
|
8
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
332 |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
333 # 3) Prediction Diagnostics (from predictions.csv) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
334 # Note: appended separately in generate_html_report, not returned here. |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
335 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
336 return plots |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
337 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
338 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
339 def build_train_validation_plots(train_stats_path: str) -> List[Dict[str, str]]: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
340 """Generate Train/Validation learning curve plots from training_statistics.json.""" |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
341 if not train_stats_path or not Path(train_stats_path).exists(): |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
342 return [] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
343 try: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
344 with open(train_stats_path, "r") as f: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
345 train_stats = json.load(f) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
346 except Exception as exc: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
347 print(f"Warning: Unable to read training statistics: {exc}") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
348 return [] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
349 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
350 label_train = (train_stats.get("training") or {}).get("label", {}) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
351 label_val = (train_stats.get("validation") or {}).get("label", {}) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
352 if not label_train and not label_val: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
353 return [] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
354 plots: List[Dict[str, str]] = [] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
355 include_js = True # Load Plotly.js once for this group |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
356 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
357 def _get_series(stats: dict, metric: str) -> List[float]: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
358 vals = stats.get(metric, []) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
359 if isinstance(vals, list): |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
360 return [float(v) for v in vals] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
361 try: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
362 return [float(vals)] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
363 except Exception: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
364 return [] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
365 |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
366 metric_specs = [ |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
367 ("loss", "Loss across epochs", "Loss"), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
368 ("accuracy", "Accuracy across epochs", "Accuracy"), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
369 ("roc_auc", "ROC-AUC across epochs", "ROC-AUC"), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
370 ("precision", "Precision across epochs", "Precision"), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
371 ("recall", "Recall/Sensitivity across epochs", "Recall"), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
372 ("specificity", "Specificity across epochs", "Specificity"), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
373 ] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
374 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
375 for key, title, yaxis in metric_specs: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
376 train_series = _get_series(label_train, key) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
377 val_series = _get_series(label_val, key) |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
378 if not train_series and not val_series: |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
379 continue |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
380 fig = _line_chart( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
381 [("Train", train_series), ("Validation", val_series)], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
382 title=title, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
383 yaxis_title=yaxis, |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
384 ) |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
385 plots.append(_wrap_plot(title, fig, include_js=include_js)) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
386 include_js = False |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
387 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
388 # Precision vs Recall evolution (validation) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
389 val_prec = _get_series(label_val, "precision") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
390 val_rec = _get_series(label_val, "recall") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
391 if val_prec and val_rec: |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
392 max_len = min(len(val_prec), len(val_rec)) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
393 fig_pr = _line_chart( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
394 [ |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
395 ("Precision", val_prec[:max_len]), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
396 ("Recall", val_rec[:max_len]), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
397 ], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
398 title="Validation Precision and Recall by Epoch", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
399 yaxis_title="Value", |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
400 ) |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
401 plots.append(_wrap_plot("Precision vs Recall Evolution", fig_pr, include_js=include_js)) |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
402 include_js = False |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
403 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
404 def _compute_f1(p: List[float], r: List[float]) -> List[float]: |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
405 return [ |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
406 0.0 if (prec + rec) == 0 else 2 * prec * rec / (prec + rec) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
407 for prec, rec in zip(p, r) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
408 ] |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
409 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
410 f1_train = _compute_f1(_get_series(label_train, "precision"), _get_series(label_train, "recall")) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
411 f1_val = _compute_f1(val_prec, val_rec) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
412 if f1_train or f1_val: |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
413 fig_f1 = _line_chart( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
414 [("Train", f1_train), ("Validation", f1_val)], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
415 title="F1-Score across epochs (derived)", |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
416 yaxis_title="F1-Score", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
417 ) |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
418 plots.append(_wrap_plot("F1-Score across epochs (derived)", fig_f1, include_js=include_js)) |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
419 include_js = False |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
420 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
421 # Overfitting Gap: Train vs Val ROC-AUC (gap) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
422 roc_train = _get_series(label_train, "roc_auc") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
423 roc_val = _get_series(label_val, "roc_auc") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
424 if roc_train and roc_val: |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
425 max_len = min(len(roc_train), len(roc_val)) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
426 gaps = [t - v for t, v in zip(roc_train[:max_len], roc_val[:max_len])] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
427 fig_gap = _line_chart( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
428 [("Train - Val ROC-AUC", gaps)], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
429 title="Overfitting gap: ROC-AUC across epochs", |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
430 yaxis_title="Gap", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
431 ) |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
432 plots.append(_wrap_plot("Overfitting gap: ROC-AUC across epochs", fig_gap, include_js=include_js)) |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
433 include_js = False |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
434 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
435 # Best Epoch Dashboard (based on max val ROC-AUC) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
436 if roc_val: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
437 best_idx = int(np.argmax(roc_val)) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
438 best_epoch = best_idx + 1 |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
439 metrics_at_best: Dict[str, Optional[float]] = { |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
440 "ROC-AUC": roc_val[best_idx] if best_idx < len(roc_val) else None |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
441 } |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
442 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
443 for metric_key, label in [ |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
444 ("accuracy", "Accuracy"), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
445 ("balanced_accuracy", "Balanced Accuracy"), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
446 ("precision", "Precision"), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
447 ("recall", "Recall"), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
448 ("specificity", "Specificity"), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
449 ("loss", "Loss"), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
450 ]: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
451 series = _get_series(label_val, metric_key) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
452 if series and best_idx < len(series): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
453 metrics_at_best[label] = series[best_idx] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
454 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
455 if f1_val and best_idx < len(f1_val): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
456 metrics_at_best["F1-Score (derived)"] = f1_val[best_idx] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
457 |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
458 fig_best = go.Figure() |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
459 for name, value in metrics_at_best.items(): |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
460 if value is not None: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
461 fig_best.add_trace(go.Bar(name=name, x=[name], y=[value])) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
462 fig_best.update_layout( |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
463 title=dict(text=f"Best Epoch Dashboard (Val ROC-AUC @ epoch {best_epoch})", x=0.5), |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
464 xaxis_title="Metric", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
465 yaxis_title="Value", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
466 width=760, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
467 height=520, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
468 showlegend=False, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
469 ) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
470 _style_fig(fig_best) |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
471 plots.append(_wrap_plot("Best Validation Epoch Snapshot (Metrics)", fig_best, include_js=include_js)) |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
472 |
|
8
85e6f4b2ad18
planemo upload for repository https://github.com/goeckslab/gleam.git commit 8a42eb9b33df7e1df5ad5153b380e20b910a05b6
goeckslab
parents:
diff
changeset
|
473 return plots |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
474 |
|
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
475 |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
476 def _get_regression_series(split_stats: dict, metric: str) -> List[float]: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
477 if metric not in split_stats: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
478 return [] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
479 vals = split_stats.get(metric, []) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
480 if isinstance(vals, list): |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
481 return [float(v) for v in vals] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
482 try: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
483 return [float(vals)] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
484 except Exception: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
485 return [] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
486 |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
487 |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
488 def _regression_line_plot( |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
489 train_split: dict, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
490 val_split: dict, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
491 metric_key: str, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
492 title: str, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
493 yaxis_title: str, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
494 include_js: bool, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
495 ) -> Optional[Dict[str, str]]: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
496 train_series = _get_regression_series(train_split, metric_key) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
497 val_series = _get_regression_series(val_split, metric_key) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
498 if not train_series and not val_series: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
499 return None |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
500 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
501 fig = _line_chart( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
502 [("Train", train_series), ("Validation", val_series)], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
503 title=title, |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
504 yaxis_title=yaxis_title, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
505 ) |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
506 return _wrap_plot(title, fig, include_js=include_js) |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
507 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
508 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
509 def build_regression_train_val_plots(train_stats_path: str) -> List[Dict[str, str]]: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
510 """Generate regression Train/Validation learning curve plots from training_statistics.json.""" |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
511 if not train_stats_path or not Path(train_stats_path).exists(): |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
512 return [] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
513 try: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
514 with open(train_stats_path, "r") as f: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
515 train_stats = json.load(f) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
516 except Exception as exc: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
517 print(f"Warning: Unable to read training statistics: {exc}") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
518 return [] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
519 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
520 label_train = (train_stats.get("training") or {}).get("label", {}) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
521 label_val = (train_stats.get("validation") or {}).get("label", {}) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
522 if not label_train and not label_val: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
523 return [] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
524 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
525 plots: List[Dict[str, str]] = [] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
526 include_js = True |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
527 for metric_key, title, ytitle in [ |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
528 ("mean_absolute_error", "Mean Absolute Error across epochs", "MAE"), |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
529 ("root_mean_squared_error", "Root Mean Squared Error across epochs", "RMSE"), |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
530 ("mean_absolute_percentage_error", "Mean Absolute Percentage Error across epochs", "MAPE"), |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
531 ("r2", "R² across epochs", "R²"), |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
532 ("loss", "Loss across epochs", "Loss"), |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
533 ]: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
534 plot = _regression_line_plot(label_train, label_val, metric_key, title, ytitle, include_js) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
535 if plot: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
536 plots.append(plot) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
537 include_js = False |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
538 return plots |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
539 |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
540 |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
541 def build_regression_test_plots(train_stats_path: str) -> List[Dict[str, str]]: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
542 """Generate regression Test learning curves from training_statistics.json.""" |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
543 if not train_stats_path or not Path(train_stats_path).exists(): |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
544 return [] |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
545 try: |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
546 with open(train_stats_path, "r") as f: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
547 train_stats = json.load(f) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
548 except Exception as exc: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
549 print(f"Warning: Unable to read training statistics: {exc}") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
550 return [] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
551 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
552 label_test = (train_stats.get("test") or {}).get("label", {}) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
553 if not label_test: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
554 return [] |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
555 |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
556 plots: List[Dict[str, str]] = [] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
557 include_js = True |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
558 metrics = [ |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
559 ("mean_absolute_error", "Mean Absolute Error Across Epochs", "MAE"), |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
560 ("root_mean_squared_error", "Root Mean Squared Error Across Epochs", "RMSE"), |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
561 ("mean_absolute_percentage_error", "Mean Absolute Percentage Error Across Epochs", "MAPE"), |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
562 ("r2", "R² Across Epochs", "R²"), |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
563 ("loss", "Loss Across Epochs", "Loss"), |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
564 ] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
565 for metric_key, title, ytitle in metrics: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
566 series = _get_regression_series(label_test, metric_key) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
567 if not series: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
568 continue |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
569 fig = _line_chart( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
570 [("Test", series)], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
571 title=title, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
572 yaxis_title=ytitle, |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
573 ) |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
574 plots.append(_wrap_plot(title, fig, include_js=include_js)) |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
575 include_js = False |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
576 return plots |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
577 |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
578 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
579 def _build_static_roc_plot( |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
580 label_stats: dict, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
581 config: dict, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
582 friendly_labels: Optional[List[str]] = None, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
583 threshold: Optional[float] = None, |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
584 ) -> Optional[Dict[str, str]]: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
585 """Build ROC curve directly from test_statistics.json (single curve).""" |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
586 roc_data = label_stats.get("roc_curve") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
587 if not isinstance(roc_data, dict): |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
588 return None |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
589 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
590 fpr = roc_data.get("false_positive_rate") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
591 tpr = roc_data.get("true_positive_rate") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
592 if not fpr or not tpr or len(fpr) != len(tpr): |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
593 return None |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
594 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
595 try: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
596 fig = go.Figure() |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
597 fig.add_trace( |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
598 go.Scatter( |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
599 x=fpr, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
600 y=tpr, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
601 mode="lines+markers", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
602 name="ROC Curve", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
603 line=dict(color="#1f77b4", width=4), |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
604 hovertemplate="FPR: %{x:.3f}<br>TPR: %{y:.3f}<extra></extra>", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
605 ) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
606 ) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
607 fig.add_trace( |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
608 go.Scatter( |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
609 x=[0, 1], |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
610 y=[0, 1], |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
611 mode="lines", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
612 name="Random Classifier", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
613 line=dict(color="gray", width=2, dash="dash"), |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
614 hovertemplate="Random Classifier<extra></extra>", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
615 ) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
616 ) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
617 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
618 auc_val = label_stats.get("roc_auc") or label_stats.get("roc_auc_macro") or label_stats.get("roc_auc_micro") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
619 auc_txt = f" (AUC = {auc_val:.3f})" if isinstance(auc_val, (int, float)) else "" |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
620 |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
621 # Determine which label is treated as positive for the curve |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
622 label_list: List = [] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
623 pcs = label_stats.get("per_class_stats", {}) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
624 if pcs: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
625 label_list = list(pcs.keys()) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
626 if not label_list: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
627 labels_from_stats = label_stats.get("labels") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
628 if isinstance(labels_from_stats, list): |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
629 label_list = labels_from_stats |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
630 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
631 # Try to resolve index of the positive label explicitly provided by Ludwig |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
632 pos_label_raw = ( |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
633 roc_data.get("positive_label") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
634 or roc_data.get("positive_class") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
635 or label_stats.get("positive_label") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
636 ) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
637 pos_label_idx = None |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
638 if pos_label_raw is not None and isinstance(label_list, list): |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
639 try: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
640 pos_label_idx = label_list.index(pos_label_raw) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
641 except ValueError: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
642 pos_label_idx = None |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
643 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
644 # Fallback: use the second label if available, otherwise the first |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
645 if pos_label_idx is None: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
646 if isinstance(label_list, list) and len(label_list) >= 2: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
647 pos_label_idx = 1 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
648 elif isinstance(label_list, list) and label_list: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
649 pos_label_idx = 0 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
650 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
651 if pos_label_raw is None and isinstance(label_list, list) and pos_label_idx is not None: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
652 pos_label_raw = label_list[pos_label_idx] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
653 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
654 # Map to friendly label if we have one from metadata/CSV |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
655 pos_label_display = pos_label_raw |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
656 if ( |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
657 friendly_labels |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
658 and isinstance(pos_label_idx, int) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
659 and 0 <= pos_label_idx < len(friendly_labels) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
660 ): |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
661 pos_label_display = friendly_labels[pos_label_idx] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
662 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
663 pos_label_txt = ( |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
664 f"Positive class: {pos_label_display}" |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
665 if pos_label_display is not None |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
666 else "Positive class: (not available)" |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
667 ) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
668 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
669 title_label = f"ROC Curve{auc_txt}" |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
670 if pos_label_display is not None: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
671 title_label = f"ROC Curve (Positive Class: {pos_label_display}){auc_txt}" |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
672 |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
673 fig.update_layout( |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
674 title=dict(text=title_label, x=0.5), |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
675 xaxis_title="False Positive Rate", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
676 yaxis_title="True Positive Rate", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
677 width=700, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
678 height=600, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
679 margin=dict(t=80, l=80, r=80, b=110), |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
680 hovermode="closest", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
681 legend=dict( |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
682 x=0.6, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
683 y=0.1, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
684 bgcolor="rgba(255,255,255,0.9)", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
685 bordercolor="rgba(0,0,0,0.2)", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
686 borderwidth=1, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
687 ), |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
688 ) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
689 _style_fig(fig) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
690 fig.update_xaxes(range=[0, 1.0]) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
691 fig.update_yaxes(range=[0, 1.05]) |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
692 |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
693 roc_thresholds = roc_data.get("thresholds") |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
694 if threshold is not None and isinstance(roc_thresholds, list) and len(roc_thresholds) == len(fpr): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
695 try: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
696 diffs = [abs(th - threshold) for th in roc_thresholds] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
697 best_idx = int(np.argmin(diffs)) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
698 # dashed guides through the chosen point |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
699 fig.add_shape( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
700 type="line", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
701 x0=fpr[best_idx], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
702 x1=fpr[best_idx], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
703 y0=0, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
704 y1=tpr[best_idx], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
705 line=dict(color="gray", width=2, dash="dash"), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
706 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
707 fig.add_shape( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
708 type="line", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
709 x0=0, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
710 x1=fpr[best_idx], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
711 y0=tpr[best_idx], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
712 y1=tpr[best_idx], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
713 line=dict(color="gray", width=2, dash="dash"), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
714 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
715 fig.add_trace( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
716 go.Scatter( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
717 x=[fpr[best_idx]], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
718 y=[tpr[best_idx]], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
719 mode="markers", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
720 marker=dict(color="black", size=10, symbol="x"), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
721 name=f"Threshold={threshold}", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
722 hovertemplate="FPR: %{x:.3f}<br>TPR: %{y:.3f}<br>Threshold: %{text}<extra></extra>", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
723 text=[f"{threshold}"], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
724 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
725 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
726 except Exception as exc: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
727 print(f"Warning: could not add threshold marker to ROC: {exc}") |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
728 |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
729 fig.add_annotation( |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
730 x=0.5, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
731 y=-0.15, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
732 xref="paper", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
733 yref="paper", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
734 showarrow=False, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
735 text=f"<span style='font-size:12px;color:#555;'>{pos_label_txt}</span>", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
736 xanchor="center", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
737 ) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
738 |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
739 return _wrap_plot("ROC Curve", fig, config=config) |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
740 except Exception as e: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
741 print(f"Error building ROC plot: {e}") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
742 return None |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
743 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
744 |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
745 def _build_precision_recall_plot( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
746 label_stats: dict, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
747 config: dict, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
748 threshold: Optional[float] = None, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
749 ) -> Optional[Dict[str, str]]: |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
750 """Build Precision-Recall curve directly from test_statistics.json.""" |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
751 pr_data = label_stats.get("precision_recall_curve") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
752 if not isinstance(pr_data, dict): |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
753 return None |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
754 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
755 precisions = pr_data.get("precisions") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
756 recalls = pr_data.get("recalls") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
757 if not precisions or not recalls or len(precisions) != len(recalls): |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
758 return None |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
759 |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
760 thresholds = pr_data.get("thresholds") |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
761 |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
762 try: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
763 fig = go.Figure() |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
764 fig.add_trace( |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
765 go.Scatter( |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
766 x=recalls, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
767 y=precisions, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
768 mode="lines+markers", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
769 name="Precision-Recall", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
770 line=dict(color="#d62728", width=4), |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
771 hovertemplate="Recall: %{x:.3f}<br>Precision: %{y:.3f}<extra></extra>", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
772 ) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
773 ) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
774 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
775 ap_val = ( |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
776 label_stats.get("average_precision_macro") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
777 or label_stats.get("average_precision_micro") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
778 or label_stats.get("average_precision_samples") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
779 ) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
780 ap_txt = f" (AP = {ap_val:.3f})" if isinstance(ap_val, (int, float)) else "" |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
781 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
782 fig.update_layout( |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
783 title=dict(text=f"Precision-Recall Curve{ap_txt}", x=0.5), |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
784 xaxis_title="Recall", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
785 yaxis_title="Precision", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
786 width=700, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
787 height=600, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
788 margin=dict(t=80, l=80, r=80, b=80), |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
789 hovermode="closest", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
790 legend=dict( |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
791 x=0.6, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
792 y=0.1, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
793 bgcolor="rgba(255,255,255,0.9)", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
794 bordercolor="rgba(0,0,0,0.2)", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
795 borderwidth=1, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
796 ), |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
797 ) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
798 _style_fig(fig) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
799 fig.update_xaxes(range=[0, 1.0]) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
800 fig.update_yaxes(range=[0, 1.05]) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
801 |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
802 if threshold is not None and isinstance(thresholds, list) and len(thresholds) == len(recalls): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
803 try: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
804 diffs = [abs(th - threshold) for th in thresholds] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
805 best_idx = int(np.argmin(diffs)) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
806 fig.add_shape( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
807 type="line", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
808 x0=recalls[best_idx], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
809 x1=recalls[best_idx], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
810 y0=0, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
811 y1=precisions[best_idx], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
812 line=dict(color="gray", width=2, dash="dash"), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
813 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
814 fig.add_shape( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
815 type="line", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
816 x0=0, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
817 x1=recalls[best_idx], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
818 y0=precisions[best_idx], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
819 y1=precisions[best_idx], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
820 line=dict(color="gray", width=2, dash="dash"), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
821 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
822 fig.add_trace( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
823 go.Scatter( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
824 x=[recalls[best_idx]], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
825 y=[precisions[best_idx]], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
826 mode="markers", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
827 marker=dict(color="black", size=10, symbol="x"), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
828 name=f"Threshold={threshold}", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
829 hovertemplate="Recall: %{x:.3f}<br>Precision: %{y:.3f}<br>Threshold: %{text}<extra></extra>", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
830 text=[f"{threshold}"], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
831 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
832 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
833 except Exception as exc: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
834 print(f"Warning: could not add threshold marker to PR: {exc}") |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
835 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
836 return _wrap_plot("Precision-Recall Curve", fig, config=config) |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
837 except Exception as e: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
838 print(f"Error building Precision-Recall plot: {e}") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
839 return None |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
840 |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
841 |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
842 def build_prediction_diagnostics( |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
843 predictions_path: str, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
844 label_data_path: Optional[str] = None, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
845 split_value: int = 2, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
846 ) -> List[Dict[str, str]]: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
847 """Generate diagnostic plots from predictions.csv for classification tasks.""" |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
848 preds_file = Path(predictions_path) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
849 if not preds_file.exists(): |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
850 return [] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
851 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
852 try: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
853 df_pred = pd.read_csv(predictions_path) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
854 except Exception as exc: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
855 print(f"Warning: Unable to read predictions CSV: {exc}") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
856 return [] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
857 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
858 plots: List[Dict[str, str]] = [] |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
859 labels_from_dataset: Optional[pd.Series] = None |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
860 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
861 filtered_by_split = False |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
862 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
863 # If a split column exists, focus on the requested split (e.g., validation=1, test=2). |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
864 # If not, but label_data_path is available and matches row count, use it to filter predictions. |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
865 if SPLIT_COLUMN_NAME in df_pred.columns: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
866 df_pred = df_pred[df_pred[SPLIT_COLUMN_NAME] == split_value].reset_index(drop=True) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
867 if df_pred.empty: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
868 return [] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
869 filtered_by_split = True |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
870 elif label_data_path and Path(label_data_path).exists(): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
871 try: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
872 df_labels_all = pd.read_csv(label_data_path) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
873 if SPLIT_COLUMN_NAME in df_labels_all.columns and len(df_labels_all) == len(df_pred): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
874 split_mask = pd.to_numeric(df_labels_all[SPLIT_COLUMN_NAME], errors="coerce") == split_value |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
875 labels_from_dataset = df_labels_all.loc[split_mask, LABEL_COLUMN_NAME].reset_index(drop=True) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
876 df_pred = df_pred.loc[split_mask].reset_index(drop=True) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
877 if df_pred.empty: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
878 return [] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
879 filtered_by_split = True |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
880 except Exception as exc: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
881 print(f"Warning: Unable to filter predictions by split from label data: {exc}") |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
882 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
883 # Fallback: no split info available. Assume the predictions file is already filtered |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
884 # (common for test-only exports) and avoid heuristic slicing that could discard rows. |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
885 if not filtered_by_split: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
886 if split_value != 2: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
887 return [] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
888 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
889 def _strip_prob_prefix(col: str) -> str: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
890 if col.startswith("label_probabilities_"): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
891 return col.replace("label_probabilities_", "") |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
892 if col.startswith("probabilities_"): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
893 return col.replace("probabilities_", "") |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
894 return col |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
895 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
896 def _maybe_expand_probabilities_column(df: pd.DataFrame, labels_guess: List[str]) -> List[str]: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
897 """If only a single 'probabilities' column exists (list-like), expand it into per-class columns.""" |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
898 if "probabilities" not in df.columns: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
899 return [] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
900 try: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
901 # Parse first non-null entry to infer length |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
902 first_val = df["probabilities"].dropna().iloc[0] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
903 parsed = first_val |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
904 if isinstance(first_val, str): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
905 parsed = json.loads(first_val) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
906 probs = list(parsed) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
907 n = len(probs) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
908 if n == 0: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
909 return [] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
910 # Build labels: prefer provided guess; otherwise numeric |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
911 if labels_guess and len(labels_guess) == n: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
912 labels_use = labels_guess |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
913 else: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
914 labels_use = [str(i) for i in range(n)] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
915 # Expand column |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
916 for idx, lbl in enumerate(labels_use): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
917 df[f"probabilities_{lbl}"] = df["probabilities"].apply( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
918 lambda v: (json.loads(v)[idx] if isinstance(v, str) else list(v)[idx]) if pd.notnull(v) else np.nan |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
919 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
920 return [f"probabilities_{lbl}" for lbl in labels_use] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
921 except Exception: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
922 return [] |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
923 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
924 # Identify probability columns |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
925 prob_cols = [ |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
926 c |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
927 for c in df_pred.columns |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
928 if ( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
929 (c.startswith("label_probabilities_") or c.startswith("probabilities_")) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
930 and c != "label_probabilities" |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
931 ) |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
932 ] |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
933 if not prob_cols and "label_probability" in df_pred.columns: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
934 prob_cols = ["label_probability"] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
935 if not prob_cols and "probability" in df_pred.columns: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
936 prob_cols = ["probability"] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
937 if not prob_cols and "prediction_probability" in df_pred.columns: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
938 prob_cols = ["prediction_probability"] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
939 if not prob_cols and "probabilities" in df_pred.columns: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
940 labels_guess = sorted([str(u) for u in pd.unique(df_pred[LABEL_COLUMN_NAME])]) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
941 prob_cols = _maybe_expand_probabilities_column(df_pred, labels_guess) |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
942 prob_cols_sorted = sorted(prob_cols) |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
943 |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
944 def _select_positive_prob(): |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
945 if not prob_cols_sorted: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
946 return None, None |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
947 # Prefer a column indicating positive/event/true/1 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
948 preferred_keys = ("event", "true", "positive", "pos", "1") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
949 for col in prob_cols_sorted: |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
950 suffix = _strip_prob_prefix(col).lower() |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
951 if any(k in suffix for k in preferred_keys): |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
952 return col, suffix |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
953 if len(prob_cols_sorted) == 2: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
954 col = prob_cols_sorted[1] |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
955 return col, _strip_prob_prefix(col) |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
956 col = prob_cols_sorted[0] |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
957 return col, _strip_prob_prefix(col) |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
958 |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
959 pos_prob_col, pos_label_hint = _select_positive_prob() |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
960 pos_prob_series = df_pred[pos_prob_col] if pos_prob_col and pos_prob_col in df_pred else None |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
961 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
962 # Confidence series: prefer label_probability, otherwise positive prob, otherwise max prob |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
963 confidence_series = None |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
964 if "label_probability" in df_pred.columns: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
965 confidence_series = df_pred["label_probability"] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
966 elif pos_prob_series is not None: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
967 confidence_series = pos_prob_series |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
968 elif prob_cols_sorted: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
969 confidence_series = df_pred[prob_cols_sorted].max(axis=1) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
970 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
971 # True labels |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
972 def _extract_labels(): |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
973 if labels_from_dataset is not None: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
974 return labels_from_dataset |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
975 candidates = [ |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
976 LABEL_COLUMN_NAME, |
|
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
977 f"{LABEL_COLUMN_NAME}_ground_truth", |
|
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
978 f"{LABEL_COLUMN_NAME}__ground_truth", |
|
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
979 f"{LABEL_COLUMN_NAME}_target", |
|
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
980 f"{LABEL_COLUMN_NAME}__target", |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
981 "label", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
982 "label_true", |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
983 ] |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
984 candidates.extend( |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
985 [ |
|
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
986 col |
|
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
987 for col in df_pred.columns |
|
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
988 if (col.startswith(f"{LABEL_COLUMN_NAME}_") or col.startswith(f"{LABEL_COLUMN_NAME}__")) |
|
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
989 and "probabilities" not in col |
|
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
990 and "predictions" not in col |
|
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
991 ] |
|
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
992 ) |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
993 for col in candidates: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
994 if col in df_pred.columns and col not in prob_cols_sorted: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
995 return df_pred[col] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
996 if label_data_path and Path(label_data_path).exists(): |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
997 try: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
998 df_all = pd.read_csv(label_data_path) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
999 if SPLIT_COLUMN_NAME in df_all.columns: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1000 df_all = df_all[df_all[SPLIT_COLUMN_NAME] == split_value].reset_index(drop=True) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1001 if LABEL_COLUMN_NAME in df_all.columns: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1002 return df_all[LABEL_COLUMN_NAME].reset_index(drop=True) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1003 except Exception as exc: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1004 print(f"Warning: Unable to load labels from dataset: {exc}") |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1005 return None |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
1006 |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1007 labels_series = _extract_labels() |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
1008 |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1009 # Plot 1: Confidence Histogram |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1010 if confidence_series is not None: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1011 fig_conf = go.Figure() |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1012 fig_conf.add_trace( |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1013 go.Histogram( |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1014 x=confidence_series, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1015 nbinsx=20, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1016 marker=dict(color="#1f77b4", line=dict(color="#ffffff", width=1)), |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1017 opacity=0.8, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1018 histnorm="percent", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1019 ) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1020 ) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1021 fig_conf.update_layout( |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1022 title=dict(text="Prediction Confidence Distribution", x=0.5), |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1023 xaxis_title="Predicted probability (confidence)", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1024 yaxis_title="Percentage (%)", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1025 bargap=0.05, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1026 width=700, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1027 height=500, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1028 ) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1029 _style_fig(fig_conf) |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1030 plots.append(_wrap_plot("Prediction Confidence Distribution", fig_conf)) |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
1031 |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1032 # The remaining plots require true labels and a positive-class probability |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1033 if labels_series is None or pos_prob_series is None: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1034 return plots |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1035 |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1036 # Align lengths |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1037 min_len = min(len(labels_series), len(pos_prob_series)) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1038 if min_len == 0: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1039 return plots |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1040 y_true_raw = labels_series.iloc[:min_len] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1041 y_score = np.array(pos_prob_series.iloc[:min_len], dtype=float) |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
1042 |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1043 # Determine positive label |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1044 unique_labels = pd.unique(y_true_raw) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1045 unique_labels_list = list(unique_labels) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1046 positive_label = None |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1047 if pos_label_hint and str(pos_label_hint) in [str(u) for u in unique_labels_list]: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1048 positive_label = pos_label_hint |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1049 elif len(unique_labels_list) == 2: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1050 positive_label = unique_labels_list[1] |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1051 else: |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1052 positive_label = unique_labels_list[0] |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
1053 |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1054 y_true = (y_true_raw == positive_label).astype(int).values |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
1055 |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1056 # Utility: compute calibration points |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1057 def _calibration_points(y_true_bin: np.ndarray, scores: np.ndarray): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1058 bins = np.linspace(0.0, 1.0, 11) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1059 bin_ids = np.digitize(scores, bins, right=True) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1060 bin_centers, frac_positives = [], [] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1061 for b in range(1, len(bins)): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1062 mask = bin_ids == b |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1063 if not np.any(mask): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1064 continue |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1065 bin_centers.append(scores[mask].mean()) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1066 frac_positives.append(y_true_bin[mask].mean()) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1067 return bin_centers, frac_positives |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1068 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1069 # Plot 2: Calibration Curve (multi-class aware; one-vs-rest per label) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1070 label_prob_map = {} |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1071 for col in prob_cols_sorted: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1072 if col.startswith("label_probabilities_"): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1073 cls = col.replace("label_probabilities_", "") |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1074 label_prob_map[cls] = col |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1075 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1076 unique_label_strs = [str(u) for u in unique_labels_list] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1077 if len(label_prob_map) > 1 and len(unique_label_strs) > 2: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1078 # Skip multi-class calibration curve for now (not informative in current report) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1079 pass |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1080 else: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1081 # Binary/unknown fallback (previous behavior) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1082 bin_centers, frac_positives = _calibration_points(y_true, y_score) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1083 if bin_centers and frac_positives: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1084 fig_cal = go.Figure() |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1085 fig_cal.add_trace( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1086 go.Scatter( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1087 x=bin_centers, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1088 y=frac_positives, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1089 mode="lines+markers", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1090 name="Calibration", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1091 line=dict(color="#2ca02c", width=4), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1092 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1093 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1094 fig_cal.add_trace( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1095 go.Scatter( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1096 x=[0, 1], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1097 y=[0, 1], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1098 mode="lines", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1099 name="Perfect Calibration", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1100 line=dict(color="gray", width=2, dash="dash"), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1101 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1102 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1103 fig_cal.update_layout( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1104 title=dict(text="Calibration Curve", x=0.5), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1105 xaxis_title="Predicted probability", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1106 yaxis_title="Observed frequency", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1107 width=700, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1108 height=500, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1109 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1110 _style_fig(fig_cal) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1111 plots.append( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1112 _wrap_plot( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1113 "Calibration Curve (Predicted Probability vs Observed Frequency)", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1114 fig_cal, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1115 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1116 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1117 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1118 return plots |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1119 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1120 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1121 def build_binary_threshold_plot( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1122 predictions_path: str, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1123 label_data_path: Optional[str] = None, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1124 split_value: int = 1, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1125 ) -> Optional[Dict[str, str]]: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1126 """Build a binary threshold sweep plot (accuracy, precision, recall, F1) for a given split.""" |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1127 preds_file = Path(predictions_path) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1128 if not preds_file.exists(): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1129 return None |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1130 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1131 try: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1132 df_pred = pd.read_csv(predictions_path) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1133 except Exception as exc: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1134 print(f"Warning: Unable to read predictions CSV for threshold plot: {exc}") |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1135 return None |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1136 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1137 labels_from_dataset: Optional[pd.Series] = None |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1138 df_full = df_pred.copy() |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1139 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1140 def _filter_by_split(df: pd.DataFrame, split_val: int) -> pd.DataFrame: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1141 if SPLIT_COLUMN_NAME in df.columns: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1142 return df[df[SPLIT_COLUMN_NAME] == split_val].reset_index(drop=True) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1143 return df |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1144 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1145 # Try preferred split, then fallback to others with data (val -> test -> train) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1146 candidate_splits = [split_value, 2, 0, 1] if split_value == 1 else [split_value, 1, 0, 2] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1147 df_candidate = pd.DataFrame() |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1148 used_split: Optional[int] = None |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1149 for sv in candidate_splits: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1150 df_candidate = _filter_by_split(df_full, sv) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1151 if not df_candidate.empty: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1152 used_split = sv |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1153 break |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1154 if used_split is None: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1155 df_candidate = df_full |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1156 df_pred = df_candidate.reset_index(drop=True) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1157 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1158 # If still empty (e.g., split column exists but no rows for candidates), fall back to all rows |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1159 if df_pred.empty: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1160 df_pred = df_full.reset_index(drop=True) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1161 labels_from_dataset = None |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1162 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1163 if label_data_path and Path(label_data_path).exists(): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1164 try: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1165 df_labels_all = pd.read_csv(label_data_path) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1166 if SPLIT_COLUMN_NAME in df_labels_all.columns and len(df_labels_all) == len(df_full): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1167 mask = ( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1168 pd.to_numeric(df_labels_all[SPLIT_COLUMN_NAME], errors="coerce") == used_split |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1169 if used_split is not None and SPLIT_COLUMN_NAME in df_labels_all.columns |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1170 else pd.Series([True] * len(df_full)) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1171 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1172 labels_from_dataset = df_labels_all.loc[mask, LABEL_COLUMN_NAME].reset_index(drop=True) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1173 if len(labels_from_dataset) == len(df_pred): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1174 labels_from_dataset = labels_from_dataset.reset_index(drop=True) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1175 except Exception as exc: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1176 print(f"Warning: Unable to align labels for threshold plot: {exc}") |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1177 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1178 # Identify probability columns |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1179 prob_cols = [ |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1180 c |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1181 for c in df_pred.columns |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1182 if ( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1183 (c.startswith("label_probabilities_") or c.startswith("probabilities_")) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1184 and c != "label_probabilities" |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1185 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1186 ] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1187 if not prob_cols and "probabilities" in df_pred.columns: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1188 labels_guess = sorted([str(u) for u in pd.unique(df_pred.get(LABEL_COLUMN_NAME, []))]) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1189 # reuse expansion logic from diagnostics |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1190 try: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1191 first_val = df_pred["probabilities"].dropna().iloc[0] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1192 parsed = json.loads(first_val) if isinstance(first_val, str) else list(first_val) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1193 n = len(parsed) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1194 if n > 0: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1195 if labels_guess and len(labels_guess) == n: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1196 labels_use = labels_guess |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1197 else: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1198 labels_use = [str(i) for i in range(n)] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1199 for idx, lbl in enumerate(labels_use): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1200 df_pred[f"probabilities_{lbl}"] = df_pred["probabilities"].apply( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1201 lambda v: (json.loads(v)[idx] if isinstance(v, str) else list(v)[idx]) if pd.notnull(v) else np.nan |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1202 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1203 prob_cols = [f"probabilities_{lbl}" for lbl in labels_use] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1204 except Exception: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1205 prob_cols = [] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1206 prob_cols_sorted = sorted(prob_cols) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1207 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1208 def _strip_prob_prefix(col: str) -> str: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1209 if col.startswith("label_probabilities_"): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1210 return col.replace("label_probabilities_", "") |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1211 if col.startswith("probabilities_"): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1212 return col.replace("probabilities_", "") |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1213 return col |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1214 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1215 # True labels |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1216 def _extract_labels(): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1217 if labels_from_dataset is not None: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1218 return labels_from_dataset |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1219 for col in [ |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1220 LABEL_COLUMN_NAME, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1221 f"{LABEL_COLUMN_NAME}_ground_truth", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1222 f"{LABEL_COLUMN_NAME}__ground_truth", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1223 f"{LABEL_COLUMN_NAME}_target", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1224 f"{LABEL_COLUMN_NAME}__target", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1225 "label", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1226 "label_true", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1227 "label_predictions", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1228 "prediction", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1229 ]: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1230 if col in df_pred.columns and col not in prob_cols_sorted: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1231 return df_pred[col] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1232 return None |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1233 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1234 labels_series = _extract_labels() |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1235 if labels_series is None or not prob_cols_sorted: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1236 return None |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1237 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1238 # Positive prob column selection |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1239 preferred_keys = ("event", "true", "positive", "pos", "1") |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1240 pos_prob_col = None |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1241 for col in prob_cols_sorted: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1242 suffix = _strip_prob_prefix(col).lower() |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1243 if any(k in suffix for k in preferred_keys): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1244 pos_prob_col = col |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1245 break |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1246 if pos_prob_col is None: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1247 pos_prob_col = prob_cols_sorted[-1] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1248 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1249 min_len = min(len(labels_series), len(df_pred[pos_prob_col])) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1250 if min_len == 0: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1251 return None |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1252 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1253 y_true = np.array(labels_series.iloc[:min_len]) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1254 # map to binary 0/1 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1255 unique_labels = pd.unique(y_true) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1256 if len(unique_labels) < 2: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1257 return None |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1258 positive_label = unique_labels[1] if len(unique_labels) >= 2 else unique_labels[0] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1259 y_true_bin = (y_true == positive_label).astype(int) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1260 y_score = np.array(df_pred[pos_prob_col].iloc[:min_len], dtype=float) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1261 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1262 thresholds = np.linspace(0.0, 1.0, 101) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1263 accs: List[float] = [] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1264 precs: List[float] = [] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1265 recs: List[float] = [] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1266 f1s: List[float] = [] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1267 for t in thresholds: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1268 preds = (y_score >= t).astype(int) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1269 accs.append(accuracy_score(y_true_bin, preds)) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1270 precs.append(precision_score(y_true_bin, preds, zero_division=0)) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1271 recs.append(recall_score(y_true_bin, preds, zero_division=0)) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1272 f1s.append(f1_score(y_true_bin, preds, zero_division=0)) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1273 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1274 best_idx = int(np.argmax(f1s)) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1275 best_thr = thresholds[best_idx] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1276 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1277 fig = go.Figure() |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1278 fig.add_trace(go.Scatter(x=thresholds, y=accs, mode="lines", name="Accuracy", line=dict(width=4))) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1279 fig.add_trace(go.Scatter(x=thresholds, y=precs, mode="lines", name="Precision", line=dict(width=4))) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1280 fig.add_trace(go.Scatter(x=thresholds, y=recs, mode="lines", name="Recall", line=dict(width=4))) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1281 fig.add_trace(go.Scatter(x=thresholds, y=f1s, mode="lines", name="F1-Score", line=dict(width=4))) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1282 fig.add_shape( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1283 type="line", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1284 x0=best_thr, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1285 x1=best_thr, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1286 y0=0, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1287 y1=1, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1288 line=dict(color="gray", width=2, dash="dash"), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1289 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1290 fig.update_layout( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1291 title=dict(text="Threshold plot", x=0.5), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1292 xaxis_title="Threshold", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1293 yaxis_title="Metric value", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1294 yaxis=dict(range=[0, 1]), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1295 width=760, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1296 height=520, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1297 legend=dict(orientation="h", yanchor="bottom", y=1.02, xanchor="right", x=1), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1298 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1299 _style_fig(fig) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1300 return _wrap_plot("Threshold plot", fig, include_js=True) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1301 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1302 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1303 def build_multiclass_roc_pr_plots( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1304 predictions_path: str, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1305 split_value: int = 2, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1306 ) -> List[Dict[str, str]]: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1307 """Build one-vs-rest ROC and PR curves for multi-class classification from predictions.""" |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1308 preds_file = Path(predictions_path) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1309 if not preds_file.exists(): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1310 return [] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1311 try: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1312 df_pred = pd.read_csv(predictions_path) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1313 except Exception as exc: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1314 print(f"Warning: Unable to read predictions CSV: {exc}") |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1315 return [] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1316 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1317 if SPLIT_COLUMN_NAME in df_pred.columns: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1318 df_pred = df_pred[df_pred[SPLIT_COLUMN_NAME] == split_value].reset_index(drop=True) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1319 if df_pred.empty: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1320 return [] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1321 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1322 if LABEL_COLUMN_NAME not in df_pred.columns: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1323 return [] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1324 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1325 # Identify per-class probability columns |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1326 prob_cols = [ |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1327 c |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1328 for c in df_pred.columns |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1329 if ( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1330 (c.startswith("label_probabilities_") or c.startswith("probabilities_")) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1331 and c != "label_probabilities" |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1332 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1333 ] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1334 if not prob_cols: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1335 return [] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1336 labels = [c.replace("label_probabilities_", "").replace("probabilities_", "") for c in prob_cols] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1337 labels_sorted = sorted(labels) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1338 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1339 # Ensure all labels are present as probability columns |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1340 prob_map = { |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1341 c.replace("label_probabilities_", "").replace("probabilities_", ""): c |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1342 for c in prob_cols |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1343 } |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1344 if len(labels_sorted) < 3: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1345 return [] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1346 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1347 y_true_raw = df_pred[LABEL_COLUMN_NAME].astype(str) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1348 # Drop rows with NaN probabilities across any class to avoid metric errors |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1349 prob_matrix = df_pred[[prob_map[lbl] for lbl in labels_sorted]].astype(float) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1350 mask_valid = ~prob_matrix.isnull().any(axis=1) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1351 prob_matrix = prob_matrix[mask_valid] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1352 y_true_raw = y_true_raw[mask_valid] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1353 if prob_matrix.empty: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1354 return [] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1355 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1356 y_true_bin = label_binarize(y_true_raw, classes=labels_sorted) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1357 y_score = prob_matrix.to_numpy() |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1358 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1359 plots: List[Dict[str, str]] = [] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1360 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1361 # ROC: one-vs-rest + micro |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1362 fig_roc = go.Figure() |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1363 added_any = False |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1364 for idx, lbl in enumerate(labels_sorted): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1365 if y_true_bin[:, idx].sum() == 0 or y_true_bin[:, idx].sum() == len(y_true_bin): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1366 continue # skip classes without both positives and negatives |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1367 fpr, tpr, _ = roc_curve(y_true_bin[:, idx], y_score[:, idx]) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1368 fig_roc.add_trace( |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1369 go.Scatter( |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1370 x=fpr, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1371 y=tpr, |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1372 mode="lines", |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1373 name=f"{lbl} (AUC={auc(fpr, tpr):.3f})", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1374 line=dict(width=3), |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1375 ) |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1376 ) |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1377 added_any = True |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1378 # Micro-average only if we have mixed labels |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1379 if y_true_bin.sum() > 0 and y_true_bin.sum() < y_true_bin.size: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1380 fpr_micro, tpr_micro, _ = roc_curve(y_true_bin.ravel(), y_score.ravel()) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1381 fig_roc.add_trace( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1382 go.Scatter( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1383 x=fpr_micro, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1384 y=tpr_micro, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1385 mode="lines", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1386 name=f"Micro-average (AUC={auc(fpr_micro, tpr_micro):.3f})", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1387 line=dict(width=3, dash="dash"), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1388 ) |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1389 ) |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1390 added_any = True |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1391 if not added_any: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1392 return [] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1393 fig_roc.add_trace( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1394 go.Scatter( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1395 x=[0, 1], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1396 y=[0, 1], |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1397 mode="lines", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1398 name="Random", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1399 line=dict(color="gray", width=2, dash="dot"), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1400 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1401 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1402 fig_roc.update_layout( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1403 title=dict(text="Multi-class ROC-AUC (one-vs-rest)", x=0.5), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1404 xaxis_title="False Positive Rate", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1405 yaxis_title="True Positive Rate", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1406 width=820, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1407 height=620, |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1408 legend=dict( |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1409 x=0.62, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1410 y=0.05, |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1411 bgcolor="rgba(255,255,255,0.9)", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1412 bordercolor="rgba(0,0,0,0.2)", |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1413 borderwidth=1, |
|
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1414 ), |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1415 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1416 _style_fig(fig_roc) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1417 plots.append(_wrap_plot("Multi-class ROC-AUC (one-vs-rest)", fig_roc)) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1418 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1419 # PR: one-vs-rest + micro AP |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1420 fig_pr = go.Figure() |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1421 added_pr = False |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1422 for idx, lbl in enumerate(labels_sorted): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1423 if y_true_bin[:, idx].sum() == 0: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1424 continue |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1425 prec, rec, _ = precision_recall_curve(y_true_bin[:, idx], y_score[:, idx]) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1426 ap = average_precision_score(y_true_bin[:, idx], y_score[:, idx]) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1427 fig_pr.add_trace( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1428 go.Scatter( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1429 x=rec, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1430 y=prec, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1431 mode="lines", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1432 name=f"{lbl} (AP={ap:.3f})", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1433 line=dict(width=3), |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1434 ) |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1435 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1436 added_pr = True |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1437 if y_true_bin.sum() > 0: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1438 prec_micro, rec_micro, _ = precision_recall_curve(y_true_bin.ravel(), y_score.ravel()) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1439 ap_micro = average_precision_score(y_true_bin, y_score, average="micro") |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1440 fig_pr.add_trace( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1441 go.Scatter( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1442 x=rec_micro, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1443 y=prec_micro, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1444 mode="lines", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1445 name=f"Micro-average (AP={ap_micro:.3f})", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1446 line=dict(width=3, dash="dash"), |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1447 ) |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1448 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1449 added_pr = True |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1450 if not added_pr: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1451 return plots |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1452 fig_pr.update_layout( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1453 title=dict(text="Multi-class Precision-Recall (one-vs-rest)", x=0.5), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1454 xaxis_title="Recall", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1455 yaxis_title="Precision", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1456 width=820, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1457 height=620, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1458 legend=dict( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1459 x=0.62, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1460 y=0.05, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1461 bgcolor="rgba(255,255,255,0.9)", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1462 bordercolor="rgba(0,0,0,0.2)", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1463 borderwidth=1, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1464 ), |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1465 ) |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1466 _style_fig(fig_pr) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1467 plots.append(_wrap_plot("Multi-class Precision-Recall (one-vs-rest)", fig_pr)) |
|
11
c5150cceab47
planemo upload for repository https://github.com/goeckslab/gleam.git commit 0fe927b618cd4dfc87af7baaa827034cc6813225
goeckslab
parents:
8
diff
changeset
|
1468 |
|
15
d17e3a1b8659
planemo upload for repository https://github.com/goeckslab/gleam.git commit bc50fef8acb44aca15d0a1746e6c0c967da5bb17
goeckslab
parents:
11
diff
changeset
|
1469 return plots |
|
17
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1470 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1471 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1472 def build_multiclass_metric_plots(test_stats_path: str) -> List[Dict[str, str]]: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1473 """Alternative multi-class transparency plots using test_statistics.json per-class stats.""" |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1474 ts_path = Path(test_stats_path) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1475 if not ts_path.exists(): |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1476 return [] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1477 try: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1478 with open(ts_path, "r") as f: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1479 test_stats = json.load(f) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1480 except Exception: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1481 return [] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1482 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1483 label_stats = test_stats.get("label", {}) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1484 pcs = label_stats.get("per_class_stats", {}) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1485 if not pcs: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1486 return [] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1487 classes = list(pcs.keys()) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1488 if not classes: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1489 return [] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1490 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1491 metrics = ["precision", "recall", "f1_score", "specificity", "accuracy"] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1492 fig_bar = go.Figure() |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1493 for metric in metrics: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1494 values = [] |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1495 for cls in classes: |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1496 v = pcs.get(cls, {}).get(metric) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1497 values.append(v if isinstance(v, (int, float)) else 0) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1498 fig_bar.add_trace( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1499 go.Bar( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1500 x=classes, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1501 y=values, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1502 name=metric.replace("_", " ").title(), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1503 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1504 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1505 fig_bar.update_layout( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1506 title=dict(text="Per-Class Metrics (Test)", x=0.5), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1507 xaxis_title="Class", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1508 yaxis_title="Metric value", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1509 barmode="group", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1510 width=900, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1511 height=600, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1512 legend=dict( |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1513 x=1.02, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1514 y=1.0, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1515 bgcolor="rgba(255,255,255,0.9)", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1516 bordercolor="rgba(0,0,0,0.2)", |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1517 borderwidth=1, |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1518 ), |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1519 ) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1520 _style_fig(fig_bar) |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1521 |
|
db9be962dc13
planemo upload for repository https://github.com/goeckslab/gleam.git commit 9db874612b0c3e4f53d639459fe789b762660cd6
goeckslab
parents:
15
diff
changeset
|
1522 return [_wrap_plot("Per-Class Metrics (Test)", fig_bar)] |
