libsvm的数据格式及制作
1、libsvm数据格式
libsvm使用的训练数据和检验数据文件格式如下:
[label] [index1]:[value1] [index2]:[value2] … [label] [index1]:[value1] [index2]:[value2] …
label 目标值,就是说class(属于哪一类),就是你要分类的种类,通常是一些整数。
index 是有顺序的索引,通常是连续的整数。就是指特征编号,必须按照升序排列
value 就是特征值,用来train的数据,通常是一堆实数组成。
即:
目标值 第一维特征编号:第一维特征值 第二维特征编号:第二维特征值 … 目标值 第一维特征编号:第一维特征值 第二维特征编号:第二维特征值 … …… 目标值 第一维特征编号:第一维特征值 第二维特征编号:第二维特征值 …
例如:5 1:0.6875 2:0.1875 3:0.015625 4:0.109375
表示训练用的特征有4维,第一维是0.6875,第二维是0.1875,第三维是0.015625,第四维是0.109375 目标值是5
注意:训练和测试数据的格式必须相同,都如上所示。测试数据中的目标值是为了计算误差用。
2、libsvm数据格式制作
该过程可以自己使用excel或者编写程序来完成,也可以使用网络上FormatDataLibsvm.xls来完成。FormatDataLibsvm.xls使用说明:
a.先将数据按照下列格式存放(注意label放最后面):
value1 value2 … label value1 value2 … label … value1 value2 … label
b.然后将以上数据粘贴到FormatDataLibsvm.xls中的最上角单元格,接着工具->宏->执行FormatDataToLibsvm宏。就可以得到libsvm要求的数据格式。
当然最方便的还是用程序生成,我这里有一个提取指定文件夹内各类样本文件夹内的图片的lbp特征值,并组织成libsvm所需的数据格式,写入txt文件中的程序:
/*Function:int prepareFeatsData(string samples_path, string outfile, char* class_samples, uchar* char_class, int nclass, string extens)
Features:
对指定的样本(数字和字母)的路径下的各个指定的样本文件进行特征提取,
连同类编号依次存入outfile指定文件中。
Attention:
注意_finddata_t结构体和_findfirst函数的用法
in-parameter:
samples_path:所有样本归属的文件夹
outfile:提取特征后写入的文件
class_samples:各个样本的文件夹标记
char_class:各样本的类别标记
nclass:有多少类样本
extens:样本文件的后缀扩展名(例如:"*.png")
out-parameter:
Return : 处理的样本总数
Author: Mengjia Date:2017-1-5 16:05:47
*/
int prepareFeatsData(string samples_path, string outfile, char* class_samples, uchar* char_class, int nclass, string extens)
{
int itatol = ;
FILE *fp;
fp = fopen(outfile.c_str(), "w+"); //train_samples\\train_lbp.txt
long hFile;//int nn=0;
for (int nsamp = ; nsamp < nclass; nsamp++)
{
string cur_folder = samples_path;
cur_folder += '\\';
cur_folder += class_samples[nsamp];//样本的文件夹标记
cur_folder += '\\';
string findfile = cur_folder;
findfile += extens;//所要寻找的文件格式全路径 struct _finddata_t img_file; if ((hFile = _findfirst(findfile.c_str(), &img_file)) == -1L)//"rawdata/*.png"
{
printf("no %s files in directory :%s\n", extens.c_str(), findfile.c_str());
//printf(findfile.c_str());
}
do
{
string filename = cur_folder;
filename += img_file.name;
IplImage* pImg = cvLoadImage(filename.c_str(), CV_LOAD_IMAGE_UNCHANGED);
if (pImg)
{ //nn++;
itatol++;
IplImage* pBImg = alignmentImg(pImg);
IplImage* standarImg = sizeNormalization(pBImg, , );
int scale_flag = SCALE_LBP_FEATURES;
CvMat* lbp_feats = LBP_features(standarImg, , , , scale_flag); if (scale_flag == SCALE_LBP_FEATURES)
{
double*pData = (double*)(lbp_feats->data.db);
fprintf(fp, "%d ", char_class[nsamp]); //写入样本类别 for (int i = ; i < lbp_feats->cols * lbp_feats->rows; i++)
{
if (pData[i] != .)
fprintf(fp, "%d%s%g ", i + , ":", pData[i]); //按格式写入特征
} fprintf(fp, "\t\n");
}
else
{
uchar*pData = (uchar*)(lbp_feats->data.ptr);
fprintf(fp, "%d ", char_class[nsamp]); //写入样本类别 for (int i = ; i < lbp_feats->cols * lbp_feats->rows; i++)
{
if (pData[i] != .)
fprintf(fp, "%d%s%d ", i + , ":", pData[i]); //按格式写入特征
} fprintf(fp, "\t\n");
} cvReleaseMat(&lbp_feats);
cvReleaseImage(&pBImg);
cvReleaseImage(&standarImg);
cvReleaseImage(&pImg);
}
} while (_findnext(hFile, &img_file) == );
_findclose(hFile);
}
fclose(fp);
printf("total samples = %d\n", itatol);
return itatol;
}
以上。
libsvm的数据格式及制作的更多相关文章
- libSVM的数据格式
首先介绍一下 libSVM的数据格式 Label 1:value 2:value -. Label:是类别的标识,比如上节train.model中提到的1 -1,你可以自己随意定,比如-10,0,15 ...
- 在python中的使用Libsvm
http://blog.csdn.net/pipisorry/article/details/38964135 LIBSVM是台湾大学林智仁(LinChih-Jen)教授等开发设计的一个简单.易于使用 ...
- Libsvm Java
在java环境下用Libsvm包解决一个多分类问题. 1.将训练数据和测试数据按照libsvm的数据格式存放 可以写程序直接构造,libsvm的数据格式如下 Label 1:value 2:value ...
- LibSVM学习详细说明
代码文件主要针对Matlab进行说明,但个人仍觉得讲解的支持向量机内容非常棒,可以做为理解这一统计方法的辅助资料; LibSVM是台湾林智仁(Chih-Jen Lin)教授2001年开发的一套支持向量 ...
- Python下的LibSVM的使用
突然觉的笔记真的很重要,给自己省去了很多麻烦,之前在Python 3 中装过libsvm 每一步都是自己百度上面搜寻的,花费了很长时间,但是并没有记录方法.这次换了电脑,又开始重新搜寻方法,觉得太浪费 ...
- 关于印发利用DEM确定耕地坡度分级技术规定(试行)的通知
下载:http://files.cnblogs.com/files/gisoracle/%E5%88%A9%E7%94%A8DEM%E7%A1%AE%E5%AE%9A%E8%80%95%E5%9C%B ...
- FM算法(二):工程实现
主要内容: 实现方法 Python实现FM算法 libFM 一.实现方法 1.FM模型函数 变换为线性复杂度的计算公式: 2.FM优化目标 根据不同的应用,FM可以采用不同的损失函数loss fu ...
- SVM支持向量机推导,工具介绍及python实现
支持向量机整理 参考: Alexandre KOWALCZYK大神的SVM Tutorial http://blog.csdn.net/alvine008/article/details/909711 ...
- Orange的数据挖掘工具入门使用
Orange的数据挖掘工具入门使用 声明: 1)本报告由博客园bitpeach撰写,版权所有,免费转载,请注明出处,并请勿作商业用途. 2)若本文档内有侵权文字或图片等内容,请联系作者bitpeach ...
随机推荐
- 给jquery-validation插件添加控件的验证回调方法
jquery-validation.js在前端验证中使用起来非常方便,提供的功能基本上能满足大部分验证需求,例如:1.内置了很多常用的验证方法:2.可以自定义错误显示信息:3.可以自定义错误显示位置: ...
- 控制反转、依赖注入、Unity容器
控制反转原则 依赖注入 Install-Package Unity:https://www.nuget.org/packages/Unity/ Github:https://github.com/un ...
- C#基础知识八之访问修饰符
1. 类的访问修饰符 修饰符 访问权限 无或者internal 只能在同一个程序集中访问类 public 同一个程序集或引用该程序集的外部都可访问类 abstract或internal abstra ...
- Unity 3D json嵌套使用以及多种类型匹配
我们控制端要发送很多命令给终端设备,其中有速度,方向,开关门,开关灯....方法千万种,我只取一瓢.我还小,不知道其他人是怎么写的.我喜欢把有规律的东西放在一起写!为了我的强迫症! using Uni ...
- CentOS下安装hadoop
CentOS下安装hadoop 用户配置 添加用户 adduser hadoop passwd hadoop 权限配置 chmod u+w /etc/sudoers vi /etc/sudoers 在 ...
- asp.net dataTable转换成Json格式
/// <summary> /// dataTable转换成Json格式 /// </summary> /// <param name="dt"> ...
- DevExpress.XtraGrid.view.gridview 属性说明
本文摘自: http://www.cnblogs.com/-ShiL/archive/2012/06/08/ShiL201206081335.html (一)双击展开,收缩字表 ExpandedChi ...
- linux添加启动器图标(Ubuntu为例)
添加启动器图标,以eclipse为例,%表示命令提示符,shell命令:%nano /usr/share/applications/eclipse.desktop-----------[Deskto ...
- ThinkPHP 整合Bootstrap Ajax分页
ThinkPHP Ajax分页代码 publicfunction index() { $where=array(); $name = I('name'); if(!empty($name)){ $wh ...
- Android 自定义控件之继承ViewGroup创建新容器
欢迎大家来学习本节内容,前几节我们已经学习了其他几种自定义控件,分别是Andriod 自定义控件之音频条及 Andriod 自定义控件之创建可以复用的组合控件还没有学习的同学请先去学习下,因为本节将使 ...