Skip to content

Quick Start

Classification

import numpy as np
from h2ml import H2MLPipeline, PipelineConfig, PipelineData

store = PipelineData(
    X=X_arr,                     # np.ndarray (n_samples, n_features)
    feature_names=feature_cols,  # list[str]
    y=y_arr,                     # np.ndarray (n_samples,)
)

or

store = PipelineData.from_frame(
    X,                           # pd.DataFrame with features
    y=y_arr,                     # np.ndarray (n_samples,)
)

pipeline = H2MLPipeline(config=PipelineConfig(
    task_type="classification",   # or "regression"; the TaskType enum is also accepted
    metric="AUC",
    n_splits=5,
    n_trials=50,
    verbose=True,
))
result = pipeline.run(store)

print(result.summary())
print(result.best_model_name, result.best_stage)

Regression with y-transform sweep

Steps 1 and 3 evaluate all models × all transforms jointly. The winning (model, transform) pair is selected once and carried forward.

pipeline = H2MLPipeline(config=PipelineConfig(
    task_type="regression",
    metric="R2",
    verbose=True,
))
result = pipeline.run(store, transforms=["log", "sqrt", "count", "winlog"])
print(result.y_transform)   # winning transform name

Available transforms: "count" (identity), "log", "sqrt", "wincount", "winlog", "winsqrt". Winsorize-based variants are silently skipped when no upper outliers are present.

Spatial cross-validation

Pass an (n_samples, 2) coordinate array to activate spatial CV throughout the pipeline:

store = PipelineData(X=X_arr, feature_names=cols, y=y_arr, coords=coords_arr)

pipeline = H2MLPipeline(config=PipelineConfig(
    task_type="classification",
    spatial_cv_method="block",   # or "spcv"
    spatial_cv_metric="haversine",
))
result = pipeline.run(store)
print(result.cv_type)  # "spatial"

See Spatial CV for full parameter details.

Partial runs

# Step 1 only — quick model screening
result = pipeline.run_step1_only(store)

# Steps 1–2 — inspect SHAP importances before continuing
result = pipeline.run_step1_to_step2(store)
print(result.selector.importance_summary())
print(result.features_reduced.feature_names)

# Steps 1–3 — model and stage selection without HPO
result = pipeline.run_step1_to_step3(store)

# Resume from step 3 (uses a saved or existing result)
result = pipeline.run_from_step3(result)

# Re-run HPO only on a saved result
from h2ml import PipelineResult
result = PipelineResult.load("runs/experiment_01")
result = pipeline.run_step4_only(result)

Deploy the final model

from h2ml.pipeline.final_model import FinalModel

final = result.build_final_model()
final.predict(X_new)
final.predict_proba(X_new)      # classification only

final.save("models/final.pkl")
final = FinalModel.load("models/final.pkl")

Attach experiment metadata

from h2ml.evaluation.metrics import RunMetadata

pipeline = H2MLPipeline(
    config=config,
    metadata=RunMetadata(schema="v2_features", target="pm25", batch="2024-01"),
)

Labels appear as columns in all fold and agg DataFrames, making multi-run concatenation trivial.