1

Weka では、クラスStringToWordVectorはsetNormalizeDocLengthというメソッドを定義します。ドキュメントの単語頻度を正規化します。私の質問は次のとおりです。

  1. 「ドキュメントの単語頻度を正規化する」とはどういう意味ですか?
  2. Wekaはこれをどのように行いますか?

実際の例が最も役立ちます。前もって感謝します。

4

1 に答える 1

2

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

于 2012-08-28T09:49:32.873 に答える