2015-11-01 58 views
0

我正在使用Libsvm对书写文本进行分类。 (性别分类)SVM机器学习:LibSVM中的特征表示

在理解如何创建具有多个功能的Libsvm培训数据时遇到问题。在LIBSVM

训练数据是建立这样的:

label index1:value1 index2:value2 

可以说,我想这些功能:

  • Top_k话:按标签
  • Top_k双字母组k个最常用的词:k个最使用bigrams

所以例如,计数看起来像这样:

   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

LIBSVM表示是纯数字,所以

label index1:value1 index2:value2 

表示每个“la bel“,”index“和”value“必须是号码。你的情况,你必须列举你的功能,例如

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

如果某些featues的有0值,那么你可以省略

1 1:23 2:47 4:1 

记得留下递增的顺序功能。

一般来说,LIBSVM 不是被设计文本上班,我不建议你这样做 - 而使用一些现有的库,使文本便于工作和周围libsvm的包装(如NLTKscikit-learn

+0

是的,我知道他们必须是数字,我想知道如果我有这两个功能必须如何。我编辑我的帖子来澄清它 – user3811872

+0

是的,更新的功能表示对应于您绘制的表格。通常SVM中的特性之间没有意义(它们是独立的),因此您可以随意列举它们。唯一重要的是,一个向量中的特征K必须代表与其他特征K完全相同的特征;其余的完全是任意的。但是 - 您应该考虑一些适当的功能缩放比例(如tf-idf) – lejlot

1

不管k most您用于培训的单词/ bigrams可能不是您测试集中最受欢迎的。如果你想使用英语中最流行的单词,你将以the,and等等结束。 Maybee beerfootball更适合分类男性,即使它们不太受欢迎。该过程步骤称为feature selection,与SVM无关。当您发现选择性功能(啤酒,肉毒杆菌毒素,......)时,您可以列举它们并将其填入SVM培训中。

对于bigrams,你可能会忽略特征选择,因为最多有26 * 26 = 676个bigrams可以创建676个特征。但是我再次假设像be这样的bigrams没有选择性,因为beer中的选择性匹配是comleteley埋在to be的很多比赛中。但是,这是猜测,你必须学习你的功能的质量。另外,如果你使用word/bigram计数,你应该规范化他们,我。即除以你文件的整体单词/二元数。否则,训练集中较短的文档将比较大的文档重量更轻。