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

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

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

由于很多人喜欢本教程的第一部分,因此第二部分比第一个更长。

介绍

在第一篇文章中,我们学习了如何使用术语频率表示向量空间中的文本信息。然而,术语-频率方法的主要问题是,它放大频繁项和缩小比高频项经验更丰富的稀有项。基本的直觉是,在许多文档中经常出现的术语并不是很好的鉴别器,而是真正有意义的(至少在许多实验测试中);这里的重要问题是:为什么你,比如在一个分类问题中,要强调一个几乎在你文档的整个语料库中都存在的术语?

TF-IDF重量来解决这个问题。TF-IDF给出的是一个在集合中的文档中的一个单词,这就是为什么TF-IDF包含本地和全局参数,因为它不仅考虑了孤立的术语,还考虑了文档集合中的术语。什么TF-IDF然后解决这个问题,是在缩放罕见术语时缩小频繁的术语;一个比另一个发生的10倍的术语不是它比它更重要的10倍,这就是为什么TF-IDF使用对数刻度来做到这一点。

让我们回到它的定义\ mathrm {tf} (t, d)哪一个实际上是一个学期的学期计数T在文档中D.使用这种简单的术语频率可能导致我们出现问题关键词垃圾邮件,这是我们在文件中有一个重复的术语,目的是改善IR的排名(信息检索)系统,甚至对长文档产生偏见,使它们看起来比实际更重要,仅仅因为这个词在文档中出现的频率很高。

为了克服这个问题,术语频率\ mathrm {tf} (t, d)在向量空间上的文档通常也是标准化的。让我们看看我们如何正常化这个矢量。

矢量归一化

假设我们要对频率向量进行标准化\ vec {v_ {d_4}}我们在本教程的第一部分已经计算过了。文档d4本教程的第一部分有这样的文本表示:

D4:我们可以看到闪亮的阳光,明亮的阳光。

使用该文档的非归一化项频率的向量空间表示为:

\ vec {v_ {d_4}} =(0,2,1,0)

对向量进行规格化,就相当于计算单位矢量向量,它们用“帽子”表示法表示:\ hat {v}.单位向量的定义\ hat {v}一个向量的vec {v} \是:

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

在哪里\ hat {v}是单位向量,还是标准化向量vec {v} \是矢量将被标准化和vec {v} \ | \ \ | _p向量的模(模,长度)是多少vec {v} \l ^ p.空间(别担心,我要解释一下)。

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

