如何在TfidfVectorizer
模块中选择max_features
参数的数量?我应该使用数据中的最大元素数吗?
参数的描述并不能使我明确地看出如何为其选择值:
max_features:int或none,默认值= none
如果没有,则构建一个仅考虑按范围内按任期频率订购的顶部max_features的词汇。 如果词汇不是没有。
,此参数将被忽略。
此参数绝对是可选的,应根据理性思维和数据结构进行校准。
有时转换整个词汇无效,因为数据可能具有一些异常罕见的单词,如果将其传递给TfidfVectorizer().fit()
,将来会为输入增加不必要的维度。例如,在这种情况下,适当的技术之一就是打印出词频率的文档,然后为其设置一定的阈值。想象一下,您设定了50个阈值,并且数据语料库由100个单词组成。看完单词频率后,有20个单词的发生率不到50次。因此,您设置了max_features=80
,并且您很高兴。
如果将max_features
设置为None
,则在 tf-idf 转换期间考虑整个语料库。否则,如果您将5
传递给max_features
,那将意味着创建一个功能矩阵中的5个频繁单词ipcross文本文档。
快速示例
假设您使用与硬件相关的文档。您的原始数据如下:
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_features
参数可能会有所帮助。如果您使用max_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