我正在处理一个文本分类问题,使用的管道如下所示:
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)中引发错误)。因为有可能与生成器相匹配作为输入,所以我想知道是否还有一种方法可以通过网格搜索来实现这一点,而我目前正缺少这种方法。 感谢任何帮助!在
没有将生成器具体化为一个列表。虽然各种拟合方法通常可以构造成一次使用一个项目,从而接受迭代器,但网格搜索还可以执行交叉验证,并通过索引已实现的集合来生成数据的cv分割。在
相关问题 更多 >
编程相关推荐