正常化过程(来源:http://processing.org/learning/pvector/)
正常化过程(来源:http://processing.org/learning/pvector/)

但这里重要的问题是矢量的长度是如何计算的要理解这个,你必须理解动机l ^ p.空间,也叫Lebesgue空间

Lebesgue空间

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

通常,矢量的长度\vec{u} = (u_1, u_2, u_3, \ldots, u_n)使用该计算欧几里得范数范数是一个函数,它将严格正的长度或大小赋给向量空间中的所有向量- ,它定义为:

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

\|\vec{u}\|=\sqrt{u^2_1+u^2_2+u^2_3+\ldots+u^2_n}

但这不是定义长度的唯一方法,这就是为什么(有时)你会看到一个数字P加上规范符号,比如invec{你}\ | \ \ | _p.这是因为它可以被概括为:

\显示样式“\vec{u}”p=(\left | u|u 1\right | p+\left | u|u 2\right | p+\left | u|u 3\right | p+\ldots+\left | u n\right | p)^\frac{1}p}

并简化为:

\ displaystyle \ | \ vec {u} \ | _p =(\ sum \ limits_ {i = 1} ^ left | \ vec {u} _i \ light | ^ p)^ \ frac {1} {p}

所以当你读到aL2-norm,你正在读的欧几里得范数规范p=2,用于测量向量长度的最常见范数,通常称为“量值”;实际上,当您有一个不合格的长度度量值(没有P号码),你有L2-norm(欧几里德范数)。

当你读到L1-NOM,你读到的是规范p=1,定义为:

\ displaystyle \ | \ vec {u} \ | _1 =(\ left | u_1 \ light | +左| u_2 \ revent | +左| u_3 \ revent | + \ ldots + \ left | u_n \ left |)

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

出租车几何图形与欧几里得距离:在出租车几何图形中,同一路线的所有三条图线具有相同的长度(12)。在欧几里得几何图形中,绿线具有相同的长度6乘以根号{2}大约8.48,是唯一的最短路径。
来源:维基百科:出租车几何

请注意,您还可以使用任何规范来规范向量,但我们将使用最常见的规范,L2-NOM,这也是0.9版本中的默认值scikits.learn.You can also find papers comparing the performance of the two approaches among other methods to normalize the document vector, actually you can use any other method, but you have to be concise, once you’ve used a norm, you have to use it for the whole process directly involving the norm (一个使用l1范数的单位向量的长度不会是1如果你稍后要取它的l2范数的话)。

回到向量规范化

既然你知道矢量规范化过程是什么,我们可以尝试一个具体的例子,使用L2-rom的过程(现在我们现在使用正确的术语)来规范化我们的矢量\ vec {v_ {d_4}} =(0,2,1,0)为了得到它的单位向量\ hat {v_ {d_4}}.为此,我们将简单地将其插入单位向量的定义以评估它:

\帽子{v} = \压裂vec {v}} {\ vec {v} {\ | \ \ | _p } \\ \\  \ 帽子{v_ {d_4}} = \压裂{\ vec {v_ {d_4}}} {| | \ vec {v_ {d_4}} | | _2 } \\ \\ \\  \ 帽子{v_ {d_4}} = \压裂{(0 2 1,0)}{\ sqrt {0 ^ 2 + 2 ^ 2 + 1 ^ 2 + 0 ^ 2 }} \\ \\  \ 帽子{v_ {d_4}} = \压裂{(0 2 1,0)}{\√6 {5 }} \\ \\  \ 小帽子\ {v_ {d_4}} = (0.0, 0.89442719, 0.4472136, 0.0)

就是这样!归一化向量\ hat {v_ {d_4}}现在有l2标准了吗\ | \ hat {v_ {d_4}} \ | _2 = 1.0

注意,这里我们已经规范化了术语频率文档向量,但稍后我们将在计算tf idf之后进行规范化。

术语频率 - 逆文档频率(TF-IDF)重量

现在,您已经了解了矢量规范化如何在理论和实践中工作,让我们继续我们的教程。假设您的收藏中有以下文件(从教程的第一部分中获取):

火车文件集:D1:天空是蓝色的。D2:太阳很明亮。测试文件集:D3:天空中的太阳很明亮。D4:我们可以看到闪亮的阳光,明亮的阳光。

您的文档空间可以定义为D = {d_1, d_2, \ldots, d_n \}在哪里N是你的语料库中的文件数量,以及我们的案件D_{train} = \{d_1, d_2\}d_ {test} = \ {d_3,d_4 \}.文档空间的基数由\ left | {d_ {train}} \右手|= 2左\ | {D_{测试}}\ | = 2,因为我们只有两个文档用于培训和测试,但它们显然不需要具有相同的基数。

现在让我们看看idf(反向文档频率)是如何定义的:

\ displaystyle \ mathrm {idf}(t)= \ log {\ frac {\ left | d \ light |} {1+ \ left | \ {d:t \ in d \} \ light |}}

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

TF-IDF的公式是:

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

这个公式有一个重要的结果:当给定文档中有一个高项频率(tf)时,tf-idf计算的权重会很高(局部参数),以及该术语在整个收集的文件中出现的频率较低(全局参数)。

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

M_{train} = begin{bmatrix} 0 & 1 & 1 & 1\\ 0 & 2 & 1 & 0 \end{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 \ light |} {1+ \ left | \ {d:t_1 \ in d \} \ light |}}} = \ 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{\压裂{\左| D \右|}{1 +左| \ \{在D D: t_3 \ \} \右|}}= \ log{\压裂{2}{3}}= -0.40546511

\ mathrm {idf} (t_4) = \ log{\压裂{\左| D \右|}{1 +左| \ \{在D D: t_4 \ \} \右|}}= \ log{\压裂{2}{2}}= 0.0

