Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Multi-Omics Breast Cancer Subtype Classification with TCGA-BRCA

This project compares single-omics and multi-omics machine learning models for breast cancer subtype classification using TCGA-BRCA data from Kaggle.

The main question is simple:

Does integrating multiple omics layers improve subtype classification compared with using each omics block alone?

Project summary

Results

Late-fusion multi-omics modeling performed best on the holdout test set.

Method Feature set Model Accuracy Macro F1 Weighted F1
Multi-omics Late fusion Averaged probabilities 0.892 0.815 0.885
Single-omics Protein XGBoost 0.863 0.800 0.853
Multi-omics Early fusion Logistic regression 0.804 0.677 0.806
Single-omics Copy number Random forest 0.784 0.581 0.774
Single-omics RNA expression Logistic regression 0.765 0.559 0.762
Single-omics Mutation Random forest 0.667 0.341 0.632

The best multi-omics model improved macro F1 by +0.015 over the best single-omics model.

Dataset

Dataset: BRCA Multi-Omics TCGA on Kaggle

The dataset contains 705 breast tumor samples and four omics blocks:

Omics block Prefix Features
Copy number cn_ 860
Mutation mu_ 249
RNA expression rs_ 604
Protein / phosphoprotein pp_ 223

The Kaggle files used here do not include a PAM50 subtype label. The supervised target in this project is a derived clinical_subtype based on ER, PR, and HER2 receptor status. Ambiguous or missing receptor-status rows are excluded from supervised modeling.

Modeling cohort after filtering:

Class Samples
HR+/HER2- 335
Triple-negative 90
HR+/HER2+ 57
HER2-enriched-like 25

Methods

The workflow uses a fixed random seed and a stratified train/validation/test split:

Split Samples
Train 303
Validation 102
Test 102

Preprocessing:

  • Copy number, RNA expression, and protein features: median imputation and standard scaling
  • Mutation features: most-frequent imputation and preserved as binary 0/1
  • Feature selection: SelectKBest with ANOVA F-statistics inside model pipelines
  • Main model-selection metric: macro F1

Single-omics baselines:

  • Logistic regression
  • Random forest
  • Linear SVM
  • XGBoost when available

Multi-omics models:

  • Early fusion: concatenate all omics features before modeling
  • Late fusion: train one model per omics block and average predicted class probabilities

Explainability

The best model is a late-fusion ensemble, so the main explanation uses grouped permutation importance by omics block. The score is the mean macro-F1 drop after shuffling one omics block on the holdout test set.

Omics block Mean macro-F1 drop
Protein 0.300
RNA expression 0.265
Copy number 0.125
Mutation 0.061

Top feature-level signals included mu_TP53, mu_PIK3CA, mu_GATA3, pp_ER.alpha, pp_HER2, and pp_HER2.pY1248.

Omics importance

Repository Structure

tcga-brca-multiomics-classification/
├── app/
├── data/
│   ├── raw/
│   ├── processed/
│   └── external/
├── models/
│   ├── checkpoints/
│   └── metrics/
├── notebooks/
├── reports/
│   ├── figures/
│   └── tables/
├── src/
│   ├── data/
│   ├── features/
│   ├── models/
│   └── visualization/
├── README.md
├── requirements.txt
└── .gitignore

Reproduce The Project

Create and activate a virtual environment:

python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
pip install -r requirements.txt

Download the Kaggle files:

python -m src.data.download_data

Run the pipeline:

python -m src.visualization.run_eda
python -m src.features.run_preprocessing
python -m src.models.train_baselines
python -m src.models.train_fusion
python -m src.models.explain
python -m src.visualization.final_figures

Open the notebooks:

python -m jupyter lab

Key Outputs

Final figures:

  • reports/figures/final_summary_panel.png
  • reports/figures/final_model_comparison_macro_f1.png
  • reports/figures/final_best_model_confusion_matrix.png
  • reports/figures/final_omics_importance.png
  • reports/figures/final_subtype_distribution.png

Final tables:

  • reports/tables/final_model_comparison.csv
  • reports/tables/final_key_results.csv

Model artifacts:

  • models/checkpoints/single_omics_*.joblib
  • models/checkpoints/multiomics_*.joblib

Limitations

  • The Kaggle dataset used here does not include PAM50 subtype labels, so this project predicts a receptor-status clinical subtype proxy.
  • The HER2-enriched-like class is small, with 25 total samples before splitting.
  • Results are based on one stratified holdout split. A larger study should use repeated cross-validation and external validation.
  • Feature importance values are useful for model inspection, but they should not be interpreted as causal biological effects.

Next Steps

  • Add an external PAM50 label source if sample identifiers can be matched safely.
  • Add repeated cross-validation for more stable model comparison.
  • Add a Streamlit demo for interactive prediction and model inspection.
  • Compare late fusion with calibrated weighted fusion.

About

Multi-omics machine learning project for breast cancer clinical subtype classification using TCGA-BRCA data.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages