任务:使用CountVectorizer
和TfidfTransformer
结合SVC
进行文档分类。
我已经训练了模型,测试并使用pickle
保存了模型以及CountVectorizer
和TfidfTransformer
。
现在当我加载并使用它进行预测时,出现了AttributeError: dense not found
的错误。
我检查了训练和测试阶段的输入形状,它们是相同的。但我认为形状不是问题所在。
在训练和加载使用之间没有进行版本更新。所有操作都在同一版本scikit-learn==0.23.2
下进行。
这是我的代码:
#训练X_train = train["Text"]Y_train = train["Class"]count = CountVectorizer(lowercase=False)X_count_vector = count.fit_transform(X_train)tfidf = TfidfTransformer(smooth_idf=True, use_idf=True)X_train = tfidf.fit_transform(X_count_vector)classifier = SVC()classifier.fit(X_train.todense(), Y_train) #训练为密集矩阵#测试cvec = count.transform(test["Text"])predable = tfidf.transform(cvec)pred = classifier.predict(predable.todense()) #这一行有效,它给出了预期的预测值。#保存模型pickle.dump(classifier, open("classifier.txt", 'wb'))pickle.dump(count, open("countVec.txt", 'wb'))pickle.dump(tfidf, open("tfidf.txt", 'wb'))#加载模型classifiernew = pickle.load(open("classifier.txt", 'rb'))countVectornew = pickle.load(open("countVec.txt", 'rb'))tfidfnew = pickle.load(open("tfidf.txt", 'rb'))#使用加载的模型newInp = test["Text"]countVec = countVectornew.transform(newInp)X_test = tfidfnew.transform(countVec)#预测,这里是错误发生的地方predd = classifiernew.predict(X_test.todense()) #导致错误的行
这是完整的错误追踪信息:
res = clf.predict(testable.dense())Traceback (most recent call last): File "<ipython-input-74-d4714966beb3>", line 1, in <module> res = clf.predict(testable.dense()) File "...\env\lib\site-packages\scipy\sparse\base.py", line 687, in __getattr__ raise AttributeError(attr + " not found")AttributeError: dense not found
回答:
好吧,在重新开启这个问题后,我能够为这个问题提供一个解决方案。不知为何.dense()
方法不起作用,取而代之的是我使用了.toarray()
,对我来说效果很好。
祝模型训练愉快。