LibSVM学习(六)——easy.py和grid.py的使用

  咱们在“LibSVM学习(一)”中,讲到libSVM有一个tools文件夹,里面包含有四个python文件,是用来对参数优选的。其中,经常使用到的是easy.py和grid.py两个文件。其实,网上也有相应的说明,但很不系统,下面结合本人的经验,对使用方法作个说明。python

       这两个文件都要用python(能够在http://www.python.org上下载到,须要安装)和绘图工具gnuplot能够在ftp://ftp.gnuplot.info/pub/gnuplot/上下载,不须要安装)。假设python安装在d:/libsvm/tools/python26下,而gnuplot解压到d:/libsvm/tools/gnuplotlibsvm放在了d:/libsvm/program中(这时easy.pygrid.py文件的目录为d:/libsvm/program/tools)。另外,须要注意的是版本,个人是python 2.6gnuplot 4.2 libsvm 2.89,操做系统是WINXPweb

 

1. grid.py使用方法bootstrap

   文件grid.py是对C-SVC的参数c和γ作优选的,原理也是网格遍历,假设咱们要对目录d:/libsvm/program/tools下的样本文件heart_scale作优选,其具体用法为:windows

      

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

                              svmtrain_exe = r"D:/libSVM/program/svm-train.exe"工具

                              gnuplot_exe = r"D:/libSVM/gnuplot/pgnuplot.exe"学习

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

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

      第三步:输入如下命令:orm

                                          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.outheart_scale.png,第一个文件就是搜索过程当中的[local]和最优数据,第二文件就是gnuplot图像。

 

       如今,grid.py已经运行完了,你能够把最优参数输入到svmtrain中进行训练了。固然了,你在当中某一步极可能出现问题,不过没关系,我也不是一会儿成功的,摸索了半天才成功。下面就须要注意的问题说明一下:

        1grid.pysvm-train的版本要统一,也就是说你不能用2.6grid.py去调用2.89svm-train

        2)你的目录中若是有空格,好比d:/program files/ libsvm/...,那么不管是在第一步仍是第二步,请把目录改为d:/progra~1/ libsvm/...

        3) 第三步的命令问题。首先要看你定位到哪一个目录,那么其下的文件就不须要带路径,不然就要带。像咱们上面的命令,我当前的目录是d:/libsvm/program/tools,那么其下的easy.pyheart_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.42.5的兼容性会更好。

 

 

2. easy.py使用方法

 

 

    文件easy.py对样本文件作了“一条龙服务”,从参数优选,到文件预测。所以,其对grid.pysvm-trainsvm-scalesvm-predict都进行了调用(固然还有必须的pythongnuplot)。所以,运行easy.py须要保证这些文件的路径都要正确。固然还须要样本文件和预测文件,这里样本文件仍是用heart_scale,预测文件咱们复制一份而后更名heart_test,下面说一下使用方法:

 

    第一步:打开easy.py,修改# example for windows下的几个路径:  

6.1

   第二步:运行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)

相关文章
相关标签/搜索