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