SKILL.md
Custom scikit-learn Estimator
Purpose
Create scikit-learn compatible estimators that work with pipelines, model selection, and validation tooling. This skill codifies the required API patterns for init, fit, prediction/transform methods, learned attributes, and estimator checks.
Usage
- “rolling your own estimator”
- “custom scikit-learn estimator”
- “build sklearn-compatible class”
Instructions
- Choose the estimator type and mixins
- Use ClassifierMixin, RegressorMixin, TransformerMixin, or ClusterMixin as needed, with BaseEstimator last in the inheritance list. - For meta-estimators, ensure sub-estimator params are exposed through getparams/setparams (handled by BaseEstimator).
- Implement a minimal
init
- Keyword args with defaults; no validation or logic. - Assign each parameter to an attribute with the exact same name. - Avoid mutable defaults; do not set attributes with trailing _ here.
- Implement
fit
- Signature: fit(self, X, y=None, **kwargs) and accept y=None even for unsupervised estimators. - Validate inputs using validatedata/checkarray; ensure X.shape[0] == y.shape[0] when supervised. - Set learned attributes with trailing (e.g., coef, classes). - Return self and overwrite learned attributes on every call unless warmstart=True.
- Implement prediction/transform methods
- Call checkisfitted and validate inputs with validatedata(..., reset=False). - Classifiers must use self.classes and return labels, not indices. - Transformers must preserve sample count and order.
- Handle randomness correctly
- Accept randomstate=None in init, store it unmodified. - In fit, use checkrandomstate and store RNG in randomstate_ if needed later.
- Optional: tags and
set_output
- Implement __sklearn_tags__ if default tags are not appropriate. - For transformers, consider getfeaturenamesout and setoutput compatibility.
- Validate with estimator checks
- Run checkestimator or parametrizewith_checks when possible. - Use the response checklist in ./templates/estimator-checklist.md to confirm compliance.