我在python中使用Svmlight包来训练SVM rank 模型。但是,我无法找到将训练数据传递给学习功能的方法。 我的python源代码如下:
import svmlight
trainingDat = open('train.dat','r')
model = svmlight.learn(trainingDat, type='ranking')
数据文件(train.dat)如下所示:
# query 1
3 qid:1 1:1 2:1 3:0 4:0.2 5:0
2 qid:1 1:0 2:0 3:1 4:0.1 5:1
1 qid:1 1:0 2:1 3:0 4:0.4 5:0
1 qid:1 1:0 2:0 3:1 4:0.3 5:0
# query 2
1 qid:2 1:0 2:0 3:1 4:0.2 5:0
2 qid:2 1:1 2:0 3:1 4:0.4 5:0
1 qid:2 1:0 2:0 3:1 4:0.1 5:0
1 qid:2 1:0 2:0 3:1 4:0.2 5:0
# query 3
2 qid:3 1:0 2:0 3:1 4:0.1 5:1
3 qid:3 1:1 2:1 3:0 4:0.3 5:0
4 qid:3 1:1 2:0 3:0 4:0.4 5:1
1 qid:3 1:0 2:1 3:1 4:0.5 5:0
运行代码时出现以下错误:
TypeError: document should be a tuple
我找了类似的问题,找到了一个:Load svmlight format error
此链接中的答案建议实现一个解析器,该解析器从上面提供的数据文件中读取并将其转换为特征和目标元组。但是,在培训排名时,我们需要提供有关实例所属集合的信息(理论上)。
我的问题:如何在使用排名配置时将训练数据传递给svm learn方法?
提前谢谢!!
答案 0 :(得分:2)
训练数据应以三元组列表的形式传递,格式如下:
(<label>, [(<feature>, <value>), ...], <queryid>)
来源:https://pypi.python.org/pypi/svmlight
我必须编写类似于Load svmlight format error中提到的解析器,以将SVMLight文件中的数据转换为上述格式。
希望这会有所帮助!!