sbm-prediction / experiments /evaluate_gridsearch.sh
devangelista2's picture
Deploy SBM Stratify web app (LFS for binaries, slim outputs)
0ad96be
Raw
History Blame Contribute Delete
1.63 kB
#!/usr/bin/env bash
set -euo pipefail
# Edit only these variables
DATA_CONFIG="configs/preoperative_reduced.json"
GRIDSEARCH_DIR="configs/gridsearch"
OUTPUT_ROOT="outputs/gridsearch_eval"
TRAIN_SCRIPT="src/train.py"
TARGETS=(
"complications_30d"
"Severe complication"
"KPS_Discharge Worsened"
"New neurological deficits"
)
# Splitting Strategy: 'random', 'predefined', or 'temporal'
SPLIT_STRATEGY="temporal"
SPLIT_COLUMN="Split"
TEST_SIZE="0.2"
DATE_COLUMN="Date of surgery"
# FN-sensitive decision policy (binary tasks)
THRESHOLD_VAL_SIZE="0.2"
MIN_RECALL="0.80"
F_BETA="2.0"
FN_COST="1.0"
FP_COST="5.0"
mkdir -p "$OUTPUT_ROOT"
for target in "${TARGETS[@]}"; do
best_params="$GRIDSEARCH_DIR/$target/best_parameters.json"
if [[ ! -f "$best_params" ]]; then
echo "[SKIP] $target -> missing $best_params"
continue
fi
models_csv="$(python - "$best_params" <<'PY'
import json, sys
with open(sys.argv[1], 'r', encoding='utf-8') as f:
d = json.load(f)
print(','.join([k for k, v in d.items() if v is not None]))
PY
)"
echo "[RUN ] $target | models: $models_csv"
python "$TRAIN_SCRIPT" \
--target "$target" \
--data_config "$DATA_CONFIG" \
--model_config "$best_params" \
--models "$models_csv" \
--output_folder "$OUTPUT_ROOT/$target" \
--feature_importance \
--test_size $TEST_SIZE \
--split_strategy "$SPLIT_STRATEGY" \
--split_column "$SPLIT_COLUMN" \
--date_column "$DATE_COLUMN" \
--threshold_val_size $THRESHOLD_VAL_SIZE \
--min_recall $MIN_RECALL \
--f_beta $F_BETA \
--fn_cost $FN_COST \
--fp_cost $FP_COST
done
echo "Done."