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

2024-09-08 12:08
文章标签 学习 使用 py libsvm easy grid

本文主要是介绍LibSVM学习(六)——easy.py和grid.py的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

       这两个文件都要用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.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.42.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下的几个路径:  

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)

这篇关于LibSVM学习(六)——easy.py和grid.py的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1148065

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传