生成libSVM的数据格式及使用方法

libSVM数据格式:

参考博文:http://blog.csdn.net/kobesdu/article/details/8944851

Label 1:value 2:value ….

Label:是类别的标识,比如上节train.model中提到的1 -1,你可以自己随意定,比如-10015。当然,如果是回归,这是目标值,就要实事求是了。

Value:就是要训练的数据,从分类的角度来说就是特征值,数据之间用空格隔开

比如: -15 1:0.708 2:1056 3:-0.3333

需要注意的是,如果特征值为0,特征冒号前面的(姑且称做序号)可以不连续。如:

       -15 1:0.708 3:-0.3333

表明第2个特征值为0,从编程的角度来说,这样做可以减少内存的使用,并提高做矩阵内积时的运算速度。我们平时在matlab中产生的数据都是没有序号的常规矩阵,所以为了方便最好编一个程序进行转化。

使用FormatDataLibsvm.xls 生成libSVM数据格式

运行FormatDataLibsvm.xls(注意这时会有一个关于“宏已禁宏”的安全警示,点击“选项”,选择“启用此内容”,确定即可);1,先运行FormatDataLibsvm.xls然后将数据粘贴到sheet1topleft单元。

   2 打开data.xls,(注:网上很多的介绍都是直接将数据粘贴到sheet1topleft单元),要特别注意的是这时候的数据排列顺序应该是:

                  条件属性  条件属性 ...  决策属性

                            7     5    ...  2

                            4     2    ...  1

      3"工具"-->""-->执行下面有一个选项(FormatDatatoLibsvm-->执行,要选中这个然后点击“运行” ,这时候数据讲变成:

                 决策属性  条件属性 条件属性 ...

                        2    1:7    2:5    ...

                       1    1:4    2:2    ...

 

等数据转换完成后,将该文件保存为.txt文件。这时数据转换的问题就解决了。

如何使用这些数据

以简单的使用为例

在用libsvm自带的一个例子heart_scale.mat时,一切正常~

load heart_scale.mat(此处无分号)

train = heart_scale_inst;

train_label=heart_scale_label;

test=train;

test_label=train_label;

model=svmtrain(train_label,train,'-c 2 -g 0.01');

[predict_label,accuracy]=svmpredict(test_label,test,model);

但是在我们用自己的例子时出现了问题~

因为train = heart_scale_inst;是用的mat文件的特征列

train_label=heart_scale_label;用的是mat文件的标签列

而我们生成的txt或者mat文件还没有进行赋值所以一开始进行赋值就可以了~

A=[newmat(1:2288,1:3)];%特征列

B=[newmat(1:2288,4)];%标签列

train = A;

train_label=B;

目前只进行了简单的训练以及测试……END



posted on 2014-07-15 08:49  夏鸥易  阅读(3347)  评论(0编辑  收藏  举报

导航