不幸的是,这两个是不兼容的。A
CountVectorizer产生一个稀疏矩阵,RandomForestClassifier需要一个密集矩阵。可以使用进行转换
X.todense()。这样做会大大增加您的内存占用量。
以下是基于http://zacstewart.com/2014/08/05/pipelines-of-featureunions-of-
pipelines.html进行此操作的示例代码,可让您
.todense()在管道阶段进行调用。
class DenseTransformer(TransformerMixin): def fit(self, X, y=None, **fit_params): return self def transform(self, X, y=None, **fit_params): return X.todense()
一旦有了
DenseTransformer,就可以将其添加为管道步骤。
pipeline = Pipeline([ ('vectorizer', CountVectorizer()), ('to_dense', DenseTransformer()), ('classifier', RandomForestClassifier())])另一种选择是使用用于稀疏数据的分类器,例如
LinearSVC。
from sklearn.svm import LinearSVCpipeline = Pipeline([('vectorizer', CountVectorizer()), ('classifier', LinearSVC())])


