Using SPFlow with sklearn¶
SPFlow provides optional scikit-learn compatible wrappers in spflow.interfaces.sklearn.
Installation¶
Install with the sklearn extra:
pip install spflow[sklearn]
Density Estimation¶
import numpy as np
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from spflow.interfaces.sklearn import SPFlowDensityEstimator
X = np.random.randn(500, 2).astype(np.float32)
pipe = Pipeline(
[
("scaler", StandardScaler()),
("pc", SPFlowDensityEstimator(structure_learner="learn_spn", dtype="float32")),
]
)
pipe.fit(X)
logp = pipe.named_steps["pc"].score_samples(pipe.named_steps["scaler"].transform(X[:5]))
samples = pipe.named_steps["pc"].sample(10, random_state=0)
Sampling Notes¶
The sklearn density estimator exposes sample only. Differentiable-sampling APIs were removed.
Classifier Wrapper¶
If you already have an SPFlow model that implements predict_proba(torch.Tensor),
wrap it as a scikit-learn classifier:
import numpy as np
from spflow.interfaces.sklearn import SPFlowClassifier
# model = ... # any SPFlow classifier providing predict_proba(torch.Tensor)
# X, y = ...
# clf = SPFlowClassifier(model=model, dtype="float32").fit(X, y)
# y_proba = clf.predict_proba(X)