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

我在使用LibSVM对书面文本进行分类(性别分类)。

我遇到了一些问题,不明白如何创建具有多个特征的LibSVM训练数据。

LibSVM中的训练数据构建如下:

label index1:value1 index2:value2 

假设我想使用以下特征:

  • Top_k单词:按标签使用最多的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 

回答:

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

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注