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 = 0;
    FILE   *fp;
    fp = fopen(outfile.c_str(), "w+"); //train_samples\\train_lbp.txt
    long hFile;//int nn=0;
    for (int nsamp = 0; 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, 32, 64);
                int scale_flag = SCALE_LBP_FEATURES;
                CvMat* lbp_feats = LBP_features(standarImg, 8, 8, 4, scale_flag);

                if (scale_flag == SCALE_LBP_FEATURES)
                {
                    double*pData = (double*)(lbp_feats->data.db);
                    fprintf(fp, "%d ", char_class[nsamp]); //写入样本类别 

                    for (int i = 0; i < lbp_feats->cols * lbp_feats->rows; i++)
                    {
                        if (pData[i] != 0.)
                            fprintf(fp, "%d%s%g ", i + 1, ":", pData[i]);   //按格式写入特征
                    }

                    fprintf(fp, "\t\n");
                }
                else
                {
                    uchar*pData = (uchar*)(lbp_feats->data.ptr);
                    fprintf(fp, "%d ", char_class[nsamp]); //写入样本类别 

                    for (int i = 0; i < lbp_feats->cols * lbp_feats->rows; i++)
                    {
                        if (pData[i] != 0.)
                            fprintf(fp, "%d%s%d ", i + 1, ":", pData[i]);   //按格式写入特征
                    }

                    fprintf(fp, "\t\n");
                }

                cvReleaseMat(&lbp_feats);
                cvReleaseImage(&pBImg);
                cvReleaseImage(&standarImg);
                cvReleaseImage(&pImg);
            }
        } while (_findnext(hFile, &img_file) == 0);
        _findclose(hFile);
    }
    fclose(fp);
    printf("total samples = %d\n", itatol);
    return itatol;
}

以上。

时间: 2024-10-12 15:31:45

libsvm的数据格式及制作的相关文章

libSVM的数据格式

首先介绍一下 libSVM的数据格式 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:

LibSvm标签问题

今天在做SVM恶意程序检测算法研究的过程中,由于libsvm输入要求的数据格式是lable index:value,训练数据标签和特征值索引和值是确定的,顺利生成模型,然而测试集数据标签是未知的,是需要得到的分类信息,此时比较迷惑,查找相关资料.得以解答:测试集的标签随意写上,它主要是用来测试模型的效果的,具体如下. 首先用svm(libsvm,lssvm.hssvm)等等进行分类预测,要进行三个步骤1.训练 2.测试 3.预测1.训练——大家都知道,就是用训练数据集,不管你采用那种寻优方式,得

Libsvm在python中的使用

LIBSVM是台湾大学林智仁(LinChih-Jen)教授等开发设计的一个简单.易于使用和快速有效的SVM模式识别与回归的软件包,他不但提供了编译好的可在Windows系列系统的执行文件,还提供了源代码,方便改进.修改以及在其它操作系统上应用:该软件对SVM所涉及的参数调节相对比较少,提供了很多的默认参数,利用这些默认参数可以解决很多问题:并提供了交互检验(Cross Validation)的功能.该软件包可在http://www.csie.ntu.edu.tw/~cjlin/免费获得.该软件可

libsvm的使用(exe版和matlab版本)

libsvm是台湾国立大学的林智仁开发的svm工具箱,有matlab,C++,python,java的接口.本文对exe版本和matlab版本的使用进行说明. libsvm可以在 http://www.csie.ntu.edu.tw/~cjlin/libsvm/ 官网上进行下载,我下载的是libsvm-3.12 exe 版本 libsvm的exe版本在windows文件夹下,主要包含3个exe, svm-train.exe,  svm-scale.exe,  svm-predict.exe (1

LibSVM学习

原文:http://blog.csdn.net/passball/article/details/7673725 代码文件主要针对Matlab进行说明,但个人仍觉得讲解的支持向量机内容非常棒,可以做为理解这一统计方法的辅助资料; LibSVM是台湾林智仁(Chih-Jen Lin)教授2001年开发的一套支持向量机的库,这套库运算速度还是挺快的,可以很方便的对数据做分类或回归.由于libSVM程序小,运用灵活,输入参数少,并且是开源的,易于扩展,因此成为目前国内应用最多的SVM的库. 这套库可以

libsvm学习(三)——libsvm使用规范(转)

其实,这部分写也是多余,google一下“libsvm使用”,就会N多的资源,但是,为了让你少费点心,在这里就简单的介绍一下,有不清楚的只有动动你的mouse了.需要说明的是,2.89版本以前,都是svmscale.svmtrain和svmpredict,最新的是svm-scale.svm-train和svm-predict,要是用不习惯,只需要把那四个exe文件名去掉中间的短横线,改成svmscale.svmtrain和svmpredict就可以了,我们还是按原来函数名的讲. 1. libSV

Python基于机器学习方法实现的电影推荐系统

推荐算法在互联网行业的应用非常广泛,今日头条.美团点评等都有个性化推荐,推荐算法抽象来讲,是一种对于内容满意度的拟合函数,涉及到用户特征和内容特征,作为模型训练所需维度的两大来源,而点击率,页面停留时间,评论或下单等都可以作为一个量化的 Y 值,这样就可以进行特征工程,构建出一个数据集,然后选择一个合适的监督学习算法进行训练,得到模型后,为客户推荐偏好的内容,如头条的话,就是咨询和文章,美团的就是生活服务内容. 可选择的模型很多,如协同过滤,逻辑斯蒂回归,基于DNN的模型,FM等.我们使用的方式

如何转成libsvm支持的数据格式并做回归分析

本次实验的数据是来自老师给的2006-2008年的日期,24小时的温度.电力负荷数据,以及2009年的日期,24小时的温度数据,目的是预测2009年每天24小时的电力负荷,实验数据本文不予给出. 用libsvm进行预测的步骤大体是:将数据进行归一化处理,并转换成livsvm需要的格式,然后进行参数择优,用选的最佳参数使用2006-2008 3年的数据建立模型,再用该模型预测2009年的电力负荷.实际过程中,我先用2006-2007年的数据建模,预测2008年的数据,以得到测试误差.事实证明,用2

目标检测lmdb数据格式制作

一.任务 现在用caffe做目标检测一般需要lmdb格式的数据,而目标检测的数据和目标分类的lmdb格式的制作难度不同.就目标检测来说,例如准备SSD需要的数据,一般需要以下几步: 1.准备图片并标注groundtruth 2.将图像和txt格式的gt转为VOC格式数据 3.将VOC格式数据转为lmdb格式数据 本文的重点在第2.3步,第一步标注任务用小代码实现即可.网络上大家制作数据格式一般是仿VOC0712的,建立各种目录,很麻烦还容易出错,现我整理了一下代码,只要两个代码,就可以从图片+t