在Sklearn中,如何将任意数量的模型传递给类?

时间:2018-04-19 08:38:50

标签: python class machine-learning scikit-learn

如果我写的话

class test_class(BaseEstimator, ClassifierMixin):
    def __init__(self, model = LogisticRegression()):
        self.model = model
    # ... #

然后我可以这样做

test = test_class()
test.get_params()

我将LogisticRegression()的参数作为我的类参数的一部分,格式为" model __"。这样我就可以使用像GridSearchCV这样的类来轻松访问LogisticRegression的参数。

对于任意数量的模型,有没有办法做到这一点?

我尝试了一些方法,包括使用像这样的** kwargs参数:

class test_class(BaseEstimator, ClassifierMixin):
    def __init__(self, model = LogisticRegression(), **kwargs):
        self.model = model

        for key in kwargs:
            setattr(self, key, kwargs[key])
    # ... #

然后如果我做

test = test_class(model_2 = RandomForestClassifier())
test.get_params()

我和以前一样(尽管将model_2添加为属性)。

我觉得这应该非常简单,但我没有到达任何地方 - 也许我想做的事情甚至没有意义。我的课程的目标是某种模型整体,我可以使用GridSearchCV。

有没有人有任何想法?

编辑:

我想给GridSearchCV提供的参数网格的一个例子是,考虑到第二个例子:

{
    model__C : [1, 10],
    model_2__n_estimators : [10, 100]
}

第一行按预期工作(考虑Pipelines如何与GridSearchCV一起使用),但第二行没有(因为在get_params()中找不到参数)。

我的合适,预测和得分方法都运行正常,这只是将参数传递给我想传递给我班级的其他模型的问题。

0 个答案:

没有答案