首页 文章

Scikit-learn的管道:多标签分类出错 . 通过稀疏矩阵

提问于
浏览
1

我正在使用不同的机器学习算法实现不同的分类器 .

我正在排序文本文件,并执行以下操作:

classifier = Pipeline([
('vectorizer', CountVectorizer ()),
('TFIDF', TfidfTransformer ()),
('clf', OneVsRestClassifier (GaussianNB()))])
classifier.fit(X_train,Y)
predicted = classifier.predict(X_test)

当我使用GaussianNB算法时,会出现以下错误:

TypeError:传递了稀疏矩阵,但需要密集数据 . 使用X.toarray()转换为密集的numpy数组 .

我看到以下帖子here

在这篇文章中,创建了一个类来执行数据转换 . 可以使用TfidfTransformer调整我的代码 . 我怎么解决这个问题?

1 回答

  • 3

    您可以执行以下操作:

    class DenseTransformer(TransformerMixin):
        def transform(self, X, y=None, **fit_params):
            return X.todense()
    
        def fit_transform(self, X, y=None, **fit_params):
            self.fit(X, y, **fit_params)
            return self.transform(X)
    
        def fit(self, X, y=None, **fit_params):
            return self
    
    classifier = Pipeline([
    ('vectorizer', CountVectorizer ()),
    ('TFIDF', TfidfTransformer ()),
    ('to_dense', DenseTransformer()), 
    ('clf', OneVsRestClassifier (GaussianNB()))])
    classifier.fit(X_train,Y)
    predicted = classifier.predict(X_test)
    

    现在,作为管道的一部分,数据将转换为密集表示 .

    顺便说一句,我不知道你的约束,但也许你可以使用另一个分类器,例如RandomForestClassifierSVM,它们接受稀疏表示中的数据 .

相关问题