LIBSVM之一

  • libSVM简单的介绍

libSVM是台湾林智仁(Chih-Jen Lin) 教授2001年开发的一套支持向量机库,这套库运算速度挺快,可以很方便的对数据做分类或回归。由于libSVM程序小,运用灵活,输入参数少,并且是开源的,易于扩展,因此成为目前国内应用最多的SVM的库。

  • 其中包含的文件夹的主要的作用

(1)Java文件夹  ,主要应用于java平台;

(2)Python文件夹,是用来参数优选的工具,稍后介绍;

(3)tools文件夹,主要包含四个python文件,用来数据集抽样(subset),参数优选(grid),集成测试(easy), 数据查(checkdata);

(4)windows文件夹 —— 包含libSVM四个exe程序包,我们所用的库就是他们,里面还有个heart_scale,是一 个样本文件,测试可用的数据集,可以用 记事本打开,用来测试用的,svm-train用来训练数据的,其中所用的参数的含义:

svm-train [options] training_set_file [model_file]

-s 设置svm类型:

0 – C-SVC  ;1 – v-SVC  ; 2 – one-class-SVM  ; 3 – ε-SVR  ;  4 – n - SVR

-t 设置核函数类型,默认值为2

0 -- 线性核:u‘*v  ;                     1 -- 多项式核: (g*u‘*v+ coef 0)degree

2 -- RBF 核:exp(-γ*||u-v||2)       3 -- sigmoid 核:tanh(γ*u‘*v+ coef 0)

-d degree: 设置多项式核中degree的值,默认为3

-gγ: 设置核函数中γ的值,默认为1/k,k为特征(或者说是属性)数;

-r coef 0:设置核函数中的coef 0,默认值为0;

-c cost:设置C-SVC、ε-SVR、n - SVR中从惩罚系数C,默认值为1;

-n v :设置v-SVC、one-class-SVM 与n - SVR 中参数n ,默认值0.5;

-p ε :设置v-SVR的损失函数中的e ,默认值为0.1;

-m cachesize:设置cache内存大小,以MB为单位,默认值为40;

-e ε :设置终止准则中的可容忍偏差,默认值为0.001;

-h shrinking:是否使用启发式,可选值为0 或1,默认值为1;

-b 概率估计:是否计算SVC或SVR的概率估计,可选值0 或1,默认0;

-wi weight:对各类样本的惩罚系数C加权,默认值为1;

-v n:n折交叉验证模式;

SVM-predict用来预测的,用法如下:

svmpredict [options] test_file model_file output_file

如下使用:

svm-scale是用来对原始样本进行缩放的,范围可以自己定,一般为[0,1]或者[-1,1],防止某个特征过大或者过小,在训练中起的作用不平衡,在核函数计算中会用到内积或者exp运算,不平衡的数据可能造成计算困难,对于其中所用的一些参数汇总如下:

用法:svm-scale [-l lower] [-u upper]

[-y y_lower y_upper]

[-s save_filename]

[-r restore_filename] filename

其中,[]中都是可选项:-l:设定数据下限;lower:设定的数据下限值,缺省为-1 ;-u设定数据上限;upper:设定的数据上限值,缺省为 1;-y:是否对目标值同时进行缩放;y_lower为下限值,y_upper为上限值;  -s save_filename:表示将缩放的规则保存为文件save_filename;  -r restore_filename:表示将按照已经存在的规则文件restore_filename进行缩放;   filename:待缩放的数据文件,文件格式按照libSVM格式。 默认情况下,只需要输入要缩放的文件名就可以了:比如(已经存在的文件为)heart_scale。比如:svmscale –l 0 –u 1 –s

。  svm-toy文件,一个可视化的工具,用来展示训练数据和分类界面,里面是源码,其编译后的程序在windows文件夹下,可以形象化的展示分类页面;

(6)heart_scale文件,是测试用的训练文件,训练集文件

(7)其他.h和.cpp文件都是程序的源码,可以编译出相应的.exe文件。其中,最重要的是svm.h和svm.cpp文件,svm-predict.c、svm-scale.c和svm-train.c(还有一个svm-toy.c在svm-toy文件夹中)都是调用的这个文件中的接口函数,编译后就是windows下相应的四个exe程序。另外,里面的 README 跟 FAQ 是很好的帮助文件。

train后得到的结果其中的一些参数iter迭代的次数,nu你选择的核函数类型的参数,obj为SVM文件转换为的二次规划求解得到的最小值,rho为判决函数的偏置项b,nSV 为标准支持向量个数(0<a<c),nBSV为边界上的支持向量个数(a=c),Total nSV为支持向量总个数(对于两类来说,因为只有一个分类模型Total nSV = nSV,但是对于多类,这个是各个分类模型的nSV之和)。

怎样使用tools下的grid文件:

第一步:打开d:/libsvm/program下的tools文件夹,找到grid.py文件。用python打开(不能双击,而要右键选择“Edit with IDLE”),修改svmtrain_exe和gnuplot_exe的路径。

svmtrain_exe = r"I:\code\libsvm-3.20\libsvm-3.20\windows\svm-train.exe‘

gnuplot_exe = r"D:\gnuplot\install\gnuplot\bin\pgnuplot.exe‘

