Spaces:
Sleeping
Sleeping
| """Load saved XGBoost checkpoint and print test accuracy, F1, AUC.""" | |
| import os | |
| import sys | |
| import numpy as np | |
| from sklearn.metrics import f1_score, roc_auc_score | |
| from xgboost import XGBClassifier | |
| # run from repo root: python -m models.xgboost.eval_accuracy | |
| REPO_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")) | |
| if REPO_ROOT not in sys.path: | |
| sys.path.insert(0, REPO_ROOT) | |
| from data_preparation.prepare_dataset import get_numpy_splits | |
| MODEL_NAME = "face_orientation" | |
| CKPT_DIR = os.path.join(REPO_ROOT, "checkpoints") | |
| MODEL_PATH = os.path.join(CKPT_DIR, f"xgboost_{MODEL_NAME}_best.json") | |
| def main(): | |
| if not os.path.isfile(MODEL_PATH): | |
| print(f"No checkpoint at {MODEL_PATH}. Train first: python -m models.xgboost.train") | |
| return | |
| splits, num_features, num_classes, _ = get_numpy_splits( | |
| model_name=MODEL_NAME, | |
| split_ratios=(0.7, 0.15, 0.15), | |
| seed=42, | |
| scale=False, | |
| ) | |
| X_test = splits["X_test"] | |
| y_test = splits["y_test"] | |
| model = XGBClassifier() | |
| model.load_model(MODEL_PATH) | |
| preds = model.predict(X_test) | |
| probs = model.predict_proba(X_test) | |
| acc = float(np.mean(preds == y_test)) | |
| f1 = float(f1_score(y_test, preds, average="weighted")) | |
| if num_classes > 2: | |
| auc = float(roc_auc_score(y_test, probs, multi_class="ovr", average="weighted")) | |
| else: | |
| auc = float(roc_auc_score(y_test, probs[:, 1])) | |
| print("XGBoost (face_orientation) — test set") | |
| print(" Accuracy: {:.2%}".format(acc)) | |
| print(" F1: {:.4f}".format(f1)) | |
| print(" ROC-AUC: {:.4f}".format(auc)) | |
| if __name__ == "__main__": | |
| main() | |