简介
我正在遵循一个教程,我对Python和机器学习是相当新手的。(所以,如果我看起来像个菜鸟,很抱歉……这是因为我是)。该教程可以在此处找到:数据科学Python教程
有问题的代码行
我看到 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",我希望这不会阻止任何人认真对待我的问题。
向量器将语料库(例如文本文档)转换为向量矢量空间模型。有很多方法可以做到这一点,结果将取决于所使用的技术。矢量化是必要的,因为模型可以使用数字而不是单词。特别是,CountDectorizer的实现将生成一个数组,每个单词的出现数量。在此特定情况下,CountVectorizer用作生成TF -IDF(术语频率 - 逆文档频率)表示的先前步骤,这是确定文档中单词"重要性"的最流行技术之一。该模型的假设是,看起来更多的术语更有可能表示该文档(术语频率),但是,不应考虑整个语料库之间的"通用单词"(逆文档频率),例如,连接器。该技术被广泛用于信息Retreival字段。
在矢量空间表示中拥有语料库后,您可以开始使用此表示形式作为机器学习技术的输入。
尤其是转换方法将返回将受过训练的(fit)模型应用于作为参数的元素的结果。换句话说,转换将输入转换为"模型表示语言"。
让我们以一个示例来澄清一下:
假设我们有3个文档(我知道内容没有意义):
- 文档1:这是文件一个脾气暴躁。
- 文件2:这是文件2很可悲。
- 文档3:这是文件3很高兴。
调用fit()时,CountVectorizer将学习词汇。
[this, is, document, one, grumpy, two, sad, three, happy]
在另一侧,当在语料库上调用转换时,它将使用词汇来生成此矩阵:
[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]
包含每个文档的单词术语。在这里,值2对应于" IS"一词,每个文档在每个文档中重复两次。另外,值'0'表示文档中不存在单词。
现在,我们可以使用此矩阵用FIT()训练TF-IDF模型,它将生成以下向量:
(2) [3, 6, 3, 1, 1, 1, 1, 1, 1]
包含每个单词的全局出现。然后,当您将转换应用于(1)时,TF-IDF模型将采用拟合阶段生成的向量(2)创建TF-IDF矩阵:
[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]
较低的数字代表更常见的单词。请注意"独特"单词的数字更高。稍后的矩阵是您将用来训练ML型号的矩阵。
总结一下,例如,如果您要使用群集技术(例如Kmeans)来对一堆文档进行分类,则该过程将是:
-
将文档转换为生成VSM表示。拟合一个TF-IDF模型,该模型将为您识别每个文档中最重要的术语的建议。
-
适合Kmeans模型,该模型将生成理想情况下包含相关文档的群集。为此,该模型将使用最后一步中生成的结果来建立文档关系,通过识别它们之间的共享单词。
所有这些解释都在自然语言处理的背景下,如果您想使用ML来识别图像当然不会使用TF-IDF。
我希望我有帮助!