Download prepare_and_preprocess/cross_validation_split.py from ODELIA-AI/SwinUNETR: direct link, hf CLI and curl.
- Browser
- Download file 1.35 kB
-
https://huggingface.co/ODELIA-AI/SwinUNETR/resolve/main/prepare_and_preprocess/cross_validation_split.py
- Command line
-
hf download hf://ODELIA-AI/SwinUNETR/prepare_and_preprocess/cross_validation_split.py
-
curl -L -o cross_validation_split.py https://huggingface.co/ODELIA-AI/SwinUNETR/resolve/main/prepare_and_preprocess/cross_validation_split.py
1.35 kB
| import pandas as pd | |
| from sklearn.model_selection import StratifiedKFold | |
| csv_path = '/workspace/odelia-data-scripts/csvs/combined_metadata.csv' | |
| df = pd.read_csv(csv_path) | |
| # Ensure Lesion is integer | |
| df['Lesion'] = df['Lesion'].astype(int) | |
| # Step 1: Get max lesion label per patient | |
| patient_labels = df.groupby('PatientID')['Lesion'].max().reset_index() | |
| # Step 2: Prepare data for stratified k-fold | |
| patient_ids = patient_labels['PatientID'].values | |
| labels = patient_labels['Lesion'].values | |
| skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42) | |
| # Loop through folds | |
| for fold, (train_idx, val_idx) in enumerate(skf.split(patient_ids, labels), 1): | |
| train_patients = patient_ids[train_idx] | |
| val_patients = patient_ids[val_idx] | |
| # Filter rows for the current split | |
| train_df = df[df['PatientID'].isin(train_patients)][['UID', 'Lesion', 'source']] | |
| val_df = df[df['PatientID'].isin(val_patients)][['UID', 'Lesion', 'source']] | |
| # Save to CSV | |
| train_df.rename(columns={'UID': 'patient_id', 'Lesion': 'label'}).to_csv( | |
| f'/workspace/odelia-data-scripts/odelia/train_ids_fold{fold}.csv', index=False | |
| ) | |
| val_df.rename(columns={'UID': 'patient_id', 'Lesion': 'label'}).to_csv( | |
| f'/workspace/odelia-data-scripts/odelia/val_ids_fold{fold}.csv', index=False | |
| ) | |
| print("5-fold cross-validation splits saved.") | |