我正在制作一個由 tfidf 矢量器和 xgboost 分類器組成的管道,并且我正在嘗試為我的問題找到矢量器的最佳參數(shù)。但是我收到以下錯誤: 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)我不確定在調(diào)用init時是否應(yīng)該聲明變量 max_df 和 max_features但如果我不在這里聲明它們,我會收到另一個錯誤(估計器沒有任何變量)我確信我錯過了一些基本的東西,但我找不到它到底是什么,任何幫助將不勝感激!如有遺漏重要信息,請追問!
2 回答

素胚勾勒不出你
TA貢獻1827條經(jīng)驗 獲得超9個贊
您需要保留父類的fit和transform函數(shù)的參數(shù)名稱
def fit(self, X, y):
self._model.fit(X)
return self
def transform(self, x):
return self._model.transform(x)

一只斗牛犬
TA貢獻1784條經(jīng)驗 獲得超2個贊
您需要聲明參數(shù)才能__init __
對它們運行網(wǎng)格搜索,否則您將違反 sklearn API 約定。
這應(yīng)該可以解決您的問題:
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)
添加回答
舉報
0/150
提交
取消