Scikit learn Scikit学习矢量器`最大功能`

Scikit learn Scikit学习矢量器`最大功能`,scikit-learn,Scikit Learn,如何选择TfidfVectorizer模块中max\u功能的数量?我应该使用数据中的最大元素数吗 参数的值并没有让我清楚地了解如何为其选择值: 最大功能:int或None,默认为None 如果没有,则建立一个词汇表,该词汇表只考虑在语料库上按词频排序的最高Max特征。 如果词汇表不是“无”,则忽略此参数 此参数是绝对可选的,应根据理性思维和数据结构进行校准 有时转换整个词汇表是无效的,因为数据中可能有一些非常罕见的单词,如果将这些单词传递给TfidfVectorizer().fit(),将在将来

如何选择
TfidfVectorizer
模块中
max\u功能的数量?我应该使用数据中的最大元素数吗

参数的值并没有让我清楚地了解如何为其选择值:

最大功能:int或None,默认为None

如果没有,则建立一个词汇表,该词汇表只考虑在语料库上按词频排序的最高Max特征。 如果词汇表不是“无”,则忽略此参数


此参数是绝对可选的,应根据理性思维和数据结构进行校准

有时转换整个词汇表是无效的,因为数据中可能有一些非常罕见的单词,如果将这些单词传递给
TfidfVectorizer().fit()
,将在将来为输入添加不需要的维度。例如,在这种情况下,适当的技术之一是打印出文档中的词频,然后为它们设置一个特定的阈值。假设您将阈值设置为50,并且您的数据语料库由100个单词组成。在查看单词频率后,20个单词出现的次数少于50次。因此,您可以设置
max_features=80
,就可以开始了

如果
max\u features
设置为
None
,则在TF-IDF转换期间考虑整个语料库。否则,如果将
5
传递到
max\u features
,则意味着从文本文档中最常用的5个单词中创建一个特征矩阵


快速示例 假设您使用与硬件相关的文档。您的原始数据如下所示:

from sklearn.feature_extraction.text import TfidfVectorizer

data = ['gpu processor cpu performance',
        'gpu performance ram computer',
        'cpu computer ram processor jeans']
您可以看到第三个文档中的单词
jeans
几乎没有关联,在整个数据集中只出现一次。当然,省略单词的最好方法是使用
stop_words
参数,但是想象一下如果有大量这样的单词;或与主题相关但很少出现的单词。在第二种情况下,
max\u features
参数可能会有所帮助。如果继续执行
max\u features=None
,则将创建一个3x7稀疏矩阵,而最佳情况是3x6矩阵:

tf = TfidfVectorizer(max_features=None).fit(data)
tf.vocabulary_.__len__()  # returns 7 as we passed 7 words
tf.fit_transform(data)  # returns 3x7 sparse matrix

tf = TfidfVectorizer(max_features=6).fit(data)  # excluding 'jeans'
tf.vocabulary_  # prints out every words except 'jeans'
tf.vocabulary_.__len__()  # returns 6
tf.fit_transform(data)  # returns 3x6 sparse matrix

不太清楚你在问我什么。如果您没有限制元素数量的具体原因,只需不指定它,它将默认为数据集中元素的最大数量。但在这种情况下,这是否会消除查找像jeans这样的“异常值”的可能性?是的。尽管如此,模型不应该担心这些异常值,因为示例文本根本不是关于衣服的。使用
max\u功能
stop\u单词
有助于它专注于真正可行的内容。