pam50-subtype-classification-eval
A deep learning pipeline for PAM50 subtype classification using histopathology images and multi-objective patch selection — Borji et al. (2026) (arXiv:2604.01798, 2026)
What this evaluates
Evaluates a deep learning model's ability to classify breast cancer into four PAM50 molecular subtypes (Basal-like, HER2-enriched, Luminal A, Luminal B) using H&E-stained histopathology images. It probes the model's discriminative capability, robustness to domain shifts between institutional cohorts, and the necessity of preprocessing steps like stain normalization and multi-objective patch selection.
Datasets
- TCGA-BRCA — total 627; splits: internal_validation (627)
- CPTAC-BRCA — total 122; splits: external_validation (122)
Metrics
Accuracy— range: [0, 1]- Proportion of correctly classified samples out of the total number of samples.
Macro-averaged F1-score(primary) — range: [0, 1]- Harmonic mean of precision and recall computed per subtype, then averaged across all four PAM50 subtypes to balance class performance.
AUC— range: [0, 1]- Area under the Receiver Operating Characteristic (ROC) curve, measuring the model's ability to distinguish between classes across all classification thresholds.
Input / output format
Input: H&E-stained histopathology whole-slide images, processed into a curated subset of patches via multi-objective optimization (NSGA-II) and stain normalization.
Output: Predicted PAM50 subtype label (one of four classes: Basal-like, HER2-enriched, Luminal A, Luminal B).
Scoring recipe
def compute_metrics(gold_labels, pred_labels, pred_probs, subtypes):
macro_f1 = 0
for subtype in subtypes:
tp = sum(p == subtype and g == subtype for p, g in zip(pred_labels, gold_labels))
fp = sum(p == subtype and g != subtype for p, g in zip(pred_labels, gold_labels))
fn = sum(p != subtype and g == subtype for p, g in zip(pred_labels, gold_labels))
prec = tp / (tp + fp) if (tp + fp) > 0 else 0
rec = tp / (tp + fn) if (tp + fn) > 0 else 0
f1 = 2 * prec * rec / (prec + rec) if (prec + rec) > 0 else 0
macro_f1 += f1
macro_f1 /= len(subtypes)
auc = roc_auc_score(gold_labels, pred_probs, multi_class='ovr')
accuracy = sum(p == g for p, g in zip(pred_labels, gold_labels)) / len(gold_labels)
return accuracy, macro_f1, auc
Common pitfalls
- Ablation studies were conducted as single-run experiments without multiple random seeds, making performance degradation claims indicative rather than statistically definitive.
- Significant domain shift between internal (TCGA) and external (CPTAC) cohorts causes expected but substantial performance drops, particularly for Basal-like and HER2-enriched subtypes.
- Stain normalization is critical; omitting it severely degrades feature extraction due to color discrepancies across histopathology slides.
Evidence (verbatim from paper)
We first evaluated the performance of our proposed method on the internal validation set of the TCGA-BRCA dataset. The model achieved a classification accuracy of 0.8995, a macro-averaged F1-score of 0.8812, and an exceptionally high AUC of 0.9841, underscoring its strong discriminative capability across the four PAM50 breast cancer subtypes.
Citation
@misc{borji2026pam50,
title={A deep learning pipeline for PAM50 subtype classification using histopathology images and multi-objective patch selection},
author={Borji et al. (2026)},
year={2026},
note={arXiv:2604.01798}
}
- arXiv: 2604.01798