机器学习::文本特征提取(tf-idf) -第二部分

阅读本教程的第一部分:文本特征提取(tf idf)–第一部分.

这篇文章是延续在第一部分中,我们开始学习文本特征提取和向量空间模型表示的理论和实践。我真的推荐你读第一部分为了跟随第二个帖子。

因为很多人都喜欢本教程的第一部分,第二部分比第一部分略长。

介绍

在第一个帖子里,我们学会了如何使用term-frequency在向量空间中表示文本信息。然而,术语频率法的主要问题是它扩大了频繁项和缩小了罕见项,这是经验上比高频项更丰富的信息。基本的直觉是,在许多文档中经常出现的术语不是一个好的鉴别器,确实有道理(至少在许多实验测试中);这里的一个重要问题是:为什么,例如在分类问题中,强调一个几乎出现在你所有文档中的术语?

tf idf的权重来解决这个问题。tf idf给出的是单词对集合中的文档有多重要,这就是为什么特遣部队IDF将局部和全局参数结合在一起的原因,因为它不仅考虑到独立术语,而且还考虑到文档集合中的术语。tf-idf如何解决这个问题,是将常用项按比例缩小,将罕见项按比例增大;一个词比另一个词多出10倍并不比它重要10倍,这就是为什么tf-idf用对数尺度来做。

但让我们回到我们对\ mathrm {tf} (t, d)它实际上是术语的计数T在文档中D.使用这个简单的术语频率可能会导致如下问题关键字垃圾邮件,也就是说,我们在一个文件中有一个重复的术语,目的是提高它在一个ir()上的排名。信息检索)系统,甚至对长文档产生偏见,使它们看起来比它们更重要,仅仅是因为文档中的术语频率很高。

为了克服这个问题,这个词的频率\ mathrm {tf} (t, d)文档的矢量空间通常也被规范化。让我们看看如何规范化这个向量。

矢量归一化

