【问题标题】:Libsvm: SVM normalizing starts from 0 or 0.001Libsvm:SVM 规范化从 0 或 0.001 开始
【发布时间】:2013-08-15 21:49:20
【问题描述】:

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

【问题讨论】:

    标签: machine-learning normalization svm libsvm document-classification


    【解决方案1】:

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

    这里唯一的问题是,对于tf-idf,按列标准化不是一个好主意,因为它会将你的特征退化到tf(至于特定的i'th 维度,tf-idf 是只需将[0,1] 中的tf 值乘以常数idf,归一化将乘以idf^-1)。我会考虑另一种预处理方法:

    • 对每个维度进行归一化,使其均值为 0,方差为 1
    • 通过使x=C^-1/2*x 去相关,其中C 是数据协方差矩阵

    【讨论】:

    • 是 tf-idf 表示 [0,1] 中的 tf 还是该术语在文档中出现的次数?如果它在 [0,1] 我们是否划分 no_of_times/total_words ?
    • 我正在通过计算向量中的最小值和最大值然后降低 + (upper - lower)*(vec[i]-min)/(max-min) 来进行归一化?
    • tf term 被特定文档的长度标准化,所以它的结果是 [0,1] 范围。
    • 它会将它们放在表面上,如果您将每个向量标准化为长度为 1(这是行标准化),它最终会出现在单位球体上。 SVM 的规范化数据以列方式考虑,并且是针对完全不同的问题(变化值幅度可以使超平面偏向具有更广泛值范围的特征方向)。再一次 - 它应该被标准化,但不是那样,而是 - 通过答案中提出的方法之一。
    • 实际上,按行规范化在文本挖掘中并不少见。它不是 tf-idf 表示,而是与文档的直方图相关。两者都在实践中有效,但 tf-idf 是 标准 SVM 方法。
    猜你喜欢
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 2018-06-07
    • 1970-01-01
    • 2013-08-21
    相关资源
    最近更新 更多