![](/img/trans.png)
[英]Scikit-Learn's Pipeline: A sparse matrix was passed, but dense data is required
[英]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)
現在,作為管道的一部分,數據將轉換為密集表示。
順便說一句,我不知道您的約束,但是也許您可以使用其他分類器,例如RandomForestClassifier或SVM ,它們確實接受稀疏表示形式的數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.