libsvm使用
来源:互联网 发布:软件项目管理实践 编辑:程序博客网 时间:2024/04/30 01:53
from:blog.163.com/luo_zi_xuan/blog/static/19035126820116217751791/
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:-0.3333
表明第2个特征值为0,从编程的角度来说,这样做可以减少内存的使用,并提高做矩阵内积时的运算速度。我们平时在matlab中产生的数据都是没有序号的常规矩阵,所以为了方便最好编一个程序进行转化。
svmscale的用法:
svmscale是用来对原始样本进行缩放的,范围可以自己定,一般是[0,1]或[-1,1]。
缩放的目的主要是:
1)防止某个特征过大或过小,从而在训练中起的作用不平衡;
2)为了计算速度。因为在核计算中,会用到内积运算或exp运算,不平衡的数据可能造成计算困难。
用法:
svmscale [-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格式。
默认情况下,只需要输入要缩放的文件名就可以了:比如(已经存在的文件为test.txt)
svmscale test.txt
这时,test.txt中的数据已经变成[-1,1]之间的数据了。但是,这样原来的数据就被覆盖了,为了让规划好的数据另存为其他的文件,我们用一个dos的重定向符 > 来另存为(假设为out.txt):
svmscale test.txt > out.txt
运行后,我们就可以看到目录下多了一个out.txt文件,那就是规范后的数据。
假如,我们想设定数据范围[0,1],并把规则保存为test.range文件:
svmscale –l 0 –u 1 –s test.range test.txt > out.txt
这时,目录下又多了一个test.range文件,可以用记事本打开,下次就可以用-r test.range来载入了。
3. svmtrain的用法:
svmtrain我们在前面已经接触过,他主要实现对训练数据集的训练,并可以获得SVM模型。
用法: svmtrain [options] training_set_file [model_file]
其中,options为操作参数,可用的选项即表示的涵义如下所示:
-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折交叉验证模式;
model_file:可选项,为要保存的结果文件,称为模型文件,以便在预测时使用。
默认情况下,只需要给函数提供一个样本文件名就可以了,但为了能保存结果,还是要提供一个结果文件名,比如:test.model,则命令为:
svmtrain test.txt test.model
结果说明见LibSVM学习(二)。
4. svmpredict 的用法:
svmpredict 是根据训练获得的模型,对数据集合进行预测。
用法:svmpredict [options] test_file model_file output_file
其中,options为操作参数,可用的选项即表示的涵义如下所示:
-b probability_estimates——是否需要进行概率估计预测,可选值为0 或者1,默认值为0。
model_file ——是由svmtrain 产生的模型文件;
test_file—— 是要进行预测的数据文件,格式也要符合libsvm格式,即使不知道label的值,也要任意填一个,svmpredict会在output_file中给出正确的label结果,如果知道label的值,就会输出正确率;
output_file ——是svmpredict 的输出文件,表示预测的结果值。
至此,主要的几个接口已经讲完了,满足一般的应用不成问题。对于要做研究的,还需要深入到svm.cpp文件内部,看看都做了什么。
/*************************预前准备**************************/
/*************************方法一****************************/
Svm_train-------> Svm_predict
基本上就上面两个步骤,可以使用svm_scale来缩放样本的,用grid.py来进行参数优化
/**************************方法一**************************/
/*************************grid.py 用法**********************/
文件grid.py是对C-SVC的参数c和γ做优选的,原理也是网格遍历,假设我们要对目录d:\libsvm\program\tools下的样本文件heart_scale做优选,其具体用法为:
第一步:打开d:\libsvm\program下的tools文件夹,找到grid.py文件。用python打开(不能双击,而要右键选择“Edit with IDLE”),修改svmtrain_exe和gnuplot_exe的路径。
svmtrain_exe = r"D:\libSVM\program\svm-train.exe"
gnuplot_exe = r"D:\libSVM\gnuplot\pgnuplot.exe"
(这里面有一个是对非win32的,可以不用改,只改# example for windows下的就可以了)
第二步:运行cmd,进入dos环境,定位到d:\libsvm\program\tools文件夹,这里是放置grid.py的地方。怎么定位可以参看第一节。
第三步:输入以下命令:
d:\libsvm\python26\python grid.py heart_scale
你就会看到dos窗口中飞速乱串的[local]数据,以及一个gnuplot的动态绘图窗口。大约过10秒钟,就会停止。Dos窗口中的[local]数据时局部最优值,这个不用管,直接看最后一行:
2048.0 0.0001220703125 84.0741
其意义表示:C = 2048.0;γ=0.0001220703125(γ是哪个参数?参看LibSVM学习(三)中svmtrain的参数说明);交叉验证精度CV Rate = 84.0741%,这就是最优结果。
第四步:打开目录d:\libsvm\program\tools,我们可以看到新生成了两个文件:heart_scale.out和heart_scale.png,第一个文件就是搜索过程中的[local]和最优数据,第二文件就是gnuplot图像。
现在,grid.py已经运行完了,你可以把最优参数输入到svmtrain中进行训练了。当然了,你在当中某一步很可能出现问题,不过不要紧,我也不是一下子成功的,摸索了半天才成功。下面就需要注意的问题说明一下:
1)grid.py和svm-train的版本要统一,也就是说你不能用2.6的grid.py去调用2.89的svm-train。
2)你的目录中如果有空格,比如d:\program files\ libsvm\...,那么无论是在第一步还是第二步,请把目录改成d:\progra~1\ libsvm\...
3) 第三步的命令问题。首先要看你定位到哪个目录,那么其下的文件就不需要带路径,否则就要带。像我们上面的命令,我当前的目录是d:\libsvm\program\tools,那么其下的easy.py和heart_scale文件就不需要加路径,而python.exe是在d:\libsvm\python26\下,因此不在当前目录下,所以要加路径。比如,当我首先用dos定位到d:\libsvm\python26时,其命令就可以改成:
python d:\libsvm\program\tools\grid.py d:\libsvm\program\tools\heart_scale
总起来说,命令为python 目标文件 样本文件,其原则是要让系统找得到文件。假如系统提示你“不是内部或外部命令”,说明你python的路径错误,而如果是‘not found file’的提示,很可能是其他两个文件路径错误。
4)假如,你仍旧出现问题,那么请换一下python或者gnuplot的版本,目前python最新版本是3.1,但是好像会出问题,老一点的版本2.4或2.5的兼容性会更好。
/**************************grid.py用法**********************/
/**************************方法二**************************/
使用esay.py
/**************************方法二**************************/
/**************************esay.py用法**********************/
文件easy.py对样本文件做了“一条龙服务”,从参数优选,到文件预测。因此,其对grid.py、svm-train、svm-scale和svm-predict都进行了调用(当然还有必须的python和gnuplot)。因此,运行easy.py需要保证这些文件的路径都要正确。当然还需要样本文件和预测文件,这里样本文件还是用heart_scale,预测文件我们复制一份然后改名heart_test,下面说一下使用方法:
第一步:打开easy.py,修改# example for windows下的几个路径:
libsvm学习报告---[摘抄的] - 罗子譞 - Lovers of programmin
第二步:运行cmd,进入dos环境,定位到放置easy.py的目录d:\libsvm\program\tools。
第三步:输入命令:
d:\libsvm\python26\python easy.py heart_scale heat_test
你就会看到一个gnuplot的动态绘图窗口。大约20s以后停止,dos窗口显示为:
Scaling training data...
Cross validation...
Best c=2048.0, g=0.0001220703125 CV rate=84.0741
Training...
Output model: heart_scale.model
Scaling testing data...
Testing...
Accuracy = 85.1852% (230/270) (classification)
Output prediction: heart_test.predict
这就是最终预测结果,可以看到第三行就是调用grid.py的结果。在d:\libsvm\program\tools下你会看到又多了7个文件,都是以前我们碰到的过程文件,都可以用记事本打开。
3. 常见的问题解析:
1)
Scaling training data...
Cross validation...
Traceback (most recent call last):
File "easy.py", line 61, in ?
c,g,rate = map(float,last_line.split())
ValueError: need more than 0 values to unpack
[解析] 说明你的grid.py运行出现错误,你可以参照第一部分“grid.py使用方法”运行一下就会发现问题。另外,有的说是相对路径的问题,建议找到easy.py的以下部分:
cmd = "%s -svmtrain %s -gnuplot %s %s" % (grid_py, svmtrain_exe, gnuplot_exe, scaled_file)
改成
cmd = "%s %s -svmtrain %s -gnuplot %s %s" % (python_path, grid_py, svmtrain_exe, gnuplot_exe, scaled_file)
2)
Traceback (most recent call last)
File "grid.py", line 349, in ?
main()
File "grid.py", line 344, in main
redraw(db)
File "grid.py", line 132, in redraw
gnuplot.write("set term windows\n")
IOError [Errno 22] Invalid argument
[解析] 说明你的gnuplot.exe在调用过程中出现问题,要么是你的路径不对,要么是你的版本不对,请检查。
3)
Traceback (most recent call last):
File "C:\Python24\lib\threading.py", line 442, in __bootstrap
self.run()
File "c:\libsvm\tools\gridregression.py", line 212, in run
self.job_queue.put((cexp,gexp,pexp))
File "C:\Python24\lib\Queue.py", line 88, in put
self._put(item)
File "c:\libsvm\tools\gridregression.py", line 268, in _put
self.queue.insert(0,item)
AttributeError: 'collections.deque' object has no attribute 'insert
[解析] 很显然,你调用的是gridregression.py,其是用来做回归用的。如果你调用easy.py也出现这种问题按照原作者的说法,这里是因为你的python调用出现错误,很可能是版本不对,如果是2.4的版本,请把easy.py中的
self.queue.insert(0,item)
改成
if sys.hexversion >= 0x020400A1:
self.queue.appendleft(item)
else
self.queue.insert(0,item)
/**************************easy.py用法***********************/
- libsvm 使用
- libsvm 使用
- libsvm使用
- LIBSVM使用
- libsvm使用
- LIBSVM使用
- libsvm使用
- libsvm 使用
- libsvm使用
- LibSVM 使用
- libsvm使用
- libsvm使用
- libsvm的使用流程
- LibSVM MATLAB 使用
- libsvm使用(续)
- libsvm使用心得
- 详解LibSVM使用
- libsvm使用笔记[1].
- Perl如何安装新模块/包
- 数据结构实验:哈希表(SDUT 1480)
- JD 1078:二叉树遍历
- C++11 新特性之 nullptr
- 人人,金山西山居,腾讯互娱,微信,网易游戏offer及面经
- libsvm使用
- Latex排版工具的使用(一)
- 基于webrtc技术的session border controler (SBC)
- c++ 中的rand()
- 用PowerShell提取当前IE游览器的网址
- (四)String、List
- app 检查版本更新
- 【天道酬勤】 腾讯、百度、网易游戏、华为Offer及笔经面经
- reactor模式与java nio