我在文档分类中使用libsvm。
我的项目中仅使用了svm.h和svm.cc。
它的svm_problem结构需要非零的svm_node数组,因此使用的是稀疏格式。
我得到一个tf-idf词向量,假设其范围在[5,10]之间。如果我将其归一化到[0,1],所有的5都会变成0。
在发送到svm_train时,我应该删除这些零吗?
删除这些零不会减少信息并导致结果变差吗?
我应该从0.001而不是0开始归一化吗?
一般来说,SVM在[0,1]范围内归一化不会减少信息吗?
回答:
SVM
不是Naive Bayes
,特征值不是计数器,而是多维实值空间中的维度,0和1的信息量完全相同(这也回答了您关于删除0值的担忧 – 不要这样做)。对于SVM
,没有理由将数据归一化到[0.001, 1]
的范围内。
这里唯一的问题是,对于tf-idf
,按列归一化不是一个好主意,因为它会使您的特征退化为tf
(对于特定的第i
维度,tf-idf
只是[0,1]
范围内的tf
值乘以一个常数idf
,归一化会乘以idf^-1
)。我会考虑以下替代预处理方法之一:
- 归一化每个维度,使其均值为0,方差为1
- 通过
x=C^-1/2*x
进行去相关,其中C
是数据协方差矩阵