tfidf_transfromer = Tfidftransformer()是啥意思

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tfidf_transfromer = Tfidftransformer()是啥意思相关的知识,希望对你有一定的参考价值。

把函数给一个变量是什么意思?

你这个写法有问题,这样得到的是函数的返回值。在python里,可以把函数赋值给一个变量,python的变量指向的是一个内存段地址,它可以是任何对象,当你把对象赋值给一个变量,这个变量就指向了这个对象的地址,表面上看,这个变量就变成了那个对象。在闭包操作中很常见。 参考技术A 调用TfidfTransformer()时使用的是from sklearn.feature_extraction.text import TfidfTransformer,可以发现它是一个类(class),而非函数(function),因此在使用前要把该类赋值给一个对象,已完成类的初始化,也方便之后的使用

未明学院python课程助你入门数据分析和数据挖掘本回答被提问者采纳
参考技术B

iter类的函数可以被赋值


def func():

    for i in range(10):

        yield i

f = func()

while True:

    try:

        print(next(f))

    except:

        break

tfidf.transform() 函数没有返回正确的值

【中文标题】tfidf.transform() 函数没有返回正确的值【英文标题】:tfidf.transform() function not returning correct values 【发布时间】:2017-08-22 19:21:46 【问题描述】:

我正在尝试在某个文本语料库上拟合 tfidf 矢量化器,然后使用相同的矢量化器来查找新文本的 tfidf 值的总和。但是,总和值与预期不符。下面是例子:

text = ["I am new to python and R , how can anyone help me","why is no one able to crack the python code without help"]
tf= TfidfVectorizer(stop_words='english',ngram_range =(1,1))
tf.fit_transform(text)
zip(tf.get_feature_names(),tf.idf_)

[(u'able', 1.4054651081081644),
 (u'code', 1.4054651081081644),
 (u'crack', 1.4054651081081644),
 (u'help', 1.0),
 (u'new', 1.4054651081081644),
 (u'python', 1.0)]

现在,当我尝试使用相同的 tf 新文本时:

new_text = "i am not able to code"
np.sum(tf.transform([new_text]))
1.4142135623730951

我预计输出在 2.80 左右。任何关于此处可能出现问题的建议都会非常有帮助。

【问题讨论】:

【参考方案1】:

这是因为“l2 标准化”(TfidfVectorizer 中的默认值)。 如您所料,transform() 的第一个结果是:

array([[ 1.40546511,  1.40546511,  0.        ,  0.        ,  0.        ,
     0.        ]])

但是现在规范化已经完成。在此,上面的向量被除法器除:

dividor = sqrt(sqr(1.40546511)+sqr(1.40546511)+sqr(0)+sqr(0)+sqr(0)+sqr(0))
        = sqrt(1.975332175+1.975332175+0+0+0+0)
        = 1.98762782

所以最终得到的数组是:

array([[ 0.70710678,  0.70710678,  0.        ,  0.        ,  0.        ,
     0.        ]])

然后你应用 sum,它的结果是 = 1.4142135623730951

希望现在很清楚。 TfidfVectorizer的完整工作可以参考my answer here。

【讨论】:

明确一点,如果你想要这个 L2-norm,你可以在 TfidfVectorizer 构造函数中使用 norm=None。见here。 感谢您的清晰解释。一个后续问题 - 为什么当我们在新文本上使用 tfidfs 时,而不是在我们最初将其与原始文本相匹配时,它会被规范化? @Apoorv 原始数据用于从整个语料库中查找词条的idf。它不计算基于单个文档的 tf-idf。 tf-idf 是标准化的,而不是 idf。如果您对原始文档使用转换,您将获得标准化的结果。不要混淆 tf 和 idf。在您的情况下,您会看到 idf=tf-idf ,因为每个术语的 tf =1 。见scikit-learn.org/stable/modules/… @Vivek Kumar 知道了。感谢您的快速帮助和参考。 :)

以上是关于tfidf_transfromer = Tfidftransformer()是啥意思的主要内容,如果未能解决你的问题,请参考以下文章

分类 LDA 与 TFIDF

tfidf.transform() 函数没有返回正确的值

矩阵 TFIDF 的降维

如何使用已计算的 TFIDF 分数计算余弦相似度

tfidf代码简单实现

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