split_datasets.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334
  1. #!/usr/bin/env python3
  2. """Split pressure samples by whole event groups without leakage."""
  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 paths, splitting
  10. def main() -> None:
  11. parser = argparse.ArgumentParser(description="按完整事件组切分压力模型样本")
  12. parser.add_argument("--datasets-dir", default=str(paths.PRESSURE_DATAS))
  13. parser.add_argument("--split-ratios", nargs=3, type=float, default=[65.0, 20.0, 15.0], metavar=("TRAIN", "VALIDATION", "TEST"))
  14. parser.add_argument("--seed", type=int, default=20260921)
  15. parser.add_argument("--positive-basis", choices=("samples", "groups"), default="samples")
  16. args = parser.parse_args()
  17. if any(value <= 0 for value in args.split_ratios):
  18. parser.error("切分比例必须为正数")
  19. splits = splitting.normalize_splits(args.split_ratios)
  20. dataset = Path(args.datasets_dir)
  21. result = splitting.write_split(dataset, splits, args.seed, args.positive_basis)
  22. report = dataset / "split_report.json"
  23. report.write_text(json.dumps({"pressure": result}, ensure_ascii=False, indent=2), encoding="utf-8")
  24. print(json.dumps({"pressure": result}, ensure_ascii=False, indent=2))
  25. print(f"切分报告:{report}")
  26. if __name__ == "__main__":
  27. main()