evaluate_model.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. #!/usr/bin/env python3
  2. """Evaluate the fixed pressure model against the sealed test directory."""
  3. from __future__ import annotations
  4. import argparse
  5. import json
  6. import sys
  7. from pathlib import Path
  8. sys.path.insert(0, str(Path(__file__).resolve().parents[2]))
  9. from models.common import modeling, paths
  10. from models.generalized import features_pressure
  11. def main() -> None:
  12. parser = argparse.ArgumentParser(description="仅对封存压力测试集做最终模型评估")
  13. parser.add_argument("--datasets-dir", default=str(paths.PRESSURE_DATAS))
  14. parser.add_argument("--models-dir", default=str(paths.PRESSURE_MODELS))
  15. parser.add_argument("--output-dir", default=str(paths.PRESSURE_RESULTS))
  16. args = parser.parse_args()
  17. report = modeling.evaluate("pressure", features_pressure, Path(args.datasets_dir), Path(args.models_dir), Path(args.output_dir))
  18. summary = report["window_metrics"]
  19. print(f"测试集:{summary['samples']} 窗口(正常 {summary['normal_samples']}、异常 {summary['anomaly_samples']}),阈值 {report['threshold']:.6f}")
  20. print(f"{'类别':<6}{'查准率':>10}{'召回率':>10}{'F1':>10}{'样本数':>10}")
  21. for name, label in (("正常", "normal"), ("异常", "anomaly")):
  22. item = summary["class_metrics"][label]
  23. print(f"{name:<6}{item['precision']:>10.4f}{item['recall']:>10.4f}{item['f1']:>10.4f}{item['support']:>10}")
  24. print(
  25. f"准确率 {summary['accuracy']:.4f} 平衡准确率 {summary['balanced_accuracy']:.4f} "
  26. f"macro-F1 {summary['macro_f1']:.4f} 加权F1 {summary['weighted_f1']:.4f} "
  27. f"特异度 {summary['specificity']:.4f} PR-AUC {summary['pr_auc']:.4f}"
  28. )
  29. print(json.dumps(report, ensure_ascii=False, indent=2))
  30. if __name__ == "__main__":
  31. main()