我有一个关于 CountVectorizer 和 TfidfVectorizer 的问题。
我不清楚如何在 max_features 中选择具有相同频率的 ngram。如果我们在一个语料库中说 max_features = 10000 和 100 个 ngrams 并且频率相同,那么 CountVectorizer 如何区分特征中的 ngram 和不特征中的 ngram?玩具示例,我们有一个包含八个独特单词的语料库。单词“jeans”和“cat”具有相同的频率 1。我们取 max_features=7。为什么特征中出现“cat”而“jeans”没有,反之则不然?
data = ['gpu processor cpu performance',
'gpu performance ram computer computer',
'cpu computer ram processor jeans processor cat']
cv = CountVectorizer(ngram_range=(1, 1), max_features=7)
cv_fit = cv.fit_transform(data).toarray()
cv.vocabulary_
out:
{'cat': 0,
'computer': 1,
'cpu': 2,
'gpu': 3,
'performance': 4,
'processor': 5,
'ram': 6}
最佳答案
CountVectorizer 会切断词频,并且可能会使用正常排序来切断 max_features 处的项目。
max_features : int or None, default=None If not None, build a vocabulary that only consider the top max_features ordered by term frequency across the corpus.
我将数据从 cat
更改为 zat
,现在 jeans
已进入列表。
>>> data = ['gpu processor cpu performance',
'gpu performance ram computer computer',
'cpu computer ram processor zat processor jeans']
>>> cv = CountVectorizer(ngram_range=(1, 1), max_features=7)
>>> cv_fit = cv.fit_transform(data).toarray()
>>> cv.vocabulary_
{u'ram': 6, u'jeans': 3, u'processor': 5, u'computer': 0, u'performance': 4, u'gpu': 2, u'cpu': 1}
本质上它取决于排序顺序。
关于python - CountVectorizer max_features 如何处理具有相同频率的 ngram?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49491063/