Repository navigation
Expand file tree
/
Copy path_tier2_early_stop.log
More file actions
832 lines (736 loc) · 47.7 KB
/
Copy path_tier2_early_stop.log
File metadata and controls
832 lines (736 loc) · 47.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
/home/sam/anaconda3/lib/python3.13/site-packages/muon/_core/preproc.py:31: FutureWarning: `__version__` is deprecated, use `importlib.metadata.version('scanpy')` instead
if Version(scanpy.__version__) < Version("1.10"):
/home/sam/anaconda3/lib/python3.13/site-packages/mudata/_core/mudata.py:1598: FutureWarning: From 0.4 .update() will not pull obs/var columns from individual modalities by default anymore. Set mudata.set_options(pull_on_update=False) to adopt the new behaviour, which will become the default. Use new pull_obs/pull_var and push_obs/push_var methods for more flexibility.
self._update_attr("var", axis=0, join_common=join_common)
/home/sam/anaconda3/lib/python3.13/site-packages/mudata/_core/mudata.py:963: UserWarning: Cannot join columns with the same name because var_names are intersecting.
warnings.warn(
/home/sam/anaconda3/lib/python3.13/site-packages/mudata/_core/mudata.py:1461: FutureWarning: From 0.4 .update() will not pull obs/var columns from individual modalities by default anymore. Set mudata.set_options(pull_on_update=False) to adopt the new behaviour, which will become the default. Use new pull_obs/pull_var and push_obs/push_var methods for more flexibility.
self._update_attr("obs", axis=1, join_common=join_common)
/home/sam/anaconda3/lib/python3.13/functools.py:934: ImplicitModificationWarning: Transforming to str index.
return dispatch(args[0].__class__)(*args, **kw)
/home/sam/anaconda3/lib/python3.13/site-packages/mudata/_core/mudata.py:1598: FutureWarning: From 0.4 .update() will not pull obs/var columns from individual modalities by default anymore. Set mudata.set_options(pull_on_update=False) to adopt the new behaviour, which will become the default. Use new pull_obs/pull_var and push_obs/push_var methods for more flexibility.
self._update_attr("var", axis=0, join_common=join_common)
/home/sam/anaconda3/lib/python3.13/site-packages/mudata/_core/mudata.py:963: UserWarning: Cannot join columns with the same name because var_names are intersecting.
warnings.warn(
/home/sam/anaconda3/lib/python3.13/site-packages/mudata/_core/mudata.py:1461: FutureWarning: From 0.4 .update() will not pull obs/var columns from individual modalities by default anymore. Set mudata.set_options(pull_on_update=False) to adopt the new behaviour, which will become the default. Use new pull_obs/pull_var and push_obs/push_var methods for more flexibility.
self._update_attr("obs", axis=1, join_common=join_common)
/home/sam/anaconda3/lib/python3.13/site-packages/mudata/_core/mudata.py:1598: FutureWarning: From 0.4 .update() will not pull obs/var columns from individual modalities by default anymore. Set mudata.set_options(pull_on_update=False) to adopt the new behaviour, which will become the default. Use new pull_obs/pull_var and push_obs/push_var methods for more flexibility.
self._update_attr("var", axis=0, join_common=join_common)
/home/sam/anaconda3/lib/python3.13/site-packages/mudata/_core/mudata.py:963: UserWarning: Cannot join columns with the same name because var_names are intersecting.
warnings.warn(
/home/sam/anaconda3/lib/python3.13/site-packages/mudata/_core/mudata.py:1461: FutureWarning: From 0.4 .update() will not pull obs/var columns from individual modalities by default anymore. Set mudata.set_options(pull_on_update=False) to adopt the new behaviour, which will become the default. Use new pull_obs/pull_var and push_obs/push_var methods for more flexibility.
self._update_attr("obs", axis=1, join_common=join_common)
[1/4] Loading + sampling (50,000 cells)...
[2/4] Building Reactome map...
[3/4] Building feature matrix (FEATURE_SET='mix')...
Feature matrix: 9661 features (mix)
adata_train: (50000, 9661) pathway_map: (23859, 4): all the possible paths.
[4/4] Building graphs...
Building protein-only reference graph...
Protein features matched to Reactome: 164
=== Benchmark 1: BINN GCN (Reactome mask, mix) — 3 trials ===
[BINN donor CV — BINN GCN (mask, mix)] donors=41 folds=5 pathway_mask=True
fold 1/5 train=32 test=9
[Donor attention ensemble] donors=41, fit=25, val=7, test=9, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.7009 val_loss=0.6881 patience=50
epoch 40/400 train_loss=0.0053 val_loss=0.6951 patience=11
early stop at epoch 51
donor-level fit acc: 0.8000 val acc: 0.8571 test acc: 0.7778
test acc=0.778 auc=0.857
fold 2/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6891 val_loss=0.7115 patience=50
epoch 40/400 train_loss=0.0034 val_loss=0.7003 patience=34
epoch 80/400 train_loss=0.0001 val_loss=0.6748 patience=50
epoch 120/400 train_loss=0.0000 val_loss=0.6250 patience=48
epoch 160/400 train_loss=0.0000 val_loss=0.5184 patience=50
epoch 200/400 train_loss=0.0000 val_loss=0.5409 patience=14
early stop at epoch 214
donor-level fit acc: 1.0000 val acc: 0.5714 test acc: 0.8750
test acc=0.875 auc=0.857
fold 3/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6898 val_loss=0.6942 patience=50
epoch 40/400 train_loss=0.0018 val_loss=0.6604 patience=50
epoch 80/400 train_loss=0.0001 val_loss=0.5794 patience=50
epoch 120/400 train_loss=0.0000 val_loss=1.0348 patience=11
early stop at epoch 131
donor-level fit acc: 1.0000 val acc: 0.5714 test acc: 1.0000
test acc=1.000 auc=1.000
fold 4/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6798 val_loss=0.6912 patience=50
epoch 40/400 train_loss=0.0039 val_loss=0.7122 patience=11
early stop at epoch 51
donor-level fit acc: 0.8077 val acc: 0.8571 test acc: 0.7500
test acc=0.750 auc=0.417
fold 5/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6944 val_loss=0.6872 patience=50
epoch 40/400 train_loss=0.0025 val_loss=0.6906 patience=29
epoch 80/400 train_loss=0.0001 val_loss=0.4716 patience=50
epoch 120/400 train_loss=0.0000 val_loss=0.4402 patience=32
early stop at epoch 152
donor-level fit acc: 1.0000 val acc: 0.8571 test acc: 0.8750
test acc=0.875 auc=1.000
[BINN GCN (mask, mix)] acc=0.856±0.088 auc=0.826±0.214
trial 1/3 acc=0.856 auc=0.826
[BINN donor CV — BINN GCN (mask, mix)] donors=41 folds=5 pathway_mask=True
fold 1/5 train=32 test=9
[Donor attention ensemble] donors=41, fit=25, val=7, test=9, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6804 val_loss=0.6901 patience=50
epoch 40/400 train_loss=0.0012 val_loss=0.6823 patience=39
epoch 80/400 train_loss=0.0002 val_loss=0.8518 patience=33
early stop at epoch 113
donor-level fit acc: 1.0000 val acc: 0.4286 test acc: 0.5556
test acc=0.556 auc=0.571
fold 2/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6885 val_loss=0.6840 patience=50
epoch 40/400 train_loss=0.0027 val_loss=0.6831 patience=25
epoch 80/400 train_loss=0.0000 val_loss=0.3843 patience=50
epoch 120/400 train_loss=0.0000 val_loss=0.1428 patience=34
early stop at epoch 154
donor-level fit acc: 1.0000 val acc: 0.8571 test acc: 0.8750
test acc=0.875 auc=0.857
fold 3/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6765 val_loss=0.7067 patience=50
epoch 40/400 train_loss=0.0026 val_loss=0.8403 patience=11
early stop at epoch 51
donor-level fit acc: 0.2308 val acc: 0.1429 test acc: 0.1250
test acc=0.125 auc=0.571
fold 4/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6930 val_loss=0.6867 patience=50
epoch 40/400 train_loss=0.0034 val_loss=0.6845 patience=44
epoch 80/400 train_loss=0.0001 val_loss=0.5902 patience=50
epoch 120/400 train_loss=0.0000 val_loss=0.5154 patience=34
early stop at epoch 154
donor-level fit acc: 1.0000 val acc: 0.5714 test acc: 0.8750
test acc=0.875 auc=0.917
fold 5/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6964 val_loss=0.6945 patience=50
epoch 40/400 train_loss=0.0023 val_loss=0.6858 patience=50
epoch 80/400 train_loss=0.0001 val_loss=0.5519 patience=50
epoch 120/400 train_loss=0.0001 val_loss=0.6556 patience=25
early stop at epoch 145
donor-level fit acc: 1.0000 val acc: 0.7143 test acc: 0.7500
test acc=0.750 auc=1.000
[BINN GCN (mask, mix)] acc=0.636±0.281 auc=0.783±0.179
trial 2/3 acc=0.636 auc=0.783
[BINN donor CV — BINN GCN (mask, mix)] donors=41 folds=5 pathway_mask=True
fold 1/5 train=32 test=9
[Donor attention ensemble] donors=41, fit=25, val=7, test=9, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6914 val_loss=0.6798 patience=50
epoch 40/400 train_loss=0.0023 val_loss=0.6790 patience=34
epoch 80/400 train_loss=0.0001 val_loss=0.6595 patience=43
epoch 120/400 train_loss=0.0000 val_loss=1.0166 patience=3
early stop at epoch 123
donor-level fit acc: 1.0000 val acc: 0.7143 test acc: 0.8889
test acc=0.889 auc=0.857
fold 2/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.7095 val_loss=0.6815 patience=50
epoch 40/400 train_loss=0.0028 val_loss=0.6654 patience=50
epoch 80/400 train_loss=0.0000 val_loss=0.4855 patience=50
epoch 120/400 train_loss=0.0001 val_loss=0.0310 patience=50
epoch 160/400 train_loss=0.0000 val_loss=0.0188 patience=25
epoch 200/400 train_loss=0.0000 val_loss=0.0311 patience=18
early stop at epoch 218
donor-level fit acc: 1.0000 val acc: 1.0000 test acc: 0.8750
test acc=0.875 auc=1.000
fold 3/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6962 val_loss=0.6871 patience=50
epoch 40/400 train_loss=0.0011 val_loss=0.7248 patience=11
early stop at epoch 51
donor-level fit acc: 0.7692 val acc: 0.8571 test acc: 0.8750
test acc=0.875 auc=1.000
fold 4/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6972 val_loss=0.6820 patience=50
epoch 40/400 train_loss=0.0031 val_loss=0.6796 patience=42
epoch 80/400 train_loss=0.0001 val_loss=0.5681 patience=50
epoch 120/400 train_loss=0.0000 val_loss=0.1010 patience=50
epoch 160/400 train_loss=0.0000 val_loss=0.2023 patience=12
early stop at epoch 172
donor-level fit acc: 0.5385 val acc: 0.1429 test acc: 0.5000
test acc=0.500 auc=1.000
fold 5/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.7019 val_loss=0.7004 patience=50
epoch 40/400 train_loss=0.0020 val_loss=0.7366 patience=18
early stop at epoch 58
donor-level fit acc: 0.8077 val acc: 0.8571 test acc: 0.7500
test acc=0.750 auc=0.667
[BINN GCN (mask, mix)] acc=0.778±0.148 auc=0.905±0.131
trial 3/3 acc=0.778 auc=0.905
=== Benchmark 2: GCN unconstrained (no mask, mix) — 3 trials ===
[BINN donor CV — GCN (no mask, mix)] donors=41 folds=5 pathway_mask=False
fold 1/5 train=32 test=9
[Donor attention ensemble] donors=41, fit=25, val=7, test=9, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6900 val_loss=0.6843 patience=50
epoch 40/400 train_loss=0.0006 val_loss=0.4741 patience=48
epoch 80/400 train_loss=0.0000 val_loss=0.2822 patience=41
epoch 120/400 train_loss=0.0000 val_loss=0.2414 patience=34
early stop at epoch 154
donor-level fit acc: 1.0000 val acc: 0.8571 test acc: 0.8889
test acc=0.889 auc=1.000
fold 2/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6965 val_loss=0.6674 patience=50
epoch 40/400 train_loss=0.0003 val_loss=0.7218 patience=27
epoch 80/400 train_loss=0.0001 val_loss=0.2263 patience=50
epoch 120/400 train_loss=0.0000 val_loss=0.0428 patience=50
epoch 160/400 train_loss=0.0000 val_loss=0.0638 patience=37
epoch 200/400 train_loss=0.0000 val_loss=0.0354 patience=21
early stop at epoch 221
donor-level fit acc: 1.0000 val acc: 1.0000 test acc: 0.7500
test acc=0.750 auc=0.857
fold 3/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.7006 val_loss=0.6742 patience=50
epoch 40/400 train_loss=0.0004 val_loss=0.3204 patience=50
epoch 80/400 train_loss=0.0000 val_loss=0.5804 patience=15
early stop at epoch 95
donor-level fit acc: 1.0000 val acc: 0.7143 test acc: 0.8750
test acc=0.875 auc=1.000
fold 4/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.7042 val_loss=0.6767 patience=50
epoch 40/400 train_loss=0.0005 val_loss=0.1522 patience=38
epoch 80/400 train_loss=0.0000 val_loss=0.0035 patience=50
epoch 120/400 train_loss=0.0000 val_loss=0.0021 patience=50
epoch 160/400 train_loss=0.0000 val_loss=0.0014 patience=48
epoch 200/400 train_loss=0.0000 val_loss=0.0011 patience=47
epoch 240/400 train_loss=0.0000 val_loss=0.0013 patience=11
early stop at epoch 251
donor-level fit acc: 1.0000 val acc: 1.0000 test acc: 0.8750
test acc=0.875 auc=1.000
fold 5/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6979 val_loss=0.6821 patience=50
epoch 40/400 train_loss=0.0005 val_loss=0.3118 patience=47
epoch 80/400 train_loss=0.0001 val_loss=0.3280 patience=29
epoch 120/400 train_loss=0.0000 val_loss=0.2881 patience=40
epoch 160/400 train_loss=0.0000 val_loss=0.3673 patience=0
early stop at epoch 160
donor-level fit acc: 1.0000 val acc: 0.8571 test acc: 0.7500
test acc=0.750 auc=0.917
[GCN (no mask, mix)] acc=0.828±0.064 auc=0.955±0.059
trial 1/3 acc=0.828 auc=0.955
[BINN donor CV — GCN (no mask, mix)] donors=41 folds=5 pathway_mask=False
fold 1/5 train=32 test=9
[Donor attention ensemble] donors=41, fit=25, val=7, test=9, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.7123 val_loss=0.7010 patience=50
epoch 40/400 train_loss=0.0006 val_loss=0.4160 patience=50
epoch 80/400 train_loss=0.0000 val_loss=0.4563 patience=12
early stop at epoch 92
donor-level fit acc: 0.9600 val acc: 0.7143 test acc: 0.7778
test acc=0.778 auc=0.857
fold 2/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6863 val_loss=0.6721 patience=50
epoch 40/400 train_loss=0.0008 val_loss=0.5999 patience=29
epoch 80/400 train_loss=0.0001 val_loss=0.0089 patience=50
epoch 120/400 train_loss=0.0001 val_loss=0.0211 patience=24
early stop at epoch 144
donor-level fit acc: 1.0000 val acc: 1.0000 test acc: 0.8750
test acc=0.875 auc=1.000
fold 3/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6777 val_loss=0.6617 patience=50
epoch 40/400 train_loss=0.0004 val_loss=0.6702 patience=38
early stop at epoch 78
donor-level fit acc: 1.0000 val acc: 0.8571 test acc: 1.0000
test acc=1.000 auc=1.000
fold 4/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6973 val_loss=0.6735 patience=50
epoch 40/400 train_loss=0.0006 val_loss=0.5910 patience=30
epoch 80/400 train_loss=0.0001 val_loss=0.1963 patience=47
epoch 120/400 train_loss=0.0000 val_loss=0.3159 patience=7
early stop at epoch 127
donor-level fit acc: 1.0000 val acc: 1.0000 test acc: 0.6250
test acc=0.625 auc=0.833
fold 5/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6730 val_loss=0.6850 patience=50
epoch 40/400 train_loss=0.0005 val_loss=1.1995 patience=29
early stop at epoch 69
donor-level fit acc: 0.8077 val acc: 0.8571 test acc: 0.7500
test acc=0.750 auc=1.000
[GCN (no mask, mix)] acc=0.806±0.126 auc=0.938±0.076
trial 2/3 acc=0.806 auc=0.938
[BINN donor CV — GCN (no mask, mix)] donors=41 folds=5 pathway_mask=False
fold 1/5 train=32 test=9
[Donor attention ensemble] donors=41, fit=25, val=7, test=9, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6893 val_loss=0.6822 patience=50
epoch 40/400 train_loss=0.0006 val_loss=0.4875 patience=50
epoch 80/400 train_loss=0.0001 val_loss=0.4271 patience=50
epoch 120/400 train_loss=0.0000 val_loss=0.3505 patience=35
early stop at epoch 155
donor-level fit acc: 1.0000 val acc: 0.8571 test acc: 1.0000
test acc=1.000 auc=1.000
fold 2/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.7011 val_loss=0.6630 patience=50
epoch 40/400 train_loss=0.0003 val_loss=0.4374 patience=50
epoch 80/400 train_loss=0.0000 val_loss=0.0304 patience=44
epoch 120/400 train_loss=0.0000 val_loss=0.0455 patience=4
early stop at epoch 124
donor-level fit acc: 1.0000 val acc: 1.0000 test acc: 0.8750
test acc=0.875 auc=0.857
fold 3/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.7107 val_loss=0.6620 patience=50
epoch 40/400 train_loss=0.0005 val_loss=1.2169 patience=32
early stop at epoch 72
donor-level fit acc: 0.9615 val acc: 0.8571 test acc: 0.8750
test acc=0.875 auc=1.000
fold 4/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6853 val_loss=0.6796 patience=50
epoch 40/400 train_loss=0.0004 val_loss=0.5898 patience=27
epoch 80/400 train_loss=0.0000 val_loss=0.2234 patience=36
epoch 120/400 train_loss=0.0000 val_loss=0.2589 patience=38
early stop at epoch 158
donor-level fit acc: 1.0000 val acc: 1.0000 test acc: 0.8750
test acc=0.875 auc=1.000
fold 5/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6892 val_loss=0.6750 patience=50
epoch 40/400 train_loss=0.0011 val_loss=0.5180 patience=37
early stop at epoch 77
donor-level fit acc: 0.8077 val acc: 0.8571 test acc: 0.7500
test acc=0.750 auc=0.833
[GCN (no mask, mix)] acc=0.875±0.079 auc=0.938±0.076
trial 3/3 acc=0.875 auc=0.938
=== Benchmark 3: Protein-only GCN — 3 trials ===
[BINN donor CV — GCN protein-only (Reactome mask)] donors=41 folds=5 pathway_mask=True
fold 1/5 train=32 test=9
[Donor attention ensemble] donors=41, fit=25, val=7, test=9, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.7004 val_loss=0.6927 patience=50
epoch 40/400 train_loss=0.2617 val_loss=0.6794 patience=50
epoch 80/400 train_loss=0.0027 val_loss=0.6071 patience=49
epoch 120/400 train_loss=0.0003 val_loss=2.0935 patience=14
early stop at epoch 134
donor-level fit acc: 0.9600 val acc: 0.5714 test acc: 0.8889
test acc=0.889 auc=0.714
fold 2/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6893 val_loss=0.7093 patience=50
epoch 40/400 train_loss=0.2609 val_loss=0.7147 patience=25
early stop at epoch 65
donor-level fit acc: 0.7692 val acc: 0.8571 test acc: 0.8750
test acc=0.875 auc=0.143
fold 3/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.7010 val_loss=0.6911 patience=50
epoch 40/400 train_loss=0.3031 val_loss=0.7666 patience=11
early stop at epoch 51
donor-level fit acc: 0.8077 val acc: 0.5714 test acc: 0.6250
test acc=0.625 auc=1.000
fold 4/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6691 val_loss=0.7007 patience=50
epoch 40/400 train_loss=0.2492 val_loss=0.6842 patience=50
epoch 80/400 train_loss=0.0078 val_loss=1.3951 patience=29
early stop at epoch 109
donor-level fit acc: 0.8077 val acc: 0.8571 test acc: 0.7500
test acc=0.750 auc=0.750
fold 5/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.7041 val_loss=0.6850 patience=50
epoch 40/400 train_loss=0.2466 val_loss=0.6925 patience=41
epoch 80/400 train_loss=0.0020 val_loss=1.7191 patience=1
early stop at epoch 81
donor-level fit acc: 0.1923 val acc: 0.1429 test acc: 0.2500
test acc=0.250 auc=0.917
[GCN protein-only (Reactome mask)] acc=0.678±0.234 auc=0.705±0.300
trial 1/3 acc=0.678 auc=0.705
[BINN donor CV — GCN protein-only (Reactome mask)] donors=41 folds=5 pathway_mask=True
fold 1/5 train=32 test=9
[Donor attention ensemble] donors=41, fit=25, val=7, test=9, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6941 val_loss=0.6869 patience=50
epoch 40/400 train_loss=0.1294 val_loss=0.7392 patience=11
early stop at epoch 51
donor-level fit acc: 0.8000 val acc: 0.8571 test acc: 0.7778
test acc=0.778 auc=0.214
fold 2/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6927 val_loss=0.6749 patience=50
epoch 40/400 train_loss=0.2578 val_loss=0.6984 patience=11
epoch 80/400 train_loss=0.0011 val_loss=0.1643 patience=50
epoch 120/400 train_loss=0.0001 val_loss=0.1855 patience=14
early stop at epoch 134
donor-level fit acc: 0.6538 val acc: 0.2857 test acc: 0.5000
test acc=0.500 auc=1.000
fold 3/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6806 val_loss=0.6945 patience=50
epoch 40/400 train_loss=0.3138 val_loss=0.6745 patience=46
epoch 80/400 train_loss=0.0057 val_loss=1.5751 patience=38
early stop at epoch 118
donor-level fit acc: 0.7692 val acc: 0.8571 test acc: 0.8750
test acc=0.875 auc=0.500
fold 4/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6923 val_loss=0.6912 patience=50
epoch 40/400 train_loss=0.2736 val_loss=0.7216 patience=11
early stop at epoch 51
donor-level fit acc: 0.8077 val acc: 0.8571 test acc: 0.7500
test acc=0.750 auc=0.750
fold 5/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6859 val_loss=0.6840 patience=50
epoch 40/400 train_loss=0.3098 val_loss=0.6740 patience=50
epoch 80/400 train_loss=0.0337 val_loss=1.5129 patience=24
early stop at epoch 104
donor-level fit acc: 0.1923 val acc: 0.1429 test acc: 0.2500
test acc=0.250 auc=0.500
[GCN protein-only (Reactome mask)] acc=0.631±0.227 auc=0.593±0.265
trial 2/3 acc=0.631 auc=0.593
[BINN donor CV — GCN protein-only (Reactome mask)] donors=41 folds=5 pathway_mask=True
fold 1/5 train=32 test=9
[Donor attention ensemble] donors=41, fit=25, val=7, test=9, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6935 val_loss=0.6885 patience=50
epoch 40/400 train_loss=0.2151 val_loss=0.6771 patience=44
epoch 80/400 train_loss=0.0010 val_loss=2.0537 patience=27
early stop at epoch 107
donor-level fit acc: 0.2000 val acc: 0.1429 test acc: 0.2222
test acc=0.222 auc=0.500
fold 2/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.7110 val_loss=0.7256 patience=50
epoch 40/400 train_loss=0.3870 val_loss=0.6561 patience=50
epoch 80/400 train_loss=0.0036 val_loss=0.8406 patience=18
epoch 120/400 train_loss=0.0005 val_loss=1.8375 patience=23
early stop at epoch 143
donor-level fit acc: 0.5385 val acc: 0.2857 test acc: 0.5000
test acc=0.500 auc=1.000
fold 3/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6995 val_loss=0.6905 patience=50
epoch 40/400 train_loss=0.2351 val_loss=0.8020 patience=11
early stop at epoch 51
donor-level fit acc: 0.7692 val acc: 0.8571 test acc: 0.8750
test acc=0.875 auc=0.000
fold 4/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.7053 val_loss=0.7020 patience=50
epoch 40/400 train_loss=0.2815 val_loss=0.6772 patience=50
epoch 80/400 train_loss=0.0010 val_loss=1.2370 patience=10
early stop at epoch 90
donor-level fit acc: 0.1923 val acc: 0.1429 test acc: 0.2500
test acc=0.250 auc=0.500
fold 5/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.7032 val_loss=0.6798 patience=50
epoch 40/400 train_loss=0.2641 val_loss=0.7224 patience=11
early stop at epoch 51
donor-level fit acc: 0.8077 val acc: 0.8571 test acc: 0.7500
test acc=0.750 auc=1.000
[GCN protein-only (Reactome mask)] acc=0.519±0.261 auc=0.600±0.374
trial 3/3 acc=0.519 auc=0.600
=== Benchmark 4: BINN GAT (Reactome mask, mix) — 3 trials ===
[BINN donor CV — BINN GAT (mask, mix)] donors=41 folds=5 pathway_mask=True
fold 1/5 train=32 test=9
[Donor attention ensemble] donors=41, fit=25, val=7, test=9, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6906 val_loss=0.6802 patience=50
epoch 40/400 train_loss=0.0024 val_loss=0.6899 patience=11
early stop at epoch 51
donor-level fit acc: 0.8000 val acc: 0.8571 test acc: 0.7778
test acc=0.778 auc=0.857
fold 2/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.7121 val_loss=0.7070 patience=50
epoch 40/400 train_loss=0.0033 val_loss=0.7172 patience=29
epoch 80/400 train_loss=0.0002 val_loss=0.2827 patience=50
epoch 120/400 train_loss=0.0000 val_loss=0.4085 patience=16
early stop at epoch 136
donor-level fit acc: 1.0000 val acc: 0.7143 test acc: 0.8750
test acc=0.875 auc=0.857
fold 3/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.7105 val_loss=0.6958 patience=50
epoch 40/400 train_loss=0.0030 val_loss=0.7061 patience=25
early stop at epoch 65
donor-level fit acc: 0.7692 val acc: 0.8571 test acc: 0.8750
test acc=0.875 auc=0.857
fold 4/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.7054 val_loss=0.6879 patience=50
epoch 40/400 train_loss=0.0028 val_loss=0.6817 patience=47
epoch 80/400 train_loss=0.0001 val_loss=0.2839 patience=50
epoch 120/400 train_loss=0.0000 val_loss=0.0080 patience=50
epoch 160/400 train_loss=0.0000 val_loss=0.0051 patience=49
epoch 200/400 train_loss=0.0000 val_loss=0.0038 patience=41
epoch 240/400 train_loss=0.0000 val_loss=0.0037 patience=46
epoch 280/400 train_loss=0.0000 val_loss=0.0035 patience=30
epoch 320/400 train_loss=0.0000 val_loss=0.0034 patience=30
epoch 360/400 train_loss=0.0000 val_loss=0.0038 patience=29
early stop at epoch 389
donor-level fit acc: 1.0000 val acc: 1.0000 test acc: 0.7500
test acc=0.750 auc=0.750
fold 5/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6792 val_loss=0.6920 patience=50
epoch 40/400 train_loss=0.0038 val_loss=0.7042 patience=11
early stop at epoch 51
donor-level fit acc: 0.8077 val acc: 0.8571 test acc: 0.7500
test acc=0.750 auc=0.333
[BINN GAT (mask, mix)] acc=0.806±0.058 auc=0.731±0.203
trial 1/3 acc=0.806 auc=0.731
[BINN donor CV — BINN GAT (mask, mix)] donors=41 folds=5 pathway_mask=True
fold 1/5 train=32 test=9
[Donor attention ensemble] donors=41, fit=25, val=7, test=9, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.7006 val_loss=0.6911 patience=50
epoch 40/400 train_loss=0.0042 val_loss=0.7707 patience=11
early stop at epoch 51
donor-level fit acc: 0.8000 val acc: 0.8571 test acc: 0.7778
test acc=0.778 auc=0.714
fold 2/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6820 val_loss=0.6888 patience=50
epoch 40/400 train_loss=0.0016 val_loss=0.7307 patience=11
early stop at epoch 51
donor-level fit acc: 0.7692 val acc: 0.8571 test acc: 0.8750
test acc=0.875 auc=0.000
fold 3/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6846 val_loss=0.6991 patience=50
epoch 40/400 train_loss=0.0024 val_loss=0.7037 patience=27
epoch 80/400 train_loss=0.0001 val_loss=0.6949 patience=39
early stop at epoch 119
donor-level fit acc: 1.0000 val acc: 0.7143 test acc: 0.6250
test acc=0.625 auc=1.000
fold 4/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.7132 val_loss=0.6861 patience=50
epoch 40/400 train_loss=0.0025 val_loss=0.6922 patience=11
epoch 80/400 train_loss=0.0002 val_loss=0.4737 patience=50
epoch 120/400 train_loss=0.0001 val_loss=0.5358 patience=30
early stop at epoch 150
donor-level fit acc: 1.0000 val acc: 0.8571 test acc: 0.8750
test acc=0.875 auc=0.833
fold 5/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6842 val_loss=0.6904 patience=50
epoch 40/400 train_loss=0.0021 val_loss=0.6817 patience=36
epoch 80/400 train_loss=0.0002 val_loss=0.4961 patience=50
epoch 120/400 train_loss=0.0001 val_loss=0.3774 patience=50
epoch 160/400 train_loss=0.0000 val_loss=0.3273 patience=40
epoch 200/400 train_loss=0.0000 val_loss=0.3233 patience=15
early stop at epoch 215
donor-level fit acc: 1.0000 val acc: 0.8571 test acc: 0.7500
test acc=0.750 auc=1.000
[BINN GAT (mask, mix)] acc=0.781±0.093 auc=0.710±0.371
trial 2/3 acc=0.781 auc=0.710
[BINN donor CV — BINN GAT (mask, mix)] donors=41 folds=5 pathway_mask=True
fold 1/5 train=32 test=9
[Donor attention ensemble] donors=41, fit=25, val=7, test=9, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.7019 val_loss=0.6867 patience=50
epoch 40/400 train_loss=0.0033 val_loss=0.6833 patience=50
epoch 80/400 train_loss=0.0001 val_loss=0.6758 patience=49
epoch 120/400 train_loss=0.0001 val_loss=0.9748 patience=9
early stop at epoch 129
donor-level fit acc: 1.0000 val acc: 0.5714 test acc: 1.0000
test acc=1.000 auc=1.000
fold 2/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.7078 val_loss=0.7264 patience=50
epoch 40/400 train_loss=0.0037 val_loss=0.7357 patience=22
early stop at epoch 62
donor-level fit acc: 0.7692 val acc: 0.8571 test acc: 0.8750
test acc=0.875 auc=1.000
fold 3/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.7008 val_loss=0.6849 patience=50
epoch 40/400 train_loss=0.0026 val_loss=0.7021 patience=21
early stop at epoch 61
donor-level fit acc: 0.7692 val acc: 0.8571 test acc: 0.8750
test acc=0.875 auc=0.857
fold 4/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.7041 val_loss=0.6890 patience=50
epoch 40/400 train_loss=0.0039 val_loss=0.6782 patience=49
epoch 80/400 train_loss=0.0001 val_loss=0.5234 patience=50
epoch 120/400 train_loss=0.0001 val_loss=0.1237 patience=50
epoch 160/400 train_loss=0.0000 val_loss=0.1015 patience=32
epoch 200/400 train_loss=0.0000 val_loss=0.0958 patience=28
epoch 240/400 train_loss=0.0000 val_loss=0.0681 patience=50
epoch 280/400 train_loss=0.0000 val_loss=0.0724 patience=10
early stop at epoch 290
donor-level fit acc: 1.0000 val acc: 1.0000 test acc: 0.8750
test acc=0.875 auc=1.000
fold 5/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6944 val_loss=0.7070 patience=50
epoch 40/400 train_loss=0.0032 val_loss=0.7373 patience=20
early stop at epoch 60
donor-level fit acc: 0.8846 val acc: 0.8571 test acc: 0.7500
test acc=0.750 auc=0.667
[BINN GAT (mask, mix)] acc=0.875±0.079 auc=0.905±0.131
trial 3/3 acc=0.875 auc=0.905
=== Benchmark 5: BINN ANN (Reactome mask, mix) — 3 trials ===
[BINN donor CV — BINN ANN (mask, mix)] donors=41 folds=5 pathway_mask=True
fold 1/5 train=32 test=9
[Donor attention ensemble] donors=41, fit=25, val=7, test=9, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6988 val_loss=0.6842 patience=50
epoch 40/400 train_loss=0.0019 val_loss=0.6741 patience=50
epoch 80/400 train_loss=0.0001 val_loss=0.4739 patience=50
epoch 120/400 train_loss=0.0001 val_loss=0.3694 patience=50
epoch 160/400 train_loss=0.0001 val_loss=0.3668 patience=21
early stop at epoch 181
donor-level fit acc: 1.0000 val acc: 0.8571 test acc: 0.8889
test acc=0.889 auc=1.000
fold 2/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6824 val_loss=0.7029 patience=50
epoch 40/400 train_loss=0.0045 val_loss=0.7323 patience=15
early stop at epoch 55
donor-level fit acc: 0.2308 val acc: 0.1429 test acc: 0.1250
test acc=0.125 auc=0.857
fold 3/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6975 val_loss=0.6907 patience=50
epoch 40/400 train_loss=0.0031 val_loss=0.6597 patience=50
epoch 80/400 train_loss=0.0001 val_loss=0.6083 patience=44
epoch 120/400 train_loss=0.0001 val_loss=0.6860 patience=4
early stop at epoch 124
donor-level fit acc: 1.0000 val acc: 0.8571 test acc: 0.8750
test acc=0.875 auc=0.857
fold 4/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6743 val_loss=0.6931 patience=50
epoch 40/400 train_loss=0.0015 val_loss=0.6987 patience=24
epoch 80/400 train_loss=0.0002 val_loss=0.5381 patience=50
epoch 120/400 train_loss=0.0000 val_loss=0.4478 patience=43
epoch 160/400 train_loss=0.0000 val_loss=0.4231 patience=49
epoch 200/400 train_loss=0.0000 val_loss=0.4266 patience=9
epoch 240/400 train_loss=0.0000 val_loss=0.4283 patience=27
early stop at epoch 267
donor-level fit acc: 1.0000 val acc: 0.7143 test acc: 0.6250
test acc=0.625 auc=0.833
fold 5/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.7002 val_loss=0.6911 patience=50
epoch 40/400 train_loss=0.0012 val_loss=0.6832 patience=50
epoch 80/400 train_loss=0.0001 val_loss=0.5962 patience=47
epoch 120/400 train_loss=0.0001 val_loss=0.6359 patience=7
early stop at epoch 127
donor-level fit acc: 1.0000 val acc: 0.8571 test acc: 0.7500
test acc=0.750 auc=0.833
[BINN ANN (mask, mix)] acc=0.653±0.281 auc=0.876±0.063
trial 1/3 acc=0.653 auc=0.876
[BINN donor CV — BINN ANN (mask, mix)] donors=41 folds=5 pathway_mask=True
fold 1/5 train=32 test=9
[Donor attention ensemble] donors=41, fit=25, val=7, test=9, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6965 val_loss=0.6890 patience=50
epoch 40/400 train_loss=0.0023 val_loss=0.6775 patience=48
epoch 80/400 train_loss=0.0001 val_loss=0.7377 patience=35
early stop at epoch 115
donor-level fit acc: 1.0000 val acc: 0.8571 test acc: 0.7778
test acc=0.778 auc=0.714
fold 2/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.7034 val_loss=0.7057 patience=50
epoch 40/400 train_loss=0.0027 val_loss=0.6849 patience=36
epoch 80/400 train_loss=0.0001 val_loss=0.4923 patience=50
epoch 120/400 train_loss=0.0000 val_loss=0.3880 patience=50
epoch 160/400 train_loss=0.0000 val_loss=0.3723 patience=39
epoch 200/400 train_loss=0.0000 val_loss=0.3900 patience=32
epoch 240/400 train_loss=0.0000 val_loss=0.3871 patience=39
epoch 280/400 train_loss=0.0000 val_loss=0.3564 patience=28
epoch 320/400 train_loss=0.0000 val_loss=0.3602 patience=17
early stop at epoch 337
donor-level fit acc: 1.0000 val acc: 1.0000 test acc: 0.6250
test acc=0.625 auc=0.714
fold 3/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6990 val_loss=0.7048 patience=50
epoch 40/400 train_loss=0.0018 val_loss=0.6922 patience=31
epoch 80/400 train_loss=0.0003 val_loss=0.5053 patience=50
epoch 120/400 train_loss=0.0000 val_loss=0.5116 patience=10
early stop at epoch 130
donor-level fit acc: 1.0000 val acc: 0.8571 test acc: 0.8750
test acc=0.875 auc=1.000
fold 4/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.7180 val_loss=0.6823 patience=50
epoch 40/400 train_loss=0.0034 val_loss=0.6840 patience=29
epoch 80/400 train_loss=0.0001 val_loss=0.6230 patience=50
epoch 120/400 train_loss=0.0000 val_loss=0.6854 patience=16
early stop at epoch 136
donor-level fit acc: 1.0000 val acc: 0.7143 test acc: 0.7500
test acc=0.750 auc=1.000
fold 5/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6915 val_loss=0.6937 patience=50
epoch 40/400 train_loss=0.0011 val_loss=0.6731 patience=50
epoch 80/400 train_loss=0.0001 val_loss=0.6042 patience=43
epoch 120/400 train_loss=0.0000 val_loss=1.4945 patience=3
early stop at epoch 123
donor-level fit acc: 1.0000 val acc: 0.8571 test acc: 0.7500
test acc=0.750 auc=1.000
[BINN ANN (mask, mix)] acc=0.756±0.080 auc=0.886±0.140
trial 2/3 acc=0.756 auc=0.886
[BINN donor CV — BINN ANN (mask, mix)] donors=41 folds=5 pathway_mask=True
fold 1/5 train=32 test=9
[Donor attention ensemble] donors=41, fit=25, val=7, test=9, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6938 val_loss=0.6830 patience=50
epoch 40/400 train_loss=0.0021 val_loss=0.6738 patience=39
epoch 80/400 train_loss=0.0002 val_loss=0.6266 patience=42
epoch 120/400 train_loss=0.0000 val_loss=0.9059 patience=2
early stop at epoch 122
donor-level fit acc: 1.0000 val acc: 0.8571 test acc: 0.7778
test acc=0.778 auc=0.929
fold 2/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6946 val_loss=0.6719 patience=50
epoch 40/400 train_loss=0.0016 val_loss=0.6767 patience=11
early stop at epoch 51
donor-level fit acc: 0.7692 val acc: 0.8571 test acc: 0.8750
test acc=0.875 auc=0.143
fold 3/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6886 val_loss=0.6822 patience=50
epoch 40/400 train_loss=0.0025 val_loss=0.6793 patience=31
epoch 80/400 train_loss=0.0001 val_loss=0.5311 patience=50
epoch 120/400 train_loss=0.0000 val_loss=0.7037 patience=12
early stop at epoch 132
donor-level fit acc: 1.0000 val acc: 0.5714 test acc: 0.5000
test acc=0.500 auc=0.429
fold 4/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6982 val_loss=0.6901 patience=50
epoch 40/400 train_loss=0.0019 val_loss=0.6828 patience=50
epoch 80/400 train_loss=0.0001 val_loss=0.7137 patience=38
early stop at epoch 118
donor-level fit acc: 1.0000 val acc: 0.8571 test acc: 0.7500
test acc=0.750 auc=0.917
fold 5/5 train=33 test=8
[Donor attention ensemble] donors=41, fit=26, val=7, test=8, embed_dim=32, fusion_in=99, fusion_dropout=0.3, class_weights=True, early_stop=True, classes=2, epochs=400
epoch 1/400 train_loss=0.6991 val_loss=0.6926 patience=50
epoch 40/400 train_loss=0.0030 val_loss=0.6942 patience=26
epoch 80/400 train_loss=0.0001 val_loss=0.6640 patience=50
epoch 120/400 train_loss=0.0000 val_loss=0.5399 patience=34
early stop at epoch 154
donor-level fit acc: 1.0000 val acc: 0.8571 test acc: 0.7500
test acc=0.750 auc=0.917
[BINN ANN (mask, mix)] acc=0.731±0.124 auc=0.667±0.324
trial 3/3 acc=0.731 auc=0.667
========================================================================
TIER-2 SUMMARY (50,000 cells, 5-fold donor CV, feature_set='mix')
========================================================================
Model Acc AUC
---------------------------------------------- ---------- ----------
BINN GCN (Reactome mask, mix) 0.756±0.091 0.838±0.050
GCN unconstrained (no mask, mix) 0.836±0.029 0.944±0.008
GCN protein-only (Reactome proteins) 0.609±0.066 0.633±0.051
BINN GAT (Reactome mask, mix) 0.820±0.040 0.782±0.087
BINN ANN (Reactome mask, mix) 0.713±0.044 0.810±0.101
========================================================================