(这里面有一个是对非win32的,可以不用改,只改# example for windows下的就可以了)

第二步:运行cmd,进入dos环境,定位到d:/libsvm/program/tools文件夹,这里是放置grid.py的地方。怎么定位可以参看第一节。

第三步:输入以下命令:

python grid.py heart_scale

你就会看到dos窗口中飞速乱串的[local]数据,以及一个gnuplot的动态绘图窗口。大约过10秒钟,就会停止。Dos窗口中的[local]数据时局部最优值,这个不用管,直接看最后一行:

2048.0 0.0001220703125 84.0741

其中这一行数据的含义是

C = 2048.0;γ=0.0001220703125

交叉验证精度CV Rate = 84.0741%,这就是最优结果

利用上面的结果,进行train得到

语句是:

得到的结果是:

迭代次数1129,支持向量的个数103,边界上的支持向量的个数91,

这是优化之前的结果,优化之前的支持向量个数多,边界上的支持向量从107降到了91,说明在优化以前边界向量由10多个错误分类

  • 怎样使用tools下的easy.py文件呢?

文件easy.py对样本文件做了“一条龙服务”,从参数优选,到文件预测。因此,其对grid.py、svm-train、svm-scale和svm-predict都进行了调用(当然还有必须的python和gnuplot)其余做法和grid.py的做法是类似的,还是要改.exe文件的位置

时间: 2024-12-16 07:07:46

LIBSVM之一的相关文章

在python下学习libsvm

1.下载libsvm,python,gnuplot(链接网上全有,压缩包自己保留着) 2.在python上的实现(主要用截图的形式展现) (1)输入命令寻求最优参数 (2) 参数c,g输出结果 gnuplot输出图像 (3)最后输入训练数据,训练数据,通过建立模型进行预测 大概也就这样了,grid.py里面需要改下gnuplot的路径 在python下学习libsvm,布布扣,bubuko.com

libsvm的数据格式及制作

1.libsvm数据格式 libsvm使用的训练数据和检验数据文件格式如下: [label] [index1]:[value1] [index2]:[value2] … [label] [index1]:[value1] [index2]:[value2] … label  目标值,就是说class(属于哪一类),就是你要分类的种类,通常是一些整数. index 是有顺序的索引,通常是连续的整数.就是指特征编号,必须按照升序排列 value 就是特征值,用来train的数据,通常是一堆实数组成.

LibSVM之C# Wrapper

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

MATLAB安装libsvm无法使用解决办法(转)

buaasuozi  这是原作者: 安装libsvm 不成功有可能是你的MATLAB版本或者是编译文件版本的问题,但是不要急着换其他版本....说不定就有别的解决办法呢 首先感谢Lin教授及其实验室提供的libsvm工具箱,原始下载地址:下载主页:http://www.csie.ntu.edu.tw/~cjlin/libsvm/       下载地址:http://www.csie.ntu.edu.tw/~cjlin/libsvm/#download 原本我使用的是libsvm-3.01版本,但

LibSvm标签问题

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

机器学习 libsvm交叉验证与网格搜索(参数选择)

首先说交叉验证. 交叉验证(Cross validation)是一种评估统计分析.机器学习算法对独立于训练数据的数据集的泛化能力(generalize), 能够避免过拟合问题. 交叉验证一般要尽量满足: 1)训练集的比例要足够多,一般大于一半 2)训练集和测试集要均匀抽样 交叉验证主要分成以下几类: 1)Double cross-validation Double cross-validation也称2-fold cross-validation(2-CV),作法是将数据集分成两个相等大小的子集

解密SVM系列(五):matlab下libsvm的简单使用

本节简单介绍一下libsvm的使用方法.关于libsvm似乎曾经使用过,那个时候主要用libsvm进行简单的人脸识别实验.当时还翻译过关于libsvm里面的matlab英文文档 那么现在最新版本的libsvm为3.2.0,下载地址如下: http://www.csie.ntu.edu.tw/~cjlin/libsvm/ 下载下来的libsvm其实包含好多个平台的工具箱软件,c++,matlab,java,python都有.他们的函数使用方法是一样的. 那么在下载完以后,点击里面的matlab下平

Python 之 LIBSVM 使用小结(三)

准备数据:一种方法是通过svm_read_problem方法直接读取libsvm格式的文件,返回分类标签([])和数据([[]]).如:labels, datas =svm_read_problem('filename') ,还有一种方法是直接python格式的,这种方法适用于在程序执行过程中动态产生的data,我要用到的就是这种,没必要把大量的数据都写入文件(这两天搞infominer算法挖掘序列数据模式并看预测效果是个苦力活呀).python的libsvm处理数据也分为两种,一种是特征值连续

用libsvm进行回归预测

最近因工作需要,学习了台湾大学林智仁(Lin Chih-Jen)教授等人开发的SVM算法开源算法包. 为了以后方便查阅,特把环境配置及参数设置等方面的信息记录下来. SVM属于十大挖掘算法之一,主要用于分类和回归.本文主要介绍怎么使用LIBSVM的回归进行数值预测. LIBSVM内置了多种编程语言的接口,本文选择Python. 1  LIBSVM官方网址 http://www.csie.ntu.edu.tw/~cjlin/libsvm/ 可在这里下载LIBSVM的开源包,特别推荐初学者阅读文章A