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 ...
随机推荐
- 记2016腾讯 TST 校招面试经历,电面、笔试写代码、技术面、hr面,共5轮
(出处:http://www.cnblogs.com/linguanh/) 前序: 距离 2016 腾讯 TST 校招面试结束已经5天了,3月27日至今,目前还在等待消息.从投简历到两轮电面,再到被 ...
- c#编程基础之枚举
枚举的意义就在于限制变量取值范围. 当可以确定的几种取值时才可以用. 如果输入一个字符串需要进行判断是否是我们需要的字符串时,则一般需要这样写: using System; using System. ...
- 深入理解CSS过渡transition
× 目录 [1]定义 [2]过渡属性 [3]持续时间[4]延迟时间[5]时间函数[6]多值[7]阶段[8]触发[9]API 前面的话 通过过渡transition,可以让web前端开发人员不需要jav ...
- jackson简单使用,对象转json,json转对象,json转list
添加jackson依赖: // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core compile g ...
- GO语言下载、安装、配置
一.Go语言下载 go语言官方下载地址:https://golang.org/dl/ 找到适合你系统的版本下载,本人下载的是windows版本.也可以下载Source自己更深层次研究go语言. 二.G ...
- Amazon Interview | Set 27
Amazon Interview | Set 27 Hi, I was recently interviewed for SDE1 position for Amazon and got select ...
- VS资源编辑器常见错误RC1000到RC1208
资源编译器错误RC1000到RC1208 以下主题包括资源编译器错误RC1000至RC1208: 资源编译器致命错误RC1000未知致命错误记下错误的情况下,尝试找出问题,并创建一个重现的测试案例,然 ...
- Mybatis常用总结:参数,返回,执行sql,include等
1.参数注入1.1用#{0},#{1}的形式,0代表第一个参数,1代表第二个参数 public List<RecordVo> queryList(String workerId, Inte ...
- 理解RESTful架构
越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency).高 ...
- switch语句的妙用
switch语句的普通用法很简单,如下: var a = 3; switch (a) { case 1: console.log(a); break; case 2: case 3: console. ...