【问题标题】:Scikit-learn TfidfTranformer yielding wrong results?Scikit-learn TfidfTransformer 产生错误的结果?
【发布时间】:2014-07-29 03:27:12
【问题描述】:

我使用 scikit-learn 的 Tfidf 转换器得到了“奇怪”的结果。通常,我希望出现在语料库中的所有文档中的单词的 idf 等于 0(不使用任何平滑或归一化),因为我将使用的公式是文档数量的对数语料库除以包含该术语的文档数。显然(如下图所示)与我的手动实现相比,scikit-learn 的实现为每个 idf 值添加了一个。有人知道为什么吗?再次注意,我已将平滑和归一化设置为 None/False。

In [101]: from sklearn.feature_extraction.text import TfidfTransformer

In [102]: counts
Out[102]: 
array([[3, 0, 1],
       [2, 0, 0],
       [3, 0, 0],
       [4, 0, 0],
       [3, 2, 0],
       [3, 0, 2]])

In [103]: transformer = TfidfTransformer(norm=None, smooth_idf=False)

In [104]: transformer
Out[104]: 
TfidfTransformer(norm=None, smooth_idf=False, sublinear_tf=False,
         use_idf=True)

In [105]: tfidf = transformer.fit_transform(counts)

In [106]: tfidf.toarray()
Out[106]: 
array([[ 3.        ,  0.        ,  2.09861229],
       [ 2.        ,  0.        ,  0.        ],
       [ 3.        ,  0.        ,  0.        ],
       [ 4.        ,  0.        ,  0.        ],
       [ 3.        ,  5.58351894,  0.        ],
       [ 3.        ,  0.        ,  4.19722458]])

In [107]: transformer.idf_
Out[107]: array([ 1.        ,  2.79175947,  2.09861229])

In [108]: idf1 = np.log(6/6)

In [109]: idf1
Out[109]: 0.0

In [110]: idf2 = np.log(6/1)

In [111]: idf2
Out[111]: 1.791759469228055

In [112]: idf3 = np.log(6/2)

In [113]: idf3
Out[113]: 1.0986122886681098

我一直找不到任何可以证明在 idf 值中添加 1 的来源。我正在使用 scikit-learn 版本“0.14.1”。

顺便说一句,scikit-learn 之外的另一种解决方案对我来说并不是很有用,因为我需要为 gridsearch 构建一个 scikit-learn 管道。

【问题讨论】:

    标签: python nlp scikit-learn tf-idf


    【解决方案1】:

    这不是错误,它是a feature

    # log1p instead of log makes sure terms with zero idf don't get
    # suppressed entirely
    idf = np.log(float(n_samples) / df) + 1.0
    

    这个+1(如评论中所述)用于使 idf 规范化器较弱,否则,所有文档中出现的元素将被完全删除(它们具有 idf=0 所以整个 tfidf =0)

    【讨论】:

      猜你喜欢
      • 2017-12-22
      • 2012-09-03
      • 2017-02-02
      • 2014-09-03
      • 2016-12-08
      • 2017-09-20
      • 2016-01-26
      • 2019-09-11
      • 2022-01-11
      相关资源
      最近更新 更多