modAL-python / modAL

A modular active learning framework for Python
https://modAL-python.github.io/
MIT License
2.22k stars 324 forks source link

sklearn interface get_params/set_params not supported #103

Open BoyanH opened 4 years ago

BoyanH commented 4 years ago

Every sklearn estimator provides the get_params(deep=True) and set_params(params) methods. These are used e.g. when cloning an estimator. The parameters of an estimator are the arguments of its __init__ method and, as of sklearn's convention, these are all set as class attributes (see BaseEstimator._get_param_names()). When an argument of __init__ is not set as a class attribute, as is the case with ActiveLearner.bootstrap_init, BaseEstimator.get_params() prints a warning. As of version 0.24 of sklearn, an error will be thrown.

This is a minimalistic code snippet which should reproduce the issue.

from modAL.models import ActiveLearner
from modAL.uncertainty import uncertainty_sampling
from sklearn.ensemble import RandomForestClassifier

learner = ActiveLearner(
    estimator=RandomForestClassifier(),
    query_strategy=uncertainty_sampling
)
learner.set_params(learner.get_params(deep=True))

A simple solution would be to save all arguments of the __init__ method as class attributes.

cosmic-cortex commented 4 years ago

Thanks for the report, I am investigating this!