CountVectorizer 删除只出现一次的特征
CountVectorizer deleting features that only appear once
我正在使用 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
步骤将您的输入文本转换为该词汇表 space。
我的猜测是您在两个数据集上调用 fit
而不是一个,如果需要,您需要在两个数据集上使用相同的 "fitted" 版本的 CountVectorizer
结果要排队。例如:
model = CountVectorizer()
transformed_train = model.fit_transform(train_corpus)
transformed_test = model.transform(test_corpus)
同样,在您 post 函数 setup_data
之前,这只能是一个猜测,但是之前看过这个我猜您正在做更像这样的事情:
model = CountVectorizer()
transformed_train = model.fit_transform(train_corpus)
transformed_test = model.fit_transform(test_corpus)
这将有效地为 test_corpus
创建一个新词汇表,不出所料,在这两种情况下不会为您提供相同的词汇表长度。
我正在使用 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
步骤将您的输入文本转换为该词汇表 space。
我的猜测是您在两个数据集上调用 fit
而不是一个,如果需要,您需要在两个数据集上使用相同的 "fitted" 版本的 CountVectorizer
结果要排队。例如:
model = CountVectorizer()
transformed_train = model.fit_transform(train_corpus)
transformed_test = model.transform(test_corpus)
同样,在您 post 函数 setup_data
之前,这只能是一个猜测,但是之前看过这个我猜您正在做更像这样的事情:
model = CountVectorizer()
transformed_train = model.fit_transform(train_corpus)
transformed_test = model.fit_transform(test_corpus)
这将有效地为 test_corpus
创建一个新词汇表,不出所料,在这两种情况下不会为您提供相同的词汇表长度。