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

时间:2015-05-17 13:29:42

标签: python scikit-learn vectorization

我使用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本身的问题。

4 个答案:

答案 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()