这些idf权值可以用向量表示为:

\vec{idf_{train}} = (0.69314718, -0.40546511, -0.40546511, 0.0)

现在我们拥有我们的矩阵,具有术语频率(M_{火车})和表示矩阵的每个特征的IDF的矢量(\ vec {idf_ {train}}),我们可以计算tf-idf权值。我们要做的是对矩阵的每一列做一个简单的乘法M_{火车}与相应的\ vec {idf_ {train}}向量维数。为此,我们可以创建一个正方形对角矩阵被称为M_ {idf}竖直方向和水平方向都等于这个向量\ vec {idf_ {train}}尺寸:

M_{idf} = begin{bmatrix} 0.69314718 & 0 & 0 & 0\\ 0 & -0.40546511 & 0\\ 0 & 0\\ 0 & -0.40546511 & 0\\ 0 & 0 & 0 & 0 & 0 & 0\ end{bmatrix}

然后将其乘以term frequency matrix,则最终结果可定义为:

M_{tf\mbox{-}idf} = M_{train} \乘以M_{idf}

请注意,矩阵乘法不是可交换的,它是一个\ times b会不会有不同的结果b \ times a,这就是为什么M_ {idf}位于乘法的右侧,以实现将每个IDF值乘以其对应功能的所需效果:

\ begin {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)\ ent {bmatrix} \ times\ begin {bmatrix} \ mathrm {idf}(t_1)&0&0&0 \\ 0&\ mathrm {idf}(t_2)&0&0&0&0&0 \\ 0&0&\ mathrm {idf}(t_3)&0 \\ 0&0&0&0&\ mathrm {idf}(t_4)\ neg {bmatrix} \\ = \ begin {bmatrix} \ mathrm {tf}(t_1,d_1)\ times \ mathrm {idf}(t_1)&\ mathrm {tf}(t_2,d_1)\ times \ mathrm {idf}(t_2)&\ mathrm {tf}(t_3,d_1)\ times \ mathrm {idf}(t_3)&\ mathrm {tf}(t_4,D_1) \times \mathrm{idf}(t_4)\\   \mathrm{tf}(t_1, d_2) \times \mathrm{idf}(t_1) & \mathrm{tf}(t_2, d_2) \times \mathrm{idf}(t_2) & \mathrm{tf}(t_3, d_2) \times \mathrm{idf}(t_3) & \mathrm{tf}(t_4, d_2) \times \mathrm{idf}(t_4)   \end{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-0.40546511 & 0 \end{bmatrix}

最后,我们可以把L2标准化过程应用到M{tf\mbox{-}idf}矩阵。请注意,这种标准化是“按行”因为我们要处理矩阵的每一行作为一个被标准化的独立向量,而不是矩阵作为一个整体

m_ {tf \ mbox { - } IDF} = \ frac {tf \ mbox { - } IDF}} {\ | m_ {tf \ mbox { - } IDF} \ | _2} = = begin{bmatrix} 0 & -0.70710678 & -0.70710678 & 0\\ 0 & -0.89442719 & -0.4472136 & 0\ end{bmatrix}

这是我们的测试文件集的非常规范化的TF-IDF重量,实际上是单位向量的集合。如果您拍摄了矩阵的每一行的L2-常态,则会发现它们都有1个常数为1。

Python练习

环境使用:Python v.2.7.2.,Numpy 1.6.1,Scipy v.0.9.0,Sklearn v.0.9 (Scikits.learn)

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

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

来自sklearn.feature_extraction.text导入countvectorizer train_set =(“天空是蓝色的。”,太阳很明亮。“)test_set =(”天空中的太阳很明亮。“,”我们可以看到闪亮的太阳,明亮的太阳。“)count_vectorizer = countvectorizer()count_vectorizer.fit_transform(train_set)打印”词汇表:“,count_vectorizer.vocubulary #ocomabulary:{'blue':0,'sun':1,'亮':2,'sky','sky':3} freq_term_matrix = count_vectorizer.transform(test_set)print freq_term_matrix.todense()#[[0 1 1 1]#[0 2 1 0]]

