您的位置:首页 > 其它

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

2014-07-15 08:49 471 查看
libSVM数据格式:

参考博文:/article/1473449.html

Label 1:value 2:value ….

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

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然后将数据粘贴到sheet1的topleft单元。

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

条件属性a 条件属性b ... 决策属性

7 5 ... 2

4 2 ... 1

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

决策属性 条件属性a 条件属性b ...

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: