Python CountVectorizer矩阵随分类的新测试数据而变化?

Python CountVectorizer矩阵随分类的新测试数据而变化?,python,scikit-learn,vectorization,Python,Scikit Learn,Vectorization,我已经使用python创建了一个文本分类模型。我有CountVectorizer,它生成了一个2034行4063列(唯一单词)的文档术语矩阵。我保存了用于新测试数据的模型。我的新测试数据 test_data = ['Love', 'python', 'every','time'] 但问题是我将上面的测试数据标记转换为特征向量,但它的形状不同。因为这个模型需要一个4063向量。我知道如何通过使用CountVectorizer的词汇表,搜索测试数据中的每个标记并将其放入索引中来解决这个问题。但是

我已经使用python创建了一个文本分类模型。我有CountVectorizer,它生成了一个2034行4063列(唯一单词)的文档术语矩阵。我保存了用于新测试数据的模型。我的新测试数据

 test_data = ['Love', 'python', 'every','time']
但问题是我将上面的测试数据标记转换为特征向量,但它的形状不同。因为这个模型需要一个4063向量。我知道如何通过使用CountVectorizer的词汇表,搜索测试数据中的每个标记并将其放入索引中来解决这个问题。但是在scikit learn中有没有简单的方法可以解决这个问题。

尝试使用:

test_features = inverse_transform(test_data)

这将返回您想要的结果。

您不应该在测试数据上安装新的计数器矢量器,您应该使用您在训练数据上安装的计数器矢量器,并在其上调用
transfrom(test\u data)

您有两种方法来解决此问题

1。您可以使用与此列车功能相同的计数矢量器

cv = CountVectorizer(parameters desired)

X_train = cv.fit_transform(train_data)

X_test = cv.transform(test_data)
2。如果您确实愿意,您还可以创建另一个CountVectorizer(但不建议这样做,因为这样会浪费空间,而且您仍然希望对CV使用相同的参数),并使用相同的功能。

cv_train = CountVectorizer(parameters desired)

X_train = cv_train.fit_transform(train_data)

cv_test = CountVectorizer(vocabulary=cv_train.get_feature_names(),desired params)

X_test = cv_test.fit_transform(test_data)
我在wole命令中添加了.toarray(),以便将结果作为矩阵查看。 所以你应该写:
X_test_analyst=Pipeline.named_steps['count_vectorizer'].transform(X_test).toarray()

Muller-嘿,我不能完全理解你的意思。从sklearn.feature\u extraction.text import CountVectorizer count\u vect=CountVectorizer()train\u data\u features=count\u vect.fit\u transform(train\u data)开始,如果有新数据出现,比如说“我非常喜欢python”,我需要转换成与模型相同的形状,行数与之前相同的词汇表。请告诉我怎么做。count_vect.transform([“我非常喜欢python”])。在第[1]号中:X_test=cf.transform(test_data)??。。。。cf是指CV,对吗?啊,是的。那很可能是个打字错误。将更新@taufikedys