我正在使用不同的机器学习算法实现不同的分类器。
我正在排序文本文件,并执行以下操作:
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调整我的代码。 我怎么解决这个问题?
答案 0 :(得分:3)
您可以执行以下操作:
cursor = collection.aggregate([
{ "$match": { "date": { "$gte": startdate } } },
{'$project': { "def": "$engines.$elemMatch.definitions","date":1,"_id": 0 }}
], allowDiskUse=True)
现在,作为管道的一部分,数据将转换为密集表示。
顺便说一句,我不知道你的约束,但也许你可以使用另一个分类器,例如RandomForestClassifier或SVM来接受稀疏表示的数据。