日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/21 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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/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下的幾個路徑:?

?

?? 第二步:運行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的使用(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。