4

对于 LibSVM。

在“支持向量分类的实用指南”中,建议使用 m 数来表示 m 类别属性。例如 {red, green, blue} 可以表示为 (0,0,1), (0,1,0), (1,0,0)。

但在 README 中,它说 index:value 对中的 value 只能采用实数。

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

4

2 回答 2

3

这对于 libsvm 来说不是必需的,因为它使用一对一的方法来训练 SVM(事实上,在他们的文档中,他们向您推荐了一篇研究文章,其中将一对一与一对一进行了比较并且表现更好)。如果您有 4 个类别 a、b、c、d,libsvm 实际上在内部创建 6 个 svm,一个用于 a verses b,一个用于 a verses c,一个用于 a verses d,一个用于 b vs d,一个用于 c verses d。当被要求进行分类时,它运行所有 6 个并使用投票系统来确定获胜类别。这实际上比仅使用 (1,0,0,..) (0,1,0..) 类别输入要好。

如果您查看 libsvm 数据示例中的示例数据集。您将看到您为每个类别分配了一个整数,并且该整数位于条目的前面,然后跟随该数据元素的值向量的每个元素,例如,如果我有 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

其价值(如果我是正确的)是在一些数据量非常大的问题中,大部分条目为零。

于 2010-09-09T21:10:57.510 回答
0

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

标签重量 红色 绿色 蓝色

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

于 2015-12-28T15:01:54.767 回答