ValueError:模型的特征数量必须与输入匹配(sklearn)
Posted
技术标签:
【中文标题】ValueError:模型的特征数量必须与输入匹配(sklearn)【英文标题】:ValueError: Number of features of the model must match the input (sklearn) 【发布时间】:2019-03-28 06:05:51 【问题描述】:我正在尝试对一些电影评论数据运行分类器。数据已经被分成reviews_train.txt
和reviews_test.txt
。然后我加载数据并将每个数据分成评论和标签(正(0)或负(1)),然后对这些数据进行矢量化。这是我的代码:
from sklearn import tree
from sklearn.metrics import accuracy_score
from sklearn.feature_extraction.text import TfidfVectorizer
#read the reviews and their polarities from a given file
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,labels
rev_train,labels_train=loadData('reviews_train.txt')
rev_test,labels_test=loadData('reviews_test.txt')
#vectorizing the input
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)
#prediction
pred=clf.predict(vectors_test)
#print accuracy
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 很陌生,所以如果这是一个简单的修复,我提前道歉。
【问题讨论】:
错误信息有什么不清楚的地方? 【参考方案1】:问题就在这里:
vectorizer = TfidfVectorizer(ngram_range=(1,2))
vectors_train = vectorizer.fit_transform(rev_train)
vectors_test = vectorizer.fit_transform(rev_test)
您在训练和测试数据上都调用fit_transform
。 fit_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) # Change here
【讨论】:
这更有意义。刚刚做出改变,它的工作原理!谢谢! @C.G 完全没问题。不客气,欢迎来到 Stack Overflow!以上是关于ValueError:模型的特征数量必须与输入匹配(sklearn)的主要内容,如果未能解决你的问题,请参考以下文章
模型的特征数量必须与输入相匹配。模型 n_features 为 16,输入 n_features 为 1
模型的特征数量必须与输入相匹配。模型 n_features 为 40,输入 n_features 为 38
sklearn管道ValueError:除连接轴外的所有输入数组维度必须完全匹配
ValueError:预期输入 batch_size (59) 与目标 batch_size (1) 匹配
ValueError:使用自定义回调绘制卷积层特征图时,函数模型的输出张量必须是 TensorFlow `Layer` 的输出
ValueError: feature_names mismatch: in xgboost in the predict() function