对于 LibSVM。
在'A Practical Guide to Support Vector Classification'中建议使用m数来表示m-category属性。例如 {red, green, blue} 可以表示为 (0,0,1), (0,1,0), (1,0,0)。
但是在自述文件中,它说 index:value 对中的 value 只能采用实数。
任何人都知道如何在数据文件中表示(0,0,1)?
最佳答案
这对于 libsvm 不是必需的,因为它使用一对一的 SVM 训练方法(实际上,在他们的文档中,他们向您推荐了一篇研究文章,其中将一对一与一对一进行了比较并且表现更好)。如果您有 4 个类别 a,b,c,d,libsvm 实际上在内部创建了 6 个 svm,一个用于 a 节 b,一个用于 a 节 c,一个用于 a 节 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) 属于 class 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
其值(value)(如果我是对的)是在一些数据量非常大的问题中,大量条目为零。
关于libsvm - 分类特征,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3623267/