假设我们要对项频率向量进行归一化\VEC{V{{DY4}}我们在本教程的第一部分中计算的。文件d4从本教程的第一部分开始,文本表示如下:

我们可以看到灿烂的阳光,明亮的太阳。

使用该文件的非规范化项频率的向量空间表示是:

\vec v d u 4=(0,2,1,0)

为了规范化向量,与计算单位向量的向量,它们用“hat”表示:帽子{V}.单位向量的定义帽子{V}向量的vec {v} \是:

\ displaystyle \帽子{v} = \压裂vec {v}} {\ vec {v} {\ | \ \ | _p}

何处帽子{V}为单位向量,或者归一化向量,这个vec {v} \向量是否将被归一化,以及vec {v} \ | \ \ | _p是标准值(量级,矢量的长度)vec {v} \p L ^空间(别担心,我来解释一下。

单位向量实际上只是向量的标准化版本,是长度为1的向量。

规范化过程(来源:http://processing.org/learning/pvector/)
规范化过程(来源:http://processing.org/learning/pvector/)

但这里重要的问题是矢量的长度是如何计算的为了理解这个,你必须明白……的动机p L ^空间,也称为勒贝格空间.

勒贝格空间

这个向量有多长?(来源:来源:http://processing.org/learning/pvector/)
这个向量有多长?(来源:来源:http://processing.org/learning/pvector/)

通常情况下,向量的长度\VEC{U}=(UE1,UY2u_3,\ ldots,UEN)是使用欧几里得范数-范数是一个函数,它为向量空间中的所有向量分配一个严格正的长度或大小-定义如下:

(来源:http://processing.org/learning/pvector/)
(来源:http://processing.org/learning/pvector/)

vec{你}\ | \ \ | = \√6 {u ^ 2 _1 + u ^ 2 _2 + u ^ 2 _3 + \ ldots + u ^ 2 _n”}

但这不是定义长度的唯一方法,这就是为什么你有时会看到一个数字p加上范数表示法,像在\vEC {u} p p.这是因为它可以概括为:

\显示样式\124; \vec u p

和简化为:

vec{你}\ displaystyle \ | \ \ | _p =(\ \和limits_ {i = 1} ^ {n} \左右vec{你}_i | \ \ | ^ p) ^ \压裂{1}{p}

所以当你读到L2范数,你在读关于欧几里得范数,常模P=2,用来测量向量长度的最常见的范数,通常称为“级”;事实上,当您有一个不合格的长度测量(没有p号),你有L2范数(欧几里得范数)。

当你读到aL1范数,你在读关于标准的书P=1,定义为:

vec{你}\ displaystyle \ | \ \ | _1 =(左\ | u_1 \右| + \左| u_2 \右| + \左| u_3 \右| + \ ldots + \左| u_n \ |)

只不过是向量分量的简单和,也被称为出租车距离,也叫曼哈顿距离。

出租车几何与欧几里得距离:在出租车几何中,相同路线的三条线长度相同(12)。欧氏几何绿线有长度6次\sqrt 2 \约8.48,是唯一的最短路径。
来源:维基百科:出租车几何

注意,您也可以使用任何范数来规范化向量,但我们将使用最常见的规范,L2范数,这也是0.9版本中学会学习.你也可以找到一些论文比较这两种方法的性能在其他方法中规范化文档向量,实际上你可以用任何其他方法,但你必须简洁,一旦你使用了标准,你必须在整个过程中直接使用它如果以后要取l2范数,那么使用l1范数的单位向量的长度不会是1。

回到向量归一化

现在你知道向量归一化过程是什么了,我们可以尝试一个具体的例子,使用l2范数(现在我们将使用正确的术语)来规范化向量的过程\vec v d u 4=(0,2,1,0)为了得到它的单位向量H{V{{DY4}}.要做到这一点,我们将简单地将其插入到单位向量的定义中,以对其进行评估:

\hat{v} = \frac{\vec{v}}{\|\vec{v}\|_p} \\ \\  \hat{v_{d_4}} = \frac{\vec{v_{d_4}}}{||\vec{v_{d_4}}||_2} \\ \\ \\  \hat{v_{d_4}} = \frac{(0,2,1,0)}{\sqrt{0^2 + 2^2 + 1^2 + 0^2}} \\ \\  \hat{v_{d_4}} = \frac{(0,2,1,0)}{\sqrt{5}} \\ \\  \small \hat{v_{d_4}} = (0.0,0.89442719,0.4472136,0.0)

就是这样!归一化向量H{V{{DY4}}现在有一个l2规范了吗帽子\ | \ { v_ { d_4 } } \ | _2 = 1.0.

注意这里我们已经标准化了我们的术语频率文档向量,稍后我们会在计算tf-idf之后再做。

术语频率-逆文档频率(tf-idf)权重

现在你已经理解了矢量归一化在理论和实践中的作用,让我们继续我们的教程。假设您的集合中有以下文档(取自教程的第一部分):

列车文档集:d1:天空是蓝色的。d2:太阳是明亮的。测试文档集:d3:天空中的太阳是明亮的。d4:我们可以看到明亮的太阳。明亮的太阳。

您的文档空间可以定义为D={DY1,DY2\ ldots,d_n \}哪里n是语料库中的文档数量,在我们的例子中D_ {火车} = \ { d_1,d_2 \}D_{测试}= \ {d_3,DY4}.文档空间的基数由\左D列车\右=2\左D测试\右=2,因为我们只有2个培训和测试的文件,但它们显然不需要具有相同的基数。

现在让我们看看,然后如何定义IDF(反向文档频率):

\显示样式\mathrm idf(t)=\log \frac \ left d \ right 1+\ left \ d:t\ in d \ \ right

哪里\左|\{d: t \in d\}\右|文件数量在这个术语T出现,当项频率函数满足时\mathrm tf(t,d)\neq 0,我们在公式中只加了1以避免零除。

tf-idf公式为:

\mathrm tf\mbox-idf(t)=\mathrm tf(t,d) \ * \ mathrm {idf} (t)

这个公式有一个重要的结果:当在给定的文档中有一个高频(tf)时,tf idf计算的权重就达到了很高的水平。局部参数)以及整个集合中术语的低文档频率(全局参数

现在,让我们用我们在第一个教程中计算的术语频率来计算特征矩阵中每个特征的IDF:

M列车=\开始BMatrix 0&1&1\\0&2&1&0\结束BMatrix

因为我们有4个特性,我们需要计算\mathrm_idf(t_1)\mathrm_idf(t_2)\ mathrm {idf} (t_3)\mathrm_idf(t_4)

\mathrm idf(t 1)=\log \ frac \ left d \ right 1+\ left \ d:t 1\ in d \ \ right=\log \ frac 2 1=0.69314718

\mathrm idf(t 2)=\log \ frac \ left d \ right 1+\left d:t 2 \ in d \ \ right=\log \ frac 2 3 0.40546511

\mathrm idf(t 3)=\log \ frac \ left d \ right 1+\left \ d:t 3 \ in d \ \ right=\log \ frac 2 3 0.40546511

\mathrm idf(t_4)=\log \ frac \ left d \ right 1+\ left d:t_4\ in d \ \ right=\log \ frac 2=0.0

这些IDF权重可以用向量表示为:

\vec idf列车=(0.69314718,-0.4054、-0.4054、0.0)

现在我们有了一个矩阵,它的项频率(M{{火车})和表示矩阵每个特征的IDF的向量(\vec idf列车)我们可以计算我们的tf idf权重。我们要做的是矩阵每列的简单乘法M{{火车}与相应的\vec idf列车向量维数。要做到这一点,我们可以创建一个正方形对角矩阵被称为M{{IDF}垂直和水平尺寸都等于矢量\vec idf列车尺寸:

M IDF=\ BEGIN BMATRIX 0.69314718&0&0&0\\0&-0.40546511&0&0\\0&0&-0.40546511&0\\0&0&0\END BMATRIX

然后乘以频率矩阵,因此,最终结果可以定义为:

M tf \mbox-idf=M列车\次M idf

请注意矩阵乘法不是可交换的,结果A倍B会不会有不同的结果呢B \乘以一个,这就是为什么M{{IDF}在乘法的右边,要实现将每个IDF值乘以其相应功能所需的效果:

{bmatrix} \ \开始mathrm {tf} (t_1,d_1)&\mathrm tf(t_2,d_1)&\mathrm tf(t_3,d_1)&\mathrm tf(t_4,d_1) \ \ \ mathrm {tf} (t_1,d_2) & \ mathrm {tf} (t_2,d_2)&\mathrm tf(t_3,d_2)&\mathrm tf(t_4,d_2) \end{bmatrix} \\ * \begin{bmatrix} \ {idf}(t_1) & 0 & 0\\ \ 0 & 0 & \mathrm{idf}(t_3) & 0\\ 0 & 0 & 0 & \mathrm{idf}(t_4) \end{bmatrix} \\ \ = \begin{bmatrix} \mathrm{tf}(t_1,d_1) \乘以\mathrm{idf}(t_1) & \mathrm{tf}(t_2,d 1 \次\mathrm idf(t_2)&\mathrm tf(t_3,d 1 \次\mathrm idf(t_3)&\mathrm tf(t_4,D 1 \次\mathrm idf(t 4 \ \ mathrm tf(t 1,d_2) \乘以\mathrm{idf}(t_1) & \mathrm{tf}(t_2,d idf(t 2)&\mathrm tf(t 3,d_2 \次\mathrm idf(t_3)&\mathrm tf(t_4,d_2) \乘以\mathrm{idf}(t_4) \结束{bmatrix}

下面我们来看一个具体的乘法例子:

M_ { tf \ mbox { - } idf } = M_ {火车} \ * M_ { idf } = { bmatrix }开始\ \ \ 0 & 1 & 1 & 1 \ \ 0 & 2 & 1 & 0 \ { bmatrix }结束\ * \ { bmatrix }开始0.69314718 & 0 & 0 & 0 \ \ 0 & -0.40546511 & 0 & 0 \ \ 0 & 0 & -0.40546511 & 0 \ \ & 0 & 0 & 0 \ { bmatrix } \ \ = \结束开始{ bmatrix } & -0.40546511 & -0.40546511 & 0 \ \ & -0.81093022 & -0.40546511 & 0 \ { bmatrix }结束

最后,我们可以将我们的l2规范化过程应用到M_tf\mbox-idf_矩阵。请注意,此规范化是“行”因为我们要把矩阵的每一行作为一个分离的向量进行归一化,而不是整个矩阵:

M_ {tf \ mbox {-} idf} = \压裂{M_ {tf \ mbox {-} idf}} {\ | M_ {tf \ mbox {-} idf} \ | _2} =\开始BMatrix 0&-0.70710678&-0.70710678&0\\0&-0.89442719&-0.4472136&0\结束BMatrix

这就是我们测试文档集的标准化tf idf权重,它实际上是单位向量的集合。如果取矩阵每行的l2范数,你会发现他们都有一个1的二级标准。

蟒蛇练习

使用的环境Python V.2.7.2NUMPY 1.1.1Scipy v.0.9.0Sklearn v.0.9 (Scikits.learn).

现在你正在等待的部分!在本节中,我将使用Python展示tf-idf计算的每个步骤Scikit.learn特征提取模块。

第一步是创建我们的培训和测试文档集,并计算术语频率矩阵:

从sklearn.feature_extraction.text import countvectorizertrain_set=“天空是蓝色的。”,“太阳是明亮的。”)测试设置=(天空中的太阳是明亮的。”,“我们可以看到闪亮的太阳,光明的太阳。“)count_vectorizer=count vectorizer()count_vectorizer.fit_transform(train_set)print”词汇:“,计数矢量器。词汇表:蓝色:0,“太阳”:1,“光明”:2,'sky':3 freq_term_matrix=count_vectorizer.transform(test_set)print freq_term_matrix.todense()[[0 1 1 1][0 2 1 0]]

现在我们有了频率项矩阵(称为频率项矩阵)我们可以实例化TfidfTransformer,它将负责计算我们的频率矩阵的tf-idf权重:

从sklearn.feature_extraction.text导入tfidfttransformertfidf=tfidfttransformer(norm=“l2”)tfidf.fit(freq_term_matrix)打印“idf:”,tfidf.idf_idf:[0.69314718-0.40546511-0.40546511 0.]

注意,我已经将规范指定为l2,这是可选的(实际上默认值是l2 norm)。但我已经添加了参数,让您明白它将使用l2规范。还请注意,通过访问名为伊德菲.既然FID()方法计算了矩阵的IDF,让我们改变频率项矩阵到tf-idf权重矩阵:

tf_idf_matrix=tf idf.transform(freq_term_matrix)打印tf_idf_matrix.todense()35\35\35\160160160160160160160160160160;-0.70710678-0.70710678 160;0。160160160160160160160160160160160160160\160160\160\160160160160160160160160160160-0.89444444440.894444271271271271-0.4472136 0.]]

就是这样,这个TFY-IDFY-矩阵实际上是我们以前的M_tf\mbox-idf_矩阵。您可以通过使用矢量化器scikit.learn的类,它是自动组合CountVectorizer以及TfidfTransformer给你。看到这个例子了解如何将其用于文本分类过程。

我真的希望你喜欢这个帖子,我试着让它尽可能简单,即使对于没有线性代数数学背景的人来说,等。在下一篇机器学习的文章中,我将展示如何使用tf-idf来计算余弦相似度。

如果你喜欢的话,随时发表意见和建议,修正,等。

工具书类

理解逆文档频率:IDF的理论论证

维基百科:tf-idf

经典的向量空间模型

sklearn文本特征提取代码

更新

13三月2015-形成,固定的图像问题。
03 OCT 2011-添加了有关用于Python示例的环境的信息

基督教的年代。腓骨

96条评论

  1. 哇!
    TF IDF的完美介绍,非常感谢!bepaly亚洲bepaly亚洲很有趣,我一直想研究这个领域很长一段时间,你的帖子是一个真正的礼物。阅读更多关于该技术的用例bepaly亚洲将是非常有趣的。也许你们会感兴趣,请,为了阐明文本语料库表示的其他方法,如果他们存在吗?
    (抱歉英语不好,我正在努力改进它,但还有很多工作要做)

  2. 优秀的工作基督教!我期待着阅读你下一篇关于文件分类的文章,使用朴素贝叶斯进行聚类和主题提取,随机梯度下降,小批量k-均值与非负矩阵分解

    同时,Scikit Learn的文档在文本特征提取部分非常糟糕(我是主要的罪犯…)。如果你想帮忙改善目前的情况,请不要犹豫加入邮件列表。

  3. 我更喜欢本教程,因为我在这里学习的新概念的水平。
    这就是说,你用的是哪个版本的scikits-learn ?
    由easy-install安装的最新版本似乎具有不同的模块层次结构(即在sklearn中找不到功能提取)。如果你能提到你使用的版本,我就用这些例子试试。

  4. 第3部分在哪里?我必须在4天内提交一份关于向量空间建模的作业。有没有希望把它放在周末?

  5. 谢谢克里斯蒂安!用sbepaly亚洲klearn在向量空间上做得很好。我只有一个问题,假设我已经计算了'tf_idf_矩阵',我想计算成对的余弦相似性(每行之间)。我遇到了稀疏矩阵格式的问题,你能举个例子吗?我的矩阵也很大,比如25k乘60k。谢谢!

  6. 很好的帖子……我了解什么tf idf以及如何用一个具体的例子来实现它。但我发现了两件我不确定的事情:
    1-你称之为二维矩阵M_列,但它有d3和d4文件的tf值,所以你应该叫这个矩阵M_test而不是M_train。因为d3和d4是我们的测试文档。
    2-当计算t2(即“sun”)的idf值时,它应该是log(2/4)。因为文档的数量是2。d3有1次“太阳”这个词,D4有2次。这使得它为3,但我们也将1加到这个值上,以去掉除以0的问题。这就变成了4……我是对的还是错过了什么?
    谢谢您。

    1. 你是对的:这些是优秀的博客文章,但作者确实有责任回去纠正错误,像这样(和其他,例如第1部分;…):缺少培训下划线;设置停止字参数;在我的电脑上,词汇表索引是不同的。

      我们非常感谢这一努力(向作者致敬!),这对那些努力克服原始材料中的错误(未纠正的)的人来说也是一个重大的伤害。

      1. 回复:我的“你是正确的评论”(以上),我应该补充说:

        “……又注意到Frederique Passot关于分母的评论(见下文):

        “…我们使用的实际上是一个术语出现的文档数量,无论该术语在任何给定文档中出现多少次。在这种情况下,然后,t2(‘sun’)的idf值中的分母实际上是2+1(2个文档具有术语‘sun’,+1以避免可能的零除错误)。'“

    2. 哈立德,
      这是对一个古老问题的回应。bepaly亚洲然而,我仍然想回应,传达我从文章中理解的内容。
      您的问题2:“当您计算t2的idf值(即‘sun’)时,它应该是log(2/4)”。
      我的理解是:日志术语中的分母应该是(术语出现的文档数+1),而不是术语的频率。术语“sun”出现的文档数为2(d3中出现1次,d4中出现2次-总共在两个文档中出现3次。3是频率,2是文件数量)。因此分母是2+1=3。

  7. 好帖子!
    我有一些问题。从上一个tf-idf权矩阵,我们如何才能分别了解术语的重要性(例如哪个术语最重要?).我们如何用这个矩阵来分类文件

  8. 我和杰克有同样的怀疑(最后评论)。从上一个tf-idf权矩阵,我们如何才能分别了解术语的重要性(例如哪个术语最重要?).我们如何使用这个矩阵来分类文件。

  9. 我有一个问题。
    在TF IDF操作之后,我们得到一个带有值的numpy数组。假设我们需要从数组中获得最高的50个值。我们怎么能做到?

    1. f(idf)的高值表示特定向量(或文档)具有高局部强度和低全局强度,在这种情况下,您可以假设其中的术语在本地具有很高的重要性,不能忽略。与仅重复次数较多的函数(tf)相比,具有更重要意义的函数(tf)在大多数情况下都不是合适的建模技术。

  10. 嘿,
    thanx fr d code..的确非常bepaly亚洲有用!

    1.对于文档聚类,在计算反向项频率后,我使用任何关联系数,如jaccards系数,然后应用聚类算法,如k-均值或shud,我在计算反向项频率后,直接将d k-均值应用于文档向量?

    2.如何计算文档聚类的文档向量的倒置词条频率?

    非常感谢您的回复!

  11. @khalid:你在1中指出的话,让我困惑了一分钟(Mou火车vs Mou测试)。我认为你在第二点上错了,虽然,因为我们使用的是一个术语出现的文档的数量,无论该术语在任何给定文档中出现多少次。在这种情况下,然后,t2(“sun”)idf值的分母确实是2+1(2个文档中有术语“sun”,+1以避免一个潜在的零分割错误)。

    我也很想读这个系列的第三部分!我对学习更多关于特征选择的知识特别感兴趣。有没有一种惯用的方法来获得具有最高tf.idf分数的术语的排序列表?你如何从整体上识别这些术语?你如何得到最能解释高或低余弦相似性的术语(逐行)?

    谢谢你的精彩帖子!

  12. 优秀的文章和TD IDF规范化的重要介绍。

    你有一个非常清晰和结构bepaly亚洲化的方式来解释这些困难的概念。

    谢谢!

      1. bepaly亚洲很好& infomative教程....请上传更多关于文档聚类过程的教程。

  13. 你能为用tf idf做余弦相似度提供任何参考吗,所以我们有tf idf的矩阵,我们如何用它来计算余弦?谢谢你的精彩文章。

  14. 如果我在工作请纠正我
    以“我们在第一个教程中计算过的频率”开始的公式应该是Mtest而不是Mtrain。同样,在启动后,这些IDF权重可以用向量表示为:“应该是IDF测试而不是IDF训练。

    btw大系列,你能为如何实现分类提供一个简单的方法吗?

  15. bepaly亚洲很好的文章。恭喜! !

    显示您的结果,我有一个问题:

    我在维基百科上读到:
    tf idf值按单词在文档中出现的次数成比例增加,但是被语料库中单词的频率所抵消,这有助于控制某些单词通常比其他单词更常见这一事实。

    当我读到它的时候,我理解,如果所有文档中的单词apperars不如只出现在一个文档中的单词重要:

    然而,在结果中,“太阳”或“明亮”这个词比“天空”更重要。

    我不能完全理解。

  16. 极好的!我以前对tf idf很熟悉,但我发现您的scikit示例很有用,因为我正在尝试学习这个包。

  17. 好帖子!偶然发现这个,想了解更多关于Countvectorizer的信息,但是我很高兴我通读了你的两篇文章(第一部分和第二部分)。

    现在就把你的博客收藏起来

  18. 似乎不符合您描述的_Transform()。
    知道为什么吗?
    > TS
    “天是蓝的”“阳光明媚”
    >>>V7=CountVectorizer()。
    >>>V7.Fit_Transform(TS)
    <2×2类型为“”的稀疏矩阵
    以坐标格式存储4个元素>
    > > >打印v7.vocabulary_
    {你的成就:0,U’:1 }

    1. 事实上,第一个python示例中有两个小错误。
      1。countvectorizer应该这样实例化:
      count_vectorizer = CountVectorizer (stop_words =“英语”)
      这将确保,“the”等被删除。

      2.要打印词汇表,你必须在末尾加一个下划线。
      打印“词汇:”,count_vectorizer.vocabulary_

      优秀的辅导,只是一些小事情。去帮助别人吧。

  19. 谢谢你的解释。

    我有一个关于计算idf(t#)的问题。
    在第一种情况下,您写的IDF(T1)=Log(2/1),因为我们的收藏中没有这样的术语,因此,分母上加1。现在,在T2的情况下,你写了日志(2/3)为什么分母等于3而不是4(=1+2+1)?t3,你写:日志(2/3)因此分母等于3(=1+1+1)。我看到这里有点矛盾。你能,请,解释,分母值是怎么计算的?

    谢谢。

    1. 你搞错了,在分母中,你不需要在每个文件中加上术语的总和,您只需对所有具有至少一个术语唯一性的文档进行汇总。

  20. 如果您能提供了解ft-idf在文档分类中的使用方法,那就太好了。我看到了那个例子(python代码),但是如果有最好的算法,因为不是所有人都能理解这种语言。

    谢谢

  21. 嗨,克里斯蒂安,

    读到这篇文章让我非常兴奋bepaly亚洲和幸运。你理解的清晰反映在文件的清晰中。这让我在机器学习领域重拾信心。

    谢谢你的解释。

    我想从你那里了解更多。

    谢谢,
    尼苏

  22. 谢谢你的精彩总结。你提到了一些比较L1和L2范数的论文,我打算更深入地研究一下。你还知道他们的名字吗?

  23. 精彩的文章。

    到目前为止,我读过的关于tf-tdf的最简单、最合理的解释。我真的很喜欢你解释它背后的数学原理。

  24. 你好,伟大的职位!我正在使用SciKit学习中的tfidVectorizer模块生成范数为l2的tf idf矩阵。在我称之为tfidf_矩阵的语料库的fit_变换之后,我一直在检查tfidf向量器的输出。我已经对这些行求和了但是它们的和不是1。代码为vect=tfidfvectorizer(使用“idf=true,Sublunar_tf=真,范数=“L2”。tfidf_matrix = vect.fit_transform(数据)。当我运行tfidf_matrix.sum(轴=1)时,向量大于1。也许我看错了矩阵,或者我误解了标准化的工作原理。希望有人能澄清这一点!谢谢

  25. 我能问一下你什么时候计算国际直拨号码吗?例如,日志(2/1),您是否使用了以10(e)为基数的对数或其他值?我得到了不同的计算!

  26. 很棒的教程,刚刚在ML中开始了一项新的工作,这就很清楚地解释了事情的本质。bepaly亚洲

  27. 上乘的帖子.... ! ! !非常感谢你写这篇文章。

    但我需要更多信息,正如您展示了Python的实用性,你能用Java语言提供它吗?

  28. 我有点困惑为什么tf-idf在这种情况下给出负数?我们如何解释它们?如果我错了,请纠正我,但是当向量为正数时,这意味着该组件的大小决定了该词在该文档中的重要性。如果是负的,我不知道怎么解释。如果我要对一个向量的所有正分量和一个负分量做点积,这意味着一些分量可能对点积产生负面影响,即使矢量的on对于一个特定的词具有非常高的重要性。bepaly亚洲

  29. 你好,
    非常感谢您对这个主题的详细解释,真的很棒。不管怎样,你能给我一个提示,我不断看到的错误的根源是什么吗?

    freq_term_matrix=count_vectorizer.transform(测试_集)
    AttributeError:“matrix”对象没有属性“transform”

    我是否使用了错误的sklearn版本?

  30. 精彩的简单有效的解释。请发表更多的主题和这样精彩的解释。期待未来的文章。
    谢谢

  31. 我了解tf-idf的计算过程。但是这个矩阵是什么意思,以及我们如何使用tfidf矩阵来计算相似性让我困惑。你能解释一下如何使用tfidf矩阵吗?谢谢。

  32. 最好的解释……bepaly亚洲很有帮助。请告诉我如何在SVM中绘制文本分类中的向量。我正在研究tweets分类。我很困惑,请帮帮我。

  33. 你好,不好意思我弄错了,我不明白||Vd4||2 = 1是怎么回事。
    d4的值=(0.0,0.89,0.44,0.0),因此标准化将为=sqrt(square(.89)+square(.44))=sqrt(.193)=44。
    我错过了什么?请帮助我理解。

  34. 你好,这是一个很棒的博客!
    如果我需要做两克的情况,如何使用sklearn完成它?

  35. 我得不到同样的结果,当我执行相同的脚本时。
    打印:“IDF:”tfidf.idf_uu):idf:[2.09861229 1.1.40546511 - 1。]

    我的python版本是:3.5
    SciKit学习版本为:O.18.1

    我需要改变什么?可能的错误是什么?

    谢谢,

  36. 完美的介绍!
    没有的变戏法。简单明了,技术应该是。
    bepaly亚洲非常有帮助
    非常感谢。bepaly亚洲
    继续发布!
    奥布里亚多

  37. 为什么D=2,在IDF方程中。不应该是4,因为d表示考虑的文件数量,我们有两个来自测试,2乘火车。

  38. 嘿,希伊克里斯蒂安
    你的文章真的有助于我从基础上理解tfd idf。我正在进行一个分类项目,在这个项目中,我使用向量空间模型来确定测试文档应该出现的类别。这是机器学习的一部分。如果你能给我一些相关的建议,那就太好了。我被困在这一点上。
    谢谢您

  39. 请参阅此示例以了解如何将其用于文本分类过程。“这个”链接不再有效。你能提供一个例子的相关链接吗?

    谢谢

留下评论

您的电子邮件地址将不会发布。

此网站使用Akismet来减少垃圾邮件。了解如何处理评论数据.