现在我们有了频率项矩阵(称为freq_term_matrix),我们可以实例化TfidfTransformer,这将负责计算我们术语频率矩阵的TF-IDF权重:

来自sklearn.feature_extraction.text导入tfidftransformer tfidf = tfidftransformer(rang =“l2”)tfidf.fit(freq_term_matrix)打印“iDf:”,tfidf.idf_#iDF:[0.69314718 -0.40546511 -0.40546511 -0.40546511 -0.40546511 -0.40546511 -0.40546511 -0.40546511 -0.40546511 0.]

注意,我已经指定了L2范数,这是可选的(实际上默认是L2范数),但我已经添加了参数来明确地告诉你它将使用L2范数。还要注意,您可以通过访问调用的内部属性来查看计算出的idf权重idf_.现在,合身()方法已经计算了矩阵的IDF,让我们转换freq_term_matrix到tf idf权重矩阵:

Tf_idf_matrix = tfidf.transform(freq_term_matrix) print Tf_idf_matrix .todense() # [[0.]-0.70710678 - -0.70710678 0。[0。-0.89442719 - -0.4472136 0。]]

就是这样tf_idf_matrix.实际上是我们之前的M{tf\mbox{-}idf}矩阵。你可以通过使用矢量化器Scikit.learn的类,该类是一个自动组合CountVectorizerTfidfTransformer给你。看到这个例子要知道如何将其用于文本分类过程。

I really hope you liked the post, I tried to make it simple as possible even for people without the required mathematical background of linear algebra, etc. In the next Machine Learning post I’m expecting to show how you can use the tf-idf to calculate the cosine similarity.

如果你喜欢它,请随意评论,提出建议,改正,等等。

引用本文为:Christian S.Perone,“机器学习:文本特征提取(tf idf)–第二部分”,在亚洲金博宝隐姓埋名地03/10/2011,//www.cpetem.com/2011/10/machine-learning-text-feature-extraction-tf-idf-part-ii/

参考

反文档频率的理解:关于IDF的理论论证

维基百科:: TF-IDF

经典矢量空间模型

Sklearn文本特征提取代码

更新

2015年3月13日格式,固定的图像问题。
2011年10月3日添加了关于Python示例的环境的信息

