【问题标题】:How to Normalize word frequencies of document in Weka如何在 Weka 中规范化文档的词频
【发布时间】:2012-08-31 14:40:58
【问题描述】:

在 Weka 中,StringToWordVector 类定义了一个名为 setNormalizeDocLength 的方法。它规范化文档的词频。我的问题是:

  1. “规范化文档的词频”是什么意思?
  2. Wek​​a 是如何做到的?

一个实际的例子对我有最大的帮助。提前致谢。

【问题讨论】:

    标签: machine-learning weka


    【解决方案1】:

    查看 Weka 源代码,这是进行标准化的方法:

    private void normalizeInstance(Instance inst, int firstCopy) throws Exception 
    {
        double docLength = 0;
    
        if (m_AvgDocLength < 0) 
        {
            throw new Exception("Average document length not set.");
        }
    
        // Compute length of document vector
        for(int j=0; j<inst.numValues(); j++) 
        {
            if(inst.index(j)>=firstCopy) 
            {
                docLength += inst.valueSparse(j) * inst.valueSparse(j);
            }
        }     
        docLength = Math.sqrt(docLength);
    
        // Normalize document vector
        for(int j=0; j<inst.numValues(); j++) 
        {
            if(inst.index(j)>=firstCopy) 
            {
                double val = inst.valueSparse(j) * m_AvgDocLength / docLength;
                inst.setValueSparse(j, val);
                if (val == 0)
                {
                    System.err.println("setting value "+inst.index(j)+" to zero.");
                    j--;
                }
            }
        }
    }
    

    看起来最相关的部分是

    double val = inst.valueSparse(j) * m_AvgDocLength / docLength;
    inst.setValueSparse(j, val);
    

    所以看起来标准化是value = currentValue * averageDocumentLength / actualDocumentLength

    【讨论】:

      猜你喜欢
      • 2014-02-08
      • 2011-01-17
      • 2013-12-19
      • 2021-02-21
      • 2022-01-03
      • 2020-11-14
      • 2014-10-13
      • 1970-01-01
      • 2015-06-04
      相关资源
      最近更新 更多