我使用python创建了一个文本分类模型。我有CountVectorizer,它产生一个2034行和4063列(唯一字)的文档术语矩阵。我保存了用于新测试数据的模型。我的新测试数据
#theheader ul#subscribe {
float: right; margin: 22px 0 0 0; list-style: none;
}
#theheader ul#subscribe li {
float: left; margin: 0 0 0 32px;
}
#theheader ul#subscribe li a {
display: block; height: 16px; font: 13px Georgia, Serif; letter-spacing: 2px; color: #eeede6;
text-decoration: none; padding: 1px 0 0 10px;
}
body #theheader .rss li a {
padding: 1px 0 0 120px; /*This doesnt work*/
}
但问题是我将上述测试数据标记转换为特征向量,但形状不同。因为该模型期望4063向量。我知道如何通过使用CountVectorizer的词汇表来解决它,并在测试数据中搜索每个标记并将其放入该索引中。但有没有简单的方法来处理scikit-learn本身的问题。
答案 0 :(得分:5)
您不应该在测试数据上使用新的CountVectorizer,您应该使用适合训练数据的那个并在其上调用transfrom(test_data)
。
答案 1 :(得分:2)
您有两种方法可以解决此问题
<强> 1。你可以使用与你的火车功能相同的CountVectorizer
cv = CountVectorizer(parameters desired)
X_train = cv.fit_transform(train_data)
X_test = cf.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)
答案 2 :(得分:0)
尝试使用:
test_features = inverse_transform(test_data)
这应该会让你回复你想要的东西。
答案 3 :(得分:0)
我在wole命令中添加了.toarray(),以便将结果视为矩阵。 所以你应该写: X_test_analyst = Pipeline.named_steps ['count_vectorizer']。transform(X_test).toarray()