我应该如何理解python-sklearn中的.transform方法?

时间:2017-01-01 00:21:05

标签: python scikit-learn nlp

简介

我正在学习一门教程,我对Python和机器学习都很陌生。 (所以,如果我看起来像诺贝尔,请道歉...这是因为我)。可以在此处找到该教程:Data Science Python Tutorial

问题中的代码行

我发现早期已创建bow_transformer变量:

bow_transformer = CountVectorizer(analyzer=split_into_lemmas).fit(messages['message'])

我对'矢量化'的理解在这里并不十分清楚......我们是说语料库中每条短信的每个单词都是自己的行吗?

然后,这个变量被转换(我假设transform这里是创建一个单词的某种(x,y)表示,这样机器就可以读取+计算它们的出现次数。:

bow4 = bow_transformer.transform(messages['message'])
messages_bow = bow_transformer.transform(messages['message'])

到目前为止,我一般都很困惑......而且我认为我已经把所有事情都合理化了(如果我在上面做了一些逻辑错误,请纠正我,这将有助于我理解机器学习+ Python 极大。

现在,主要问题

我的困惑被以下区块放大了:

tfidf_transformer = TfidfTransformer().fit(messages_bow)
tfidf4 = tfidf_transformer.transform(bow4)

我的解释

messages_bow被弓形变换(无论这意味着什么),然后messages_bow被拟合到tfidfTransformer,并为此分配了tfidf_transformer变量。这个新创建的tfidf_transformer变量现在看起来不再像变量了,因为下一行是使用上述过程/对象创建一个新变量(tfidf4)?

结论

我希望你们能理解我的困惑 - 我不知道如何搜索我的问题,因为我根本不知道我不知道的事情。我的问题是尖叫“Noobie”,我希望这并不能阻止任何人认真对待我的问题。

1 个答案:

答案 0 :(得分:5)

矢量化器将语料库(例如文本文档)转换为向量Vector Space Model。有很多方法可以做到这一点,结果将取决于所使用的技术。矢量化器是必要的,因为模型使用数字,而不是单词。 特别是,CountVectorizer的实现将生成一个数组,其中包含每个单词的出现次数。在这种特殊情况下,CountVectorizer用作生成TF-IDF(术语频率 - 逆文档频率)表示的先前步骤,这是用于确定文档中单词的“重要性”的最流行的技术之一。该模型的假设是,出现更多的术语更可能代表该文档(术语频率),但是,不应考虑整个语料库之间的“常用词”(反向文档频率),例如,连接器。该技术广泛用于信息检索领域。

在向量空间表示中使用语料库后,您可以开始使用此表示作为机器学习技术的输入。

特别是,transform方法将返回将训练(拟合)模型应用于作为参数传递的元素的结果。换句话说,转换将输入“转换”为“模型表示语言”。

让我们用一个例子说明这一点:

假设我们有3个文件(内容没有意义,我知道):

  • 文件1:这是文件一个脾气暴躁。
  • 文件2:这是文件二很难过。
  • 文件3:这是文件三很高兴。

CountVectorizer将在调用fit()时学习词汇表。

[1, 2, 1, 1, 1, 0, 0, 0, 0] (1) [1, 2, 1, 0, 0, 1, 1, 0, 0] [1, 2, 1, 0, 0, 0, 0, 1, 1]

另一方面,当在语料库上调用transform时,它将使用词汇表来生成此矩阵:

(2) [3, 6, 3, 1, 1, 1, 1, 1, 1]

其中包含每个文档的单词出现次数。这里,值2对应于在每个文档中重复两次的单词“is”。此外,值“0”表示文档中不存在该单词。

现在,我们可以使用此矩阵来训练TF-IDF模型with fit(),它将生成以下向量:

[0.33, 0.33, 0.33, 1, 1, 0, 0, 0, 0] [0.33, 0.33, 0.33, 0, 0, 1, 1, 0, 0] [0.33, 0.33, 0.33, 0, 0, 0, 0, 1, 1]

其中包含每个单词的全局匹配项。然后,当您将变换应用于(1)时,tf-idf模型将使用拟合阶段(2)中生成的向量来创建tf-idf矩阵:

{{1}}

其中较低的数字代表更常见的单词。注意'独特'单词有更高的数字。后面的矩阵是您用来训练ML模型的矩阵。

总而言之,例如,如果您想使用聚类技术(例如KMeans)对一组文档进行分类,那么该过程将是:

  1. 转换文档以生成VSM表示。安装TF-IDF模型,该模型将用于确定哪些术语在每个文档中最重要。

  2. 适合KMeans模型,该模型将生成理想情况下将包含相关文档的群集。为此,模型将使用在最后一步中生成的结果通过识别它们之间的共享单词来建立文档关系。

  3. 所有这些解释都是在自然语言处理的背景下,如果你想使用ML来识别图像,你当然不会使用tf-idf。

    我希望我有所帮助!