IntegrationTest / models /xgboost /eval_accuracy.py
Yingtao-Zheng's picture
Upload partially updated files
8bbb872
"""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()