Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python CountVectorizer删除只出现一次的要素_Python_Machine Learning_Scikit Learn_Text Classification - Fatal编程技术网

Python CountVectorizer删除只出现一次的要素

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

我使用的是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_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的回答解释了原因