Download scripts/train.py from OneScience-Group/WavyChannel-RF-ThermoHydraulics: direct link, hf CLI and curl.
- Browser
- Download file 3.73 kB
-
https://huggingface.co/OneScience-Group/WavyChannel-RF-ThermoHydraulics/resolve/main/scripts/train.py
- Command line
-
hf download hf://OneScience-Group/WavyChannel-RF-ThermoHydraulics/scripts/train.py
-
curl -L -o train.py https://huggingface.co/OneScience-Group/WavyChannel-RF-ThermoHydraulics/resolve/main/scripts/train.py
3.73 kB
| """Fit the formal 3686-case experiment on a SLURM compute node.""" | |
| import argparse | |
| from datetime import datetime, timezone | |
| import importlib.metadata | |
| import os | |
| from pathlib import Path | |
| import platform | |
| import time | |
| import numpy as np | |
| from common import (load_config, ensure_compute_node, load_fixed_dataset, metrics_for, | |
| print_metrics, prediction_frame, write_json, write_metrics, sha256, WavyChannelRF) | |
| def main(): | |
| parser = argparse.ArgumentParser(description=__doc__) | |
| parser.add_argument("--config", required=True) | |
| args = parser.parse_args() | |
| config = load_config(args.config) | |
| runtime = ensure_compute_node(config) | |
| directory = Path(config["output"]["results_dir"]) | |
| directory.mkdir(parents=True, exist_ok=True) | |
| started = time.perf_counter() | |
| data, data_manifest = load_fixed_dataset(config) | |
| split_col = config["data"]["split_column"] | |
| train, test = (data.loc[data[split_col] == split] for split in ["train", "test"]) | |
| features, targets = config["data"]["features"], config["data"]["targets"] | |
| versions = {p: importlib.metadata.version(p) for p in ["numpy", "pandas", "scikit-learn", "joblib", "PyYAML", "matplotlib"]} | |
| print("[train] Formal full fit: two independent Random Forests, 800 trees per target; no epochs.", flush=True) | |
| model = WavyChannelRF(config["model"]["rf_params"]) | |
| model.fit(train[features], train[targets]) | |
| predictions = model.predict(test[features]) | |
| train_predictions = model.predict(train[features]) | |
| metrics = metrics_for(test[targets], predictions, targets) | |
| train_metrics = metrics_for(train[targets], train_predictions, targets) | |
| print_metrics("test", metrics, len(test)) | |
| print_metrics("train", train_metrics, len(train)) | |
| manifest = {"experiment": config["experiment"], "utc_time": datetime.now(timezone.utc).isoformat(), | |
| "runtime": runtime, "python": platform.python_version(), "versions": versions, | |
| "data": data_manifest, "fit_seconds": model.fit_seconds_, | |
| "fitted_train_rows": model.n_train_, | |
| "trees_per_target": {t: len(model.models_[t].estimators_) for t in targets}, | |
| "actual_rf_parameters": {t: model.models_[t].get_params() for t in targets}, | |
| "checkpoint_semantics": "sole fully fitted formal model; no validation/test model selection", | |
| "serialization": "joblib bundle containing two fitted sklearn forests; .pth is requested filename", | |
| "sources": config["reference"], "training_script_sha256": sha256(__file__), | |
| "model_source_sha256": sha256(Path(__file__).resolve().parents[1] / "model/wavy_channel_rf.py")} | |
| checkpoint = Path(config["output"]["checkpoint"]) | |
| model.save(checkpoint, manifest) | |
| print(f"[save] Reloadable joblib checkpoint: {checkpoint} ({checkpoint.stat().st_size} bytes)", flush=True) | |
| write_metrics(directory, metrics) | |
| write_json(directory / "train_metrics.json", train_metrics) | |
| prediction_frame(test, predictions, config).to_csv(directory / "test_predictions.csv", index=False) | |
| model.feature_importances().to_csv(directory / "feature_importances.csv", index=False) | |
| write_json(directory / "data_manifest.json", data_manifest) | |
| write_json(directory / "config_snapshot.json", config) | |
| manifest.update({"test_metrics": metrics, "checkpoint": str(checkpoint), "checkpoint_sha256": sha256(checkpoint), | |
| "total_seconds": time.perf_counter() - started, "execution_state": "completed"}) | |
| write_json(directory / "run_manifest.json", manifest) | |
| print(f"[train] Completed formal experiment in {manifest['total_seconds']:.3f} s", flush=True) | |
| if __name__ == "__main__": | |
| main() | |