如何分析sklearn中tfidf矩阵的值?

Posted

技术标签:

【中文标题】如何分析sklearn中tfidf矩阵的值?【英文标题】:how to analyze the value of tfidf matrix in sklearn? 【发布时间】:2017-02-27 08:26:00 【问题描述】:

我正在使用 sklearn 的 KMeans 算法进行文档聚类,如 http://brandonrose.org/clustering

这是 TFIDF 矩阵的计算。我已经理解了 TFIDF 技术背后的概念,但是当我打印这个矩阵时,矩阵是这样的:

  (0, 11)   0.238317554822
  (0, 34)   0.355850989305
  (0, 7)    0.355850989305
  (0, 21)   0.238317554822
  (0, 16)   0.355850989305
  (0, 35)   0.355850989305
  (0, 8)    0.355850989305
  (0, 17)   0.355850989305
  (0, 36)   0.355850989305
  (1, 11)   0.238317554822
  (1, 21)   0.238317554822
  (1, 23)   0.355850989305
  (1, 0)    0.355850989305
  (1, 24)   0.355850989305
  (1, 12)   0.355850989305
  (1, 22)   0.355850989305
  (1, 25)   0.355850989305
  (1, 13)   0.355850989305
  (2, 2)    0.27430356415
  (2, 18)   0.339992197465
  (2, 26)   0.339992197465
  (2, 39)   0.339992197465
  (2, 3)    0.339992197465
  (2, 19)   0.339992197465
  (2, 27)   0.339992197465
  (2, 4)    0.339992197465
  (2, 20)   0.339992197465
  (3, 2)    0.27430356415
  (3, 40)   0.339992197465
  (3, 9)    0.339992197465
  (3, 1)    0.339992197465
  (3, 5)    0.339992197465
  (3, 41)   0.339992197465
  (3, 10)   0.339992197465
  (3, 6)    0.339992197465
  (3, 42)   0.339992197465
  (4, 11)   0.202877476983
  (4, 21)   0.202877476983
  (4, 28)   0.302932576437
  (4, 31)   0.302932576437
  (4, 37)   0.302932576437
  (4, 14)   0.302932576437
  (4, 29)   0.302932576437
  (4, 32)   0.302932576437
  (4, 38)   0.302932576437
  (4, 15)   0.302932576437
  (4, 30)   0.302932576437
  (4, 33)   0.302932576437

这个矩阵中的值代表什么?任何从事此工作的人都可以帮助我理解这一点吗?

【问题讨论】:

你的第一行是什么?你能告诉我们你的文本语料库(你的 TFIDF 的输入)怎么样? 这是我的样本语料库数据[“java是平台无关的语言”,“学习java语言很厉害”,“eclipse juno是新版本”,“eclipse成功安装在我的电脑上”, “java是面向对象的编程语言”] 显示的矩阵是获得的整个矩阵还是只是它的一个sn-p? 好吧,这就是我的预期 我看没有人这么说,所以我就说吧,这称为稀疏矩阵表示,当大多数值为0时很有用(这在TFIDF中是真的,因为有更多的单词比文档和大多数文档不包含大多数单词) 【参考方案1】:

第一列包含元组(ind_document, ind_word),其中ind_document 是您的数据集中包含的文档的索引(在您的情况下为string),ind_word 是单词在字典中的索引TfidfVectorizer 对象生成的单词。

第二列包含给定word 的TF-IDF 值(对应于(ind_document, ind_word) 的单词。


更新

如果仔细观察TfidfVectorizer here的实现,可以看到有一个参数叫做norm默认此参数设置为l2,这是用于对获得的数据进行归一化的 L2-norm。

如果您不想规范化数据并将其与手动获得的结果进行比较将此参数更改norm = None

【讨论】:

谢谢。我尝试使用网站tfidf.com 中给出的公式计算 TFIDF。我用笔计算得到的结果与这个 TfidfVectorizer 函数给出的结果不同。你能给出一个想法,为什么会有这种差异?如果你在这方面工作过?正如我在网上搜索的那样,对结果进行了一些 L-2 归一化。但我不知道到底发生了什么。

以上是关于如何分析sklearn中tfidf矩阵的值?的主要内容,如果未能解决你的问题,请参考以下文章

使用 sklearn 计算两个不同列的单独 tfidf 分数

如何用 kmeans 计算 tfidf 矩阵中解释的方差?

如何从管道中的 sklearn TFIDF Vectorizer 返回数据帧?

sklearn : TFIDF Transformer : 如何获取文档中给定单词的 tf-idf 值

将一个 numpy 稀疏矩阵保存到文件中

矩阵 TFIDF 的降维