http://www.0x32.cn/html/y2010/568.html

 

     根据IFIDF对文本进行分词权重标记后,因为文本的长度各不一样,这就导致文本向量的数值差距明显,为了解决这个问题,我们可以将向量的长度都标准化为1,计算IFIDF后,根据公式:

就是分别对文本的分词计算如上公司,就将每个文本的分词表示成了模长都为1的向量。

下面是java代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

	/**
	 * 标准化文本特征
	 * @author HideHai
	 * @date 2010-4-7 下午02:54:27
	 */
	private void GenerateNormal(){
		float fA = 0;
		for(int i =0 ;i <_numDocs;i++){
			float totlalog = 0;
			for(int s=0;s<_termWeight.length;s++){
				fA = _termWeight[s][i];
				totlalog +=Math.sqrt(fA*fA);
			}
			for(int s=0;s<_termWeight.length;s++){
				fA = _termWeight[s][i];
				_termWeight[s][i] = fA/totlalog;
			}
		}
	}

—————————

其中:

_numDocs 为样本集合的长度。

<_termWeight  为特征化后的文本向量空间。