如何对使用i训练数据进行scikit-learn网格搜索

2024-05-16 23:23:11 发布

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

我正在处理一个文本分类问题,使用的管道如下所示:

self.full_classifier = Pipeline([
        ('vectorize', CountVectorizer()),
        ('tf-idf', TfidfTransformer()),
        ('classifier', SVC(kernel='linear', class_weight='balanced'))
    ])

完整的语料库太大了,不适合记忆,但足够小,在矢量化步骤后,我没有记忆问题。我可以通过使用

^{pr2}$

其中self.\u all_data是一个迭代器,它为每个训练示例生成文档(而self.dataset只包括文档id和目标)。在这里,max_samples是可选的,我用它来分割训练/测试数据。现在我想使用gridsearch优化参数,为此我使用以下代码:

parameters = {
        'vectorize__stop_words': (None, 'english'),
        'tfidf__use_idf': (True, False),
        'classifier__class_weight': (None, 'balanced')
    }
gridsearch_classifier = GridSearchCV(self.full_classifier, parameters, n_jobs=-1)
gridsearch_classifier.fit(self._all_data(), self.dataset['target'].values)

我的问题是这会产生以下错误:

TypeError: Expected sequence or array-like, got <type 'generator'>

回溯指向网格搜索_分类器.fit方法(然后放入scikit的代码中,在_num_samples(x)中引发错误)。因为有可能与生成器相匹配作为输入,所以我想知道是否还有一种方法可以通过网格搜索来实现这一点,而我目前正缺少这种方法。 感谢任何帮助!在


Tags: 方法记忆文档selfdataalldatasetfull
1条回答
网友
1楼 · 发布于 2024-05-16 23:23:11

没有将生成器具体化为一个列表。虽然各种拟合方法通常可以构造成一次使用一个项目,从而接受迭代器,但网格搜索还可以执行交叉验证,并通过索引已实现的集合来生成数据的cv分割。在

相关问题 更多 >