2010-09-02 186 views
3

对于LibSVM。分类特征

在'支持向量分类实用指南'中,建议使用m数来表示m类别属性。例如{红,绿,蓝}可以表示为(0,0,1),(0,1,0),(1,0,0)。

但在自述文件中,它表示index:value对中的值只能取实数。

任何人都知道如何在数据文件中表示(0,0,1)?

回答

2

这对libsvm并不是必需的,因为它使用了一对一的方法来训练SVMs(事实上,在他们的文档中他们提到了一篇研究文章,其中一对一与一对一相比较,所有和表现更好)。如果你有4个类别a,b,c,d libsvm实际上在内部创建6个svms,一个用于一个经文b,一个用于一个经文c,一个用于一个经文d,一个用于b对d,一个用于c。当被要求做分类时,它全部运行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,0.7)为在第2类对应的数据线将是(我认为)

2 1:0.5 5:0.7

的值(如果我是正确的)是在一些有大量数据的问题中,大部分条目都是零。

0

如果一个分类属性可以有3个值(例如红色,绿色,蓝色),那么根据libsvm指南,数据文件中会有3个特征。假设另一个特征权重,您的编码类似于以下重量为100个单位的+ ve示例,并且颜色=绿色。

标签重量红绿蓝

1 1:100 2:0 3:1 4:0