Please stay on the mailing list :)

I'm not sure if ValueError is the right error that would be raised (I think it's not). And it's hard to say if this will break something in some edge cases. I would probably rather explicitly encode the parameters of FancyEstimator instead of the try,
or get them using super.get_params. You also should rewrite get_params.

In principle something like that should work, but I wouldn't go as far as saying it's
"safe" and you should test it extensively.

On 04/13/2018 12:41 PM, Javier López wrote:
Is something like this safe, or might I be breaking some important functionality?

```
    def set_params(self, **params):
        try:
            super(FancyEstimator, self).set_params(**params)
        except ValueError:
            self.wrapped_estimator_.set_params(**params)
```


On Fri, Apr 13, 2018 at 5:05 PM Andreas Mueller <t3k...@gmail.com <mailto:t3k...@gmail.com>> wrote:

    You just need to implement get_params and set_params yourself to
    delegate in this way, right?


    On 04/13/2018 11:51 AM, Javier López wrote:
    I have a class
    `FancyEstimator(BaseEstimator, MetaEstimatorMixin): ...` that wraps
    around an arbitrary sklearn estimator to add some functionality I
    am interested about.
    This class contains an attribute `self.estimator` that contains
    the wrapped estimator.
    Delegation of the main methods, such as `fit`, `transform` works
    just fine, but I am
    having some issues with `get_params` and `set_params`.

    The main idea is, I would like to use my wrapped class as a
    drop-in replacement for
    the original estimator, but this raises some issues with some
    functions
    that try using the `get_params` and `set_params` straight in my
    class, as the original
    parameters now have prefixed names (for instance
    `estimator__verbose` instead of `verbose`)
    I would like to delegate calls of set_params and get_params in a
    smart way so that if a
    parameter is unknown for my wrapper class, then it automatically
    goes looking for it in
    the wrapped estimator.

     I am not concerned about my class parameter names as there are
    only a couple of very
    specific names on it, so it is safe to assume that any unknown
    parameter name should
    refer to the base estimator. Is there an easy way of doing that?

    Cheers,
    J


    _______________________________________________
    scikit-learn mailing list
    scikit-learn@python.org <mailto:scikit-learn@python.org>
    https://mail.python.org/mailman/listinfo/scikit-learn


_______________________________________________
scikit-learn mailing list
scikit-learn@python.org
https://mail.python.org/mailman/listinfo/scikit-learn

Reply via email to