我在为LIBSVM生成输入训练向量集时遇到了一些问题。我有3个类别和它们的相关训练文档,词项权重如下(仅为假设)。
(标签/类别):1
词频向量(TF*IDF)
文档1-> 1:0.25 2:1.056 3:2.356
文档2-> 2:1.25 3:0.145 4:1.543
文档3-> 1:1.00 2:2.145 5:3.543
(标签/类别):2
词频向量(TF*IDF)
文档4-> 1:0.25 2:1.056 3:2.356
文档5-> 2:1.25 3:0.145 4:1.543
文档6-> 1:1.00 2:2.145 5:3.543
(标签/类别):3
词频向量(TF*IDF)
文档7-> 1:0.25 2:1.056 3:2.356
文档8-> 2:1.25 3:0.145 4:1.543
文档9-> 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-对应文档1)
1 2:1.25 3:0.145 4:1.543 ->(训练实例2-对应文档2)
1 1:1.00 2:2.145 5:3.543 ->(训练实例3-对应文档3)
(标签/类别):2
2 1:0.25 2:1.056 3:2.356 ->(训练实例4-对应文档4)
2 2:1.25 3:0.145 4:1.543 ->(训练实例5-对应文档5)
2 1:1.00 2:2.145 5:3.543 ->(训练实例6-对应文档6)
(标签/类别):3
3 1:0.25 2:1.056 3:2.356 ->(训练实例7-对应文档7)
3 2:1.25 3:0.145 4:1.543 ->(训练实例8-对应文档8)
3 1:1.00 2:2.145 5:3.543 ->(训练实例9-对应文档9)
回答:
格式在LIBSVM分发包的README文件中有描述,基本格式如下:
<categoryA> <feature1>:<value1> <feature2>:<value2> <feature3>:<value3> ...
每行一个训练实例。特征索引也应按升序排列。
测试集看起来完全相同,只是第一列可能包含某个固定数字,例如0,如果你不知道该集合的真实标签的话。
关于你的数据,我不太明白你如何能对同一个文档1
和同一组词项有所有这些不同的权重向量。你能澄清一下吗?
编辑:
如果去掉注释,格式是可以的,LIBSVM运行得很好。假设你在运行Windows,并且文件test.txt
如下,
1 1:0.25 2:1.056 3:2.3561 2:1.25 3:0.145 4:1.5431 1:1.00 2:2.145 5:3.5432 1:0.25 2:1.056 3:2.3562 2:1.25 3:0.145 4:1.5432 1:1.00 2:2.145 5:3.5433 1:0.25 2:1.056 3:2.3563 2:1.25 3:0.145 4:1.5433 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
进行预测。在其他系统上命令类似。
请注意,使用这些数据准确率不会超过1/3,因为数据集中每个标签都有相同的权重向量。