ValueError: 模型的特征数量必须与输入匹配 (sklearn)

我正在尝试对一些电影评论数据运行分类器。这批数据已经被分成reviews_train.txtreviews_test.txt。我随后加载了数据,并将每个文件分成评论和标签(正面(0)或负面(1)),然后对这些数据进行向量化。以下是我的代码:

from sklearn import treefrom sklearn.metrics import accuracy_scorefrom sklearn.feature_extraction.text import TfidfVectorizer#从给定文件中读取评论及其极性def loadData(fname):    reviews=[]    labels=[]    f=open(fname)    for line in f:        review,rating=line.strip().split('\t')          reviews.append(review.lower())            labels.append(int(rating))    f.close()    return reviews,labelsrev_train,labels_train=loadData('reviews_train.txt')rev_test,labels_test=loadData('reviews_test.txt')#对输入进行向量化vectorizer = TfidfVectorizer(ngram_range=(1,2))vectors_train = vectorizer.fit_transform(rev_train)vectors_test = vectorizer.fit_transform(rev_test)clf = tree.DecisionTreeClassifier()clf = clf.fit(vectors_train, labels_train)#预测pred=clf.predict(vectors_test)#打印准确率print (accuracy_score(pred,labels_test))

然而,我不断收到这个错误:

ValueError: Number of features of the model must match the input.Model n_features is 118686 and input n_features is 34169 

我刚开始学习Python,如果这是一个简单的修复,我提前道歉。


回答:

问题就在这里:

vectorizer = TfidfVectorizer(ngram_range=(1,2))vectors_train = vectorizer.fit_transform(rev_train)vectors_test = vectorizer.fit_transform(rev_test)

你对训练数据和测试数据都调用了fit_transformfit_transform同时创建存储在vectorizer中的模型,然后使用该模型创建向量。因为你调用了两次,发生的情况是vectors_train首先被创建并生成输出特征向量,然后你用对测试数据的第二次fit_transform调用覆盖了模型。这导致了向量大小的差异,因为你用与测试数据不同长度的特征训练了决策树。

在进行测试时,你必须用用于训练的相同模型转换数据。因此,不要对测试数据调用fit_transform – 只需使用transform来使用已创建的模型:

vectorizer = TfidfVectorizer(ngram_range=(1,2))vectors_train = vectorizer.fit_transform(rev_train)vectors_test = vectorizer.transform(rev_test) # 此处更改

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注