Python 使用tfidf作为特征

Python 使用tfidf作为特征,python,nlp,classification,tf-idf,tfidfvectorizer,Python,Nlp,Classification,Tf Idf,Tfidfvectorizer,我想用n-grams对两组文档进行分类。一种方法是使用tfidf提取每个文档的重要单词,然后生成如下csv文件: document, ngram1, ngram2, ngram3, ..., label 1, 0.0, 0.0, 0.0, ..., 0 2, 0.0, 0.0, 0.0, ..., 1 ... 但是由于文件数量的原因,文件将是巨大而稀疏的。另一种方法是合并每个组中的所有文档并提取NGRAM。之后,我可以计算每个文件中每个ngram的出现次数,但我不确定这是最好的方法。请提供您的

我想用n-grams对两组文档进行分类。一种方法是使用
tfidf
提取每个文档的重要单词,然后生成如下csv文件:

document, ngram1, ngram2, ngram3, ..., label
1, 0.0, 0.0, 0.0, ..., 0
2, 0.0, 0.0, 0.0, ..., 1
...

但是由于文件数量的原因,文件将是巨大而稀疏的。另一种方法是合并每个组中的所有文档并提取NGRAM。之后,我可以计算每个文件中每个ngram的出现次数,但我不确定这是最好的方法。请提供您的建议解决方案。

在提取ngrams之前,在您的组中连接文档没有意义-任何以这种方式生成的新ngrams都不会存在于任何单个文档中

正如您正确地注意到的,您使用的任何标记化方法都将导致一个大的稀疏矩阵。这不一定是个问题-无论您打算使用什么库进行分类,都可能会提供一种有效的表示方法,用于存储稀疏矩阵,通常用于为您计算tf idf矩阵

您可能还希望仅使用ngram的一个子集作为功能,使用ngram频率和ngram长度(给定ngram中的“克数”)的某种组合来选择相关的ngram


或者,您可以使用潜在语义分析的原始形式-计算tf idf矩阵,然后使用主成分分析(或奇异值分解,如果NGRAM和文档的数量太大,以至于无法计算其协方差矩阵空间),减少特征的数量.

在提取ngrams之前,将组中的文档连接起来是没有意义的-任何以这种方式生成的新ngrams都不会存在于任何单个文档中

正如您正确地注意到的,您使用的任何标记化方法都将导致一个大的稀疏矩阵。这不一定是个问题-无论您打算使用什么库进行分类,都可能会提供一种有效的表示方法,用于存储稀疏矩阵,通常用于为您计算tf idf矩阵

您可能还希望仅使用ngram的一个子集作为功能,使用ngram频率和ngram长度(给定ngram中的“克数”)的某种组合来选择相关的ngram


或者,您可以使用潜在语义分析的原始形式-计算tf idf矩阵,然后使用主成分分析(或奇异值分解,如果NGRAM和文档的数量太大,以至于无法计算其协方差矩阵空间),减少特征的数量.

我建议您使用sklearn的tfidf矢量器()。它支持ngrams,并且内存使用效率高。您可以轻松地将矢量器传递给任何sklearn分类器以构建分类模型。

我建议您使用sklearn的tfidf矢量器()。它支持ngrams,并且内存使用效率高。您可以轻松地将矢量器传递给任何sklearn分类器以构建分类模型