Marcel0123 commited on
Commit
9975da0
·
verified ·
1 Parent(s): 1d12e6c

Upload 2 files

Browse files
Files changed (1) hide show
  1. app.py +21 -13
app.py CHANGED
@@ -28,14 +28,14 @@ iets zegt over hun **gezondheid**. Een van de dingen die onderzocht wordt is het
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
 
@@ -43,6 +43,13 @@ Kortom: dit experiment laat je zien hoe data ons kan helpen om **patronen in gez
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)
@@ -67,8 +74,7 @@ def sgd_train_generator(lr, epochs, batch_size, seed, split_seed):
67
  w, b = 0.0, 0.0
68
 
69
  x_min, x_max = float(np.min(x)), float(np.max(x))
70
- train_losses = []
71
- test_losses = []
72
 
73
  rng = np.random.RandomState(int(seed))
74
 
@@ -108,7 +114,7 @@ def sgd_train_generator(lr, epochs, batch_size, seed, split_seed):
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()
@@ -127,14 +133,15 @@ def sgd_train_generator(lr, epochs, batch_size, seed, split_seed):
127
  ax2.grid(True, linestyle=":", linewidth=0.6)
128
  plt.tight_layout()
129
 
130
- # Plain-language results
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
 
140
  yield fig_main, fig_loss, summary
@@ -151,20 +158,21 @@ with gr.Blocks(title="Diabetes: BMI → Progressiescore (Live Regressie)") as de
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")
158
  results = gr.Markdown()
159
 
160
- # Button-triggered training
161
  train_btn.click(
162
  fn=sgd_train_generator,
163
  inputs=[lr, epochs, batch, seed, split_seed],
164
  outputs=[plot_main, plot_loss, results]
165
  )
166
 
167
- # Auto-train on load with defaults
168
  demo.load(
169
  fn=sgd_train_generator,
170
  inputs=[lr, epochs, batch, seed, split_seed],
 
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
 
 
43
  we hier stap voor stap, live op je scherm.
44
  """
45
 
46
+ CONCLUSION_MD = r"""
47
+ # **Conclusie**
48
+
49
+ Mensen met een hogere **BMI** hebben in dit onderzoek gemiddeld vaker een ernstiger verloop van **diabetes**.
50
+ Maar **BMI is niet de enige factor** — leeftijd, erfelijkheid, leefstijl en andere medische waarden spelen ook mee.
51
+ """
52
+
53
  def load_bmi_diabetes():
54
  d = datasets.load_diabetes()
55
  X = d.data[:, 2] # BMI feature (genormaliseerd)
 
74
  w, b = 0.0, 0.0
75
 
76
  x_min, x_max = float(np.min(x)), float(np.max(x))
77
+ train_losses, test_losses = [], []
 
78
 
79
  rng = np.random.RandomState(int(seed))
80
 
 
114
  ax1.scatter(x_te, y_te, alpha=0.8, s=22, marker="x", label="test")
115
  xs = np.linspace(x_min, x_max, 200)
116
  ax1.plot(xs, w * xs + b, linewidth=2, label="model")
117
+ ax1.set_title(f"{label} — Epoch {epoch}/{epochs}")
118
  ax1.set_xlabel("BMI (genormaliseerd)")
119
  ax1.set_ylabel("Progressiescore")
120
  ax1.legend()
 
133
  ax2.grid(True, linestyle=":", linewidth=0.6)
134
  plt.tight_layout()
135
 
136
+ # Resultaten + opvallende conclusie
137
  verdict = "positief" if w >= 0 else "negatief"
138
  summary = (
139
  f"**Wat levert dit op?**\n"
140
+ f"- Huidige regressielijn: `y = {w:.4f} * x + {b:.4f}`\n"
141
+ f"- Train MSE: `{mse_tr:.2f}` — Test MSE: `{mse_te:.2f}` — Test R²: `{r2_te:.3f}`\n"
142
+ f"- Interpretatie: het verband tussen BMI en progressiescore is **{verdict}** in deze dataset "
143
+ f"(hogere BMI hangt samen met hogere score als `w > 0`).\n\n"
144
+ f"{CONCLUSION_MD}"
145
  )
146
 
147
  yield fig_main, fig_loss, summary
 
158
  seed = gr.Slider(0, 9999, value=42, step=1, label="Training seed")
159
  split_seed = gr.Slider(0, 9999, value=7, step=1, label="Train/test split seed")
160
  train_btn = gr.Button("Train live")
161
+ # Story direct onder de knop
162
+ gr.Markdown(STORY_MD)
163
  with gr.Column(scale=2):
164
  plot_main = gr.Plot(label="Data (train/test) & regressielijn (live)")
165
  plot_loss = gr.Plot(label="Loss-curve (MSE per epoch) — train vs test")
166
  results = gr.Markdown()
167
 
168
+ # Training starten via knop
169
  train_btn.click(
170
  fn=sgd_train_generator,
171
  inputs=[lr, epochs, batch, seed, split_seed],
172
  outputs=[plot_main, plot_loss, results]
173
  )
174
 
175
+ # Auto-train bij laden met default-waarden
176
  demo.load(
177
  fn=sgd_train_generator,
178
  inputs=[lr, epochs, batch, seed, split_seed],