SVM机器学习:LibSVM中的特征表示

时间:2015-11-01 18:26:49

标签: machine-learning libsvm word-count feature-selection

我正在使用Libsvm对书面文本进行分类。 (Genderclassification)

我遇到了解如何创建具有多种功能的Libsvm Training数据的问题。

Libsvm中的训练数据是这样构建的:

label index1:value1 index2:value2 

让我说我想要这些功能:

  • Top_k words:k标签中最常用的单词
  • Top_k双字母:k最常用的双字母

因此,对于示例,计数将如下所示:

               Word count             Bigram count
         |-----|-----------|         |-----|-----------|
         |word |   counts  |         |bigra|   counts  |
         |-----|-----|-----|         |-----|-----|-----|
  index  |text | +1  | -1  |  index  |text | +1  | -1  |
         |-----|-----|-----|         |-----|-----|-----|
      1  |this | 3   | 3   |      4  |bi   | 6   | 2   |
      2  |forum| 1   | 0   |      5  |gr   | 10  | 3   |
      3  |is   | 10  | 12  |      6  |am   | 8   | 10  |
         |...  | ..  | ..  |         |..   | ..  | ..  |
         |-----|-----|-----|         |-----|-----|-----|

让我们说k = 2,这是一个训练实例的样子吗?(计数与之前没有关联)

Label Top_kWords1:33 Top_kWords2:27 Top_kBigrams1:30 Top_kBigrams2:25

或者看起来像这样(当功能混淆时重要吗?)

Label Top_kWords1:33 Top_kBigrams1:30 Top_kWords2:27  Top_kBigrams2:25

我只是想知道具有多个不同功能的特征向量以及如何使用它。

编辑:

使用上面更新的表格,此培训数据是否正确?:

实施例

 1 1:3 2:1 3:10 4:6 5:10 6:8
-1 1:3 2:0 3:12 4:2 5:3  6:10 

2 个答案:

答案 0 :(得分:2)

libSVM表示是纯数字,所以

label index1:value1 index2:value2 

表示每个"标签","索引"和"价值"必须数字。在您的情况下,您必须枚举您的功能,例如

 1 1:23 2:47 3:0 4:1

如果某些特征的值为0,则可以省略它

 1 1:23 2:47 4:1

请记住按功能递增顺序。

一般来说,libSVM 不适用于文本,我不建议你这样做 - 而是使用一些已经存在的库,这样可以轻松处理文本并包装libsvm(例如作为NLTKscikit-learn

答案 1 :(得分:1)

用于训练的k most个单词/双字母组可能不是您测试集中最受欢迎的单词。如果您想使用英语中最受欢迎的单词,最终会得到theand等等。 Maybee beerfootball更适合对男性进行分类,即使他们不那么受欢迎。此流程步骤称为feature selection,与SVM无关。当你找到选择性特征(啤酒,肉毒杆菌毒素......)时,你会列举它们并将它们填入SVM培训。

对于双字母,你可能会省略特征选择,因为最多有26 * 26 = 676个双子星,可以制作676个特征。但我再次假设像be这样的bigrams没有选择性,因为beer中的选择性匹配是comleteley埋藏在to be的许多匹配中。但这是猜测,你必须了解你的功能的质量。

另外,如果你使用word / bigram计数,你应该将它们标准化,i。即除以文档的整体单词/两字组数。否则,训练集中较短的文档将比较大的文档重量较轻。