簡體   English   中英

Scikit-learn的管道:多標簽分類出錯。 稀疏矩陣通過

[英]Scikit-learn's Pipeline: Error with multilabel classification. A sparse matrix was passed

我正在使用不同的機器學習算法實現不同的分類器。

我正在對文本文件進行排序,並執行以下操作:

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

當我使用算法GaussianNB時,會發生以下錯誤:

TypeError:傳遞了稀疏矩陣,但是需要密集數據。 使用X.toarray()轉換為密集的numpy數組。

我在這里看到了以下帖子

在本文中,將創建一個類來執行數據轉換。 可以使用TfidfTransformer修改我的代碼。 我該如何解決?

您可以執行以下操作:

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 ,它們確實接受稀疏表示形式的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM