Python CountVectorizer删除只出现一次的要素
我使用的是sklearn python包,在使用预先创建的字典创建Python CountVectorizer删除只出现一次的要素,python,machine-learning,scikit-learn,text-classification,Python,Machine Learning,Scikit Learn,Text Classification,我使用的是sklearn python包,在使用预先创建的字典创建countvectorier时遇到问题,其中countvectorier不会删除只出现一次或根本不出现的功能 以下是我的示例代码: train_count_vect, training_matrix, train_labels = setup_data(train_corpus, query, vocabulary=None) test_count_vect, test_matrix, test_labels = setup_da
countvectorier
时遇到问题,其中countvectorier
不会删除只出现一次或根本不出现的功能
以下是我的示例代码:
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(列车计数向量获取功能名称())
输出89967
len(test\u count\u vect.get\u feature\u names())
输出9833
在setup\u data()
函数中,我正在初始化countvectorier
。对于训练数据,我将在没有预设词汇表的情况下初始化它。然后,对于测试数据,我使用从训练数据中检索到的词汇表初始化CountVectorizer
如何使词汇表的长度相同?我认为sklearn是在删除特性,因为它们只出现一次,或者根本不出现在我的测试语料库中。我需要有相同的词汇表,因为否则,我的分类器将与我的测试数据点的长度不同。因此,如果没有实际查看
设置数据的源代码,就不可能说,但我对这里发生的事情有一个相当不错的猜测sklearn
遵循fit_转换
格式,这意味着有两个阶段,具体来说是fit
和转换
在CountVectorizer
的示例中,fit
阶段有效地创建词汇表,而transform
步骤将输入文本转换为该词汇表空间
我的猜测是,您在两个数据集上调用的是fit
,而不是一个数据集,如果希望结果一致,您需要在两个数据集上使用相同的CountVectorizer
的“fitted”版本。e、 g:
model = CountVectorizer()
transformed_train = model.fit_transform(train_corpus)
transformed_test = model.transform(test_corpus)
同样,在发布setup\u data
函数之前,这只能是一个猜测,但是在看到这个函数之前,我猜您正在做类似的事情:
model = CountVectorizer()
transformed_train = model.fit_transform(train_corpus)
transformed_test = model.fit_transform(test_corpus)
这将有效地为测试语料库
创建一个新的词汇表,这在两种情况下都不会为您提供相同的词汇表长度。您能提供seup\u数据
的源代码吗?我们不可能在看不到的情况下找出问题所在。应该只有一个计数向量器,而不是两个@SlaterTyranus的回答解释了原因