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())
输出89967
len(test_count_vect.get_feature_names())
输出9833
在setup_data()
函数内部,我只是在初始化CountVectorizer
。对于训练数据,我将在没有预设词汇的情况下对其进行初始化。然后,对于测试数据,我将使用从训练数据中检索到的词汇表来初始化CountVectorizer。
如何获得相同的词汇量?我认为sklearn正在删除功能,因为它们在我的测试语料库中仅出现一次或根本没有出现。我需要使用相同的词汇表,因为否则,我的分类器的长度将与测试数据点的长度不同。
问题答案:
因此,在没有实际看到的源代码的情况下很难说setup_data
,但是我对这里发生的事情有相当不错的猜测。sklearn
遵循fit_transform
格式,表示有两个阶段,特别fit
是和transform
。
在的例子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
,这两种情况下的词汇长度都不会令人惊讶。