上一篇我們講到了函數的自動參數尋優問題,官方提供的 grid.py 以及 easy.py 兩種文件都可以實現對訓練數據的參數尋優,不過在使用方法和具體效果上有些不同,下面我將依次介紹這兩種文件的相關配置及使用方法
grid.py
文件grid.py是對C-SVC的參數c和γ做優選的,原理是網格遍歷。在使用grid.py 之前請確保你安裝了gnuplot工具。
1、 首先用python編譯器打開grid.py,找到如下幾行代碼:
if sys.platform != 'win32':
self.svmtrain_pathname = os.path.join(dirname, '../svm-train')
self.gnuplot_pathname = '/usr/bin/gnuplot'
else:
# example for windows
self.svmtrain_pathname = os.path.join(dirname, r'..\windows\svm-train.exe')
# svmtrain_pathname = r'c:\Program Files\libsvm\windows\svm-train.exe'
self.gnuplot_pathname = r'C:\gnuplot\bin\gnuplot.exe'
將下面這行代碼中的路徑修改爲你安裝gnuplot的可執行程序路徑:
self.gnuplot_pathname = r'C:\gnuplot\bin\gnuplot.exe'
2、運行cmd進入dos環境,然後進入到工程文件夾下放置grid.py的目錄下,示例:
3、將libsvm根目錄下的 heart_scale 官方示例數據文件拷貝到grid.py文件目錄下,在cmd中輸入以下命令進行測試:
python grid.py heart_scale
示例:
運行過程中你會看到gnuplot的輸出窗口,像下面這樣:
還有cmd窗口中尋找參數c和g的過程以及結果,輸出的最後一行的三個數值依次爲尋找到的最優的c值(2048.0)、g值(0.0001220703125)以及交叉驗證精度(84.0741%):
4、將得到的c值和g值加入到訓練函數中,比如:
m = svm_train(y, x, '-c 2048.0 -g 0.0001220703125')
然後執行代碼就可以得到最優的分類結果
5、將樣例數據文件替換爲你的訓練數據文件並按照以上流程尋找最優參數,然後將得到的參數添加到訓練函數進行訓練
easy.py
文件easy.py對樣本文件做了從參數優選,到文件預測的整套流程。因此,其對grid.py、svm-train、svm-scale和svm-predict都進行了調用,所以要確保這些文件調用路徑正確
1、首先用python編譯器打開easy.py,找到如下幾行代碼:
if not is_win32:
svmscale_exe = "../svm-scale"
svmtrain_exe = "../svm-train"
svmpredict_exe = "../svm-predict"
grid_py = "./grid.py"
gnuplot_exe = "/usr/bin/gnuplot"
else:
# example for windows
svmscale_exe = r"..\windows\svm-scale.exe"
svmtrain_exe = r"..\windows\svm-train.exe"
svmpredict_exe = r"..\windows\svm-predict.exe"
gnuplot_exe = r"C:\gnuplot\bin\gnuplot.exe"
grid_py = r".\grid.py"
檢查else下面代碼中的文件路徑並將下面這行代碼中的路徑修改爲你安裝gnuplot的可執行程序路徑:
gnuplot_exe = r"C:\gnuplot\bin\gnuplot.exe"
2、將示例數據文件heart_scale複製並重命名爲 heart_scale_test 到easy.py 的文件目錄下用做測試數據
3、運行cmd進入dos環境,然後進入到工程文件夾下放置easy.py的目錄下,執行以下命令,示例:
python easy.py heart_scale heart_scale_test
運行成功或會看到gnuplot的輸出窗口以及如下輸出結果:
窗口輸出了最優的c值g值以及交叉驗證精度和最終的分類測試準確率,你還可以在easy.py 和 grid.py 的文件目錄下查看自動生成的中間數據文件包括最終的輸出結果等。
4、將示例數據文件替換爲你的訓練數據以及測試數據並按照以上流程得到最終結果
到此,這篇入門流程就算結束了,我將我的工程代碼打包放在了下面的鏈接中(包括了我的訓練數據、測試數據以及相關的數據格式轉換代碼),如果你感興趣的話可以前往下載,不過代碼裏相關的路徑需要你按情況修改後才能運行。