如何使用svm为文本分类创建向量空间

时间:2012-08-13 12:25:51

标签: java machine-learning svm libsvm

我在为LIBSVM生成输入训练矢量集时遇到了一些问题。我有3个类别及其相关训练文档,其术语权重如下(仅限假设)。

(适用标签/分类):1
    术语频率矢量(TF * IDF)
    Document1-> 1:0.25 2:1.056 3:2.356
    Document2-> 2:1.25 3:0.145 4:1.543
    Document3-> 1:1.00 2:2.145 5:3.543

(标签/分类):2
    术语频率矢量(TF * IDF)
    Document4-> 1:0.25 2:1.056 3:2.356
    Document5-> 2:1.25 3:0.145 4:1.543
    Document6-> 1:1.00 2:2.145 5:3.543

(标签/类别):3
    术语频率矢量(TF * IDF)
    Document7-> 1:0.25 2:1.056 3:2.356
    Document8-> 2:1.25 3:0.145 4:1.543
    Document9-> 1:1.00 2:2.145 5:3.543

任何人都可以说如何将其转换为LIBSVM训练向量集。这里:1:0.25 2:1.056 3:2.356是术语索引及其权重。术语索引在全局词典中手动维护。

我也可以知道如何将测试文档转换为术语向量?。

提前感谢。


你好Qnan ..我已经按你的建议准备了样本训练矢量空间。你能告诉我我的矢量形成是否正确吗?..

(标签/分类):1

1 1:0.25 2:1.056 3:2.356 - >(训练实例1 - 用于Document1)
1 2:1.25 3:0.145 4:1.543 - >(训练实例2 - 用于Document2)
1 1:1.00 2:2.145 5:3.543 - >(培训实例3 - 用于Document3)

(标签/分类):2

2 1:0.25 2:1.056 3:2.356 - >(训练实例4 - 用于Document4)
2 2:1.25 3:0.145 4:1.543 - >(训练实例5-对于Document5)
2 1:1.00 2:2.145 5:3.543 - >(训练实例6-代表Document6)

(标签/分类):3

3 1:0.25 2:1.056 3:2.356 - >(训练实例7-用于Document7)
3 2:1.25 3:0.145 4:1.543 - >(训练实例8-对于Document8)
3 1:1.00 2:2.145 5:3.543 - >(训练实例9-为Document9)

1 个答案:

答案 0 :(得分:4)

格式在LIBSVM发行版的README文件中描述,基本上是

<categoryA> <feature1>:<value1> <feature2>:<value2> <feature3>:<value3> ...

每个训练实例一行。特征索引也应按升序排列。

测试集看起来完全相同,只是第一列可能包含一些固定数字,例如0,如果您不知道该集合的真实标签。

至于你的数据,我不太清楚如何为相同的Document1和相同的术语集提供所有不同的权重向量。你能澄清一下吗?

修改

格式没问题,如果删除注释,LIBSVM运行就好了。假设您正在运行Windows,文件test.txt如下所示,

1 1:0.25 2:1.056 3:2.356
1 2:1.25 3:0.145 4:1.543
1 1:1.00 2:2.145 5:3.543
2 1:0.25 2:1.056 3:2.356
2 2:1.25 3:0.145 4:1.543
2 1:1.00 2:2.145 5:3.543
3 1:0.25 2:1.056 3:2.356
3 2:1.25 3:0.145 4:1.543
3 1:1.00 2:2.145 5:3.543

您可以使用./libsvm-3.12/windows/svm-train.exe test.txt进行培训,使用./libsvm-3.12/windows/svm-predict.exe test.txt test.txt.model test.txt.out进行预测。在其他系统上,CMD类似。

请注意,使用此数据时,准确度不会高于1/3,因为数据集中的每个标签都存在相同的权重向量。