为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

红糖糍粑 2023-07-11 15:00:51
我正在制作一个由 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但如果我不在这里声明它们,我会收到另一个错误(估计器没有任何变量)我确信我错过了一些基本的东西,但我找不到它到底是什么,任何帮助将不胜感激!如有遗漏重要信息,请追问!
查看完整描述

2 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

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


    def fit(self, X, y):

        self._model.fit(X)

        return self


    def transform(self, x):

        return self._model.transform(x)


查看完整回答
反对 回复 2023-07-11
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

您需要声明参数才能__init __对它们运行网格搜索,否则您将违反 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)


查看完整回答
反对 回复 2023-07-11
  • 2 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信