0

我正在使用 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] 中的归一化不会减少信息吗?

4

1 回答 1

1

SVM不是Naive Bayes,特征的值不是计数器,而是多维实值空间中的维度,0 与 1 具有完全相同的信息量(这也回答了您对删除 0 值的担忧 - 不要这样做)。没有理由将数据标准化[0.001, 1]SVM.

这里唯一的问题是,按列归一化对 来说不是一个好主意tf-idf,因为它会将你的特征退化为tf(对于特定i的第维,tf-idf只是tf[0,1]乘以常数idf,归一化将乘以idf^-1)。我会考虑一种替代的预处理方法:

  • 对每个维度进行归一化,因此它的均值为 0,方差为 1
  • 通过制作去相关x=C^-1/2*x,其中 C是数据协方差矩阵
于 2013-08-14T05:23:12.153 回答