我正在使用Libsvm对书面文本进行分类。 (Genderclassification)
我遇到了解如何创建具有多种功能的Libsvm Training数据的问题。
Libsvm中的训练数据是这样构建的:
label index1:value1 index2:value2
让我说我想要这些功能:
因此,对于示例,计数将如下所示:
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
答案 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(例如作为NLTK或scikit-learn)
答案 1 :(得分:1)
用于训练的k most
个单词/双字母组可能不是您测试集中最受欢迎的单词。如果您想使用英语中最受欢迎的单词,最终会得到the
,and
等等。 Maybee beer
和football
更适合对男性进行分类,即使他们不那么受欢迎。此流程步骤称为feature selection
,与SVM无关。当你找到选择性特征(啤酒,肉毒杆菌毒素......)时,你会列举它们并将它们填入SVM培训。
对于双字母,你可能会省略特征选择,因为最多有26 * 26 = 676个双子星,可以制作676个特征。但我再次假设像be
这样的bigrams没有选择性,因为beer
中的选择性匹配是comleteley埋藏在to be
的许多匹配中。但这是猜测,你必须了解你的功能的质量。
另外,如果你使用word / bigram计数,你应该将它们标准化,i。即除以文档的整体单词/两字组数。否则,训练集中较短的文档将比较大的文档重量较轻。