对于LibSVM。
在“支持向量分类的实用指南”中,建议使用m数来表示m-category属性。例如,{red,green,blue}可以表示为(0,0,1),(0,1,0),(1,0,0)。
但在README中,它表示索引中的值:值对只能取实数。
任何人都知道如何在数据文件中表示(0,0,1)?
答案 0 :(得分:3)
这对libsvm来说不是必需的,因为它使用一对一的方法来训练SVM(事实上,在他们的文档中,他们将您引用到一篇研究文章中,其中一对一与一对一进行比较并且表现更好)。如果你有4个类别a,b,c,d libsvm实际上在内部创建6个svms,一个用于b的经文,一个用于经文c,一个用于经文d,一个用于b与d,一个用于c经文d。当被要求进行分类时,它全部运行6并使用投票系统来确定获胜类别。这实际上比仅使用(1,0,0,..)(0,1,0 ..)类别输入要好。
如果你看一下样本数据集 libsvm data examples。您将看到为每个类别分配一个整数,并且该整数位于条目的前面,然后跟随该数据元素的值向量的每个元素如下:如果我有5个类的数据,每个数据元素有3个向量和数据向量 (3.3,1.5,0.5,7.3,3.5)属于第4类,我的数据文件的一行看起来像
4 1:3.3 2:1.5 3:0.5 4:7.3 5:3.5
这真的很丑陋,但我认为这是因为他们正在使用一种约会,其中零矢量条目被删除,例如如果向量(.5,0,0,0,.7)在类别2中,则相应的数据行将是(我认为)
2 1:.5 5:.7
它的价值(如果我是正确的)是在大量数据的一些问题中,大量条目是零。
答案 1 :(得分:0)
如果分类属性可以有3个值(例如红色,绿色,蓝色),那么根据libsvm指南,数据文件中将有3个功能。假设另一个特征权重,您的编码将如下所示,重量为100个单位,颜色=绿色。
标签重量为红绿蓝
+1 1:100 2:0 3:1 4:0