Marcel0123 commited on
Commit
1d12e6c
·
verified ·
1 Parent(s): 337b68c

Upload 2 files

Browse files
Files changed (1) hide show
  1. app.py +30 -4
app.py CHANGED
@@ -1,3 +1,4 @@
 
1
  import gradio as gr
2
  import numpy as np
3
  import matplotlib.pyplot as plt
@@ -18,6 +19,30 @@ Dat doen we met *supervised learning*: het model ziet voorbeelden `(BMI → scor
18
  > Let op: in deze sklearn-dataset is BMI **genormaliseerd** (geschaald). De helling `w` geeft wel de **richting en sterkte** aan (positief = hogere BMI hangt samen met hogere score).
19
  """
20
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  def load_bmi_diabetes():
22
  d = datasets.load_diabetes()
23
  X = d.data[:, 2] # BMI feature (genormaliseerd)
@@ -83,7 +108,7 @@ def sgd_train_generator(lr, epochs, batch_size, seed, split_seed):
83
  ax1.scatter(x_te, y_te, alpha=0.8, s=22, marker="x", label="test")
84
  xs = np.linspace(x_min, x_max, 200)
85
  ax1.plot(xs, w * xs + b, linewidth=2, label="model")
86
- ax1.set_title(f"{label} — Epoch {epoch}/{epochs}")
87
  ax1.set_xlabel("BMI (genormaliseerd)")
88
  ax1.set_ylabel("Progressiescore")
89
  ax1.legend()
@@ -106,9 +131,9 @@ def sgd_train_generator(lr, epochs, batch_size, seed, split_seed):
106
  verdict = "positief" if w >= 0 else "negatief"
107
  summary = (
108
  f"**Wat levert dit op?**\n"
109
- f"- Huidige regressielijn: `y = {w:.4f} * x + {b:.4f}`\n"
110
- f"- Train MSE: `{mse_tr:.2f}` — Test MSE: `{mse_te:.2f}` — Test R²: `{r2_te:.3f}`\n"
111
- f"- Interpretatie: het verband tussen BMI en progressiescore is **{verdict}** in deze dataset "
112
  f"(hogere BMI hangt samen met hogere score als `w > 0`)."
113
  )
114
 
@@ -126,6 +151,7 @@ with gr.Blocks(title="Diabetes: BMI → Progressiescore (Live Regressie)") as de
126
  seed = gr.Slider(0, 9999, value=42, step=1, label="Training seed")
127
  split_seed = gr.Slider(0, 9999, value=7, step=1, label="Train/test split seed")
128
  train_btn = gr.Button("Train live")
 
129
  with gr.Column(scale=2):
130
  plot_main = gr.Plot(label="Data (train/test) & regressielijn (live)")
131
  plot_loss = gr.Plot(label="Loss-curve (MSE per epoch) — train vs test")
 
1
+
2
  import gradio as gr
3
  import numpy as np
4
  import matplotlib.pyplot as plt
 
19
  > Let op: in deze sklearn-dataset is BMI **genormaliseerd** (geschaald). De helling `w` geeft wel de **richting en sterkte** aan (positief = hogere BMI hangt samen met hogere score).
20
  """
21
 
22
+ STORY_MD = r"""
23
+ ### Waarom kijken we naar BMI en diabetes?
24
+ Stel je voor dat je arts wilt begrijpen of **het gewicht van mensen** (uitgedrukt als *Body Mass Index*, BMI)
25
+ iets zegt over hun **gezondheid**. Een van de dingen die onderzocht wordt is het verband tussen BMI en de
26
+ **ernst van diabetes**.
27
+
28
+ We gebruiken hier **echte gegevens** uit een medische dataset (dus **geen foto’s**, maar gemeten waarden van mensen
29
+ die in een onderzoek hebben meegedaan). Elke deelnemer heeft:
30
+
31
+ - een **BMI-waarde** (hoe zwaar of licht iemand is ten opzichte van zijn lengte),
32
+ - en een **score** die aangeeft hoe ernstig de diabetes bij die persoon verloopt.
33
+
34
+ Met lineaire regressie testen we: *kunnen we een lijn tekenen die laat zien of een hogere BMI vaak samenvalt met een
35
+ hogere (of juist lagere) score?*
36
+
37
+ **Waarom is dat belangrijk?**
38
+ - Als er wél een duidelijk verband is, kan dit helpen om **risico’s eerder te signaleren**.
39
+ - Als er géén verband is, leren we dat BMI misschien niet de juiste voorspeller is en moet er verder gekeken worden
40
+ naar andere factoren.
41
+
42
+ Kortom: dit experiment laat je zien hoe data ons kan helpen om **patronen in gezondheid** te ontdekken — en dat doen
43
+ we hier stap voor stap, live op je scherm.
44
+ """
45
+
46
  def load_bmi_diabetes():
47
  d = datasets.load_diabetes()
48
  X = d.data[:, 2] # BMI feature (genormaliseerd)
 
108
  ax1.scatter(x_te, y_te, alpha=0.8, s=22, marker="x", label="test")
109
  xs = np.linspace(x_min, x_max, 200)
110
  ax1.plot(xs, w * xs + b, linewidth=2, label="model")
111
+ ax1.set_title(f"{{label}} — Epoch {{epoch}}/{{epochs}}")
112
  ax1.set_xlabel("BMI (genormaliseerd)")
113
  ax1.set_ylabel("Progressiescore")
114
  ax1.legend()
 
131
  verdict = "positief" if w >= 0 else "negatief"
132
  summary = (
133
  f"**Wat levert dit op?**\n"
134
+ f"- Huidige regressielijn: `y = {{w:.4f}} * x + {{b:.4f}}`\n"
135
+ f"- Train MSE: `{{mse_tr:.2f}}` — Test MSE: `{{mse_te:.2f}}` — Test R²: `{{r2_te:.3f}}`\n"
136
+ f"- Interpretatie: het verband tussen BMI en progressiescore is **{{verdict}}** in deze dataset "
137
  f"(hogere BMI hangt samen met hogere score als `w > 0`)."
138
  )
139
 
 
151
  seed = gr.Slider(0, 9999, value=42, step=1, label="Training seed")
152
  split_seed = gr.Slider(0, 9999, value=7, step=1, label="Train/test split seed")
153
  train_btn = gr.Button("Train live")
154
+ story = gr.Markdown(STORY_MD) # story directly under the button
155
  with gr.Column(scale=2):
156
  plot_main = gr.Plot(label="Data (train/test) & regressielijn (live)")
157
  plot_loss = gr.Plot(label="Loss-curve (MSE per epoch) — train vs test")