Sklearn - определить get_params() автоматически

avatar
diadochos
8 апреля 2018 в 10:14
8534
1
4

Я пытаюсь определить класс, подходящий для оценки в Sklearn, например

class MyEstimator():
    def __init__(self,verbose=False):
        self.verbose = verbose

    def get_params(self, deep=False):
        return {
            'verbose': self.verbose,
        }

    def set_params(self, **parameters):
        for parameter, value in parameters.items():
            setattr(self, parameter, value)
        return self

    # Also def fit() and other stuff ...

Вопрос

set_params() можно определить без явного перечисления всех имен параметров. Есть ли способ определить get_params() аналогичным образом?

Что мне нужно от Sklearn, так это GridsearchCV, и из того, что я пробовал, кажется, что get_params определяет, какие параметры могут быть введены во время перекрестной проверки.

Источник

Ответы (1)

avatar
MaxU
8 апреля 2018 в 10:27
11

Просто унаследуйте свой класс от BaseEstimator, который реализует для вас get_params() и set_params().

Демо:

In [21]: from sklearn.base import BaseEstimator, ClassifierMixin, RegressorMixin, ClusterMixin

In [22]: from sklearn.base import BaseEstimator
    ...:
    ...: class MyEstimator(BaseEstimator):
    ...:     def __init__(self,verbose=False):
    ...:         self.verbose = verbose

In [23]: est = MyEstimator(verbose=True)

In [24]: est.get_params()
Out[24]: {'verbose': True}

In [25]: est.set_params(verbose=False)
Out[25]: MyEstimator(verbose=False)

In [26]: est.get_params()
Out[26]: {'verbose': False}

PS вы также можете унаследовать свой оценщик от одного из (ClassifierMixin, RegressorMixin, ClusterMixin), в зависимости от того, какой оценщик вы собираетесь реализовать...

diadochos
8 апреля 2018 в 11:23
0

Большое спасибо! Я тоже посмотрю на Mixins.

MaxU
8 апреля 2018 в 11:24
0

@diadochos, рад, что смог помочь :)