如何规范化SVM的tf-idf向量?

时间:2013-08-14 07:53:26

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

我正在Support Vector Machines使用document classification。我为每个文档设置的特征是tf-idf向量。我有大小为N的每个tf-idf向量的M个文档。 给出M * N矩阵。

M的大小只有10个文档,tf-idf向量是1000个单词向量。所以我的功能远远大于文档数量。每个单词也出现在2或3个文档中。当我使用

对每个特征(单词)进行标准化时,即[0,1]中的列标准化
val_feature_j_row_i = ( val_feature_j_row_i - min_feature_j ) / ( max_feature_j - min_feature_j)

它当然要么给我0,1。

它给了我不好的结果。我使用libsvmrbf function C = 0.0312,gamma = 0.007815

有什么建议吗?

我应该包含更多文件吗?或其他函数,如sigmoid或更好的规范化方法?

1 个答案:

答案 0 :(得分:2)

要考虑和纠正的事项列表很长,所以首先我会在尝试面对问题之前推荐一些机器学习阅读。有许多好书(如Haykin的“神经网络和学习机器”)以及在线课程,它们将帮助您完成这些基础知识,如下面列出的那些:http://www.class-central.com/search?q=machine+learning

回到问题本身:

  • 10个文档的行数很小,以获得任何重要结果和/或对问题的见解,
  • 没有通用的数据预处理方法,你必须通过大量的测试和数据分析来分析它,
  • SVM是参数模型,您不能使用单个Cgamma值并期望任何合理的结果。你必须检查几十个,甚至得到“在哪里搜索”的线索。这样做的最简单方法是所谓的grid search
  • 1000个特征是大量的维度,这表明使用内核,这意味着无限维度的特征空间是非常冗余的 - 首先分析更简单的,更难的机会是一个更好的想法。过度拟合(线性或低次多项式)
  • 如果“每个单词出现在2或3个文档中”,最终是tf * idf是一个不错的选择吗?它可能是值得怀疑的,除非你的意思是20-30%的文件

最后为什么简单的功能压缩

  

它当然要么给我0,1。

它应该导致[0,1]间隔中的值,而不仅仅是它的限制。因此,如果是这种情况,您可能在实施中遇到了一些错误。