CountVectorizer删除只出现一次的功能



我使用的是sklearn-python包,在使用预先创建的字典创建CountVectorizer时遇到问题,其中CountVectorizer不会删除只出现一次或根本不出现的功能。

这是我的示例代码:

train_count_vect, training_matrix, train_labels = setup_data(train_corpus, query, vocabulary=None)
test_count_vect, test_matrix, test_labels = setup_data(test_corpus, query, vocabulary=train_count_vect.get_feature_names())
print(len(train_count_vect.get_feature_names()))
print(len(test_count_vect.get_feature_names()))

len(train_count_vect.get_feature_names())输出89967len(test_count_vect.get_feature_names())输出9833

setup_data()函数中,我只是在初始化CountVectorizer。对于训练数据,我在没有预设词汇的情况下对其进行初始化。然后,对于测试数据,我使用从训练数据中检索到的词汇表初始化CountVectorizer。

如何使词汇表的长度相同?我认为sklearn正在删除功能,因为它们只出现一次或根本不出现在我的测试语料库中。我需要有相同的词汇表,否则,我的分类器的长度将与我的测试数据点不同。

所以,如果没有看到setup_data的源代码,就不可能说出来,但我对这里发生的事情有一个相当不错的猜测。sklearn遵循fit_transform格式,这意味着有两个阶段,特别是fittransform

CountVectorizer的示例中,fit阶段有效地创建了词汇表,transform步骤将您的输入文本转换到该词汇表空间中。

我的猜测是,你在两个数据集上调用fit,而不是只调用一个,如果你想让结果一致,你需要在这两个数据集中使用相同的"拟合"版本的CountVectorizer。例如:

model = CountVectorizer()
transformed_train = model.fit_transform(train_corpus)
transformed_test = model.transform(test_corpus)

同样,在你发布setup_data函数之前,这只能是一个猜测,但之前看过这个,我想你正在做的事情更像这样:

model = CountVectorizer()
transformed_train = model.fit_transform(train_corpus)
transformed_test = model.fit_transform(test_corpus)

这将有效地为test_corpus创建一个新的词汇表,这在两种情况下都不会给你相同的词汇表长度。

相关内容

  • 没有找到相关文章

最新更新