pythonlibsvm
1. 如何利用python使用libsvm
把包解壓在C盤之中,如:C:\libsvm-3.182.
因為要用libsvm自帶的腳本grid.py和easy.py,需要去官網下載繪圖工具gnuplot,解壓到c盤.進入c:\libsvm\tools目錄下,用文本編輯器(記事本,edit都可以)修改grid.py和easy.py兩個文件,找到其中關於gnuplot路徑的那項,根據實際路徑進行修改,並保存
python與libsvm的連接(參考SVM學習筆記(2)LIBSVM在python下的使用)
1.打開IDLE(pythonGUI),輸入>>>importsys>>>sys.version
2.如果你的python是32位,將出現如下字元:
(default,Apr102012,23:31:26)[MSCv.150032bit(Intel)]』
這個時候LIBSVM的python介面設置將非常簡單。在libsvm-3.16文件夾下的windows文件夾中找到動態鏈接庫libsvm.dll,將其添加到系統目錄,如`C:\WINDOWS\system32\』,即可在python中使用libsvm
wk_ad_begin({pid : 21});wk_ad_after(21, function(){$('.ad-hidden').hide();}, function(){$('.ad-hidden').show();});
3.執行一個小例子
importos
os.chdir('C:\libsvm-3.18\python')#請根據實際路徑修改
fromsvmutilimport*
y,x=svm_read_problem('../heart_scale')#讀取自帶數據
m=svm_train(y[:200],x[:200],'-c4')
p_label,p_acc,p_val=svm_predict(y[200:],x[200:],m)
##出現如下結果,應該是正確安裝了optimizationfinished,#iter=257nu=0.351161
obj=-225.628984,rho=0.636110nSV=91,nBSV=49
TotalnSV=91
Accuracy=84.2857%(59/70)(classification)
2. 如何利用python使用libsvm
准備工具
libsvm軟體包;
電腦;
步驟操作
把包解壓在C盤之中,如:C:libsvm-3.18;
用libsvm自帶的腳本grid.py和easy.py,需要去官網下載繪圖工具gnuplot,解壓到c盤;
進入c:libsvm ools目錄下,用文本編輯器(記事本,edit都可以)修改grid.py和easy.py兩個文件,找到其中關於gnuplot路徑的那項,根據實際路徑進行修改,並保存;
3. python調用libSVM異常,svm_save_model(modelName,model)。總說第一個參數類型錯誤
可以看看python文件夾下面的README。第一個參數是:保存model的文件名,字元串類型。第二個參數就是svm_train返回的model。
README裡面有詳細的例子。按照你的錯誤,
model_file_name是字元串類型嗎?檢查一下就行吧
4. 如何下載libsvm python
下載libsvm python的方法:
1、訪問「www.csie.ntu.e.tw/~cjlin/libsvm/」網頁,下載zip格式的數據包
2、將文件解壓到python的site-packages文件夾中就可以了
更多Python知識,請關註:Python自學網!!
5. 如何利用python使用libsvm
一:libsvm包下載與使用:
LIBSVM是台灣大學林智仁(Lin Chih-Jen)副教授等開發設計的一個簡單、易於使用和快速有效的SVM模式識別與回歸的軟體包,他不但提供了編譯好的可在Windows系列系統的執行文件,還提供了源代碼,方便改進.
把包解壓在C盤之中,如:C:\libsvm-3.18
2.
因為要用libsvm自帶的腳本grid.py和easy.py,需要去官網下載繪圖工具gnuplot,解壓到c盤
3.
進入c:\libsvm\tools目錄下,用文本編輯器(記事本,edit都可以)修改grid.py和easy.py兩個文件,找到其中關於gnuplot路徑的那項,根據實際路徑進行修改,並保存
4python與libsvm的連接(參考SVM學習筆記(2)LIBSVM在python下的使用 )
a.打開IDLE(python GUI),輸入
>>>import sys
>>>sys.version
如果你的python是32位,將出現如下字元:
『2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)]』
這個時候LIBSVM的python介面設置將非常簡單。在libsvm-3.16文件夾下的windows文件夾中找到動態鏈接庫libsvm.dll,將其添加到系統目錄,如`C:\WINDOWS\system32\』,即可在python中使用libsvm
b.如果你是64位的請參考文獻,請參考上述連接。
5.執行一個小例子
import os
os.chdir('C:\libsvm-3.18\python')#請根據實際路徑修改
from svmutil import *
y, x = svm_read_problem('../heart_scale')#讀取自帶數據
m = svm_train(y[:200], x[:200], '-c 4')
p_label, p_acc, p_val = svm_predict(y[200:], x[200:], m)
##出現如下結果,應該是正確安裝了
optimization finished, #iter = 257
nu = 0.351161
obj = -225.628984, rho = 0.636110
nSV = 91, nBSV = 49
Total nSV = 91
Accuracy = 84.2857% (59/70) (classification)
二幾個簡單的例子
從下載實驗數據集。並且將數據集拷貝到C:\libsvm-3.18\windows下(因為之後我們需要利用該文件夾下的其他文件,這樣比較方便,當然之後你用絕對地址也可以了)
建立一個py文件,寫下如下代碼:
例1:
import os
os.chdir('C:\libsvm-3.18\windows')#設定路徑
from svmutil import *
y, x = svm_read_problem('train.1.txt')#讀入訓練數據
yt, xt = svm_read_problem('test.1.txt')#訓練測試數據
m = svm_train(y, x )#訓練
svm_predict(yt,xt,m)#測試
執行上述代碼,精度為:Accuracy = 66.925% (2677/4000) (classification)
常用介面
svm_train() : train an SVM model#訓練
svm_predict() : predict testing data#預測
svm_read_problem() : read the data from a LIBSVM-format file.#讀取libsvm格式的數據
svm_load_model() : load a LIBSVM model.
svm_save_model() : save model to a file.
evaluations() : evaluate prediction results.
- Function: svm_train#三種訓練寫法
There are three ways to call svm_train()
>>> model = svm_train(y, x [, 'training_options'])
>>> model = svm_train(prob [, 'training_options'])
>>> model = svm_train(prob, param)
有關參數的設置(read me 文件夾中有詳細說明):
Usage: svm-train [options] training_set_file [model_file]
options:
-s svm_type : set type of SVM (default 0)#選擇哪一種svm
0 -- C-SVC (multi-class classification)
1 -- nu-SVC (multi-class classification)
2 -- one-class SVM
3 -- epsilon-SVR (regression)
4 -- nu-SVR (regression)
-t kernel_type : set type of kernel function (default 2)#是否用kernel trick
0 -- linear: u'*v
1 -- polynomial: (gamma*u'*v + coef0)^degree
2 -- radial basis function: exp(-gamma*|u-v|^2)
3 -- sigmoid: tanh(gamma*u'*v + coef0)
4 -- precomputed kernel (kernel values in training_set_file)
-d degree : set degree in kernel function (default 3)
-g gamma : set gamma in kernel function (default 1/num_features)
-r coef0 : set coef0 in kernel function (default 0)
-c cost : set the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1)
-n nu : set the parameter nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5)
-p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1)
-m cachesize : set cache memory size in MB (default 100)
-e epsilon : set tolerance of termination criterion (default 0.001)
-h shrinking : whether to use the shrinking heuristics, 0 or 1 (default 1)
-b probability_estimates : whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0)
-wi weight : set the parameter C of class i to weight*C, for C-SVC (default 1)
-v n: n-fold cross validation mode
-q : quiet mode (no outputs)
三提高預測的准確率:
通過一定的過程,可以提高預測的准確率(在文獻2中有詳細介紹):
a.轉換數據為libsvm可用形式.(可以通過下載的數據了解格式)
b.進行一個簡單的尺度變換
c.利用RBF kernel,利用cross-validation來查找最佳的參數 C 和 r
d.利用最佳參數C 和 r ,來訓練整個數據集
e.測試
再看例子1:
1.進入cmd模式下,輸入如下代碼,將現有數據進行適度變換,生成變換後的數據文件train.1.scale.txt
參數說明:
-l 變換後的下限
-u 變換後的上限
-s 參考上文
2執行以下代碼
import os
os.chdir('C:\libsvm-3.18\windows')#設定路徑
from svmutil import *
y, x = svm_read_problem('train.1.scale.txt')#讀入訓練數據
yt, xt = svm_read_problem('test.1.scale.txt')#訓練測試數據
m = svm_train(y, x )#訓練
svm_predict(yt,xt,m)#測試
精確度為Accuracy = 95.6% (3824/4000) (classification)。
可見我們只是做了簡單的尺度變換後,預測的正確率大大提升了。
3通過選擇最優參數,再次提高預測的准確率:(需要把tools文件下的grid.py拷貝到'C:\libsvm-3.18\windows'下)
import os
os.chdir('C:\libsvm-3.18\windows')#設定路徑
from svmutil import *
from grid import *
rate, param = find_parameters('train.1.scale.txt', '-log2c -3,3,1 -log2g -3,3,1')
y, x = svm_read_problem('train.1.scale.txt')#讀入訓練數據
yt, xt = svm_read_problem('test.1.scale.txt')#訓練測試數據
m = svm_train(y, x ,'-c 2 -g 4')#訓練
p_label,p_acc,p_vals=svm_predict(yt,xt,m)#測試
執行上面的程序,find_parmaters函數,可以找到對應訓練數據較好的參數。後面的log2c,log2g分別設置C和r的搜索范圍。搜索機制是以2為底指數搜索,如 –log2c –3 , 3,1 就是參數C,從2^-3,2^-2,2^-1…搜索到2^3.
搜索到較好參數後,在訓練的時候加上參數的設置。
另外,讀者可以自己試試數據集2,3.
6. 如何加速基於Python的libsvm速度
if not is_win32: svmtrain_exe = "../svm-train" gnuplot_exe = "/usr/bin/gnuplot" else: gnuplot_exe = "/usr/bin/gnuplot"這一行少了一個TAB鍵。建設你把所有行前面的空格跟TAB刪除後重新打上空格或TAB鍵。