2015-07-05 44 views
1

我正在使用不同的機器學習算法實現不同的分類器。Scikit-learn的管道:錯誤與多標籤分類。通過稀疏矩陣

我整理的文本文件,並做如下:

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

當我使用GaussianNB出現以下錯誤算法:

TypeError: A sparse matrix was passed, but dense data is required. Use X.toarray() to convert to a dense numpy array.

我看到了下面的帖子here

在這篇文章中,創建了一個類來執行數據轉換。 可以使我的代碼適應TfidfTransformer。 我該如何解決這個問題?

回答

2

你可以做到以下幾點:現在

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

+0

非常感謝。是。我試過其他SVM算法和RandomForest,並接受了解析表示 – Blunt

+0

@Blunt沒問題....玩得開心! – omerbp