【发布时间】:2012-08-31 14:40:58
【问题描述】:
在 Weka 中,StringToWordVector 类定义了一个名为 setNormalizeDocLength 的方法。它规范化文档的词频。我的问题是:
- “规范化文档的词频”是什么意思?
- Weka 是如何做到的?
一个实际的例子对我有最大的帮助。提前致谢。
【问题讨论】:
标签: machine-learning weka
在 Weka 中,StringToWordVector 类定义了一个名为 setNormalizeDocLength 的方法。它规范化文档的词频。我的问题是:
一个实际的例子对我有最大的帮助。提前致谢。
【问题讨论】:
标签: machine-learning 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。
【讨论】: