Python scikit学习中的TD/IDF
关于如何使用tfidftransfer()为语料库的n-grams生成TF/IDF,是否有完整的Python 2.7示例?环顾scikit学习页面,它只有代码片段(不是完整的示例) 问候,,Python scikit学习中的TD/IDF,python,python-2.7,scikit-learn,tf-idf,Python,Python 2.7,Scikit Learn,Tf Idf,关于如何使用tfidftransfer()为语料库的n-grams生成TF/IDF,是否有完整的Python 2.7示例?环顾scikit学习页面,它只有代码片段(不是完整的示例) 问候,, Lin对于TF-IDF特征提取,scikit学习有2个类和。这两个类基本上都有相同的用途,但应该使用不同的方法。对于文本特征提取,scikit learn具有变换器和矢量器的概念。矢量器直接作用于原始文本以生成特征,而转换器作用于现有特征并将其转换为新特征。因此,按照这个类比,TfidfTransforme
Lin对于TF-IDF特征提取,scikit学习有2个类和。这两个类基本上都有相同的用途,但应该使用不同的方法。对于文本特征提取,scikit learn具有变换器和矢量器的概念。矢量器直接作用于原始文本以生成特征,而转换器作用于现有特征并将其转换为新特征。因此,按照这个类比,
TfidfTransformer
处理现有功能并将其转换为TF-IDF功能,而tfidfvectorier
将原始文本作为输入,并直接生成TF-IDF功能。如果在构建功能时没有现有的文档术语矩阵,则应始终使用TfidfVectorizer
。在黑盒级别,您应该将tfidftvectorizer
视为CountVectorizer
,后跟tfidftranformer
现在来看Tfidfectorizer
的工作示例。请注意,如果此示例很清楚,那么您将很容易理解为TfidfTransformer
给出的示例
现在考虑你的语料库中有以下4个文件:
text = [
'jack and jill went up the hill',
'to fetch a pail of water',
'jack fell down and broke his crown',
'and jill came tumbling after'
]
只要迭代字符串,就可以使用任何iterable
。TFIDFvectorier
还支持从文件中读取文本,他们在文档中详细讨论了这些文件。现在,在最简单的情况下,我们可以初始化TfidfVectorizer
对象,并将训练数据与之匹配。具体做法如下:
tfidf = TfidfVectorizer()
train_features = tfidf.fit_transform(text)
train_features.shape
这段代码简单地将
矢量器适配到我们的输入数据上,并生成一个维度稀疏矩阵4 x 20
。因此,它将给定文本中的每个文档转换为20
特征向量,其中词汇表的大小为20
在tfidfvectorier
的情况下,当我们说fit the model
时,这意味着tfidfvectorier
从语料库中学习IDF权重转换数据意味着使用拟合模型(学习到的IDF权重)将文档转换为TF-IDF向量。此术语是整个scikit学习过程中的标准术语。它在分类问题中非常有用。考虑一下,如果你想使用一些标示的训练数据,使用TF IDF向量作为特征,将文档分类为正或负。在这种情况下,您将使用培训数据构建TF-IDF矢量器,当您看到新的测试文档时,您只需使用已安装的TFIDF矢量器对其进行转换即可
因此,如果我们有以下测试\u txt
:
test_text = [
'jack fetch water',
'jill fell down the hill'
]
我们将通过简单的操作来构建测试特性
test_data = tfidf.transform(test_text)
这将再次为我们提供一个稀疏矩阵2 x 20
本例中使用的IDF权重是从训练数据中学习到的。
这就是一个简单的TFIDFvectorier
的工作原理。通过在构造函数中传递更多参数,可以使其更加复杂。这些都在文档中有很好的记录。我经常使用的一些参数有:
-这允许我们使用n克令牌构建TF-IDF向量。例如,如果我通过ngram_range
,那么这将同时生成unigram和bigram(1,2)
-允许我们在过程中单独给予忽略。通常的做法是过滤掉几乎所有文档中都存在的单词,如“the”、“of”等stop_words
和min_-df
-这允许我们根据文档频率动态过滤词汇表。例如,通过将max_-df
设置为max_df
,我可以让我的应用程序自动删除特定于域的停止字。例如,在医学期刊的语料库中,疾病这个词可以被认为是一个停止词0.7
希望这有帮助 Hi Lin,是我为一个项目编写的一段代码。虽然没有很好的文档记录,但是函数的名称非常好。也许你可以看看。谢谢你的鼓励。我将很快起草一份答复。对你的问题回答如下:1。语料库是一个公开上市公司财报电话会议的记录集。每一个财报电话会议记录都是一篇类似于这2条的文章。培训和测试进入画面,因为我正在处理一个分类问题。在TF-IDF的上下文中,训练集是我们学习每个术语的IDF权重的语料库。现在,当我们在测试集中看到这些术语时,我们根据它们在测试集中的出现情况计算TF,但是我们在计算TF-IDF权重时使用训练集的IDF。这允许我们以在线方式转换测试文档,即当它们进入我们的系统时。希望这能说明问题。@LinMa-我已经开始回复:-)。很抱歉,过去两天我很忙,没有时间写下来。对于您的后续问题:1。是的,是像NLTK一样的第三方NLP库。它的功能不如NLTK,但速度非常快。对于这个应用程序,我首先使用unigrams的TF IDF。然后,这些TF-IDF向量将用于训练,使用。您还可以为Bigram构建TF-IDF向量,但这只有在您拥有大型语料库时才有用,因为当您转到高阶N-gram时,您将开始获得非常稀疏的特征向量。如果你有足够大的语料库,你可以尝试不同的N-gram和s