在管道中使用gridsearchCV时无法克隆对象错误

2024-10-03 23:22:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在制作一个由tfidf矢量器和xgboost分类器组成的管道,并试图为我的问题找到矢量器的最佳参数。但是,我得到以下错误:

Cannot clone object Text2TfIdfTransformer(max_df=0.5, max_features=1000), as the constructor either does not set or modifies parameter max_df.

代码如下:

class Text2TfIdfTransformer(BaseEstimator):

    def __init__(self, max_df = 1, max_features = 3000):
        self._model = TfidfVectorizer(max_df, max_features, sublinear_tf=True)
        pass

    def fit(self, data, df_y=None):
        self._model.fit(data)
        return self

    def transform(self, text):
        return self._model.transform(text)
    


pl_xgb_tf_idf = Pipeline(steps=[('tfidf',Text2TfIdfTransformer()),
                         ('xgboost', XGBClassifier(objective='multi:softmax'))])


parameters = {'tfidf__max_df':[.5,.6], 'tfidf__max_features': [1000]}
grid = GridSearchCV(pl_xgb_tf_idf, param_grid=parameters, cv=5)
grid.fit(X,labels)

我不确定调用init时是否应该声明变量max_df和max_features,但是如果我不在这里声明它们,我会得到另一个错误(估计器没有任何变量)

我肯定我错过了一些基本的东西,但我找不到它的确切含义,任何帮助都将不胜感激

如果有一些重要信息丢失,请询问


Tags: selfdfmodelinittfdef矢量错误
2条回答

您需要保留父类的fit和transform函数的参数名

    def fit(self, X, y):
        self._model.fit(X)
        return self

    def transform(self, x):
        return self._model.transform(x)

您需要在__init __中声明参数,以便对其运行gridsearch,否则您将违反sklearn API惯例

这将解决您的问题:

def __init__(self, max_df = 1, max_features = 3000):
    self.max_df = max_df
    self.max_features = max_features
    self._model = TfidfVectorizer(self.max_df, self.max_features, sublinear_tf=True)

相关问题 更多 >