最近学习LIBSVM,下载了libsvm各种版本,本博客中使用310版本。
- LIBSVM数据格式
LIBSVM工具箱中集成了libsvm数据格式读取函数,在子目录matlab下,有源代码libsvmread.c和libsvmwrite.c。LIBSVM需要的数据格式如下:
0 1:-0.961538 2:-0.830769 # 标签列 index:value
0 1:-0.941545 2:-0.778706 # 均为归一化数据
0 1:-0.972158 2:-0.730858 #
1.1 libsvmread.c
打开README文档,发现对于libsvmread函数给出了具体用法。在libsvmread.c中也给出了“Usage”
void exit_with_help()
{
mexPrintf(
“Usage: [label_vector, instance_matrix] = libsvmread(‘filename’);\n”
);
} // label_vector:filename 第一列 , instance_matrix:特征数据
这是简单的应用,具体请看README或者libsvmread.c代码,这里不再赘述。
1.2 libsvmwrite.c
一般情况下,我们需要训练的是一组数据,想要使用LIBSVM还需要进行数据格式转换。使用matlab转换格式首先需要将输入数据转为矩阵,矩阵第一列为数据标签,使用libsvmwrite函数就可以成功转换。
网上有许多使用FormatDataLibsvm.xls工具的,但是又有人测试发现该工具只处理2000行一下数据,想要使用该工具的请参考
http://blog.csdn.net/kobesdu/article/details/8944851
。但我建议还是选择libsvmwrite函数进行libsvm格式转换。
void exit_with_help()
{
mexPrintf(
“Usage: libsvmwrite(‘filename’, label_vector, instance_matrix);\n”
);
}
使用libsvm时最好将instance_matrix归一化,避免过拟合。
- 使用实例
libsvm在工具包中已有示例数据heart_scale,可以直接测试。
[label_vector, instance_matrix] = libsvmread(‘heart_scale’)
libsvmwrite(‘heart_scale’, label_vector, instance_matrix)