machine-learning - 如何在Weka中标准化文档的词频

标签 machine-learning weka

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

  1. “规范化文档的词频”是什么意思?
  2. Weka 如何做到这一点?

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

最佳答案

查看 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

关于machine-learning - 如何在Weka中标准化文档的词频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12155550/

相关文章:

machine-learning - 如何在新闻文章中使用 gensim 进行 lda?

java - 从Weka中的AdaBoostM1获取实例权重

java - 解释 StringToWordVector() 的输出 - Weka

algorithm - 在 Weka 中堆叠

language-agnostic - 如何在点对点系统中增强但最低限度地分发项目

machine-learning - 在机器学习中多次使用相同的输入(具有不同的输出)是否可以接受?

linux - 在命令行中使用 weka

machine-learning - 如何以与训练数据相同的方式标准化测试数据?

python - 更改随机森林分类器的阈值

java - Apache Spark 决策树预测