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

时间:2017-03-29 10:40:49

标签: python python-2.7 scikit-learn tf-idf

我正在尝试将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 个答案:

答案 0 :(得分:2)

这是因为< 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

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