【问题标题】:Custom estimator for sklearn with a lot of params具有大量参数的 sklearn 自定义估算器
【发布时间】:2019-12-11 14:24:58
【问题描述】:

我正在尝试使用大量参数为 sklearn 制作自定义估算器。据我了解,我应该这样做:

    class MyEstim(BaseEstimator):

     def __init__(self, param1, param2):
      super().__init__()

     self.param1 = param1
     self.param2 = param2
     ...

但是如果我有数十或数百个参数,我不知道该怎么做。构建参数 - 有效值列表不是问题,但我不明白如何更好地将此列表传递给估算器以使其在 sklearn 中工作。

这样的事情对我不起作用:

         def __init__(self, **kwargs):
          super().__init__()
          # init params from kwargs

因为据我了解,sklearn 代码中有一些约定,所以它只能初始化在__init___ 函数中明确定义的参数。

【问题讨论】:

    标签: python parameters scikit-learn


    【解决方案1】:

    只要您的get_paramsset_params 方法按预期工作,您就可以使用**kwargs

    例子:

    (取自我撰写的blog post

    
    class LoggingEstimator(BaseEstimator):
        def __init__(self, est_class=LinearRegression, **kwargs):
    
            self.est_class = est_class
    
            # kwargs depend on the model used, so assign them whatever they are
            for key, value in kwargs.items():
                setattr(self, key, value)
    
            self._param_names = ['est_class'] + list(kwargs.keys())
    
        def get_params(self, deep=True):
            # Note: we are ignoring the deep parameter
            # this will not work with estimators that have sub-estimators
            # see https://scikit-learn.org/stable/developers/develop.html#get-params-and-set-params
            return {param: getattr(self, param)
                    for param in self._param_names}
    
        def set_params(self, **parameters):
            for parameter, value in parameters.items():
                setattr(self, parameter, value)
    
            return self
    

    【讨论】:

      猜你喜欢
      • 2015-06-06
      • 2020-09-05
      • 2017-08-08
      • 2018-07-18
      • 1970-01-01
      • 2020-12-26
      • 2020-09-25
      • 2017-06-13
      • 2019-07-05
      相关资源
      最近更新 更多