LibSVM学习(六)——easy.py和grid.py的使用毕业课题相关 2009-11-11 19:21:57 阅读591 评论0 字号:大中小 订阅 我们在“LibSVM学习(一)”中,讲到libSVM有一个tools文件夹,里面包含有四个python文件,是用来对参数优选的。其中,常用到的是easy.py和grid.py两个文件。其实,网上也有相应的说明,但很不系统,下面结合本人的经验,对使用方法做个说明。 这两个文件都要用python(可以在http://www.上下载到,需要安装)和绘图工具gnuplot(可以在ftp://ftp.gnuplot.info/pub/gnuplot/上下载,不需要安装)。假设python安装在d:\libsvm\tools\python26下,而gnuplot解压到d:\libsvm\tools\gnuplot,libsvm放在了d:\libsvm\program中(这时easy.py和grid.py文件的目录为d:\libsvm\program\tools)。另外,需要注意的是版本,我的是python 2.6、gnuplot 4.2 和libsvm 2.89,操作系统是WINXP。
1. 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的兼容性会更好。
2. easy.py使用方法
文件easy.py对样本文件做了“一条龙服务”,从参数优选,到文件预测。因此,其对grid.py、svm-train、svm-scale和svm-predict都进行了调用(当然还有必须的python和gnuplot)。因此,运行easy.py需要保证这些文件的路径都要正确。当然还需要样本文件和预测文件,这里样本文件还是用heart_scale,预测文件我们复制一份然后改名heart_test,下面说一下使用方法: 第一步:打开easy.py,修改# example for windows下的几个路径: else: 第二步:运行cmd,进入dos环境,定位到放置easy.py的目录d:\libsvm\program\tools。 第三步:输入命令: d:\libsvm\python26\python easy.py heart_scale heat_test 你就会看到一个gnuplot的动态绘图窗口。大约20s以后停止,dos窗口显示为:
Scaling training da Cross validation... Best c=2048.0, g=0.0001220703125 CV rate=84.0741 Training... Output model: heart_scale.model Scaling testing da Testing... Accuracy = 85.1852% (230/270) (classification) Output prediction: heart_test.predict 这就是最终预测结果,可以看到第三行就是调用grid.py的结果。在d:\libsvm\program\tools下你会看到又多了7个文件,都是以前我们碰到的过程文件,都可以用记事本打开。
3. 常见的问题解析: 1) Scaling training da [解析] 说明你的grid.py运行出现错误,你可以参照第一部分“grid.py使用方法”运行一下就会发现问题。另外,有的说是相对路径的问题,建议找到easy.py的以下部分: cmd = "%s -svmtrain %s -gnuplot %s %s" % (grid_py, svmtrain_exe, gnuplot_exe, scaled_file)
2) Traceback (most recent call last)
3) Traceback (most recent call last): [解析] 很显然,你调用的是gridregression.py,其是用来做回归用的。如果你调用easy.py也出现这种问题按照原作者的说法,这里是因为你的python调用出现错误,很可能是版本不对,如果是2.4的版本,请把easy.py中的 self.queue.insert(0,item) |
|