libsvm数据格式


31

我正在使用libsvm(http://www.csie.ntu.edu.tw/~cjlin/libsvm/)工具进行支持向量分类。但是,我对输入数据的格式感到困惑。

从自述文件:

训练和测试数据文件的格式为:

<label> <index1>:<value1> <index2>:<value2> ...
.
.
.

每行包含一个实例,并以“ \ n”字符结尾。对于分类,<label>是指示类标签的整数(支持多类)。为了回归,<label>目标值可以是任何实数。对于一类SVM,不使用它,因此可以是任何数字。该对<index>:<value>提供一个特征(属性)值:<index>是一个从1开始的整数,<value> 是一个实数。唯一的例外是预先计算的内核, <index>从0开始;请参阅预计算内核部分。索引必须按升序排列。测试文件中的标签仅用于计算准确性或错误。如果未知,则在第一列中填入任何数字。

我有以下问题:

  1. 有什么用<index>?它有什么作用?
  2. 不同数据实例的相同索引值之间是否存在对应关系?
  3. 如果我错过/跳过两者之间的索引怎么办?

我问是因为libsvm的软件包中包含的数据文件* heart_scale *在第12行中,索引从2开始。<value>索引1 的for 是否被视为未知/丢失?注意:软件包随附的tools / checkdata.py工具表示* heart_scale *文件正确。

Answers:


23

此链接应该有帮助:http : //www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html#/Q3 : _Data_preparation

提到数据是以稀疏数组/矩阵形式存储的。从本质上讲,这意味着仅存储非零数据,而任何丢失的数据都将作为保持值零。对于您的问题:

a)索引仅用作区分特征/参数的一种方式。就超空间而言,它只是指定每个组件:例如:3-D(3个特征)索引1,2,3将对应于x,y,z坐标。

b)对应关系仅仅是数学上的,在构造超平面时,这些作为坐标。

c)如果您在两者之间跳过一个,则应将其分配为默认值零。

简而言之,+1 1:0.7 2:1 3:1转换为:

将点(0.7,1,1)分配给+1类。


4

只是小而快速的指南:

LibSVM格式意味着您的文档需要进行预处理。您需要知道将使用多少个分类类(最有可能是2个)和特征空间。

分类类就像是对/错;0,1,...在这里,您需要将其转换为整数(例如0,1)。

特征空间是用于多维数据的空间。每个功能(向量)应具有自己的ID(索引)及其值。例如1:23.2表示特征/维度1的值为23.2

<label> <index1>:<value1> <index2>:<value2> ... <indexN>:<valueN>
...
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.