对“机器学习:文本特征提取(tf-idf) -第二部分”的103个想法

  1. 哇!
    很好的tf-idf介绍,非常感谢!亚洲金博宝亚洲金博宝非常有趣,我一直想研究这个领域很长时间,你的帖子是一个真正的礼物。阅读更多关于该技术用例的亚洲金博宝内容将是非常有趣的。如果有其他的文本语料库表示方法,你可能会感兴趣。
    (很抱歉英语不好,我正在努力提高,但还有很多工作要做)

  2. 优秀的工作基督徒!我期待着阅读您的下一篇文献分类,集群和主题提取与天真贝叶斯,随机梯度下降,小纤维-K均值和非负矩阵分解

    此外,Scikit-Learn的文档在文本特征提取部分上真正糟糕(我是主要的罪魁祸首......)。如果您想掌握当前情况,请随时加入邮件列表。

    1. 伟大的谢谢奥利维尔。我真的想帮助Sklearn,我只需要更多的时间来做这么做,你们已经做了一个很好的工作,我真的在Lib中已经实施的算法留下了深刻的印象,保持了良好的工作!

  3. 我喜欢这个教程,更好地了解我在这里学习的新概念。
    也就是说,您使用的是哪个版本的scikits learn?。
    Easy_Install安装的最新似乎有一个不同的模块层次结构(i.e在Sklearn中没有找到Feature_Extraction)。如果您可以提及您使用的版本,我将尝试使用这些示例。

  4. 第3部分在哪里?我必须在4天内提交关于矢量空间建模的作业。任何期待在周末放弃吗?

  5. 谢谢基督徒!在传亚洲金博宝染媒介空间的一个非常好的工作与sklearn。我刚刚有一个问题,假设我已经计算了'tf_idf_matrix',我想计算成对余弦相似度(每个行之间)。我有稀疏矩阵格式的问题,可以请举一个例子吗?我的矩阵也很大,比如25k乘60k。非常感谢!

  6. 很好的帖子…我知道什么是tf idf,以及如何用一个具体的例子来实现它。但是我发现了两件我不确定的事情:
    1-您称为2维矩阵M_Train,但它具有D3和D4文档的TF值,因此您应该调用矩阵m_test而不是m_train。因为D3和D4是我们的测试文件。
    2-当你计算t2 (sun)的idf值时,它应该是log(2/4)。因为文档的数量是2。D3有1次单词“sun”,D4有2次。它是3,但我们也在这个值上加1来消去除以0的问题。我说的对吗,还是我遗漏了什么?
    非常感谢。

    1. 你是正确的:这些都是非常优秀的博客文章,但是作者真的有义务/责任回去改正错误,比如下面的(或者其他的,比如第一部分;……):缺少训练是重中之重;设置stop_words参数;在我的电脑上,词汇索引也是不同的。

      虽然我们非常感谢作者的努力,但对于那些纠结于原著中那些(未改正的)错误的人来说,这也是一种极大的伤害。

      1. Re:我的'你是正确的评论'(上面),我应该补充说:

        “......注意到Frédériquepossot的评论(下面)关于分母:

        我们使用的实际上是某个术语出现在文档中的数量,而不管该术语在任何给定文档中出现过多少次。在这种情况下,t2 (' sun ')的idf值的分母确实是2+1(2个文档有术语' sun ', +1以避免潜在的零除法错误)。’”

    2. 哈立德,
      这是对一个老问题的回答。亚洲金博宝但是,我还是想回应交流我从文章中理解的东西。
      你的问题2:“当你计算t2 (sun)的idf值时,它应该是log(2/4)”
      我的理解是:log term的分母应该是(该term出现的文档数量+ 1),而不是该term出现的频率。术语“Sun”出现的文档数量是2 (D3中出现1次,D4中出现2次——总共在两个文档中出现3次。3为频次,2为文档数量)。因此分母是2 + 1 = 3。

  7. 优秀的帖子!
    我有一些问题。从最后的tf-idf权值矩阵中,我们如何分别得到各项的重要性(例如:哪一个是最重要的术语?我们如何使用这个矩阵对文件进行分类

  8. 非常感谢。你用如此简单的方式解释了它。它真的很有用。再次非常感谢。

  9. 我和杰克有同样的疑问。从最后的tf-idf权值矩阵中,我们如何分别得到各项的重要性(例如:哪一个是最重要的术语?我们如何使用这个矩阵对文件进行分类。

  10. 我有个问题…
    在tf idf操作之后,我们得到一个带有值的numpy数组。假设我们需要从数组中获得最高的50个值。我们如何才能做到这一点?

    1. F(IDF)的高值表示特定的载体(或文件)具有高局部强度和低的全球强度,在这种情况下,您可以假设它在本地具有高意义并且不能忽略的术语。与Funtion(TF)相比,只有术语重复大量的次数,是更重要的是,大部分时间都不是一个正确的建模技术。


  11. thanx fr d code ..确实非亚洲金博宝常有用!

    1.对于文档聚类,在计算倒词频后,是使用Jaccards系数这样的关联系数,然后使用k-means这样的聚类算法,还是在计算倒词频后直接对文档向量应用d k-means ?

    2.你如何为计算文档聚类的文档向量来评估反向术语频率?

    谢谢你的答复了!

  12. @Khalid:你在1中指出的-也让我困惑了一分钟(M_train vs M_test)。不过,我认为你在第二点上是错误的,因为我们使用的实际上是某个术语出现的文档数量,而不管该术语在任何给定文档中出现的次数。在这种情况下,t2(“sun”)的idf值的分母确实是2+1(2个文档使用术语“sun”,+1以避免潜在的零除法错误)。

    我也喜欢阅读这个系列的第三部分!我特别有兴趣了解更多关于功能选择的更多信息。是否有一种惯用的方法来获得具有最高TF.idf分数的条款的排序列表?您如何确定整体术语?您如何获得最负责高或低余弦的相似性(行按行)?

    谢谢你的精彩帖子!

  13. 优秀的文章和对td-idf规范化的介绍。

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

    谢谢!

  14. 你能提供任何参考来使用tfidf做余弦相似度吗我们有tf-idf的矩阵我们如何使用它来计算余弦。谢谢你的精彩文章。

  15. 如果我是wordg,请纠正我
    从“我们在第一次教程中计算的频率”开始之后的公式应该不是MTRAIN。此外,启动后,这些IDF权重可以由向量表示为:“应该是IDF_TEST而不是IDF_TRAIN。

    BTW Great系列,您能为如何实现分类提供简单的方法吗?

  16. 亚洲金博宝很好的帖子。恭喜!!

    为了展示你的成果,我有一个问题:

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

    当我阅读它的时候,我明白了如果一个单词出现在所有文档中,那么它的重要性要低于只出现在一个文档中的单词:

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

    我不确定是否完全理解它。

  17. 好极了!我以前熟悉tf-idf,但我发现你的scikits的例子很有帮助,因为我正试图学习那个包。

  18. 优秀的帖子!在寻找CountVectorizer的更多信息时偶然发现了这个问题,但我很高兴阅读了您的两篇文章(第1部分和第2部分)。

    现在为你的博客添加书签

  19. 似乎没有你描述的......
    知道为什么吗?
    >>>ts
    ('天空是蓝色','太阳很明亮')
    >>> v7 = countVectorizer()
    > > > v7.fit_transform (ts)
    <2×2类型稀疏矩阵"
    具有4个存储元素,坐标格式>
    > > >打印v7.vocabulary_
    {u'is':0,u'the':1}

    1. 实际上,第一个Python样本中有两个小错误。
      1.CountVectorizer应该像这样实例化:
      count\u vectorizer=CountVectorizer(stop\u words='english')
      这将确保' is ', ' the '等被删除。

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

      优秀的教程,只是小事。HOEP它帮助他人。

  20. 谢谢你精彩的解释。

    我有一个关于计算IDF(T#)的问题。
    在第一种情况下,你写idf(t1) = log(2/1),因为我们的集合中没有这个项,因此,分母加1。现在,对于t2,你写的是log(2/3)为什么分母是3而不是4 (=1+2+1)对于t3,你写:log(2/3),因此分母等于3(=1+1+1)。我看到这里有点不一致。你能解释一下,分母是怎么计算出来的吗?

    谢谢。

    1. 你弄错了,在分母上,你不需要把每一项的和放在每个文档中,你只需要把所有至少有一项的文档加起来。

  21. 如果您可以在文档分类中提供FT-IDF如何使用方式提供方式,这是良好的。我看到了这个例子(Python代码),但如果有最好的算法,因为没有所有人都能理解这种语言。

    谢谢

  22. 好了。解释有助于正确地看待事物。tf-idf是否是进行聚类的好方法(例如,使用Jaccard分析或对来自已知语料库的平均集的方差)?

    继续写:)

  23. 嗨,克里斯蒂安,

    能读到这篇文章,我感到非亚洲金博宝常兴奋和幸运。你理解的清晰体现在文件的清晰上。这让我在机器学习领域重拾信心。

    非常感谢美丽的解释。

    想从你身上阅读更多。

    谢谢,
    neethu

  24. 谢谢你的精彩总结。你提到了一些比较母语和二语规范的论文,我计划对此进行更深入的研究。你还知道他们的名字吗?

  25. 我如何为我自己的文本文件计算tf idf,该文件位于我电脑的某个位置?

  26. 才华横溢的文章。

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

  27. 嗨,好的文章!我使用scikit学习的TfidVectorizer模块来生成范数=l2的tf-idf矩阵。我已经检查了TfidfVectorizer在语料库的fit_transform之后的输出,我称之为tfidf_matrix。我对行求和,但它们的和不是1。代码是vect = TfidfVectorizer(use_idf=True, sublunar_tf=True, norm= " l2)。tfidf_matrix = vect.fit_transform(数据)。当我运行tfidf_matrix.sum(axis=1)时,向量大于1。也许我看错矩阵了,或者我误解了标准化的原理。我希望有人能澄清这一点!谢谢

  28. 请问你在计算IDF的时候,比如log(2/1),你是用log以10 (e)为底还是用其他的值?我得到了不同的计算!

  29. 伟大的教程,刚刚开始一个新的工作在ML和这解释事情非常清楚,因为它应该是。亚洲金博宝

  30. Execellent Post ...... !!!感谢本文的很多。

    但是,我需要更多信息,因为你展示了Python的实用,你可以用Java语言提供吗?

  31. 我有点困惑为什么TF-IDF在这种情况下给出负数?我们如何解释它们?如果我错了,但是当向量具有正值时,它意味着该组件的大小确定了该文档中该词在该文档中的重要性。如果它是否定的,我不知道如何解释它。如果我要用所有阳性组分和一个具有负组件的向量的点产物,那将意味着一些组件即使对载体对特定单词的重要性非常重要,则某些组件可能会产生否定。亚洲金博宝

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

    freq_term_matrix = count_vectorizer.transform (test_set)
    AttributeError: ' matrix ' object has no attribute ' transform '

    我使用的是sklearn的错误版本吗?

  33. 很棒的简单有效的解释。请在更加令人敬畏的解释中发布更多主题。向前撰写即将到来的文章。
    谢谢

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

  35. 最好的解释。。非常有用。你能告诉我如何亚洲金博宝在svm中绘制文本分类中的向量吗。。我正在做推特分类。我很困惑,请帮帮我。

  36. 我学到了很多东西。由于基督徒。期待你的下一个教程。

  37. 您好,如果我弄错了,我很抱歉,但我不明白怎么是| | Vd4 | | 2=1。
    d4的值=(0.0,0.89,0.44,0.0)所以归一化将是=根号(平方(.89)+平方(.44))=根号(.193)= .44
    那我错过了什么?请帮我理解。

  38. 它非常伟大。亚洲金博宝我喜欢你的教导。亚洲金博宝非常非常棒

  39. 我没有得到相同的结果,当我执行相同的脚本。
    print (" IDF: ", tfidf.idf_): IDF: [2.09861229 1. print (" IDF: ", tfidf.idf_);1.40546511 - 1。]

    我的Python版本是:3.5
    Scikit学习版是:o.18.1

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

    谢谢,

    1. 可能有很多原因,因为你使用的是不同的Python解释器版本和不同的Scikit-Learn版本,你应该会看到结果的不同,因为它们可能改变了默认参数、算法、舍入等。

  40. 完美的介绍!
    没有的变戏法。清晰而简单,就像技术应该的那样。
    亚洲金博宝很有帮助
    非常感谢。亚洲金博宝
    张贴!
    obrigado

  41. 为什么在idf方程中|D| = 2。不应该是4,因为|D|表示考虑的文档数量,我们有2个来自测试,2个来自火车。

  42. 嗨,克里斯汀
    您的帖子对我非常有帮助了解基础知识的TFD-IDF。我正在研究一个分类项目,在那里我正在使用传染媒介空间模型,这导致确定应该存在测试文件的类别。它是机器学习的一部分。如果你建议我与此相关的事情会很棒。我陷入了困境。
    谢谢你

  43. 请参阅此示例了解如何将其用于文本分类过程。“此”链接不再工作。能否提供一个相关的例子链接。

    谢谢

  44. 嘿,你有个不错的职位。真的谢谢你!太棒了。

  45. 肯定有很多了解这个主题。我真的很喜欢你所做的一切。

  46. 我知道这个网站提供了基于优质的文章或
    评论和其他数据,是否有任何其他网页,它呈现了这些类型的
    信息的质量?

  47. 在第一个例子中。Idf (t1),通过计算器得到log(2/1) = 0.3010。为什么他们得到了0.69..请问怎么了?

给…留一个回复togel在线取消回复

您的电子邮件地址不会被公开。

这个网站使用Akismet来减少垃圾邮件。了解如何处理您的评论数据